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.
Autentizace
Každý požadavek musí obsahovat váš API klíč jako Bearer token v hlavičce Authorization.
Authorization: Bearer seeki_live_your_key_hereKlíč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 -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:
{
"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:
| Pole | Povinné? | Poznámky |
|---|---|---|
| external_id | Povinné | Your CRM’s unique ID. Used for idempotent re-imports and deduplication. |
| listing_type | Povinné | SELL nebo RENT. |
| real_estate_type | Povinné | APARTMENT, HOUSE, LAND, COMMERCIAL, nebo OTHER. |
| price | Povinné | Číselná hodnota. Měnu zadejte v poli currency jako kód podle ISO 4217 (výchozí je EUR). |
| address OR coordinates | Povinné | Zadejte buď objekt address (street, city, country_code), nebo souřadnice ({ lat, lng }). Alespoň jedno musí být uvedeno. |
| currency | Volitelné | Kód podle ISO 4217, např. EUR, CZK, PLN. Výchozí je EUR. |
| name, description | Volitelné | Název inzerátu a volný textový popis. |
| floorage, floor, rooms | Volitelné | Výměra nemovitosti v m², číslo podlaží a počet pokojů. |
| images | Volitelné | Pole veřejných URL adres obrázků. Importovací worker je stáhne a uloží do mezipaměti. |
| contact | Volitelné | 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_code | HTTP / rozsah | Význam |
|---|---|---|
| MISSING_AUTHORIZATION | 401 | Nebyla odeslána hlavička Authorization. |
| INVALID_KEY | 401 | Klíč nebyl nalezen, byl zneplatněn nebo mu vypršela platnost. |
| SUBSCRIPTION_INACTIVE | 403 | The agency’s subscription is not active or past_due. |
| PAYLOAD_TOO_LARGE | 413 | Tělo požadavku překračuje limit 25 MB. |
| TOO_MANY_ITEMS | 413 | Pole listings obsahuje více než 5 000 položek. |
| VALIDATION_FAILED | per-item | Jedno nebo více povinných polí chybí nebo má neplatnou hodnotu. Podrobnosti najdete v poli message. |
| GEOCODE_ADDRESS_NOT_FOUND | per-item | Zadanou adresu se nepodařilo převést na souřadnice. Zkontrolujte street, city a country_code. |
| GEOCODE_COORDINATES_INVALID | per-item | Zadané souřadnice lat/lng jsou mimo platný rozsah (lat ±90, lng ±180). |
| INFRA_QUEUE_REJECTED | per-item | Fronta workflow odmítla položku, obvykle kvůli dočasnému přetížení. Po krátké prodlevě to zkuste znovu. |
| INFRA_LOST | per-item | Workflow bylo přijato, ale jeho výsledek nebyl nikdy zaznamenán. Použijte endpoint pro opakování. |
| INTERNAL_ERROR | per-item | Doš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:
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.
curl https://ingest.seeki.eu/v1/import-items/{import_item_id}/status \
-H "Authorization: Bearer seeki_live_your_key_here"{
"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:
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 |
|---|---|
| Staging | https://ingest.seeki.store/v1 |
| Produkce | https://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.