Dokumentacja API.

Bazowy URL: https://api.snajper.org

Autoryzacja

Każde zapytanie musi zawierać nagłówek x-api-key <API_KEY> . Klucz API znajdziesz w panelu użytkownika po zalogowaniu. Każde zapytanie zużywa kredyty — ich liczba zależy od endpointu.

x-api-key: xxxxxxxxxxxxxxxxxxxx

Format odpowiedzi błędów

Prawie każdy błąd ma dokładnie ten kształt — status HTTP oraz JSON z dwoma polami:

{
  "error": "Brak wystarczających kredytów",
  "err_code": "INSUFFICIENT_CREDITS"
}

Jeden wyjątek: błędy walidacji ciała zapytania (kod VALIDATION_ERROR) mają dodatkowe pole fields — mapę nazwa_pola → reguła, która zawiodła:

{
  "error": "validation failed",
  "err_code": "VALIDATION_ERROR",
  "fields": {
    "URL": "required"
  }
}

Wiele różnych błędów wewnętrznych (błąd sieci do Vinted/OLX, zła odpowiedź z ich API, błąd zapisu do bazy) mapuje się do tego samego ogólnego 500 INTERNAL_ERROR — API nie rozróżnia ich publicznie w treści odpowiedzi. Podobnie, jeśli podany URL nie przejdzie walidacji domeny/ścieżki (np. zły host albo brak wymaganego parametru wyszukiwania), dostaniesz ogólne 400 INVALID_REQUEST bez dokładnego powodu.

POST /api/v2/vinted/catalog
2 kredyty

Pobiera listę przedmiotów z katalogu Vinted.

Jak używać

Przekaż w body pełny URL strony wyszukiwania Vinted (np. skopiowany z przeglądarki). API automatycznie przetłumaczy go na zapytanie do wewnętrznego API Vinted, posortuje wyniki od najnowszych i zwróci do 20 przedmiotów na stronę. Idealny punkt startowy do budowania monitorów cenowych lub scraperów katalogu.

Czas odpowiedzi 0.6s – 1s
Transfer 7 kB – 12 kB
Parametry
x-api-key nagłówek string <API_KEY> *
url body string Pełny URL katalogu Vinted wraz z filtrami (np. https://www.vinted.pl/catalog?search_text=iphone+13). *
Przykładowe zapytanie
curl -X POST "https://api.snajper.org/api/v2/vinted/catalog" \
  -H "x-api-key: <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.vinted.pl/catalog?search_text=iphone+13"}'
Przykładowa odpowiedź
{
  "items": [
    {
      "id": 8805548600,
      "title": "Iphone 13 pro",
      "brand_title": "Apple",
      "price": "944.88 PLN",
      "status": "Bardzo dobry",
      "url": "https://www.vinted.pl/items/8805548600-iphone-13-pro",
      "is_promoted": false,
      "favourite_count": 0,
      "photo": "https://images1.vinted.net/...",
      "seller_id": 3153068455,
      "seller_name": "krolinjo",
      "timestamp": 1777745143,
      "created_at": "2026-05-02 20:05:43"
    }
  ]
}
Kody błędów
400 INVALID_REQUEST Ciało zapytania jest niepoprawnym JSON-em, albo url nie przeszedł walidacji domeny (musi zawierać vinted.pl i parametr search_text) — dokładny powód nie jest zwracany w treści odpowiedzi.
400 VALIDATION_ERROR Pole url jest puste lub nie jest poprawnym URL-em. Odpowiedź ma inny kształt niż pozostałe błędy — patrz sekcja "Format odpowiedzi błędów" wyżej.
401 UNAUTHENTICATED Brak nagłówka x-api-key albo klucz nie istnieje w bazie.
403 INSUFFICIENT_CREDITS Za mało kredytów na koncie (ten endpoint kosztuje 2 kredyty).
500 INTERNAL_ERROR Cokolwiek pójdzie nie tak po stronie serwera — błąd sieci do Vinted, nieprawidłowa odpowiedź JSON z ich API, błąd odjęcia kredytów. Zawsze ten sam ogólny kod, bez rozróżnienia przyczyny.
GET /api/v2/vinted/item/:id/details
1 kredyt

Pobiera szczegółowe informacje o konkretnym przedmiocie.

Jak używać

