Выберите раздел в навигации слева, чтобы просмотреть конкретный раздел документа.
Общая информация по API#
Что такое ОРД и зачем нужен этот API
ОРД (оператор рекламных данных) - организация, через которую участники рынка интернет-рекламы передают сведения о рекламе в ЕРИР (Единый реестр интернет-рекламы Роскомнадзора). Обязанность передавать такие сведения установлена ст. 18.1 Федерального закона "О рекламе" (№ 38-ФЗ).
Через API ОРД от SberAds вы:
- регистрируете контрагентов (рекламодателей, агентств, ОРС, рекламораспространителей) и их площадки;
- регистрируете договоры между контрагентами;
- получаете маркер (erid) для каждого рекламного креатива - без него креатив нельзя размещать;
- отчитываетесь актами и статистикой.
Каждый объект проходит два этапа: сначала он регистрируется в ОРД, затем ОРД передаёт его в ЕРИР. Текущее положение объекта видно в поле state (см. Статусная модель).
API Endpoints
| Стенд | Endpoint | Описание | Аутентификация |
|---|---|---|---|
| Sandbox | https://sandbox.ord-lab.ru/api/v5.0 | Тестирование интеграции. Вы можете использовать тестовые данные, которые не передаются в ЕРИР и не тарифицируются. | Bearer (JWT) |
| Prod | https://api.ord-lab.ru/api/v5.0 | Используйте только те данные, которые необходимо передать в ЕРИР. Помните, что вы несёте ответственность за передачу недостоверных сведений. При создании тарифицируемых событий будет начисляться плата за период. | Bearer (JWT) |
Актуальная машиночитаемая спецификация: https://api.ord-lab.ru/swagger-api-v5.0/index.html.
Версия v5.0 работает с новым API ЕРИР (v8). Версии
/api/v4.../api/v4.9продолжают работать со старым API ЕРИР (v7) и будут выведены из эксплуатации с 1 октября 2026г. Всем интеграциям рекомендуется перейти на v5.0 - перечень отличий приведён в разделе Миграция с v4 на v5.
Протокол
Для реализации API используется протокол HTTP REST. Типы данных определяются в соответствии со спецификацией OpenAPI: спецификация публикуется в двух форматах - Swagger 2.0 и OpenAPI 3.0. Тело запроса и ответа - application/json в кодировке UTF-8 (исключение - пакетная загрузка файлов, см. раздел Пакетная загрузка).
Используются следующие методы HTTP:
| Метод | Описание |
|---|---|
GET | Получение данных по существующему объекту. Получение данных по статусу существующего объекта. |
POST | Создание нового объекта. Поиск по фильтру (/search). |
PUT | Обновление информации по существующему объекту. |
HEAD | Эквивалентен запросу GET, но без передачи самих данных. Может быть использован для запроса статуса объекта - статус приходит в заголовках ответа. |
DELETE | Удаление объекта. Доступно только для статистики креативов и связок акта с креативом. |
Запросы PUT и POST могут выполняться частично асинхронно (то есть уже после возврата управления из запроса). При этом:
- регистрация объекта в ОРД выполняется всегда синхронно;
- загрузка медиафайлов в хранилище ОРД может выполняться синхронно или асинхронно;
- регистрация сущности в ЕРИР происходит после загрузки медиафайлов и также может выполняться синхронно или асинхронно.
Поэтому ответ 202 Accepted - нормальный результат: объект принят ОРД, но подтверждение от ЕРИР ещё не получено. Итоговый статус нужно опрашивать методом GET /{сущность}/{id}/status или HEAD. Подробнее о статусной модели сущностей в разделе Статусная модель сущностей.
Коды ответов HTTP
| Код ответа | Описание |
|---|---|
200 OK | Возвращается в ответ на успешные запросы GET и полностью выполненные (включая регистрацию в ЕРИР) запросы PUT |
201 Created | Возвращается в ответ на выполненные запросы POST и PUT |
202 Accepted | Возвращается в ответ на выполненные запросы POST и PUT, если ответ от ЕРИР не получен |
204 No Content | Успешный запрос без тела ответа (POST /self-organization, POST /contracts/check_cid) |
400 Bad Request | Ошибка в JSON либо в параметрах запроса, в том числе непройденный формато-логический контроль |
401 Unauthorized | Ошибка аутентификации: токен отсутствует, истёк или отозван |
403 Forbidden | Отказано в доступе к объекту, например, объект принадлежит другому клиенту. Данная ошибка может также возвращаться, если зависимый объект (например, контрагент по договору при создании последнего) не найден или не принадлежит запрашивающей стороне |
404 Not Found | Запрашиваемый объект не найден |
409 Conflict | Объект с такими данными уже существует |
413 Payload Too Large | Размер запроса превышает допустимый |
429 Too Many Requests | Превышен лимит частоты запросов - необходимо повторить запрос позже |
500 Internal Server Error | Внутренняя ошибка сервиса. Просьба обратиться в техподдержку сервиса |
501 Not Implemented | Метод не реализован. Просьба обратиться в техподдержку сервиса |
503 Service Unavailable | Данный статусный код может возвращаться при временной недоступности сервиса, например, при технологических работах |
Аутентификация
Поддерживается единственный метод аутентификации - Bearer (JWT). Токен передаётся в заголовке каждого запроса:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...В случае ошибки аутентификации возвращается ответ с кодом 401 Unauthorized.
Полный запрос целиком:
curl -X POST 'https://api.ord-lab.ru/api/v5.0/organizations' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...' \
-H 'Content-Type: application/json' \
-d '{
"type": "ul",
"isOrs": false,
"isRr": false,
"inn": "7705008280",
"kpp": "770501001",
"name": "ООО \"Ромашка\"",
"address": "г. Москва, ул. Примерная, д. 1, оф. 5"
}'Дальше в руководстве примеры приводятся в сокращённой записи - метод, путь и тело запроса.
Токены выпускаются и отзываются через API - см. раздел Токены. Рекомендации:
- выпускайте отдельный токен на каждую интеграцию, чтобы отозвать её можно было независимо от остальных;
- храните токен как секрет: он даёт полный доступ к данным вашего namespace;
- задавайте
daysToLiveисходя из регламента ротации - максимум 3650 дней (10 лет), минимум 1 день; - при компрометации немедленно вызовите
POST /tokens/revoke/{id}.
Ограничение частоты запросов (rate limiting)
Для защиты API от перегрузки и обеспечения стабильной работы для всех клиентов применяется механизм ограничения частоты запросов (rate limit).
Ограничение реализовано по принципу корзины токенов (token bucket):
- У каждого клиента есть персональная корзина с токенами — она не влияет на корзины других клиентов.
- Каждый запрос расходует один токен из корзины.
- Корзина автоматически пополняется с заданной периодичностью.
- Если токенов в корзине не хватает, API возвращает ошибку
429 Too Many Requests
Ручки с активным Rate Limit
Ограничение частоты запросов включено для следующих эндпоинтов:
Группа 1: Удаление
| Параметр | Значение |
| Размер корзины | 150 токенов |
| Пополнение | 150 токенов в секунду |
Эндпоинты:
| Метод | Эндпоинт | Описание |
POST | /deleting-requests | Создание заявки на удаление |
DELETE | /creative-statistics/{id} | Удаление статистики |
DELETE | /invoices/creatives/{id} | Удаление связки акта и креатива |
Группа 2: Статистика в актах
| Параметр | Значение |
| Размер корзины | 5000 токенов |
| Пополнение | 500 токенов в секунду |
Эндпоинты:
| Метод | Эндпоинт | Описание |
POST | /creative-statistics | Создание статистики |
PUT | /creative-statistics/upsert | Создание или обновление статистики |
POST | /invoices/with-statistic | Создание акта со статистикой |
PUT | /invoices/with-statistic/upsert | Создание или обновление акта со статистикой |
Сокращённый ответ (short)
По умолчанию методы создания и изменения возвращают объект целиком. Если вам нужен только статус, включите сокращённый ответ - это заметно уменьшает объём трафика при массовых загрузках.
Два равнозначных способа:
POST /api/v5.0/creatives?short=truePOST /api/v5.0/creatives
Accept: application/vnd.ord-lab.ru.api.entity.short+jsonОтличие от v4. В версиях v4.x медиатип содержал номер версии:
application/vnd.ord-lab.ru.api.v3.entity.short+json. В v5.0 используется медиатип без номера версии:application/vnd.ord-lab.ru.api.entity.short+json. Параметр?short=trueработает одинаково в обеих версиях.
Расширенный ответ статистики (extended)
Для группы /creative-statistics доступен расширенный формат ответа. Включается параметром ?extended=true либо заголовком:
Accept: application/vnd.ord-lab.ru.api.v2.creative-statistics.extended+jsonЗаголовки ответов (Custom HTTP Response Headers)
Данные заголовки могут присутствовать в ответах каждого из запросов API. Они дублируют поля объекта Status и удобны для метода HEAD, у которого нет тела ответа.
| Заголовок | Тип | Описание |
|---|---|---|
ORD-State | string | Статус объекта в ОРД и в ЕРИР (см. "Статусная модель") |
ORD-ERIR-Registered-At | timestamp | Дата и время последней успешной регистрации объекта в ЕРИР, если таковая имела место |
ORD-ERIR-Error | string | Текст сообщения об ошибке от ЕРИР, полученный при последнем обновлении данных по объекту в ЕРИР. Отсутствует, если последнее обновление было успешным |
ORD-Media-Error | string | Текст ошибки загрузки медиаданных креатива. Отсутствует, если медиаданные загружены успешно или отсутствуют |
ORD-Marker | string | Маркер (erid) креатива. Присутствует только для креативов и контейнеров товарных фидов, зарегистрированных в ЕРИР |
Статусная модель
Значение state | Описание |
|---|---|
PENDING | Объект зарегистрирован в ОРД, но пока не зарегистрирован в ЕРИР (в процессе регистрации). Ориентировочные сроки проверки в ЕРИР: Организации, Договоры – 3 часа; Креативы, Акты – от 3-х до 24 часов. Регистрировать креатив можно не дожидаясь статуса "Утверждено" по Договору. Публиковать креатив на площадке можно сразу после получения маркера erid. |
ACCEPTED | Объект зарегистрирован в ОРД, передан в ЕРИР, проходит отложенные проверки качества данных со стороны ЕРИР |
APPROVED | Объект зарегистрирован в ОРД и в ЕРИР в результате проверки качества данных |
DECLINED | Объект зарегистрирован в ОРД, но отклонён ЕРИР в результате проверки качества данных, так как выявлены ошибки, либо данные не отправлены по техническим причинам |
DELETING | Объект в процессе удаления |
Если объект "завис" в PENDING из-за временной ошибки, ОРД сам поставит его в очередь на повторную отправку с интервалом от одного часа. Не дожидаясь этого, повторную попытку можно запустить вручную методом POST /{сущность}/{id}.
Типовые сценарии жизненного цикла
Жизненный цикл сущности зависит от того, зарегистрированы ли вышестоящие объекты в ЕРИР на момент её создания. Ниже описаны два основных сценария.
Сценарий 1:
Первичная регистрация всех вышестоящих объектов
Этот сценарий возникает, когда вы создаете полную цепочку сущностей "с нуля" — от организации до креатива или акта. Ни один из вышестоящих объектов еще не прошел проверку в ЕРИР.
Пример ситуации:
Вы регистрируете новую организацию, новую площадку, новый контракт и новый креатив.
Все объекты создаются последовательно, но ни один из них еще не проверен в ЕРИР.
Путь статусов
PENDING → ACCEPTED → APPROVED/DECLINED
Сценарий 2:
Создание при наличии ранее утвержденных вышестоящих объектов
Этот сценарий возникает, когда вы создаете сущность в рамках уже существующей и проверенной цепочки объектов. Вышестоящие объекты уже имеют статус APPROVED на момент создания.
Пример ситуации:
У вас уже есть контракт, успешно прошедший проверку в ЕРИР (статус APPROVED).
Вы создаете новый креатив по этому контракту.
Путь статусов
ACCEPTED → APPROVED/DECLINED
Объект Status
Данный объект возвращается в ответ на запросы POST и PUT со статусом 200, 201, 202, а также методом GET /{сущность}/{id}/status. Часть полей объекта дублирует соответствующие заголовки ответов.
| Атрибут | Тип | Описание |
|---|---|---|
id | string(uuid) | Идентификатор, под которым объект зарегистрирован в ОРД |
state | string | См. заголовок ORD-State |
erirRegisteredAt | timestamp | См. заголовок ORD-ERIR-Registered-At |
erirError | string | См. заголовок ORD-ERIR-Error |
mediaError | string | См. заголовок ORD-Media-Error |
marker | string | Маркер (erid) креатива. Только для объектов типа Creative и контейнеров товарных фидов, имеющих state = APPROVED или ACCEPTED |
syncError | string | Сообщение об ошибке процесса синхронизации с ЕРИР, возникшей в ходе исполнения данного запроса. Если присутствует, обычно совпадает с erirError |
Пример:
{
"id": "bff52b20-a7a3-4cea-a516-2618b5e1e960",
"state": "APPROVED",
"erirRegisteredAt": "2026-08-01T13:20:50.052+03:00",
"marker": "2Ranyn7YfuE"
}Методы, принимающие массив объектов (POST /creative-statistics, POST /invoices/creatives), в сокращённом режиме возвращают массив статусов:
{
"statuses": [
{ "id": "7d04bccb-1a0e-4ce1-9b30-ae06ca51cbf1", "state": "ACCEPTED" },
{ "id": "c1a6d4b8-2f37-4e55-9d0a-8b7c6e5f4a31", "state": "PENDING" }
]
}Объект Error
Данный объект возвращается в ответ на запросы, имеющие статусные коды 4xx и, в ряде случаев, 5xx.
| Атрибут | Тип | Описание |
|---|---|---|
requestId | string(uuid); required | Уникальный идентификатор запроса. Указывайте его при обращении в техподдержку |
status | int; required | HTTP-код ответа |
code | string; required | Код ошибки (см. таблицу ниже) |
title | string; required | Краткое описание ошибки. Одинаковое для одного и того же значения code |
detail | string | Детальное описание ошибки. Для ошибок формато-логического контроля. Содержит код контроля и текст нарушения. Указывайте его при обращении в техподдержку |
Пример ответа при непройденном контроле:
{
"requestId": "0e29c0f6-6d5e-4a30-9f5a-2f4d2b2a1f77",
"status": 400,
"code": "parameter-error",
"title": "invalid parameter value",
"detail": "I_185: Не передан обязательный массив \"intermediaryReportIdList\" для актов типа \"Акт на вознаграждение посредника\""
}Коды ошибок
code | HTTP | title |
|---|---|---|
invalid-json | 400 | JSON parsing or content problem |
parameter-error | 400 | invalid parameter value |
precondition-failed | 400 | failed precondition (e.g. referenced entity not found) |
generic | 400 / 500 | Generic or internal error (no further information available) |
unauthorized | 401 | ошибка аутентификации |
access-denied | 403 | доступ к объекту запрещён |
not-found | 404 | requested entity not found |
conflict | 409 | already exist |
too-large | 413 | размер запроса превышает допустимый |
too-many-requests | 429 | too many requests |
unimplemented | 501 | requested function not implemented |
Объект Pagination - постраничный вывод
Данный объект возвращается в составе ответа на списочные запросы (POST /{сущность}/search) в поле meta.
| Атрибут | Тип | Описание |
|---|---|---|
limit | int | Сколько элементов на странице |
page | int | Номер страницы |
total | int | Общее количество элементов |
Все фильтры поиска дополнительно поддерживают поля page, limit, sorting (массив полей сортировки) и cursor (курсорная пагинация - начать выборку с указанного элемента; предпочтительна при обходе больших выборок).
{
"data": [ { "...": "объекты запрошенной сущности" } ],
"meta": { "page": 1, "limit": 100, "total": 3471 }
}Общие принципы работы с идентификаторами
Все системные идентификаторы объектов в ОРД имеют формат UUID v4. Идентификаторы генерируются автоматически при создании сущности методом POST. Задать собственное значение системного идентификатора невозможно. Но есть исключения из правил:
feedId(товарный фид) - Идентификатор контейнера товарного фида генерируется клиентом и передается при создании.externalId(площадки, медиаданные креатива) - Необязательный пользовательский идентификатор. Присваивается площадке или медиаданным креатива для внутренней идентификации объекта в системе клиента. Используется исключительно для удобства самого пользователя и не влияет на логику работы API.
Специальные идентификаторы
CID - используется, когда договор в ОРД не регистрировался в вашем ЛК ОРД, но на него нужно ссылаться. Например, вы получили cid от другого участника цепочки, который зарегистрировал договор в своем ЛК ОРД.
Поля cid и contractId являются взаимоисключающими — при создании или обновлении сущности можно передать только одно из них:
contractId- если договор зарегистрирован в данном ЛК ОРД.cid- если договор был зарегистрирован в ОРД другим участником цепочки.
Данные в примерах
Все примеры в этом руководстве построены на одном наборе вымышленных участников и объектов. Идентификаторы сквозные: договор, на который ссылается акт в разделе "Акты", - тот же самый, что зарегистрирован в разделе "Договоры". Реквизиты, ссылки и наименования вымышлены; совпадения с действующими организациями и сайтами случайны.
| Объект | Идентификатор | Реквизиты |
|---|---|---|
| ООО "Ромашка" - рекламодатель, заказчик | 62ebd730-7549-42b2-aeaf-578ee82bb0fb | ИНН 7705008280, КПП 770501001 |
| ООО "Вектор-Медиа" - рекламораспространитель, исполнитель | 4fb32ac9-0eb0-418c-81b4-a9b2cd53009a | ИНН 7732222893, КПП 773201001 |
| ООО "Альфа Медиа" - агентство, посредник | b51c9ab7-993f-4573-a5e0-20ff7dfd7b37 | ИНН 7719410312, КПП 771901001 |
| Иванов Иван Иванович - физическое лицо | 86c2c281-80ca-491e-bdcd-e391cdb5cbb2 | ИНН 501181421074 |
| Marko Nikolic - иностранное физическое лицо | e7113001-0a56-4d0d-96b9-68186d4ab6ad | ОКСМ 688 |
| Danube Media d.o.o. - иностранное юридическое лицо | f48b0ee6-2e36-44c6-8b42-0dc121a5a36b | ОКСМ 688 |
| Площадка "Вектор Новости" (сайт) | 7358025f-5674-44ea-9ab1-f342a486e939 | https://news.vector.example |
| Договор оказания услуг: заказчик "Ромашка", исполнитель "Вектор-Медиа" | 18abd2e0-7a4b-49cf-a287-f401fe98e192 | № 123/26-02 от 23.05.2026 |
| Посреднический договор: заказчик "Ромашка", посредник "Альфа Медиа" | bd1a457f-8005-47f4-9659-ed4ada3a507f | № 45/26 от 12.01.2026 |
| Креатив - баннер | e524575d-6fc6-48c9-a38c-2de2d0543dab | маркер 2RanynT4kQm |
| Креатив - текстовый блок | bff52b20-a7a3-4cea-a516-2618b5e1e960 | маркер 2Ranyn7YfuE |
Товарный фид (feedId) | 78b1307a-b0ad-4cb6-a0bd-c7ddef242b12 | контейнер 0e91c3fe-9056-4cbb-812c-e2b2e63dacdd |
| Акт выполненных работ за июль 2026 | 7a459159-c38e-4f9a-a726-d209031111cb | № act-2026-07 |
| Отчёт посредника за июль 2026 | b5df28a6-c5da-4474-9e38-166ffb4e3f2c | № IR-2026-07 |
Домены *.example, example.com и подобные зарезервированы стандартом для документации и в сети не резолвятся - в рабочих запросах указывайте собственные адреса.
Порядок вызовов при первом подключении
Полный цикл от пустого аккаунта до сданной отчётности выглядит так. Каждый шаг разобран с примерами в соответствующем разделе.
| Шаг | Вызов | Что получаете |
|---|---|---|
| 1 | Интерфейс Личного кабинета ОРД | Получение токена в Личном кабинете ОРД |
| 2 | POST /organizations | Идентификаторы контрагентов - обеих сторон каждого договора |
| 3 | POST /contracts | Идентификатор договора |
| 4 | POST /creatives | Идентификатор креатива и маркер (erid) - с этого момента можно размещать рекламу |
| 5 | POST /platforms | Идентификаторы площадок (либо сразу вложенно, на шаге 2) |
| 6 | POST /invoices или POST /invoices/with-statistic | Идентификатор акта за отчётный период |
| 7 | POST /creative-statistics + POST /invoices/creatives | Статистика открутки и её связь с актом. Не нужны, если акт подан вместе со статистикой на шаге 7 |
Выдерживать паузы между шагами не нужно: достаточно соблюдать порядок вызовов, а очерёдностью отправки в ЕРИР ОРД управляет сам. Как именно - ниже.
Ожидание зависимостей
Объект, который ссылается на другие сущности, после регистрации в ОРД не уходит в ЕРИР немедленно. Сначала он попадает в очередь ожидания и остаётся в статусе PENDING, пока все объекты, на которые он ссылается, не будут зарегистрированы в ЕРИР. Только после этого ОРД отправляет его дальше.
Поэтому связанные объекты можно отправлять подряд, не дожидаясь APPROVED по каждому предыдущему. Договор допустимо зарегистрировать сразу вслед за контрагентами, акт - вслед за договором.
Кого ждёт каждая сущность:
| Сущность | Ждёт регистрации в ЕРИР |
|---|---|
| Площадка | контрагента, к которому привязана |
| Договор | контрагента-заказчика и контрагента-исполнителя |
| Креатив | договоров из contractId, контрагента из selfPromotionOrganizationId |
| Контейнер товарного фида | того же, что и креатив, плюс элементов фида с тем же feedId |
| Акт | договора акта, договоров разаллокации, договоров из rrOrderContractIdList, отчётов посредника из intermediaryReportIdList |
| Статистика | креатива, площадки, договоров и акта, если он указан |
| Связка акта и креатива | акта, договора и всех перечисленных креативов |
Что из этого следует на практике:
- Порядок вызовов всё равно важен. Ожидание снимает требование ждать
APPROVED, но не отменяет того, что ссылаться можно только на уже созданный в ОРД объект: его идентификатор нужно откуда-то взять. - Ожидание не бесконечно. Попытки повторяются с интервалом порядка трёх часов и в какой-то момент прекращаются. Если объект надолго завис в
PENDING, ищите причину среди тех, кого он ждёт. - При отклонении сущности в ЕРИР (статус
DECLINED) отказ распространяется по цепочке зависимостей вниз. Все нижестоящие сущности, которые ожидали подтверждения отклоненной сущности, также автоматически переводятся в статусDECLINED. Если ЕРИР отклоняет контракт, все креативы и акты, привязанные к нему, также получают статусDECLINED.
Разбираться нужно с первопричиной, а не с последним объектом в цепочке. После внесения изменений в объект, отклоненный ЕРИР необходимо все последующие объекты переотправить через запрос POST /{сущность}/id с тем же содержимым.
- Статус удобнее запрашивать методом
HEAD- он отдаётORD-Stateв заголовках и не тратит трафик на тело ответа.




