Skip to main content
Seeki.eu

Agency Import API

Nahrávejte inzeráty do Seeki přes API.

Hromadně importujte realitní inzeráty ze svého CRM nebo systému pro správu nemovitostí. Jeden endpoint, stav jednotlivých položek, automatické TTL.

Získejte API klíč

Přístup k Agency Import API vyžaduje aktivní předplatné agentury Seeki. Ke každému předplatnému je přidělen jeden API klíč v rámci vašeho účtu agentury.

Přihlaste se k odběru na stránce Pro agenty a začněte.

Rozhraní pro správu klíčů (zobrazení, otáčení, zneplatnění) připravujeme do některé z budoucích aktualizací dashboardu. Zatím vám API klíč zašleme e-mailem při aktivaci předplatného. Pokud potřebujete nový klíč, kontaktujte info@seeki.eu.

Autentizace

Každý požadavek musí obsahovat váš API klíč jako Bearer token v hlavičce Authorization.

HTTP header
Authorization: Bearer seeki_live_your_key_here

Klíče začínající seeki_live_ jsou produkční klíče. Staging klíče začínají seeki_test_. Mezi prostředími nejsou zaměnitelné.

Váš první import

Odešlete POST požadavek na /v1/listings s tělem JSON obsahujícím pole listings. Každý prvek představuje jednu nemovitost.

curl
curl -X POST https://ingest.seeki.eu/v1/listings \
  -H "Authorization: Bearer seeki_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "listings": [
      {
        "external_id": "crm-listing-00123",
        "listing_type": "SELL",
        "real_estate_type": "APARTMENT",
        "price": 320000,
        "currency": "EUR",
        "address": {
          "street": "Wenceslas Square 1",
          "city": "Prague",
          "country_code": "CZ",
          "postal_code": "11000"
        },
        "name": "Sunny 2-bedroom apartment, Wenceslas Square",
        "floorage": 65
      }
    ]
  }'

Úspěšná dávka vrátí HTTP 200 s poli accepted a rejected:

200 OK
{
  "accepted": [
    { "external_id": "crm-listing-00123", "import_item_id": "uuid-…" }
  ],
  "rejected": []
}

Struktura požadavku

Tělo požadavku má na nejvyšší úrovni tvar { listings: [...] }. Povinná pole pro každý inzerát:

PolePovinné?Poznámky
external_idPovinnéYour CRM’s unique ID. Used for idempotent re-imports and deduplication.
listing_typePovinnéSELL nebo RENT.
real_estate_typePovinnéAPARTMENT, HOUSE, LAND, COMMERCIAL, nebo OTHER.
pricePovinnéČíselná hodnota. Měnu zadejte v poli currency jako kód podle ISO 4217 (výchozí je EUR).
address OR coordinatesPovinnéZadejte buď objekt address (street, city, country_code), nebo souřadnice ({ lat, lng }). Alespoň jedno musí být uvedeno.
currencyVolitelnéKód podle ISO 4217, např. EUR, CZK, PLN. Výchozí je EUR.
name, descriptionVolitelnéNázev inzerátu a volný textový popis.
floorage, floor, roomsVolitelnéVýměra nemovitosti v m², číslo podlaží a počet pokojů.
imagesVolitelnéPole veřejných URL adres obrázků. Importovací worker je stáhne a uloží do mezipaměti.
contactVolitelnéJméno makléře, e-mail a telefon pro směrování poptávek.

Kompletní schéma se všemi volitelnými poli najdete v interaktivní API reference.

Struktura odpovědi a chyby

Endpoint /v1/listings vždy vrací HTTP 200 OK, pokud je samotný požadavek správně sestavený (validní JSON, správná autentizační hlavička, dodržené velikostní limity). Selhání jednotlivých inzerátů jsou hlášena uvnitř pole rejected — nikoli jako HTTP chybové kódy.

Každá zamítnutá položka obsahuje external_id, error_code a srozumitelnou zprávu. Chyby na úrovni dávky (špatná autentizace, příliš velký payload) vrací HTTP status jiný než 200 s polem error_code na nejvyšší úrovni.

Kódy chyb

Kódy na úrovni dávky vrací HTTP chyby. Kódy pro jednotlivé položky se objevují v poli rejected v rámci odpovědi se statusem 200.