Podaj ID przedmiotu jako parametr ścieżki. ID możesz znaleźć w URL strony przedmiotu na Vinted (np. vinted.pl/items/8803132441-...). Endpoint zwraca pełne dane: zdjęcia, atrybuty, cenę z prowizją, informacje o sprzedawcy oraz status przedmiotu.

Czas odpowiedzi 0.4s – 0.65s
Transfer 2 kB – 4 kB
Parametry
id ścieżka string ID przedmiotu z Vinted (widoczne w URL strony przedmiotu). *
x-api-key nagłówek string <API_KEY> *
Przykładowe zapytanie
curl -X GET "https://api.snajper.org/api/v2/vinted/item/8803132441/details" \
  -H "x-api-key: <API_KEY>"
Przykładowa odpowiedź
{
  "id": 8803132441,
  "title": "iPhone 13 Pro 128GB Sierra Blue",
  "description": "Sprzedam iPhone 13 Pro w bardzo dobrym stanie, bez rys, zawsze w etui...",
  "status": "Bardzo dobry",
  "brand": "Apple",
  "url": "https://www.vinted.pl/items/8803132441-iphone-13-pro",
  "is_hidden": false,
  "is_reserved": false,
  "is_closed": false,
  "is_draft": false,
  "is_promoted": false,
  "can_buy": true,
  "is_favourite": false,
  "instant_buy": true,
  "favourite_count": 12,
  "price": "577.52 PLN",
  "service_fee": "31.78 PLN",
  "total_price": "609.30 PLN",
  "seller_id": 3153068455,
  "seller_name": "krolinjo",
  "seller_rating": 4.93,
  "seller_rating_count": 214,
  "photos": [
    {
      "url": "https://images1.vinted.net/t/03_00abc/f800/photo.jpg",
      "full_size_url": "https://images1.vinted.net/t/03_00abc/full/photo.jpg",
      "is_main": true
    },
    {
      "url": "https://images1.vinted.net/t/03_00def/f800/photo.jpg",
      "full_size_url": "https://images1.vinted.net/t/03_00def/full/photo.jpg",
      "is_main": false
    }
  ],
  "attributes": [
    { "code": "color", "title": "Kolor", "value": "Niebieski" },
    { "code": "condition", "title": "Stan", "value": "Bardzo dobry" }
  ]
}
Kody błędów
400 INVALID_REQUEST Parametr id jest pusty (w praktyce trudne do wywołania przez routing, ale kod to obsługuje).
401 UNAUTHENTICATED Brak nagłówka x-api-key albo klucz nie istnieje w bazie.
403 INSUFFICIENT_CREDITS Za mało kredytów na koncie (ten endpoint kosztuje 1 kredyt).
500 INTERNAL_ERROR Przedmiot nie istnieje / został usunięty, błąd sieci do Vinted, lub błąd odjęcia kredytów. Zwracany jest zawsze ten sam ogólny kod 500 — Vinted nie rozróżnia u nas "nie znaleziono" od innych błędów.
GET /api/v2/vinted/user/:id/info
1 kredyt

Pobiera publiczny profil użytkownika Vinted.

Jak używać

Podaj ID użytkownika jako parametr ścieżki. ID sprzedawcy znajdziesz w odpowiedzi z endpointu /catalog lub /item/:id/details (pole seller_id). Uwaga: w przeciwieństwie do /catalog i /item/:id/details, ten endpoint NIE mapuje odpowiedzi do własnego, uproszczonego formatu — zwraca surowy obiekt user prosto z wewnętrznego API Vinted, 1:1, bez filtrowania pól. Oznacza to ok. 80 pól, w tym sporo takich, które będą null (np. birthday, real_name, email — Vinted zwraca je tylko dla właściciela konta), oraz że kształt odpowiedzi może się zmienić bez zapowiedzi, jeśli Vinted zmieni swoje własne API.

Czas odpowiedzi 0.3s – 0.55s
Transfer 4 kB – 7 kB
Parametry
id ścieżka string ID użytkownika Vinted (pole seller_id w odpowiedzi katalogu lub szczegółów przedmiotu). *
x-api-key nagłówek string <API_KEY> *
Przykładowe zapytanie
curl -X GET "https://api.snajper.org/api/v2/vinted/user/157416251/info" \
  -H "x-api-key: <API_KEY>"
