Руководство по API ОРД v5.0

Документ содержит описание запросов API ОРД от SberAds версии 5.0 и перечень отличий от версии 4.

Документ содержит описание запросов API ОРД от SberAds версии 5.0 и перечень отличий от версии 4.

Выберите раздел в навигации слева, чтобы просмотреть конкретный раздел документа.

Общая информация по API#

Что такое ОРД и зачем нужен этот API

ОРД (оператор рекламных данных) - организация, через которую участники рынка интернет-рекламы передают сведения о рекламе в ЕРИР (Единый реестр интернет-рекламы Роскомнадзора). Обязанность передавать такие сведения установлена ст. 18.1 Федерального закона "О рекламе" (№ 38-ФЗ).

Через API ОРД от SberAds вы:

  • регистрируете контрагентов (рекламодателей, агентств, ОРС, рекламораспространителей) и их площадки;
  • регистрируете договоры между контрагентами;
  • получаете маркер (erid) для каждого рекламного креатива - без него креатив нельзя размещать;
  • отчитываетесь актами и статистикой.

Каждый объект проходит два этапа: сначала он регистрируется в ОРД, затем ОРД передаёт его в ЕРИР. Текущее положение объекта видно в поле state (см. Статусная модель).

API Endpoints

СтендEndpointОписаниеАутентификация
Sandboxhttps://sandbox.ord-lab.ru/api/v5.0Тестирование интеграции. Вы можете использовать тестовые данные, которые не передаются в ЕРИР и не тарифицируются.Bearer (JWT)
Prodhttps://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):

  1. У каждого клиента есть персональная корзина с токенами — она не влияет на корзины других клиентов.
  2. Каждый запрос расходует один токен из корзины.
  3. Корзина автоматически пополняется с заданной периодичностью.
  4. Если токенов в корзине не хватает, 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=true
