ads.codex RO RU EN

Подключите сайт за 5 минут (API)

Весь путь издателя через API: сайт, подтверждение владения, зоны, код интеграции, проверка. То же самое может сделать и ваш ИИ-агент.

Документация API Коллекция Postman OpenAPI (JSON)

1. Создайте токен

В панели «Доступ API» → новый токен с правами sites:write и zones:write. Токен показывается один раз.

export ADS_TOKEN="…"
export ADS_API="https://ads-laravel.codex.md/api/v1"

2. Добавьте сайт

Ответ содержит id сайта (data.id) для следующих шагов. Категории — коды IAB из GET /taxonomies/iab.

curl -X POST "$ADS_API/sites" \
  -H "Authorization: Bearer $ADS_TOKEN" -H "Accept: application/json" \
  -H "Content-Type: application/json" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"domain":"exemplu.md","name":"Exemplu","language":"ro","categories":["596"],"audience":["b2c"]}'

3. Подтвердите владение и отправьте сайт на проверку

Ответ точно указывает, какой мета-тег поставить в <head> главной страницы. После публикации проверьте и отправьте сайт команде (обычно один рабочий день).

curl -X POST "$ADS_API/sites/SITE_ID/verification" -H "Authorization: Bearer $ADS_TOKEN" \
  -H "Accept: application/json" -H "Content-Type: application/json" -d '{"method":"meta"}'

# после того как мета-тег размещён на сайте:
curl -X POST "$ADS_API/sites/SITE_ID/verification/check" -H "Authorization: Bearer $ADS_TOKEN" -H "Accept: application/json"
curl -X POST "$ADS_API/sites/SITE_ID/submit" -H "Authorization: Bearer $ADS_TOKEN" -H "Accept: application/json"

4. Создайте зону и получите код

После одобрения (вебхук site.approved) создайте зоны. Код: скрипт сайта один раз на странице и элемент для каждой зоны; platform может быть html, wordpress, react, nextjs, vue или blade.

curl -X POST "$ADS_API/sites/SITE_ID/zones" -H "Authorization: Bearer $ADS_TOKEN" \
  -H "Accept: application/json" -H "Content-Type: application/json" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"name":"Sidebar","size":"300x250"}'

curl "$ADS_API/zones/ZONE_ID/code?platform=html" -H "Authorization: Bearer $ADS_TOKEN" -H "Accept: application/json"

5. Проверьте интеграцию

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

curl -X POST "$ADS_API/zones/ZONE_ID/integration/check" -H "Authorization: Bearer $ADS_TOKEN" -H "Accept: application/json"

PHP

$http = new \GuzzleHttp\Client(['base_uri' => 'https://ads-laravel.codex.md/api/v1/', 'headers' => [
    'Authorization' => 'Bearer '.getenv('ADS_TOKEN'), 'Accept' => 'application/json',
]]);

$site = json_decode((string) $http->post('sites', [
    'headers' => ['Idempotency-Key' => bin2hex(random_bytes(16))],
    'json' => ['domain' => 'exemplu.md', 'name' => 'Exemplu', 'language' => 'ro', 'categories' => ['596'], 'audience' => ['b2c']],
])->getBody(), true)['data'];

$meta = json_decode((string) $http->post("sites/{$site['id']}/verification", ['json' => ['method' => 'meta']])->getBody(), true);

JavaScript

const api = (path, init = {}) => fetch(`https://ads-laravel.codex.md/api/v1${path}`, {
  ...init,
  headers: { Authorization: `Bearer ${process.env.ADS_TOKEN}`, Accept: 'application/json', 'Content-Type': 'application/json', ...init.headers },
}).then((r) => r.json());

const { data: site } = await api('/sites', {
  method: 'POST',
  headers: { 'Idempotency-Key': crypto.randomUUID() },
  body: JSON.stringify({ domain: 'exemplu.md', name: 'Exemplu', language: 'ro', categories: ['596'], audience: ['b2c'] }),
});
const verification = await api(`/sites/${site.id}/verification`, { method: 'POST', body: JSON.stringify({ method: 'meta' }) });

Полезно знать

Понятные ошибки

Формат RFC 9457 (application/problem+json), сообщение на языке из Accept-Language (ro, ru, en) и request_id для поддержки.

Без дублей

Заголовок Idempotency-Key обязателен при создании: тот же ключ в течение 24 ч возвращает тот же результат, даже при повторе.

Подписанные вебхуки

Вы получаете site.approved, approval.requested, zone.integration_detected и другие, подписанные HMAC-SHA256 в заголовке Codex-Signature.

Или доверьте ИИ-агенту

MCP-сервер выполняет те же шаги из диалога, включая вставку кода в проект.