Przykładowa odpowiedź
{
  "user": {
    "id": 157416251,
    "anon_id": "6f2a1c9e-...",
    "login": "geaninasava",
    "birthday": null,
    "country_id": 12,
    "city_id": 0,
    "updated_on": 1777745143,
    "real_name": null,
    "email": null,
    "country_code": "PL",
    "feedback_count": 42,
    "feedback_reputation": 0.98,
    "moderator": false,
    "business_account_id": null,
    "can_bundle": true,
    "business_account": null,
    "business": false,
    "photo": {
      "id": 55012345,
      "width": 1080,
      "height": 1080,
      "temp_uuid": null,
      "url": "https://images1.vinted.net/t/03_user/f800/photo.jpg",
      "dominant_color": "#c2b8a3",
      "dominant_color_opaque": "#c2b8a3",
      "thumbnails": [
        { "type": "thumb70", "url": "https://images1.vinted.net/.../thumb70.jpg", "width": 70, "height": 70, "original_size": null }
      ],
      "is_suspicious": false,
      "orientation": null,
      "high_resolution": { "id": "abc123", "timestamp": 1777745143, "orientation": null },
      "full_size_url": "https://images1.vinted.net/t/03_user/full/photo.jpg",
      "is_hidden": false,
      "extra": {}
    },
    "can_view_profile": true,
    "bundle_discount": {
      "id": 9012,
      "user_id": 157416251,
      "enabled": true,
      "minimal_item_count": 2,
      "fraction": "0.1",
      "discounts": [
        { "minimal_item_count": 2, "fraction": "0.1" },
        { "minimal_item_count": 4, "fraction": "0.2" }
      ]
    },
    "last_loged_on_ts": "2026-07-20T18:04:00Z",
    "last_loged_on": "przed chwilą",
    "item_count": 11,
    "total_items_count": 34,
    "followers_count": 87,
    "following_count": 20,
    "following_brands_count": 3,
    "account_status": 1,
    "positive_feedback_count": 41,
    "neutral_feedback_count": 1,
    "negative_feedback_count": 0,
    "is_on_holiday": false,
    "expose_location": true,
    "city": "Warszawa",
    "is_publish_photos_agreed": true,
    "third_party_tracking": true,
    "locale": "pl",
    "iso_locale_code": "pl-PL",
    "profile_url": "https://www.vinted.pl/member/157416251-geaninasava",
    "share_profile_url": "https://www.vinted.pl/member/157416251-geaninasava?utm_source=share",
    "is_online": false,
    "fundraiser": { "id": null, "active": false, "percentage": 0, "currency": "PLN", "feature_disabled": false },
    "localization": "pl_PL",
    "is_bpf_price_prominence_applied": true,
    "msg_template_count": 0,
    "is_account_banned": false,
    "account_ban_date": null,
    "action_restriction": null,
    "is_favourite": false,
    "is_hated": false,
    "hates_you": false,
    "contacts_permission": null,
    "contacts": null,
    "path": "/member/157416251-geaninasava",
    "is_catalog_moderator": false,
    "is_catalog_role_marketing_photos": false,
    "hide_feedback": false,
    "allow_direct_messaging": true,
    "verification": {
      "email": { "valid": true, "available": false },
      "facebook": { "valid": false, "verified_at": null, "available": true },
      "google": { "valid": true, "verified_at": "2023-04-11T09:12:00Z", "available": false }
    },
    "avg_response_time": null,
    "about": "Sprzedaję rzeczy w bardzo dobrym stanie, wysyłka w 24h.",
    "facebook_user_id": null,
    "given_item_count": 30,
    "taken_item_count": 4,
    "default_address": null,
    "country_title_local": "Polska",
    "country_iso_code": "PL",
    "country_title": "Poland",
    "currency": "PLN"
  },
  "code": 0
}
Kody błędów
400 INVALID_REQUEST Parametr id jest pusty (w praktyce trudne do wywołania przez routing, ale kod to obsługuje).
401 UNAUTHENTICATED Brak nagłówka x-api-key albo klucz nie istnieje w bazie.
403 INSUFFICIENT_CREDITS Za mało kredytów na koncie (ten endpoint kosztuje 1 kredyt).
500 INTERNAL_ERROR Użytkownik nie istnieje, błąd sieci do Vinted, lub błąd odjęcia kredytów — zawsze ten sam ogólny kod 500.

Masz pytania? skontaktuj się z nami.