error_codeHTTP / rozsahVýznam
MISSING_AUTHORIZATION401Nebyla odeslána hlavička Authorization.
INVALID_KEY401Klíč nebyl nalezen, byl zneplatněn nebo mu vypršela platnost.
SUBSCRIPTION_INACTIVE403The agency’s subscription is not active or past_due.
PAYLOAD_TOO_LARGE413Tělo požadavku překračuje limit 25 MB.
TOO_MANY_ITEMS413Pole listings obsahuje více než 5 000 položek.
VALIDATION_FAILEDper-itemJedno nebo více povinných polí chybí nebo má neplatnou hodnotu. Podrobnosti najdete v poli message.
GEOCODE_ADDRESS_NOT_FOUNDper-itemZadanou adresu se nepodařilo převést na souřadnice. Zkontrolujte street, city a country_code.
GEOCODE_COORDINATES_INVALIDper-itemZadané souřadnice lat/lng jsou mimo platný rozsah (lat ±90, lng ±180).
INFRA_QUEUE_REJECTEDper-itemFronta workflow odmítla položku, obvykle kvůli dočasnému přetížení. Po krátké prodlevě to zkuste znovu.
INFRA_LOSTper-itemWorkflow bylo přijato, ale jeho výsledek nebyl nikdy zaznamenán. Použijte endpoint pro opakování.
INTERNAL_ERRORper-itemDošlo k neočekávané chybě serveru. Opakování může uspět; pokud problém přetrvává, kontaktujte podporu.

Idempotence / opakované importy

Re-posting a listing with the same external_id updates the existing record — it does not create a duplicate. The listing’s TTL is refreshed on every successful import.

Interně se každá importovaná položka mapuje na Cloudflare Workflow s ID:

Workflow ID pattern
agency-{agency_id}-{external_id}

Expirace inzerátu

Každý importovaný inzerát má TTL 60 dní od posledního úspěšného importu. Po vypršení TTL je inzerát automaticky stažen z publikace denním cron jobem.

Pokud chcete inzerát nechat aktivní trvale, importujte jej znovu (i se shodnými daty) před uplynutím 60denního okna. Doporučeným vzorem je noční opětovná synchronizace vašich aktivních inzerátů.

Stav a opakování

Pomocí GET /v1/import-items/{import_item_id}/status můžete zjišťovat stav zpracování jednotlivé položky. Hodnota import_item_id je vrácena v poli accepted původní POST odpovědi.

GET /import-items/{id}/status
curl https://ingest.seeki.eu/v1/import-items/{import_item_id}/status \
  -H "Authorization: Bearer seeki_live_your_key_here"
Response
{
  "import_item_id": "uuid-…",
  "external_id": "crm-listing-00123",
  "status": "completed",
  "listing_id": "uuid-listing"
}

Pokud položka skončí ve stavu INFRA_LOST nebo INFRA_QUEUE_REJECTED, znovu ji zařaďte do fronty bez nutnosti odesílat celou dávku:

POST /import-items/{id}/retry
curl -X POST https://ingest.seeki.eu/v1/import-items/{import_item_id}/retry \
  -H "Authorization: Bearer seeki_live_your_key_here"

Limity

  • Velikost těla: maximálně 25 MB na požadavek.
  • Položek na požadavek: maximálně 5 000. Rozdělte větší dávky.
  • Žádný limit QPS aktuálně nevynucujeme. Velmi velké dávky mohou být automaticky omezeny; rozsáhlé synchronizace rozložte do více požadavků.

Přechod do produkce

Existují dvě oddělená prostředí. API klíče jsou vázány na konkrétní prostředí — produkční klíč nebude fungovat na stagingu a naopak.

ProstředíZákladní URL
Staginghttps://ingest.seeki.store/v1
Produkcehttps://ingest.seeki.eu/v1

Všechny endpointy (/listings, /import-items/{id}/status, /import-items/{id}/retry) jsou v obou prostředích identické.

Připraveni na integraci?

Otevřete interaktivní referenci, prozkoumejte všechna pole, vyzkoušejte si požadavky přímo v prohlížeči a stáhněte si JSON Schema pro svůj validátor.

Používáme cookies ke zlepšení vašeho zážitku na našem webu. Zásady ochrany osobních údajů