POST /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-StatestringСтатус объекта в ОРД и в ЕРИР (см. "Статусная модель")
ORD-ERIR-Registered-AttimestampДата и время последней успешной регистрации объекта в ЕРИР, если таковая имела место
ORD-ERIR-ErrorstringТекст сообщения об ошибке от ЕРИР, полученный при последнем обновлении данных по объекту в ЕРИР. Отсутствует, если последнее обновление было успешным
ORD-Media-ErrorstringТекст ошибки загрузки медиаданных креатива. Отсутствует, если медиаданные загружены успешно или отсутствуют
ORD-MarkerstringМаркер (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. Часть полей объекта дублирует соответствующие заголовки ответов.

АтрибутТипОписание
idstring(uuid)Идентификатор, под которым объект зарегистрирован в ОРД
statestringСм. заголовок ORD-State
erirRegisteredAttimestampСм. заголовок ORD-ERIR-Registered-At
erirErrorstringСм. заголовок ORD-ERIR-Error
mediaErrorstringСм. заголовок ORD-Media-Error
markerstringМаркер (erid) креатива. Только для объектов типа Creative и контейнеров товарных фидов, имеющих state = APPROVED или ACCEPTED
syncErrorstringСообщение об ошибке процесса синхронизации с ЕРИР, возникшей в ходе исполнения данного запроса. Если присутствует, обычно совпадает с 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.

АтрибутТипОписание
requestIdstring(uuid); requiredУникальный идентификатор запроса. Указывайте его при обращении в техподдержку
statusint; requiredHTTP-код ответа
codestring; requiredКод ошибки (см. таблицу ниже)
titlestring; requiredКраткое описание ошибки. Одинаковое для одного и того же значения code
detailstringДетальное описание ошибки. Для ошибок формато-логического контроля. Содержит код контроля и текст нарушения. Указывайте его при обращении в техподдержку

Пример ответа при непройденном контроле:

{
  "requestId": "0e29c0f6-6d5e-4a30-9f5a-2f4d2b2a1f77",
  "status": 400,
  "code": "parameter-error",
  "title": "invalid parameter value",
  "detail": "I_185: Не передан обязательный массив \"intermediaryReportIdList\" для актов типа \"Акт на вознаграждение посредника\""
}

Коды ошибок

codeHTTPtitle
invalid-json400JSON parsing or content problem
parameter-error400invalid parameter value
precondition-failed400failed precondition (e.g. referenced entity not found)
generic400 / 500Generic or internal error (no further information available)
unauthorized401ошибка аутентификации
access-denied403доступ к объекту запрещён
not-found404requested entity not found
conflict409already exist
too-large413размер запроса превышает допустимый
too-many-requests429too many requests
unimplemented501requested function not implemented

Объект Pagination - постраничный вывод

Данный объект возвращается в составе ответа на списочные запросы (POST /{сущность}/search) в поле meta.

АтрибутТипОписание
limitintСколько элементов на странице
pageintНомер страницы
totalintОбщее количество элементов

Все фильтры поиска дополнительно поддерживают поля page, limit, sorting (массив полей сортировки) и cursor (курсорная пагинация - начать выборку с указанного элемента; предпочтительна при обходе больших выборок).

{
  "data": [ { "...": "объекты запрошенной сущности" } ],
  "meta": { "page": 1, "limit": 100, "total": 3471 }
}

Общие принципы работы с идентификаторами

Все системные идентификаторы объектов в ОРД имеют формат UUID v4. Идентификаторы генерируются автоматически при создании сущности методом POST. Задать собственное значение системного идентификатора невозможно. Но есть исключения из правил:

  1. feedId (товарный фид) - Идентификатор контейнера товарного фида генерируется клиентом и передается при создании.
  2. 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-f342a486e939https://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
Акт выполненных работ за июль 20267a459159-c38e-4f9a-a726-d209031111cb№ act-2026-07
Отчёт посредника за июль 2026b5df28a6-c5da-4474-9e38-166ffb4e3f2c№ IR-2026-07

Домены *.example, example.com и подобные зарезервированы стандартом для документации и в сети не резолвятся - в рабочих запросах указывайте собственные адреса.

Порядок вызовов при первом подключении

Полный цикл от пустого аккаунта до сданной отчётности выглядит так. Каждый шаг разобран с примерами в соответствующем разделе.

ШагВызовЧто получаете
1Интерфейс Личного кабинета ОРДПолучение токена в Личном кабинете ОРД
2POST /organizationsИдентификаторы контрагентов - обеих сторон каждого договора
3POST /contractsИдентификатор договора
4POST /creativesИдентификатор креатива и маркер (erid) - с этого момента можно размещать рекламу
5POST /platformsИдентификаторы площадок (либо сразу вложенно, на шаге 2)
6POST /invoices или POST /invoices/with-statisticИдентификатор акта за отчётный период
7POST /creative-statistics + POST /invoices/creativesСтатистика открутки и её связь с актом. Не нужны, если акт подан вместе со статистикой на шаге 7

Выдерживать паузы между шагами не нужно: достаточно соблюдать порядок вызовов, а очерёдностью отправки в ЕРИР ОРД управляет сам. Как именно - ниже.

Ожидание зависимостей

Объект, который ссылается на другие сущности, после регистрации в ОРД не уходит в ЕРИР немедленно. Сначала он попадает в очередь ожидания и остаётся в статусе PENDING, пока все объекты, на которые он ссылается, не будут зарегистрированы в ЕРИР. Только после этого ОРД отправляет его дальше.

Поэтому связанные объекты можно отправлять подряд, не дожидаясь APPROVED по каждому предыдущему. Договор допустимо зарегистрировать сразу вслед за контрагентами, акт - вслед за договором.

Кого ждёт каждая сущность:

СущностьЖдёт регистрации в ЕРИР
Площадкаконтрагента, к которому привязана
Договорконтрагента-заказчика и контрагента-исполнителя
Креативдоговоров из contractId, контрагента из selfPromotionOrganizationId
Контейнер товарного фидатого же, что и креатив, плюс элементов фида с тем же feedId
Актдоговора акта, договоров разаллокации, договоров из rrOrderContractIdList, отчётов посредника из intermediaryReportIdList
Статистикакреатива, площадки, договоров и акта, если он указан
Связка акта и креативаакта, договора и всех перечисленных креативов

Что из этого следует на практике:

  • Порядок вызовов всё равно важен. Ожидание снимает требование ждать APPROVED, но не отменяет того, что ссылаться можно только на уже созданный в ОРД объект: его идентификатор нужно откуда-то взять.
  • Ожидание не бесконечно. Попытки повторяются с интервалом порядка трёх часов и в какой-то момент прекращаются. Если объект надолго завис в PENDING, ищите причину среди тех, кого он ждёт.
  • При отклонении сущности в ЕРИР (статус DECLINED) отказ распространяется по цепочке зависимостей вниз. Все нижестоящие сущности, которые ожидали подтверждения отклоненной сущности, также автоматически переводятся в статус DECLINED. Если ЕРИР отклоняет контракт, все креативы и акты, привязанные к нему, также получают статус DECLINED. 

Разбираться нужно с первопричиной, а не с последним объектом в цепочке. После внесения изменений в объект, отклоненный ЕРИР необходимо все последующие объекты переотправить через запрос POST /{сущность}/id с тем же содержимым. 

  • Статус удобнее запрашивать методом HEAD - он отдаёт ORD-State в заголовках и не тратит трафик на тело ответа.
decor--1decor--2decor--3decor--4decor--5