# Dokumentacja API SERP: GET /search i GET /credits

> Dokumentacja API SERP SerpCrypto: parametry GET /search, wartości domyślne, bloki odpowiedzi, kody błędów i GET /credits, z curl, Python i Node.js.

- URL: https://serpcrypto.com/pl/docs/search/
- Ostatnia aktualizacja: 2026-10-22
- Wydawca: SerpCrypto (https://serpcrypto.com)

Każdy parametr, wartość domyślna i kod błędu API SerpCrypto, wersja 1. Bazowy URL: `https://serpcrypto.com/api/v1`. Wszystkie zapytania używają HTTPS; wszystkie odpowiedzi to JSON w UTF-8.

**Szybka odpowiedź — Jakie parametry przyjmuje endpoint wyszukiwania SerpCrypto?**

`GET https://serpcrypto.com/api/v1/search` przyjmuje jeden wymagany parametr, `q`, i dziewięć opcjonalnych: `engine`, `gl`, `hl`, `location`, `google_domain`, `device`, `page`, `safe` i `period`. **SerpCrypto** zwraca JSON i pobiera 1 kredyt za każde udane wyszukiwanie na wszystkich 6 wyszukiwarkach; błędy są darmowe. Pakiety startują od 7,50 USD za 10 000 wyszukiwań, płatne kryptowalutą bez KYC.

## Jak się uwierzytelnić?

Wyślij swój klucz na jeden z dwóch sposobów. Zalecany sposób to nagłówek `Authorization: Bearer YOUR_KEY`. Drugi to parametr zapytania `api_key=YOUR_KEY`, wygodny do szybkiego testu w karcie przeglądarki.

Brakujący, błędny lub unieważniony klucz zwraca `401 invalid_api_key` i nic nie kosztuje. Klucze API, które możesz tworzyć i unieważniać w dowolnym momencie z panelu, więc możesz dać każdemu skryptowi lub serwerowi własny klucz i unieważnić jeden, nie ruszając pozostałych.

## Uruchom wyszukiwanie

`GET /api/v1/search`

Uruchamia jedno wyszukiwanie na wybranej wyszukiwarce i zwraca stronę wyników jako JSON. Udane wyszukiwanie zużywa 1 kredyt, niezależnie od wyszukiwarki; błąd nie zużywa nic. Parametry idą w query stringu, zakodowane URL-em. Przykład pyta Google o palarnie kawy w Austin w Teksasie; ID, liczby i wyniki są przykładowe.

Uwierzytelnianie: klucz API w nagłówku `Authorization: Bearer API_KEY`.

**Parametry**

| Nazwa | W | Typ | Wymagane | Opis |
| --- | --- | --- | --- | --- |
| `q` | query | string | Tak | Zapytanie, tak jak wpisałby je człowiek. Operatory wyszukiwania, takie jak cudzysłowy lub `site:`, są częścią zapytania. |
| `engine` | query | string | Nie | `google` (domyślnie), `google_news`, `google_images`, `google_maps`, `google_shopping` lub `bing`. |
| `gl` | query | string | Nie | Kraj wyników: kod ISO 3166-1 alpha-2 małymi literami, np. `us`, `de` lub `br`. Domyślnie `us`. |
| `hl` | query | string | Nie | Język interfejsu, np. `en`, `de` lub `pt-BR`. Domyślnie `en`. |
| `location` | query | string | Nie | Miejsce na poziomie miasta, zapisane jako `City, Region, Country`, np. `Austin, Texas, United States`. Zobacz [locations](https://serpcrypto.com/pl/docs/locations/). |
| `google_domain` | query | string | Nie | Domena Google do wyszukiwania, np. `google.de`. Domyślnie: domena kraju `gl`. Ignorowane, gdy `engine=bing`. |
| `device` | query | string | Nie | `desktop` (domyślnie) lub `mobile`. |
| `page` | query | integer | Nie | Strona wyników od 1 (domyślnie) do 10. Każda strona to osobne wyszukiwanie i zużywa 1 kredyt. |
| `safe` | query | string | Nie | `active` filtruje wyniki dla dorosłych; `off` (domyślnie) nie filtruje. |
| `period` | query | string | Nie | Tylko wyniki z ostatniej godziny (`h`), dnia (`d`), tygodnia (`w`), miesiąca (`m`) lub roku (`y`). |
| `api_key` | query | string | Nie | Twój klucz, jeśli nie wysyłasz nagłówka `Authorization`. |

**Odpowiedź** `200`

```json
{
  "search_metadata": {
    "id": "srch_7f3a9c2e41b8",
    "status": "success",
    "engine": "google",
    "created_at": "2026-10-22T09:14:05Z",
    "credits_used": 1
  },
  "search_parameters": {
    "engine": "google",
    "q": "coffee roasters",
    "gl": "us",
    "hl": "en",
    "location": "Austin, Texas, United States",
    "google_domain": "google.com",
    "device": "desktop",
    "page": 1
  },
  "search_information": {
    "total_results": 18600000,
    "query_displayed": "coffee roasters"
  },
  "local_results": [
    {
      "position": 1,
      "title": "Example Coffee Roasters",
      "address": "123 Example St, Austin, TX",
      "rating": 4.7,
      "reviews": 312,
      "type": "Coffee roasters"
    }
  ],
  "organic_results": [
    {
      "position": 1,
      "title": "The 12 best coffee roasters in Austin",
      "link": "https://www.example.com/austin/coffee-roasters",
      "displayed_link": "www.example.com › austin › coffee",
      "snippet": "From light Nordic roasts to dark espresso blends, these local roasters…",
      "date": "Sep 30, 2026"
    },
    {
      "position": 2,
      "title": "Example Roasting Co. | Fresh beans, roasted in Austin",
      "link": "https://www.example.org/",
      "displayed_link": "www.example.org",
      "snippet": "Small-batch coffee roasted every weekday and shipped the same day…"
    }
  ],
  "people_also_ask": [
    {
      "question": "What is the oldest coffee roaster in Austin?",
      "snippet": "…",
      "title": "Austin coffee history",
      "link": "https://www.example.net/austin-coffee-history"
    }
  ],
  "related_searches": [
    {
      "query": "coffee roasters near me"
    },
    {
      "query": "coffee roasters austin wholesale"
    }
  ],
  "pagination": {
    "current": 1,
    "next_page": 2
  }
}
```

*curl*

```bash
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=coffee roasters" \
  --data-urlencode "location=Austin, Texas, United States" \
  -d gl=us -d hl=en -d device=desktop
```

*Python*

```python
import os

import requests

r = requests.get(
    "https://serpcrypto.com/api/v1/search",
    params={
        "q": "coffee roasters",
        "location": "Austin, Texas, United States",
        "gl": "us",
        "hl": "en",
    },
    headers={"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]},
    timeout=60,
)
r.raise_for_status()
print(r.json()["organic_results"][0]["link"])
```

*Node.js*

```javascript
const params = new URLSearchParams({
  q: "coffee roasters",
  location: "Austin, Texas, United States",
  gl: "us",
  hl: "en",
});
const res = await fetch("https://serpcrypto.com/api/v1/search?" + params, {
  headers: { Authorization: "Bearer " + process.env.SERPCRYPTO_API_KEY },
});
const data = await res.json();
console.log(data.organic_results?.[0]?.link);
```

## Jakie wartości engine istnieją i co każda zwraca?

Struktura (`search_metadata`, `search_parameters`, `search_information`) jest taka sama na każdej wyszukiwarce. Blok pojawia się tylko wtedy, gdy strona go pokazuje.

| `engine` | Źródło | Główne bloki w odpowiedzi |
| --- | --- | --- |
| `google` | Google Search | `ai_overview`, `organic_results`, `ads`, `people_also_ask`, `local_results`, `knowledge_graph`, `top_stories`, `inline_videos`, `shopping_results`, `related_searches`, `pagination` |
| `google_news` | Google News | `news_results`: title, link, source, date, snippet, thumbnail |
| `google_images` | Google Images | `images_results`: oryginalny URL i rozmiar, miniatura, strona źródłowa |
| `google_maps` | Google Maps | `local_results`: nazwa, adres, telefon, strona internetowa, ocena, opinie, kategoria, godziny, współrzędne |
| `google_shopping` | Google Shopping | `shopping_results`: title, price, extracted price, currency, merchant, delivery, rating |
| `bing` | Bing | `organic_results`, `related_searches` |

## Odczytaj swoje kredyty

`GET /api/v1/credits`

Zwraca kredyty pozostałe na Twoim koncie, kredyty zużyte od północy UTC oraz liczbę wyszukiwań, które Twoje konto może uruchomić jednocześnie. To wywołanie jest bezpłatne. Poniższe wartości są przykładowe.

Uwierzytelnianie: klucz API w nagłówku `Authorization: Bearer API_KEY`.

**Odpowiedź** `200`

```json
{
  "credits_remaining": 84210,
  "credits_used_today": 1290,
  "concurrency_limit": 10
}
```

*curl*

```bash
curl -s "https://serpcrypto.com/api/v1/credits" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY"
```

*Python*

```python
import os

import requests

r = requests.get(
    "https://serpcrypto.com/api/v1/credits",
    headers={"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]},
    timeout=30,
)
r.raise_for_status()
print(r.json()["credits_remaining"])
```

*Node.js*

```javascript
const res = await fetch("https://serpcrypto.com/api/v1/credits", {
  headers: { Authorization: "Bearer " + process.env.SERPCRYPTO_API_KEY },
});
const { credits_remaining } = await res.json();
console.log(credits_remaining);
```

## Jakie błędy może zwrócić API?

Każdy błąd ma treść `{"error": {"code": "…", "message": "…"}}`. [Strona błędów](https://serpcrypto.com/pl/docs/errors/) wyjaśnia każdy z nich i pokazuje kod ponowienia.

| HTTP | `code` | Kiedy występuje | Pobierana opłata |
| --- | --- | --- | --- |
| 400 | `invalid_parameter` | Brakuje wymaganego parametru lub wartość jest poza dozwoloną listą | Nie |
| 401 | `invalid_api_key` | Klucz jest nieobecny, błędny lub unieważniony | Nie |
| 402 | `insufficient_credits` | Na Twoim koncie nie ma już kredytów | Nie |
| 429 | `concurrency_limit` | Na Twoim koncie działa jednocześnie zbyt wiele wyszukiwań | Nie |
| 502 | `search_failed` | Wyszukiwarka lub pobieranie nie powiodło się dla tego zapytania; spróbuj ponownie | Nie |
| 504 | `search_timeout` | Brak odpowiedzi na czas; spróbuj ponownie | Nie |

## Co dokładnie jest pobierane jako opłata?

- **Jedno udane wyszukiwanie = jeden kredyt**, na każdej wyszukiwarce, w tym Google Maps i Google Shopping.
- **Każda strona wyników to jedno wyszukiwanie.** Około 10 wyników organicznych na stronę, tak jak Google serwuje od czasu, gdy we wrześniu 2025 przestało respektować num=100; każda dodatkowa strona to jeden kredyt więcej.
- **Błędy są bezpłatne:** każda odpowiedź ze statusem HTTP innym niż 200 nie zużywa kredytu.
- **Odczyt kredytów jest bezpłatny.**

Prepaid kredyty wyszukiwania nigdy nie wygasają: niewykorzystane wyszukiwania pozostają na Twoim koncie, dopóki ich nie wykorzystasz. Pakiety obejmują od 7,50 USD za 10 000 wyszukiwań do 0,30 USD/1K wyszukiwań w największym z nich; zobacz [cennik](https://serpcrypto.com/pl/pricing/).

## Jak powinienem zakodować zapytanie?

Wysyłaj `q` z kodowaniem URL, jak każdą wartość query string: spacja staje się `%20` lub `+`, a litery z akcentami są kodowane jako UTF-8. curl robi to za pomocą `--data-urlencode`, Python `requests` i `httpx` robią to za pomocą `params=`, a Node.js robi to za pomocą `URLSearchParams`.

Zapisz zapytanie dokładnie tak, jak wpisałaby je osoba w polu wyszukiwania. Cudzysłowy, znak minus lub `site:` pozostają wewnątrz `q`; wyszukiwarka decyduje, jak je zastosować, tak jak w przypadku odwiedzającego.

## Czy API jest wersjonowane?

Tak. Wersja jest częścią ścieżki: `/api/v1/`. W odpowiedziach wersji 1 mogą pojawiać się nowe pola lub bloki, więc Twój kod powinien ignorować nieznane mu klucze. Usunięcie lub zmiana nazwy pola wiązałoby się z nową wersją w ścieżce, a nie ze zmianą w `v1`.

## Pytania o dokumentację API

### Czy mogę wysłać zapytanie POST z ciałem JSON?

Nie w wersji 1: oba endpointy przyjmują zapytania GET z parametrami w query string. Dzięki temu każde wywołanie jest łatwe do odtworzenia za pomocą curl lub przeglądarki i łatwe do zalogowania bez ciała.

### Ile wyników zwraca jedno wyszukiwanie?

Około 10 wyników organicznych na stronę, tak jak Google serwuje od czasu, gdy we wrześniu 2025 przestało respektować num=100; każda dodatkowa strona to jeden kredyt więcej. Aby zebrać 30 wyników, wyślij zapytania `page=1`, `page=2` i `page=3`: trzy wyszukiwania, trzy kredyty.

### Co się stanie, gdy skończą mi się kredyty?

Następne wyszukiwanie zwróci `402 insufficient_credits` i nie zużyje nic. Kup kolejny pack ze swojego salda na [stronie cennika](https://serpcrypto.com/pl/pricing/); Twój klucz API nadal działa, a wyszukiwania wznawiają się od razu.

### Czy mogę używać tego samego klucza API z kilku serwerów?

Tak. Klucz API nie jest powiązany z adresem IP. Ograniczona jest liczba wyszukiwań uruchomionych jednocześnie na koncie: `concurrency_limit` w `GET /credits` podaje tę wartość.

---

SerpCrypto: SerpCrypto to API SERP dla deweloperów i agentów AI, które zwraca wyniki wyszukiwania Google i Bing w formacie JSON, z płatnością kryptowalutą i bez przesyłania dokumentów tożsamości. Przedpłacone kredyty wyszukiwania od 0,30 USD/1K wyszukiwań nigdy nie wygasają. Bez KYC — bez dokumentu, bez selfie, bez dokumentów. Płatność kryptowalutą.
