ДОКУМЕНТАЦІЯ ДЛЯ РОЗРОБНИКІВ

Serper.live API

Один ендпоїнт, який виконує справжній пошук Google для обраного ринку і повертає органічні результати як JSON. Кожен запит живий: нічого не кешується і не відтворюється з архіву.

Наживо для Türkiye.
Базова адреса
https://api.serper.live
Автентифікація
Bearer-токен
Формат
JSON через HTTPS
Ціна
$0.10 за успішний запит
На цій сторінці
01

Швидкий старт

Три кроки від порожнього акаунта до першого живого результату.

  1. Створіть акаунт і токен у розділі API-токени. Повне значення токена показується один раз, тож збережіть його в менеджері секретів.
  2. Поповніть баланс у USDT або USDC на сторінці Баланс. Один живий пошук коштує $0.10, і тарифікуються лише успішні пошуки.
  3. Надішліть запит нижче зі своїм токеном. У відповіді буде поточна видача Google для цього ринку.
curl
curl -X POST https://api.serper.live/v1/search \
  -H "Authorization: Bearer sl_live_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"best coffee shops","country":"TR"}'
JavaScript
const response = await fetch('https://api.serper.live/v1/search', {
    method: 'POST',
    headers: {
        Authorization: 'Bearer sl_live_YOUR_TOKEN',
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({ query: 'best coffee shops', country: 'TR' }),
    signal: AbortSignal.timeout(100000),
});
const result = await response.json();

console.log(result.organic);
Python
import requests

response = requests.post(
    "https://api.serper.live/v1/search",
    headers={"Authorization": "Bearer sl_live_YOUR_TOKEN"},
    json={"query": "best coffee shops", "country": "TR"},
    timeout=100,
)
print(response.json()["organic"])

Живий пошук триває 10–60 секунд, бо справді завантажує Google. Дайте своєму HTTP-клієнту тайм-аут щонайменше 100 секунд.

02

Автентифікація

Кожен запит до /v1/search передає ваш токен у заголовку Authorization:

HTTP
Authorization: Bearer sl_live_YOUR_TOKEN
  • Токени починаються з sl_live_ і створюються в розділі API-токени. Створюйте окремий токен для кожного застосунку, щоб відкликати його, не зачіпаючи інших.
  • Тримайте токени на своєму сервері. Ніколи не вбудовуйте їх у браузер, мобільний застосунок чи публічний репозиторій.
  • Відкликаний токен перестає працювати одразу; історія його запитів лишається у вашому акаунті.
HTTPКодЗначення
401unauthorizedВідсутній заголовок Authorization.
401invalid_tokenТокен має неправильний формат, відкликаний або невідомий.
03

POST https://api.serper.live/v1/search

Виконує один живий пошук Google і повертає органічні результати. Запит і відповідь у JSON; тіло запиту обмежене 16 КБ.

Тіло запиту

ПолеТипОбов’язковеОпис
querystringтак2–120 символів. Пробіли згортаються; керівні символи відхиляються.
countrystringтакДволітерний ISO-код ринку, наприклад TR. Має бути одним із кодів з GET /v1/countries.
languagestringніМова інтерфейсу Google (hl), наприклад tr, en або pt-BR. Типово мова країни.
devicestringніdesktop (типово) або mobile. Змінює профіль браузера, а отже й компонування видачі.
limitintegerніКількість органічних результатів, 1–10. Типово 10.

Відповідь

ПолеОпис
requestIdUUID цього запиту. Він є в історії запитів; вказуйте його, коли повідомляєте про проблему.
query, country, language, deviceНормалізовані значення, які було фактично використано.
fetchedAtЧасова мітка живого пошуку в ISO 8601.
latencyMsТривалість живого пошуку в мілісекундах.
price, currencyВартість цього запиту числом у USD.
organic[]Органічні результати в порядку ранжування: position, title, url, domain і snippet. snippet дорівнює null, коли Google не показує опис.
200 OK
{
  "requestId": "0199860b-2f4e-7a1c-9b3d-5e6f70819a2b",
  "query": "best coffee shops",
  "country": "TR",
  "language": "en",
  "device": "desktop",
  "fetchedAt": "2026-09-28T14:00:00.000Z",
  "latencyMs": 18342,
  "price": 0.1,
  "currency": "USD",
  "organic": [
    {
      "position": 1,
      "title": "The 12 best coffee shops in town",
      "url": "https://example.com/guides/best-coffee-shops",
      "domain": "example.com",
      "snippet": "A curated list of specialty coffee shops, updated every month."
    },
    {
      "position": 2,
      "title": "Coffee shops near me",
      "url": "https://maps.example.org/coffee",
      "domain": "maps.example.org",
      "snippet": null
    }
  ]
}
Результати збираються з кількох сторінок видачі, доки не буде досягнуто limit, без власних навігаційних елементів Google і без дублікатів.
04

Країни

GET https://api.serper.live/v1/countries

Публічний, токен не потрібен. Повертає ринки, відкриті просто зараз, типову мову Google для кожного і підтримувані пристрої.

curl
curl https://api.serper.live/v1/countries
200 OK
{
  "countries": [
    {
      "code": "TR",
      "defaultLanguage": "tr",
      "devices": [
        "desktop",
        "mobile"
      ]
    }
  ]
}

Зараз відкрито: Türkiye. Нові ринки з’являються тут і на сторінці цін у міру запуску. Запит для закритого ринку повертає 422 country_unavailable разом зі списком доступних кодів.

05

Тарифікація

На вашому акаунті є передплачений баланс у USD. Кожен запит резервує поточну ціну свого ринку до початку пошуку.

  • Успішний пошук: зарезервована сума списується.
  • Невдалий пошук, тобто будь-яка відповідь 5xx: резерв знімається автоматично. Ви ніколи не платите за результат, якого не отримали.
  • Ціни можуть змінюватися з часом, але ціна, зарезервована для запиту, що вже виконується, не змінюється ніколи.
  • Недостатньо коштів: 402 insufficient_balance. Поповніть баланс на сторінці Баланс; кошти доступні за кілька хвилин після підтвердження депозиту.

Кожен запит, його статус і вартість перелічені в історії запитів; кожна зміна балансу є в журналі на сторінці балансу.

06

Помилки

Помилки повертаються як JSON із машинозчитуваним кодом error, зрозумілим людині message і, якщо запит уже створено, його requestId:

JSON
{
  "error": "insufficient_balance",
  "message": "The balance does not cover one request",
  "requestId": "0199860b-2f4e-7a1c-9b3d-5e6f70819a2b"
}
HTTPКодЗначенняПовторювати?
400invalid_jsonТіло не є коректним JSON.Виправте запит
401unauthorized
invalid_token
Див. «Автентифікація».Виправте токен
402insufficient_balanceБаланс не покриває один запит.Після поповнення
409idempotency_conflict
idempotency_in_progress
idempotency_replay_unavailable
Див. «Безпечні повторні запити».Залежить від коду
413payload_too_largeТіло перевищує 16 КБ.Виправте запит
422invalid_request
country_unavailable
Поле не пройшло валідацію (яке саме, вказано в повідомленні) або ринок не відкрито.Виправте запит
502proxy_unavailable
captcha_failed
search_failed
Живий пошук не вдався на нашому боці. Не тарифікується.Так, після короткої паузи
503busy
billing_unavailable
configuration_error
Сервіс завантажений або тимчасово недоступний. Не тарифікується.Так, зі зростанням інтервалу
504search_timeoutПошук не завершився за 90 секунд. Не тарифікується.Так
Жодна відповідь 5xx не тарифікується. Повторюйте 502, 503 і 504 з експоненційною затримкою, наприклад через 5, 15 і 45 секунд, а не в щільному циклі.
07

Безпечні повторні запити

Необов’язково. Потрібно лише тоді, коли ваш клієнт може повторити запит, який обірвався.

Живий пошук триває до 90 секунд. Якщо за цей час з’єднання розірветься, ви не знатимете, чи пошук завершився і чи його тарифіковано. Заголовок Idempotency-Key дає змогу повторити запит, не заплативши двічі:

  • Той самий ключ і те саме тіло: якщо перший пошук завершився, ви знову отримаєте ту саму відповідь із заголовком Idempotent-Replayed: true і без другого списання. Якщо він ще виконується, повторний запит дочекається його.
  • Той самий ключ і інше тіло: 409 idempotency_conflict.
  • Результати зберігаються 15 хвилин. Після цього повтор зі старим ключем повертає 409 idempotency_replay_unavailable; надішліть новий запит із новим ключем.
  • Без заголовка кожен запит новий і тарифікується окремо.
curl
curl -X POST https://api.serper.live/v1/search \
  -H "Authorization: Bearer sl_live_YOUR_TOKEN" \
  -H "Idempotency-Key: 0199860b-2f4e-7a1c-9b3d-5e6f70819a2b" \
  -H "Content-Type: application/json" \
  -d '{"query":"best coffee shops","country":"TR","limit":10}'

Ключ — будь-який рядок із 8–128 символів набору A-Za-z0-9._:-. Найпростіший вибір — новий UUID на кожен логічний запит; він має лишатися однаковим для всіх повторів цього запиту.

08

Обмеження і корисне

  • query 2–120 символів, limit 1–10, тіло запиту до 16 КБ.
  • Пошуки виконуються паралельно в межах потужності сервісу; понад неї ви отримаєте 503 busy. Повторюйте зі зростанням інтервалу.
  • Живий пошук триває 10–60 секунд. Установіть тайм-аут клієнта щонайменше 100 секунд.
  • Кожна відповідь має заголовок X-Request-Id. Зберігайте його в логах поруч із requestId з тіла.
  • Нічого не кешується: два однакові запити — це два живі пошуки і два списання. Якщо повторно використовуєте результати, кешуйте на своєму боці.