ГлавнаяДокументация

Документация

Всё необходимое для интеграции TrafficNinja в вашу инфраструктуру — справочник REST API и руководство по плагину WordPress.

REST API

API-интеграция

REST API TrafficNinja позволяет программно управлять сайтами, категориями, темами и синхронизировать сгенерированные статьи с вашей платформой. Все эндпоинты имеют префикс /api/v1/.

Базовый URL

https://trafficninja.io/api/v1

Аутентификация

TrafficNinja использует аутентификацию Bearer-токена. Ваш API-ключ генерируется автоматически в процессе онбординга. Найдите его в панели управления в разделе Настройки → Настройки интеграции.

Скопируйте API-ключ из Панель управления → Настройки → Настройки интеграции и передавайте его как Bearer-токен в каждом запросе.

Используйте ваш API-ключ в каждом запросе:

bash
curl https://trafficninja.io/api/v1/websites \
  -H "Authorization: Bearer {your-api-key}" \
  -H "Accept: application/json"

Основные эндпоинты

Сайты

GET/api/v1/websitesСписок всех сайтов Авт.
POST/api/v1/websitesСоздать сайт Авт.
GET/api/v1/websites/{id}Получить сайт Авт.
PUT/api/v1/websites/{id}Обновить сайт Авт.
DELETE/api/v1/websites/{id}Удалить сайт Авт.

Публикации

GET/api/v1/postsСписок публикаций Авт.
GET/api/v1/posts/{id}Получить публикацию Авт.

Необязательные фильтры: website_id (целое число), statuses[] (published|draft|archived|deleted), title (частичное совпадение), date_from / date_to (ГГГГ-ММ-ДД)

http
GET /api/v1/posts?website_id=1&statuses[]=published&title=seo&date_from=2026-01-01&date_to=2026-04-30
Authorization: Bearer {your-api-key}

Пример: Создание сайта

http
POST /api/v1/websites
Authorization: Bearer {token}
Content-Type: application/json

{
  "name": "My Blog",
  "url": "https://myblog.com",
  "industry": "technology",
  "country": "US",
  "language": "en"
}
json
{
  "id": 42,
  "name": "My Blog",
  "url": "https://myblog.com",
  "status": "active",
  "created_at": "2026-04-10T12:00:00Z"
}

Эндпоинты плагина WordPress

Эти эндпоинты используются плагином WordPress с помощью ключа API WordPress, созданного в панели управления. Передайте его в заголовке X-API-Key:

http
X-API-Key: {your-wordpress-api-key}
GET/api/v1/wordpress/connection-testПроверить ключ API и подключение
GET/api/v1/wordpress/content-queueПолучить статьи для публикации
GET/api/v1/wordpress/content/{id}Получить полный контент статьи

Content queue item shape

json
{
  "id": 99,
  "title": "10 Ways to Boost Local SEO",
  "slug": "10-ways-boost-local-seo",
  "content": "<h2>...</h2><p>...</p>",
  "meta_description": "Learn how to dominate local search...",
  "focus_keyword": "local SEO tips",
  "json_ld": "{"@context":"https://schema.org",...}",
  "locale": "en",
  "categories": ["SEO", "Marketing"],
  "scheduled_for": "2026-04-11T08:00:00Z"
}

Исходящие вебхуки

TrafficNinja может отправлять подписанный JSON-запрос (POST) на указанный вами URL при каждом изменении состояния публикации. Настройте один URL вебхука на сайт — опрос API не нужен.

Настройка вебхука

Укажите URL вебхука через API или в настройках сайта в панели управления. При первом сохранении URL автоматически генерируется секрет подписи и возвращается в ответе. Сохраните его в надёжном месте — он потребуется для проверки входящих запросов.

PUT/api/v1/websites/{id}/settings/webhookУстановить или удалить URL вебхука Авт.
POST/api/v1/websites/{id}/settings/webhook/regenerate-secretОбновить секрет подписи Авт.
http
PUT /api/v1/websites/42/settings/webhook
Authorization: Bearer {your-api-key}
Content-Type: application/json

{ "webhook_url": "https://yoursite.com/hooks/trafficninja" }

→ 200 OK
{
  "data": {
    "webhook_url": "https://yoursite.com/hooks/trafficninja",
    "webhook_secret": "abc123...64chars",
    "has_webhook": true
  }
}

События

post.publishedСтатус публикации изменился на «опубликовано» (автопубликация или вручную).
post.archivedСтатус публикации изменился на «в архиве».
post.content_editedЗаголовок или тело опубликованной, черновой или архивной публикации было отредактировано.

Структура полезной нагрузки

Каждая доставка — это HTTP POST с Content-Type: application/json. Объект post соответствует ответу GET /api/v1/posts/{id}.

json
{
  "event": "post.published",
  "timestamp": "2026-04-18T10:30:00Z",
  "website_id": 42,
  "post": {
    "id": 99,
    "title": "10 Ways to Boost Local SEO",
    "slug": "10-ways-boost-local-seo",
    "status": "published",
    "language": "en-US",
    "meta_description": "Learn how to dominate local search...",
    "seo_score": 94,
    "word_count": 2300,
    "published_at": "2026-04-18T10:29:58Z",
    ...
  }
}

Проверка подписи

Каждый запрос содержит заголовок X-Webhook-Signature вида sha256= и HMAC-SHA256 hex-дайджест тела запроса, подписанный вашим секретом вебхука. Всегда проверяйте его перед обработкой полезной нагрузки.

javascript
// Node.js verification example
const crypto = require('crypto');

function verifySignature(rawBody, secret, signatureHeader) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)          // use the raw request body bytes
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader)
  );
}
php
// PHP verification example
function verifySignature(string $rawBody, string $secret, string $signatureHeader): bool {
    $expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
    return hash_equals($expected, $signatureHeader);
}

Доставка и повторные попытки

1Ваш эндпоинт должен вернуть статус 2xx в течение 30 секунд.
2При ошибке доставка повторяется до 3 раз с экспоненциальной задержкой: 30 с → 60 с → 120 с.
3После 3 неудачных попыток событие отбрасывается и фиксируется в логах. Проверьте логи сервера, если события пропадают.
4Отвечайте быстро — тяжёлую обработку передавайте в фоновую очередь на вашей стороне.

Обработка ошибок

Все ошибки возвращают JSON в едином формате:

json
{
  "message": "The given data was invalid.",
  "errors": {
    "email": ["The email field is required."]
  }
}
400Bad Request — ошибка валидации
401Unauthorized — отсутствует или недействительный токен
403Forbidden — недостаточно прав
404Not Found — ресурс не существует
422Unprocessable Entity — ошибка бизнес-логики
429Too Many Requests — превышен лимит запросов
500Server Error — попробуйте позже
TrafficNinja - SEO Automation Platform for Small Businesses