API ссылок и временной почты
API создаёт анонимные короткие ссылки, возвращает статистику переходов, изменяет настройки и удаляет ссылки. Запросы и ответы передаются в формате JSON. CORS включён, поэтому вызовы работают и из кода в браузере. На тарифах Pro и выше он же управляет временной почтой: создать адрес, опросить его на новые письма, ответить на входящие письма.
Базовый адрес:
https://anonym.es/api/v1
Быстрый старт
Чтобы создать короткую ссылку, отправьте адрес назначения:
curl -X POST https://anonym.es/api/v1/links \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/article"}'
Токен для этого вызова не требуется. Без него ссылка создаётся как гостевая в рамках квоты Free вашего IP-адреса.
С токеном аккаунта тот же вызов помещает ссылку в ваш кабинет и учитывает её в квоте тарифа:
curl -X POST https://anonym.es/api/v1/links \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/article"}'
Ответ содержит короткий адрес, идентификатор ссылки и токен управления этой ссылкой. Сохраните токен: он понадобится, чтобы позже прочитать или удалить ссылку.
{
"ok": true,
"link": {
"id": 4821,
"short": "https://anonym.es/k7m2q",
"url": "https://example.com/article",
"status": "active",
"password": false,
"created_at": "2026-09-05T14:02:11Z",
"expires_at": null,
"max_hits": null,
"self_destruct": false,
"delay": null,
"no_countdown": false,
"adult": false,
"note": null,
"tags": [],
"clicks": 0,
"uniques": 0
},
"token": "3f9c1b7e2d4a4c0e9b8f7a6d5c4b3a21",
"left": 4
}
Поля объекта ссылки
Все эндпоинты, возвращающие ссылку, используют эту структуру. Время указано в формате ISO 8601 в UTC. Счётчики clicks и uniques охватывают весь срок жизни ссылки.
| Поле | Тип | Что делает |
|---|---|---|
id | integer | Числовой идентификатор ссылки, используется в остальных вызовах. |
short | string | Короткий адрес, которым делятся. |
url | string | null | Адрес назначения, null у ссылки-заметки. |
status | string | active | expired | exhausted (лимит переходов исчерпан) | flagged (назначение в списке безопасности) | banned. |
password | boolean | Посетителю нужен пароль. |
created_at | string | ISO 8601, UTC. |
expires_at | string | null | Когда ссылка истекает, null = без срока. |
max_hits | integer | null | Лимит переходов, null = без лимита. |
self_destruct | boolean | Ссылка удаляется безвозвратно по достижении лимита или срока жизни. |
delay | integer | null | Секунды на странице перехода, null = значение тарифа, 0 = мгновенно. |
no_countdown | boolean | Страница перехода без отсчёта, ждёт нажатия на адрес. |
adult | boolean | Посетители подтверждают, что им есть 18, перед страницей перехода. |
note | string | null | Заметка на странице перехода. |
tags | string[] | Теги в нижнем регистре. |
clicks | integer | Переходы за всё время жизни ссылки. |
uniques | integer | Уникальные посетители (один на адрес в сутки) за всё время жизни ссылки. |
Авторизация
Авторизованные запросы передают токен в заголовке Authorization. Как альтернатива принимается заголовок X-API-Key. В строке запроса токены не передаются.
Authorization: Bearer YOUR_TOKEN
| Токен | Где получить | Для чего |
|---|---|---|
| Токен аккаунта | В личном кабинете | Все ссылки аккаунта с правами тарифа |
| Токен ссылки | Возвращается при создании ссылки | Одна конкретная ссылка с правами тарифа Free |
Токен аккаунта начинается с anon_. Токен ссылки состоит из 32 символов. Создание нового токена аккаунта отменяет предыдущий.
Пример:
curl https://anonym.es/api/v1/me \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
Создать токен аккаунта в личном кабинете
Эндпоинты
Тело запроса передаётся как application/json или application/x-www-form-urlencoded. Имена параметров и коды ошибок одинаковы для всех эндпоинтов.
| Метод | Путь | Токен | Цена | Что делает |
|---|---|---|---|---|
GET | /api/v1 | не обязателен | 1 | Сведения об API: версия, адреса документации и схемы. |
POST | /api/v1/links | не обязателен | 5 + 1/url | Создать ссылку или до 50 сразу. Без токена: как гость, в рамках квоты Free. Возвращает ссылку с её токеном. |
GET | /api/v1/names/check | не обязателен | 2 | Свободно ли это имя? Если занято, варианты. |
GET | /api/v1/links | аккаунта | 2 | Ссылки аккаунта, новые первыми. |
GET | /api/v1/links/lookup | ссылки или аккаунта | 1 | Найти свою ссылку по короткому адресу. |
GET | /api/v1/links/{id} | ссылки или аккаунта | 1 | Одна ссылка: настройки, состояние, переходы и уникальные посетители за всё время. Токен аккаунта может добавить отчёт статистики. |
PATCH | /api/v1/links/{id} | ссылки или аккаунта | 3 | Изменить настройки. Меняются только переданные поля. Платные тарифы (у токена ссылки права Free, редактировать он не может). |
DELETE | /api/v1/links/{id} | ссылки или аккаунта | 2 | Удалить ссылку. Имя снова становится свободным. |
GET | /api/v1/links/{id}/qr | ссылки или аккаунта | 3 | QR-код короткого адреса картинкой (PNG или SVG). Требует токен, поэтому подходит серверному коду. |
GET | /api/v1/qr | не обязателен | 3 | QR-код короткого адреса картинкой без токена: ключом служит сам адрес. Сделан для тегов <img>. |
GET | /api/v1/me | аккаунта | 1 | Аккаунт: тариф, ограничения, остаток квоты, дополнительные домены, доступные настройки. |
GET | /api/v1/openapi.json | не обязателен | 1 | Это API в виде документа OpenAPI 3.1. |
Временная почта
| Метод | Путь | Токен | Цена | Что делает |
|---|---|---|---|---|
GET | /api/v1/mail/domains | аккаунта | 1 | Временная почта: домены, на которых тариф может создавать адреса, и какие из них принимают закреплённый адрес (pinnable). |
GET | /api/v1/mail/limits | аккаунта | 1 | Временная почта: сколько адресов тариф даёт одновременно и за час и сколько осталось. |
GET | /api/v1/mail/addresses | аккаунта | 2 | Временная почта: живые адреса аккаунта с оставшимся временем. |
POST | /api/v1/mail/addresses | аккаунта | 5 | Временная почта: создать временный адрес на одном из доменов тарифа. В ответе один раз приходит key, секретный ключ адреса. Письма хранятся зашифрованными, и открывает их только этот ключ. Передавайте его заголовком X-Mail-Key. |
GET | /api/v1/mail/addresses/{id} | аккаунта | 1 | Временная почта: один адрес с оставшимся временем, продлениями и квотой отправки на сегодня. |
POST | /api/v1/mail/addresses/{id}/key | аккаунта | 3 | Временная почта: выдать новый ключ адресу, созданному через API, если его ключ потерян. Письма под старым ключом остаются закрытыми и продолжают приходить с encrypted = true. |
POST | /api/v1/mail/addresses/{id}/pin | аккаунта | 3 | Временная почта: закрепить адрес. У закреплённого адреса нет таймера, он живёт на время активного тарифа или пока доступен домен. |
POST | /api/v1/mail/addresses/{id}/unpin | аккаунта | 3 | Временная почта: сделать закреплённый или резервный адрес временным. Таймер тарифа запускается сразу. |
POST | /api/v1/mail/addresses/{id}/extend | аккаунта | 3 | Временная почта: сбросить таймер адреса на полный срок тарифа (считается продлением). |
DELETE | /api/v1/mail/addresses/{id} | аккаунта | 2 | Временная почта: удалить адрес со всем содержимым. |
GET | /api/v1/mail/addresses/{id}/messages | аккаунта | 2 | Временная почта: письма адреса, новые первыми, с флагом прочтения и вердиктом по отправителю. Нужен X-Mail-Key. Без него строки приходят с encrypted = true и без содержимого. |
GET | /api/v1/mail/addresses/{id}/messages/{mid} | аккаунта | 1 | Временная почта: письмо целиком, с текстом, HTML, вложениями и результатами аутентификации. Помечает прочитанным. Нужен X-Mail-Key. |
PATCH | /api/v1/mail/addresses/{id}/messages/{mid} | аккаунта | 3 | Временная почта: пометить письмо прочитанным или непрочитанным. |
DELETE | /api/v1/mail/addresses/{id}/messages/{mid} | аккаунта | 2 | Временная почта: удалить письмо. |
GET | /api/v1/mail/addresses/{id}/messages/{mid}/attachments/{n} | аккаунта | 1 | Временная почта: одно вложение файлом. Нужен X-Mail-Key. |
POST | /api/v1/mail/addresses/{id}/messages/{mid}/reply | аккаунта | 5 | Временная почта: ответить на письмо. Разрешено, только если отправитель прошёл аутентификацию, и только ему. Нужен X-Mail-Key. |
POST | /api/v1/mail/addresses/{id}/send | аккаунта | 5 | Временная почта: отправить письмо на любой адрес (свободные отправки тарифа). |
GET | /api/v1/mail/addresses/{id}/sent | аккаунта | 2 | Временная почта: письма, отправленные с этого адреса. Чтобы увидеть получателя, тему и текст, нужен X-Mail-Key. |
Стоимость указана в единицах лимита запросов, см. раздел «Лимиты запросов».
Создание ссылки
POST /api/v1/links
Минимальный запрос содержит только поле url:
curl -X POST https://anonym.es/api/v1/links \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/article"}'
С токеном аккаунта ссылка принадлежит аккаунту и учитывается в квоте тарифа. Без токена это гостевая ссылка в квоте IP-адреса:
curl -X POST https://anonym.es/api/v1/links \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/article"}'
Успешный запрос возвращает статус 201 вместе со ссылкой, её токеном и числом ссылок, оставшихся в текущем периоде квоты.
Поля ответа:
| Поле | Тип | Что делает |
|---|---|---|
link | object | Созданная ссылка. |
token | string | Токен ссылки (32 символа), управляет этой ссылкой. |
left | integer | null | Сколько ссылок осталось в текущем периоде квоты, null у тарифа без ограничения. |
qr | object | QR-код, есть в ответе, если передан qr=true. |
batch | boolean | true, если передано несколько адресов. |
results | array | По записи на каждый адрес в порядке отправки: {ok: true, link, token, qr} либо {ok: false, url, error, message, field}. |
Ссылка с собственным именем
Короткий адрес получит имя my-article, если оно свободно и соответствует правилам ниже.
curl -X POST https://anonym.es/api/v1/links \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/article","name":"my-article"}'
Правила имён:
- Латинские буквы, цифры, дефис и подчёркивание. От 5 символов на тарифе Free и от 3 на платных тарифах, не более 32. Регистр не учитывается: Promo и promo считаются одной ссылкой.
- Имена страниц сайта, коды языков и служебные слова зарезервированы.
- Названия брендов и оскорбительные слова отклоняются. Имена проходят проверку по списку слов и автоматическую модерацию. Число собственных имён в час ограничено тарифом.
- Занятое имя возвращает статус 409 со свободными вариантами в поле suggest.
- Имя сабдомена (sub: true, тариф Max) состоит из одной DNS-метки: буквы, цифры и дефисы, без дефиса по краям и без подчёркивания. Имена вида www, mail или ns1 зарезервированы.
Имя можно проверить до создания ссылки:
curl "https://anonym.es/api/v1/names/check?name=my-article"
Поля ответа проверки:
| Поле | Тип | Что делает |
|---|---|---|
available | boolean | true, если имя можно использовать. |
name | string | Проверенное имя. |
error | string | Почему имя недоступно: taken, reserved, too_short и другие ошибки имён. |
message | string | Причина словами. |
field | string | Всегда name. |
suggest | array | Свободные варианты, если имя занято. |
Несколько ссылок за один запрос
Поле urls принимает до 50 адресов в виде JSON-массива или текста с одним адресом в строке. Каждый адрес становится отдельной ссылкой со своим токеном, а остальные поля применяются ко всем. Собственное имя в пакете недоступно.
curl -X POST https://anonym.es/api/v1/links \
-H "Content-Type: application/json" \
-d '{"urls":["https://example.com/a","https://example.com/b","https://example.com/c"]}'
Ответ содержит batch: true и массив results с записью на каждый адрес в порядке отправки. Ошибочный адрес даёт запись с ok: false и кодом ошибки, не прерывая остальные.
Дополнительные настройки
curl -X POST https://anonym.es/api/v1/links \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/article",
"name": "my-article",
"expires_days": 30,
"max_hits": 1000,
"self_destruct": true,
"password": "secret",
"note": "Available until the end of the month",
"delay": 5,
"tags": "blog,promo",
"qr": true,
"qr_size": 300,
"qr_format": "png"
}'
Опции, отмеченные как платные, игнорируются для гостей и на тарифе Free. Ответ отражает настройки, которые ссылка получила фактически.
| Поле | Тип | Что делает |
|---|---|---|
url | string, обязательное | Адрес назначения. Либо urls: несколько адресов, по одному в строке или JSON-массивом (до 50), каждый становится отдельной ссылкой. |
name | string | Собственное имя для одной ссылки (проверяется по правилам и фильтру имён). |
domain | string | One of the alias domains, random, or random-alias (random among the alias domains only). Paid plans; default is random: links never sit on the main domain. Free and guests: anonymes.click. |
sub | boolean | Адрес вида name.alias вместо alias/name. Тариф Max, только на дополнительных доменах. |
expires_days | integer | Срок действия в днях. Платные тарифы. |
max_hits | integer | Лимит переходов. Платные тарифы. |
self_destruct | boolean | Удалить ссылку безвозвратно по достижении лимита переходов или срока жизни (требует max_hits или expires_days). |
password | string | Пароль, который вводит посетитель. Платные тарифы. |
note | string | Текст на странице перехода. Платные тарифы, длина по тарифу. |
note_only | boolean | Ссылка открывает саму заметку, без перехода. Pro+ и выше. |
delay | integer | Секунды на странице перехода, 0 = мгновенно. Платные тарифы. |
no_countdown | boolean | Без отсчёта на странице перехода: нет таймера и автоматического перехода, посетитель нажимает на адрес. Платные тарифы. |
adult | boolean | Контент для взрослых (18+): посетитель подтверждает возраст на отдельной странице, прежде чем увидит что-либо ещё. Доступно на всех тарифах. |
tags | string | Теги через запятую (до 5, по 24 символа). Токен аккаунта на платном тарифе. |
qr | boolean | Добавить в ответ QR-код короткого адреса (base64). |
qr_size | integer | Сторона изображения QR в пикселях, 100–1000 (по умолчанию 300, PNG округляется до целых модулей). |
qr_format | string | png (по умолчанию) или svg. |
qr_logo | boolean | false = код без логотипа. Только платные тарифы, иначе игнорируется. |
Список ссылок
GET /api/v1/links
Требуется токен аккаунта.
Требуется токен аккаунта. Ссылки возвращаются от новых к старым.
curl "https://anonym.es/api/v1/links?page=1&per=50" \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
| Поле | Тип | Что делает |
|---|---|---|
page | integer | Номер страницы (по умолчанию 1). |
per | integer | Ссылок на странице, 1–100 (по умолчанию 50). |
q | string | Поиск по имени, домену и адресу назначения (один плоский список до 50). |
tag | string | Только ссылки с этим тегом. |
Поиск и фильтр по тегу можно сочетать:
curl "https://anonym.es/api/v1/links?q=example&tag=promo" \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
Поля ответа:
| Поле | Тип | Что делает |
|---|---|---|
page | integer | Текущая страница. |
per | integer | Ссылок на странице. |
total | integer | Сколько ссылок найдено. |
pages | integer | Сколько страниц. |
links | array | Объекты ссылок, новые первыми. |
Поиск ссылки по короткому адресу
Ссылка адресуется числовым идентификатором (поле id, например 4821), а не именем из короткого адреса. Если известен только короткий адрес, идентификатор можно получить любым токеном, который управляет этой ссылкой:
curl --get https://anonym.es/api/v1/links/lookup \ -H "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "short=https://anonym.es/k7m2q"
Сведения о ссылке и статистика
GET /api/v1/links/{id}
Возвращает настройки ссылки, её состояние, число переходов и число уникальных посетителей за всё время:
curl https://anonym.es/api/v1/links/4821 \ -H "Authorization: Bearer YOUR_TOKEN"
С токеном аккаунта параметр stats добавляет отчёт о переходах:
curl "https://anonym.es/api/v1/links/4821?stats=day" \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
| Значение | Период отчёта |
|---|---|
day | Последние 30 дней, по дням |
week | Последние 26 недель, по неделям ISO |
month | Последние 24 месяца, по месяцам |
Поля ответа: stats
| Поле | Тип | Что делает |
|---|---|---|
mode | string | day, week или month. |
from | string | Первый день отчёта, ГГГГ-ММ-ДД. |
to | string | Последний день отчёта. |
series | array | По записи на период, старые первыми: [from, to, visits, uniques]. |
summary | object | cur (текущий период), prev (предыдущий), avg (среднее по периодам до текущего), в каждом hits и uniq. |
dims | object | Разбивка за диапазон: ref, country, device, os, browser, hour, в каждом список [значение, переходы]. |
Изменение ссылки
PATCH /api/v1/links/{id}
Изменяются только переданные поля:
curl -X PATCH https://anonym.es/api/v1/links/4821 \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"max_hits": 2000, "delay": 3, "tags": "blog,updated"}'
Изменение доступно на платных тарифах. Токен ссылки обладает правами тарифа Free и не позволяет менять настройки.
| Поле | Тип | Что делает |
|---|---|---|
url | string | Новый адрес назначения. Pro+ и выше. |
name | string | Новое имя (правила те же, что у собственного имени). |
expires_days | integer | Новый срок действия в днях, пусто = без срока. |
max_hits | integer | Новый лимит переходов, пусто = без лимита. |
self_destruct | boolean | Удалить безвозвратно по достижении лимита или срока, false отключает. |
password | string | Новый пароль, пустая строка удаляет пароль. |
note | string | Новая заметка, пусто удаляет её (ссылке-заметке заметка нужна всегда). |
delay | integer | Секунды на странице перехода, пусто = значение тарифа по умолчанию. |
no_countdown | boolean | true = без отсчёта на странице перехода, false возвращает отсчёт. |
adult | boolean | true = подтверждение возраста (18+) перед страницей перехода, false убирает его. |
tags | string | Новый список тегов через запятую, пусто удаляет все теги. |
Сброс значения
- password, note и tags: пустая строка удаляет значение.
- expires_days и max_hits: null, пустая строка или 0 снимают ограничение. self_destruct отключается, когда не остаётся ни лимита, ни срока.
- delay: null или пустая строка возвращают значение тарифа по умолчанию. 0 означает мгновенный переход.
- url нельзя сделать пустым, а ссылке-заметке по-прежнему нужна заметка.
curl -X PATCH https://anonym.es/api/v1/links/4821 \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"password": "", "note": "", "expires_days": null, "max_hits": null, "delay": 0}'
Удаление ссылки
DELETE /api/v1/links/{id}
curl -X DELETE https://anonym.es/api/v1/links/4821 \ -H "Authorization: Bearer YOUR_TOKEN"
После удаления собственное имя снова становится свободным. Статистика удаляется вместе со ссылкой.
Поля ответа:
| Поле | Тип | Что делает |
|---|---|---|
deleted | integer | Идентификатор удалённой ссылки. |
QR-код
Для HTML-тега img запрашивайте код по короткому адресу. Этот эндпоинт не требует токена: ключом служит сам короткий адрес, и любой, кто его знает, может получить такой же код.
<img src="https://anonym.es/api/v1/qr?short=https%3A%2F%2Fanonym.es%2Fk7m2q&qr_size=400" alt="QR code" >
Серверный код может также запросить изображение по идентификатору с токеном или получить его в JSON в кодировке base64, добавив qr=true к запросу создания или сведений:
curl "https://anonym.es/api/v1/links/4821/qr?qr_size=400&qr_format=svg" \ -H "Authorization: Bearer YOUR_TOKEN" -o qr.svg
Параметры обоих эндпоинтов изображения:
| Поле | Тип | Что делает |
|---|---|---|
short | string, обязательное | Короткий адрес, например https://anonym.es/abc12. |
qr_size | integer | Сторона изображения QR в пикселях, 100–1000 (по умолчанию 300, PNG округляется до целых модулей). |
qr_format | string | png (по умолчанию) или svg. |
qr_logo | boolean | false = код без логотипа. Только платные тарифы, иначе игнорируется. |
Поле qr в ответах JSON:
| Поле | Тип | Что делает |
|---|---|---|
format | string | png или svg. |
mime | string | image/png или image/svg+xml. |
size | integer | Запрошенная сторона в пикселях. |
logo | boolean | Нарисован ли логотип в центре. |
base64 | string | Изображение в кодировке base64. |
Сведения об аккаунте
GET /api/v1/me
Требуется токен аккаунта. Возвращает тариф, его ограничения и остаток квоты:
curl https://anonym.es/api/v1/me \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
| Поле | Тип | Что делает |
|---|---|---|
login | string | Логин аккаунта. |
plan | string | Ключ тарифа: free, pro, pro_plus, max или enterprise. |
plan_label | string | Название тарифа, как на сайте. |
until | string | null | Когда заканчивается платный тариф, ISO 8601. null на Free или без даты окончания. |
limits | object | links (за период), per (day или month), ai_hourly (собственных имён в час), name_min (минимальная длина имени), note_max (длина заметки), api_units (бюджет API в минуту). |
left | integer | null | Сколько ссылок осталось в текущем периоде квоты, null без ограничения. |
aliases | array | Дополнительные домены, доступные тарифу. |
can | object | По флагу на настройку: password, ttl, edit, edit_url, tags, note, note_only, alias, sub, instant, qr_no_logo. |
API временной почты
Создайте адрес на одном из доменов тарифа, опрашивайте его на новые письма, читайте сообщения с результатами аутентификации, отвечайте на входящие письма и удаляйте адрес, когда он больше не нужен. Нужен токен аккаунта на тарифе Pro и выше. Действуют лимиты тарифа.
Адрес живёт столько, сколько позволяет тариф. Сроки - в таблице ниже. Вызов extend сбрасывает таймер. Ответы и свободные отправки считаются на адрес за сутки по UTC.
Письма адреса хранятся зашифрованными. Ключ приходит один раз, в поле key ответа на создание адреса. На сервере он не хранится, поэтому сохраните его у себя. Присылайте ключ заголовком X-Mail-Key, когда запрашиваете список, читаете письмо, скачиваете вложение, смотрите отправленные или отвечаете. Сервер открывает письма в памяти и только на время этого ответа. Без заголовка строки приходят с encrypted = true и без содержимого.
Создать адрес
curl -X POST https://anonym.es/api/v1/mail/addresses \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"quiet-heron-41","domain":"anon.skin"}'
| Поле | Тип | Что делает |
|---|---|---|
name | string | Локальная часть, 3-30 букв, цифр, точек или дефисов. Пусто = случайное имя. |
domain | string | Один из доменов тарифа (см. /mail/domains). По умолчанию первый. |
Поля ответа: address
| Поле | Тип | Что делает |
|---|---|---|
id | integer | Числовой id адреса для остальных вызовов. |
address | string | Полный адрес. |
domain | string | Его домен. |
created_at | string | ISO 8601, UTC. |
expires_at | string | null | Когда адрес исчезнет, null у закреплённого адреса. |
seconds_left | integer | null | Секунд до исчезновения, null = никогда. |
extends | integer | Использовано продлений. |
extends_left | integer | null | Осталось продлений, null = без ограничений. |
pinned | boolean | true, если адрес закреплён: таймера нет, адрес живёт, пока активен тариф. |
reserved | boolean | true, если тариф больше не покрывает этот закреплённый адрес. Имя сохраняется, письма принимаются, а любой вызов чтения или отправки отвечает address_reserved. |
reserved_left | integer | null | Секунд до удаления резервного адреса вместе с письмами, null, если адрес не в резерве. |
mails | integer | Messages in the inbox of the address. Only in the list of GET /mail/addresses. |
unread | integer | Unread messages among them. Only in the list of GET /mail/addresses. |
quota | object | Квота отправки на сегодня: replies, replies_left, sends, sends_left (сутки по UTC). |
encrypted | boolean | true, когда письма адреса хранятся зашифрованными. |
key | string | Секретный ключ адреса в base64. Приходит только в ответе на POST /mail/addresses и POST /mail/addresses/{id}/key. Показывается один раз и на сервере не хранится. Передавайте его заголовком X-Mail-Key, чтобы читать письма, вложения и отправленные и отвечать. Если вставить его в поле ключа этого адреса на сайте, почта откроется и там. Потерянный ключ восстановить нельзя. |
Домены, на которых ваш тариф может создавать адреса:
curl https://anonym.es/api/v1/mail/domains \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
Сколько адресов тариф даёт одновременно и за час и сколько ещё осталось:
curl https://anonym.es/api/v1/mail/limits \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
Поля ответа: limits
| Поле | Тип | Что делает |
|---|---|---|
addresses.limit | integer | null | Сколько адресов тариф даёт одновременно, null = без ограничений. |
addresses.used | integer | Живые адреса аккаунта. |
new_per_hour.limit | integer | null | Сколько новых адресов тариф даёт за час, null = без ограничений. |
new_per_hour.left | integer | null | Сколько новых адресов осталось в текущем часе, null = без ограничений. |
new_per_hour.wait_min | integer | Минут до момента, когда можно создать новый адрес, 0 = прямо сейчас. |
pinned.limit | integer | null | Сколько адресов тариф даёт закрепить, null = без ограничений, 0 = нисколько. |
pinned.used | integer | Закреплённые адреса аккаунта, вместе с резервными. |
pinned.reserved | integer | Сколько из них ждёт в резерве. |
Потеряли ключ? Вызов ниже выдаст новый. Письма под старым ключом останутся закрытыми.
curl -X POST https://anonym.es/api/v1/mail/addresses/17/key \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN"
Опросить входящие
curl https://anonym.es/api/v1/mail/addresses/17/messages \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \ -H "X-Mail-Key: ADDRESS_KEY"
Поля ответа: messages[]
| Поле | Тип | Что делает |
|---|---|---|
id | integer | Числовой id письма. |
from | string | Адрес отправителя. |
from_name | string | Имя отправителя. |
subject | string | Тема. |
preview | string | Первые 140 символов текста. |
received_at | string | ISO 8601, UTC. |
read | boolean | true, когда письмо открыто (или помечено прочитанным). |
verified | boolean | true, если домен отправителя прошёл аутентификацию (DMARC pass либо DKIM/SPF pass с выравниванием по домену From); только тогда разрешён ответ. |
verified_domain | string | null | Подтверждённый домен или null. |
attachments | integer | Число вложений. |
encrypted | boolean | Присутствует и равно true, когда в запросе не было X-Mail-Key. Тогда строка приходит без содержимого. С ключом адреса сервер открывает письмо в памяти на время этого ответа и не сохраняет ни ключ, ни текст. |
Поле read остаётся false, пока письмо не запрошено целиком или не помечено прочитанным. Чтобы заглянуть без пометки, добавьте keep_unread=true к полному запросу.
Прочитать письмо
curl https://anonym.es/api/v1/mail/addresses/17/messages/2 \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \ -H "X-Mail-Key: ADDRESS_KEY"
Полное письмо добавляет к полям списка следующие:
| Поле | Тип | Что делает |
|---|---|---|
text | string | Текстовое тело письма. |
html | string | HTML-тело, если есть (показывать в песочнице). |
attachments | array | Вложения с полями n, name, type, size и url. url ведёт на загрузку и требует тот же токен. |
auth | object | Результаты аутентификации Cloudflare: spf, dkim, dkim_domain, dmarc. |
Ответ разрешён только при verified = true.
Пометить письмо прочитанным или непрочитанным:
curl -X PATCH https://anonym.es/api/v1/mail/addresses/17/messages/2 \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"read": false}'
Ответить
curl -X POST https://anonym.es/api/v1/mail/addresses/17/messages/2/reply \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "X-Mail-Key: ADDRESS_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Confirmed, thanks."}'
Ответ уходит на адрес From письма, в той же цепочке (In-Reply-To и References), и списывается из ответов тарифа за сутки.
Отправить письмо
curl -X POST https://anonym.es/api/v1/mail/addresses/17/send \
-H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"to":"[email protected]","subject":"Hello","text":"Sent from a temporary address."}'
| Поле | Тип | Что делает |
|---|---|---|
to | string, обязательное | Адрес получателя. |
subject | string, обязательное | Тема. |
text | string, обязательное | Текст письма (простой текст, до 4000 символов). |
Отправленные
curl https://anonym.es/api/v1/mail/addresses/17/sent \ -H "Authorization: Bearer anon_YOUR_ACCOUNT_TOKEN" \ -H "X-Mail-Key: ADDRESS_KEY"
| Поле | Тип | Что делает |
|---|---|---|
id | integer | Числовой id отправленного письма. |
kind | string | reply или free. |
to | string | Получатель. |
subject | string | Тема. |
text | string | Отправленный текст. |
created_at | string | ISO 8601, UTC. |
reply_to | integer | null | Id письма, на которое это ответ; null для свободной отправки. |
Временная почта по тарифам
| Тариф | Адресов одновременно | Новых адресов в час | Время жизни | Продлений | Ответов / сутки | Свободных / сутки | Доменов |
|---|---|---|---|---|---|---|---|
| Free | 1 | 10 | 2 h | 2 | 0 | 0 | 4 |
| Pro | 3 | 30 | 12 h | 6 | 1 | 0 | 9 |
| Pro+ | 10 | 60 | 2 d | 6 | 3 | 1 | 14 |
| Max | 30 | 150 | 7 d | 7 | 10 | 2 | 23 |
| Enterprise | без ограничений | без ограничений | 30 d | без ограничений | без ограничений | без ограничений | 23 |
Ошибки
Ошибки возвращаются в едином JSON-формате:
{
"ok": false,
"error": "taken",
"message": "This name is already taken.",
"field": "name",
"suggest": ["my-article-26", "my-my-article", "my-article-link"]
}
field содержит имя некорректного параметра или null, если ошибка не относится к конкретному полю. Занятое имя добавляет suggest, платная опция добавляет upgrade, квоты и лимиты частоты добавляют заголовок Retry-After.
| HTTP | Значение |
|---|---|
400 | Ошибка в параметрах запроса |
401 | Токен отсутствует или недействителен |
403 | Тариф или тип токена не позволяет этот вызов |
404 | Ссылка не существует или принадлежит другому пользователю |
405 | Метод не поддерживается для этого пути |
409 | Собственное имя занято |
429 | Исчерпан лимит запросов или квота, см. Retry-After |
501 | PNG недоступен на этом сервере, запросите svg |
Все коды ошибок
| Код | HTTP | Поле | Что делает |
|---|---|---|---|
bad_request | 400 | Некорректный запрос. | |
bad_url | 400 | url | Адрес отсутствует или не является корректным URL http(s). |
blocked | 400 | url | На этот адрес ссылку создать нельзя. |
bad_name | 400 | name | Это имя недопустимо. |
dirty | 400 | name | Это имя недопустимо. |
brand | 400 | name | Имя похоже на название бренда и недоступно. |
reserved | 400 | name | Это имя зарезервировано. |
too_short | 400 | name | Имя слишком короткое для вашего тарифа. |
sub_format | 400 | name | Имя сабдомена это 3–32 буквы, цифры или дефисы. |
sub_main | 400 | domain | Ссылки-сабдомены есть только на дополнительных доменах. |
name_batch | 400 | name | Собственное имя работает для одного адреса, не для пакета. |
taken | 409 | name | Это имя уже занято. |
note_long | 400 | note | Заметка длиннее, чем разрешает ваш тариф. |
note_required | 400 | note | Ссылке-заметке нужна заметка. |
bad_tag | 400 | tags | Теги: до 5, каждый до 24 символов. |
pro_only | 403 | Эта опция требует платного тарифа. | |
max_only | 403 | Ссылки-сабдомены требуют тарифа Max. | |
account_only | 403 | Этот вызов требует токена аккаунта. | |
limit | 429 | Квота ссылок на этот период исчерпана. | |
domain_limit | 429 | url | Дневной лимит ссылок на этот сайт без аккаунта исчерпан. |
ai_limit | 429 | name | Слишком много собственных имён за час, повторите позже. |
rate_limited | 429 | Слишком много запросов, снизьте частоту. | |
busy | 429 | Слишком много ссылок создаётся одновременно, повторите через мгновение. | |
auth | 401 | Токен отсутствует или недействителен. | |
not_found | 404 | Такой ссылки нет. | |
no_route | 404 | Такого эндпоинта нет. | |
method | 405 | Метод не поддерживается. | |
fetch | 500 | Не удалось создать ссылку, повторите попытку. | |
qr_unavailable | 501 | qr_format | QR-коды PNG недоступны на этом сервере, запросите svg. |
no_address | 404 | Такого адреса нет. | |
no_message | 404 | Такого письма нет. | |
bad_domain | 400 | domain | Этот домен не входит в ваш тариф. |
addr_limit | 429 | Достигнут лимит адресов тарифа. Сначала удалите один. | |
new_rate | 429 | Достигнут часовой лимит новых адресов по тарифу. Повторите позже. | |
extend_limit | 429 | Продления для этого адреса закончились. | |
no_expiry | 400 | Этот адрес бессрочный. | |
address_reserved | 409 | Адрес в резерве: тариф его больше не покрывает. Продлите тариф или сделайте адрес временным. | |
pin_plan | 403 | Закрепление адресов доступно на платных тарифах. | |
pin_limit | 429 | Тариф больше не даёт закреплять адреса. | |
pin_domain | 400 | Адреса на этом домене закрепить нельзя. | |
temp_no_room | 429 | По тарифу нет свободного места для этого адреса. Сначала удалите один из адресов. | |
unverified | 403 | Отправитель этого письма не прошёл аутентификацию, поэтому ответить на него нельзя. | |
reply_limit | 429 | Ответов на сегодня для этого адреса не осталось. | |
send_limit | 429 | Свободных отправок на сегодня для этого адреса не осталось. | |
send_off | 403 | Отправка не входит в этот тариф. | |
bad_to | 400 | to | Укажите корректный адрес получателя. |
bad_subject | 400 | subject | Нужна тема. |
empty | 400 | text | Текст письма пуст. |
send_unavailable | 503 | Отправка для этого адреса пока не включена. | |
send_rejected | 422 | to | Почтовый сервис отклонил это письмо. Проверьте адрес получателя или попробуйте позже. |
send_failed | 502 | Не удалось отправить письмо. Попробуйте через минуту. | |
key_required | 403 | Письма этого адреса зашифрованы. Передайте ключ адреса заголовком X-Mail-Key. | |
bad_key | 403 | В заголовке X-Mail-Key не ключ этого адреса. | |
site_address | 403 | Этот адрес создан на сайте. Его ключ хранится в браузере, и API не может его заменить. | |
worker | 502 | Почтовый сервис не ответил. Попробуйте чуть позже. |
Лимиты частоты
Каждый вызов стоит единицы, а у каждого тарифа есть бюджет единиц в минуту (см. «Тарифы и ограничения»). Чтение стоит 1 единицу, страница списка 2, QR-код 3, редактирование 3, удаление 2, создание 5 плюс 1 за каждый адрес. Каждый ответ содержит заголовки:
| Заголовок | Значение |
|---|---|
X-RateLimit-Limit | Бюджет единиц в минуту |
X-RateLimit-Remaining | Сколько единиц осталось в текущей минуте |
X-RateLimit-Reset | Через сколько секунд бюджет обновится |
Retry-After | При 429: через сколько секунд повторить запрос |
В любом окне длиной 10 секунд можно потратить не более четверти минутного бюджета, но не менее 20 единиц. При исчерпании бюджета API отвечает статусом 429.
Тарифы и ограничения
Точные ограничения каждого тарифа. Ссылки считаются за сутки на IP-адрес на Free и за месяц на аккаунт на платных тарифах. Последний столбец перечисляет настройки, доступные тарифу.
| Тариф | Ссылок | Собственных имён в час | Мин. длина имени | Длина заметки | Единиц в минуту | Настройки |
|---|---|---|---|---|---|---|
| Free | 5 в сутки на IP-адрес | 5 | 5 | 0 | 60 | нет |
| Pro | 500 в месяц | 10 | 3 | 300 | 150 | password, expires_days, max_hits, edit, tags, note, domain, delay, qr_logo |
| Pro+ | 2,000 в месяц | 50 | 3 | 2,000 | 400 | password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, delay, qr_logo |
| Max | 50,000 в месяц | 200 | 3 | 5,000 | 1,000 | password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, sub, delay, qr_logo |
| Enterprise | без ограничений | без ограничений | 3 | 5,000 | 2,500 | password, expires_days, max_hits, edit, edit url, tags, note, note_only, domain, sub, delay, qr_logo |
Без токена аккаунта создание учитывается в квоте Free для IP-адреса: 5 ссылок в сутки. Ссылки на домен, зарегистрированный меньше года назад, делят одну гостевую квоту в 5 ссылок в сутки, кто бы их ни создавал. Одновременно у одного вызывающего может создаваться не более 2 ссылок.
Спецификация OpenAPI
Полное техническое описание в виде документа OpenAPI 3.1: https://anonym.es/api/v1/openapi.json
Документ содержит схемы и примеры всех запросов и ответов, ограничения тарифов, правила имён и коды ошибок. Подходит для Swagger UI, Postman, Insomnia и генераторов клиентов.