Заголовки ответов

Каждый response от FourA API содержит небольшой набор кастомных заголовков. Они полезны для трассировки, поддержки и последующего анализа.

Заголовки, которые устанавливает FourA

Header Set on Description
X-Foura-Request-Id Каждый response /api/*, включая ошибки и ответы 401 UUID, идентифицирующий этот request. Логируйте его на своей стороне.
Content-Type Каждый response Всегда application/json для оболочки. content-type целевого ресурса возвращается внутри поля headers оболочки.

X-Foura-Request-Id

Каждый вызов к POST /api/single/, POST /api/proxy/ или POST /api/browser/ помечается UUID. Этот заголовок устанавливается даже при сбое аутентификации, поэтому вы можете сопоставлять и некорректно настроенные вызовы.

curl -i -X POST https://eu.api.foura.ai/api/single/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"method": "GET", "url": "https://example.com"}'
HTTP/1.1 200 OK
X-Foura-Request-Id: 9f1c4e6c-7b2a-4d3e-8a1f-2c9d8e4a3b15
Content-Type: application/json
...

Когда его использовать

  • Тикеты поддержки: укажите request ID, и мы сможем найти точный вызов в наших логах.
  • Ваши собственные логи: сохраняйте его рядом со строкой лога вашего приложения. Если в жалобе клиента указано, что "данные были неверными в 14:32", вы сможете воспроизвести точный request.
  • Трассировка в Dashboard: этот же ID отображается в ленте активности для управляемых вами ключей, поэтому вы можете открыть соответствующую строку и изучить перехваченные request и response.

Пример: логирование на вашей стороне

import logging
import requests

log = logging.getLogger(__name__)

def fetch(url, api_key):
    resp = requests.post(
        "https://eu.api.foura.ai/api/single/",
        headers={"X-API-Key": api_key, "Content-Type": "application/json"},
        json={"method": "GET", "url": url},
    )
    request_id = resp.headers.get("X-Foura-Request-Id", "no-id")
    log.info("foura request_id=%s url=%s status=%s", request_id, url, resp.status_code)
    resp.raise_for_status()
    return resp.json()
async function fetchPage(url, apiKey) {
  const resp = await fetch('https://eu.api.foura.ai/api/single/', {
    method: 'POST',
    headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/json' },
    body: JSON.stringify({ method: 'GET', url })
  });

  const requestId = resp.headers.get('X-Foura-Request-Id') || 'no-id';
  console.log(`foura request_id=${requestId} url=${url} status=${resp.status}`);

  return resp.json();
}

Поведение кэширования

API не устанавливает Cache-Control или ETag в responses. Каждый вызов направляется на бэкенд. Если вам нужно кэширование, добавьте его на своей стороне.

Заголовки целевого response

Заголовки, возвращенные целевым сайтом, отсутствуют в response FourA API. Они возвращаются внутри JSON-оболочки в поле headers. Для endpoints Single и Proxy это массив объектов заголовков для каждого перехода (по одной записи на каждый шаг перенаправления). Для endpoint Browser это плоский объект заголовков финального response.

{
  "status": 200,
  "headers": [
    { "Content-Type": "text/html; charset=utf-8", "Server": "..." }
  ],
  "data": "<!doctype html>...",
  "total_time": 0.42
}

Если вам нужен конкретный заголовок целевого ресурса, читайте его из поля headers оболочки, а не из HTTP-response самого вызова API.

Связанные разделы

  • API Endpoints: Структура оболочки request и response
  • API Errors: Как устроены ответы с ошибками
  • Activity Log: История по каждому request, привязанная к request ID
Обновлено: 30 июня 2026 г.