Ești portal imobiliar?
Alege Partner API (recomandat) sau Feed. Cheia se cere la contact@habitoo.ro.
Alege Partner API (recomandat) sau Feed. Cheia se cere la contact@habitoo.ro.
Folosește feedul pentru site-ul agenției. Administratorul agenției adaugă site-ul și generează cheia în Habitoo → Setări → Portaluri → „Site-ul agenției”. Feedul conține doar anunțurile bifate pentru site. Fără cereri la suport.
Habitoo / Dezvoltatori
Anunțuri, agenții și agenți. Sincronizare incrementală și date trimise de portal.
Partner API este integrarea recomandată pentru portaluri: citești agențiile care te-au activat, anunțurile și agenții lor, sincronizezi modificările și trimiți înapoi starea publicării, lead-uri, mesaje și statistici.
Feedul este alternativa simplă pentru preluarea inventarului JSON sau XML Kyero. Partner API adaugă chei de test/live, sincronizare incrementală și răspunsuri structurate ale portalului, fără să înlocuiască feedul.
Webhooks anunță schimbările imediat; /changes rămâne sursa de recuperare.
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/me" \
-H "Authorization: Bearer $HABITOO_API_KEY"curl -X GET "https://www.habitoo.ro/api/public/partner/v1/listings?status=all&limit=50" \
-H "Authorization: Bearer $HABITOO_API_KEY"curl -X GET "https://www.habitoo.ro/api/public/partner/v1/changes?limit=100" \
-H "Authorization: Bearer $HABITOO_API_KEY"curl -X POST "https://www.habitoo.ro/api/public/partner/v1/listings/11111111-1111-4111-8111-111111111111/publication" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--listings-id-publication-001" \
-H "Content-Type: application/json" \
--data '{
"status": "published",
"portal_listing_id": "DEMO-001",
"url": "https://example.invalid/anunt/demo-001",
"occurred_at": "2026-11-07T12:00:00Z"
}'curl -X POST "https://www.habitoo.ro/api/public/partner/v1/leads" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--leads-001" \
-H "Content-Type: application/json" \
--data '{
"external_id": "DEMO-LEAD-001",
"agency_id": "a7b50000-0000-4000-8000-000000000001",
"name": "Client Demo",
"email": "demo@example.invalid",
"message": "Mesaj fictiv pentru test."
}'Cere cheia la contact@habitoo.ro. Cheia de test oferă acces la Agenția Demo Habitoo, cu date fictive; emiterea este în prezent manuală, nu automată imediat după solicitare.
Cheia live se primește după verificarea integrării. Cheile se pot roti și revoca. O cheie de test începe cu hbpk_test_, iar una live cu hbpk_live_. Păstrează cheia doar pe serverul portalului, nu în pagini publice, URL-uri sau jurnale.
Live vede numai agenții reale care au activat portalul; test vede numai agenția demo.
Toate operațiile cer antetul Authorization: Bearer. Nu este necesară autentificarea în aplicația Habitoo.
# Valoare ilustrativă nefuncțională; înlocuiește local cu cheia emisă.
HABITOO_API_KEY="hbpk_test_EXEMPLU_FICTIV"
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/me" \
-H "Authorization: Bearer $HABITOO_API_KEY"Implicit: 120 cereri pe minut, per cheie, într-o fereastră fixă de 60 secunde. Limita poate fi configurată pentru portal; citește valoarea din /me.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 119
X-RateLimit-Reset: 1794052860
X-Request-Id: 11111111-1111-4111-8111-111111111111
# La 429:
Retry-After: 60Respectă Retry-After la 429 și folosește reîncercări cu pauze. Dacă verificarea limitei este indisponibilă, cererea este permisă și jurnalizată; remaining poate fi 0 în această situație. Headerele de limită nu sunt garantate înainte de identificarea portalului.
Toate POST-urile cer Idempotency-Key: 1–200 caractere ASCII vizibile. Folosește un identificator unic pentru fiecare operație. Păstrează exact aceeași metodă, cale, query, Content-Type și corp brut la reîncercare.
Rezultatul se păstrează 24 ore. Aceeași cheie pentru altă cerere produce 409 IDEMPOTENCY_CONFLICT. O cerere în procesare produce 409 REQUEST_IN_PROGRESS și Retry-After: 1. Nu recicla aceeași cheie pentru alt endpoint.
Deduplicarea lead-urilor și mesajelor prin external_id este separată de idempotența cererii.
Erorile au un format comun; X-Request-Id este prezent în răspuns. details este o listă de detalii de validare, uneori goală.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Datele trimise nu sunt valide.",
"details": [
{
"field": "email",
"message": "Adresă invalidă."
}
],
"request_id": "11111111-1111-4111-8111-111111111111"
}
}| Câmp / tip | Descriere și reguli |
|---|---|
errorobject Obligatoriu / prezent | |
error.codestring Obligatoriu / prezent | Valori: UNAUTHORIZED, FORBIDDEN, RATE_LIMIT_EXCEEDED, INVALID_IDEMPOTENCY_KEY, IDEMPOTENCY_KEY_REQUIRED, IDEMPOTENCY_CONFLICT, REQUEST_IN_PROGRESS, SERVICE_UNAVAILABLE, METHOD_NOT_ALLOWED, INVALID_PARAMETER, NOT_FOUND, UNSUPPORTED_MEDIA_TYPE, PAYLOAD_TOO_LARGE, INVALID_JSON, VALIDATION_ERROR, EXTERNAL_ID_CONFLICT. |
error.messagestring Obligatoriu / prezent | |
error.detailsobject[] Obligatoriu / prezent | |
error.request_idstring Obligatoriu / prezent | Format: uuid. |
/api/public/partner/v1/agenciesDate accesibile numai portalului autentificat, în mediul cheii folosite.
Fără parametri în cale sau query. Authorization: Bearer este obligatoriu.
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/agencies" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"data": [
{
"id": "a7b50000-0000-4000-8000-000000000001",
"name": "Agenția Demo Habitoo",
"legal_name": "Agenția Demo Habitoo — FICTIV",
"cui": "DEMO-FICTIV-000",
"email": "demo@example.invalid",
"phone": "0000000000",
"website": null,
"logo_url": null,
"address": null,
"city": null,
"county": null,
"activated_at": "2026-11-07T12:00:00Z",
"status": "active"
}
]
}| Câmp / tip | Descriere și reguli |
|---|---|
dataobject[] Obligatoriu / prezent | |
data[].idstring Obligatoriu / prezent | Identificator UUID. |
data[].namestring Obligatoriu / prezent | Valoarea name a agenției. |
data[].legal_namestring | null Obligatoriu / prezent | Valoarea legal_name a agenției. |
data[].cuistring | null Obligatoriu / prezent | Valoarea cui a agenției. |
data[].emailstring | null Obligatoriu / prezent | Valoarea email a agenției. |
data[].phonestring | null Obligatoriu / prezent | Valoarea phone a agenției. |
data[].websitestring | null Obligatoriu / prezent | Valoarea website a agenției. |
data[].logo_urlstring | null Obligatoriu / prezent | Valoarea logo_url a agenției. |
data[].addressstring | null Obligatoriu / prezent | Valoarea address a agenției. |
data[].citystring | null Obligatoriu / prezent | Valoarea city a agenției. |
data[].countystring | null Obligatoriu / prezent | Valoarea county a agenției. |
data[].activated_atstring | null Obligatoriu / prezent | Valoarea activated_at a agenției. |
data[].statusstring Obligatoriu / prezent | Starea entității. Valoare fixă: active. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/agencies/{id}Date accesibile numai portalului autentificat, în mediul cheii folosite.
idpath · string Obligatoriu | UUID al entității accesibile acestui portal. |
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/agencies/11111111-1111-4111-8111-111111111111" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"id": "a7b50000-0000-4000-8000-000000000001",
"name": "Agenția Demo Habitoo",
"legal_name": "Agenția Demo Habitoo — FICTIV",
"cui": "DEMO-FICTIV-000",
"email": "demo@example.invalid",
"phone": "0000000000",
"website": null,
"logo_url": null,
"address": null,
"city": null,
"county": null,
"activated_at": "2026-11-07T12:00:00Z",
"status": "active"
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Identificator UUID. |
namestring Obligatoriu / prezent | Valoarea name a agenției. |
legal_namestring | null Obligatoriu / prezent | Valoarea legal_name a agenției. |
cuistring | null Obligatoriu / prezent | Valoarea cui a agenției. |
emailstring | null Obligatoriu / prezent | Valoarea email a agenției. |
phonestring | null Obligatoriu / prezent | Valoarea phone a agenției. |
websitestring | null Obligatoriu / prezent | Valoarea website a agenției. |
logo_urlstring | null Obligatoriu / prezent | Valoarea logo_url a agenției. |
addressstring | null Obligatoriu / prezent | Valoarea address a agenției. |
citystring | null Obligatoriu / prezent | Valoarea city a agenției. |
countystring | null Obligatoriu / prezent | Valoarea county a agenției. |
activated_atstring | null Obligatoriu / prezent | Valoarea activated_at a agenției. |
statusstring Obligatoriu / prezent | Starea entității. Valoare fixă: active. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
Locație imprecisă: street și street_number sunt null, coordonatele sunt aproximative ca pe site și în feed. Locație precisă: adresa și coordonatele rămân exacte. Tombstone-urile retrase păstrează identificarea și datele; detaliile sunt golite.
| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Identificator UUID. |
referencestring | null Obligatoriu / prezent | Referința anunțului. |
agency_idstring Obligatoriu / prezent | Identificatorul agenției accesibile acestui portal. |
agent_idstring | null Obligatoriu / prezent | Identificatorul agentului responsabil; poate lipsi. |
statusstring Obligatoriu / prezent | Starea entității. Valori: active, reserved, withdrawn. |
offersobject[] Obligatoriu / prezent | Oferte de vânzare și/sau închiriere. |
offers[].typestring Obligatoriu / prezent | Valoarea type a entității. Valori: sale, rent. |
offers[].pricenumber | null Obligatoriu / prezent | Valoarea price a entității. |
offers[].currencystring | null Obligatoriu / prezent | Valoarea currency a entității. |
offers[].vat_includedboolean | null Obligatoriu / prezent | Valoarea vat_included a entității. |
offers[].negotiableboolean Obligatoriu / prezent | Valoarea negotiable a entității. |
property_typestring | null Obligatoriu / prezent | Valoarea property_type a entității. |
property_subtypestring | null Obligatoriu / prezent | Valoarea property_subtype a entității. |
titlestring | null Obligatoriu / prezent | Valoarea title a entității. |
descriptionstring | null Obligatoriu / prezent | Valoarea description a entității. |
roomsnumber | null Obligatoriu / prezent | Valoarea rooms a entității. |
bedroomsnumber | null Obligatoriu / prezent | Valoarea bedrooms a entității. |
bathroomsnumber | null Obligatoriu / prezent | Valoarea bathrooms a entității. |
kitchensnumber | null Obligatoriu / prezent | Valoarea kitchens a entității. |
balconiesnumber | null Obligatoriu / prezent | Valoarea balconies a entității. |
usable_areanumber | null Obligatoriu / prezent | Valoarea usable_area a entității. |
built_areanumber | null Obligatoriu / prezent | Valoarea built_area a entității. |
land_areanumber | null Obligatoriu / prezent | Valoarea land_area a entității. |
floornumber | null Obligatoriu / prezent | Valoarea floor a entității. |
floors_totalnumber | null Obligatoriu / prezent | Valoarea floors_total a entității. |
build_yearnumber | null Obligatoriu / prezent | Valoarea build_year a entității. |
layoutstring | null Obligatoriu / prezent | Valoarea layout a entității. |
heatingstring | null Obligatoriu / prezent | Valoarea heating a entității. |
furnishingstring | null Obligatoriu / prezent | Valoarea furnishing a entității. |
parkingstring | null Obligatoriu / prezent | Valoarea parking a entității. |
energy_classstring | null Obligatoriu / prezent | Valoarea energy_class a entității. |
featuresstring[] Obligatoriu / prezent | Valoarea features a entității. |
locationobject Obligatoriu / prezent | Valoarea location a entității. |
location.countystring | null Obligatoriu / prezent | Valoarea county a entității. |
location.citystring | null Obligatoriu / prezent | Valoarea city a entității. |
location.districtstring | null Obligatoriu / prezent | Valoarea district a entității. |
location.streetstring | null Obligatoriu / prezent | Strada fictivă sau publică numai dacă is_precise este true; altfel null. |
location.street_numberstring | null Obligatoriu / prezent | Numărul stradal numai pentru locație precisă; altfel null. |
location.latitudenumber | null Obligatoriu / prezent | Coordonată exactă pentru locație precisă; altfel aproximată determinist. |
location.longitudenumber | null Obligatoriu / prezent | Coordonată exactă pentru locație precisă; altfel aproximată determinist. |
location.is_preciseboolean Obligatoriu / prezent | Indică dacă locația poate fi prezentată exact. |
imagesobject[] Obligatoriu / prezent | Valoarea images a entității. |
images[].urlstring Obligatoriu / prezent | Valoarea url a entității. |
images[].positionnumber Obligatoriu / prezent | Valoarea position a entității. |
images[].is_coverboolean Obligatoriu / prezent | Valoarea is_cover a entității. |
floor_plansobject[] Obligatoriu / prezent | Listă rezervată; momentan goală. |
floor_plans[].urlstring Obligatoriu / prezent | Valoarea url a entității. |
floor_plans[].positionnumber Obligatoriu / prezent | Valoarea position a entității. |
video_urlstring | null Obligatoriu / prezent | Rezervat; momentan null. |
virtual_tour_urlstring | null Obligatoriu / prezent | Rezervat; momentan null. |
created_atstring | null Obligatoriu / prezent | Valoarea created_at a entității. |
updated_atstring | null Obligatoriu / prezent | Valoarea updated_at a entității. |
withdrawn_atstring | null Obligatoriu / prezent | Momentul retragerii; null pentru anunț activ. |
/api/public/partner/v1/listingsOrdine stabilă după actualizare și identificator. Retragerile se păstrează 30 zile.
agency_idquery · string Opțional | Restrânge inventarul la agenție. |
updated_sincequery · string Opțional | Modificări după momentul indicat. |
statusquery · string Opțional | active include anunțuri vizibile active sau rezervate. active | withdrawn | all Implicit: all. |
limitquery · integer Opțional | Dimensiunea paginii. Implicit: 50. Interval: 1–100. |
cursorquery · string Opțional | Cursor opac; păstrează aceleași filtre. |
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/listings?status=all&limit=50" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"data": [
{
"id": "a7b50000-0000-4000-8000-000000000100",
"reference": "TEST-001",
"agency_id": "a7b50000-0000-4000-8000-000000000001",
"agent_id": "a7b50000-0000-4000-8000-000000000002",
"status": "active",
"offers": [
{
"type": "sale",
"price": 80000,
"currency": "EUR",
"vat_included": null,
"negotiable": false
}
],
"property_type": "apartment",
"property_subtype": null,
"title": "[Test] apartment — exemplu 1",
"description": "Anunț fictiv pentru testarea integrării Partner API. Nu reprezintă o ofertă reală.",
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"kitchens": null,
"balconies": null,
"usable_area": null,
"built_area": null,
"land_area": null,
"floor": 1,
"floors_total": null,
"build_year": 2020,
"layout": null,
"heating": null,
"furnishing": null,
"parking": null,
"energy_class": null,
"features": [],
"location": {
"county": "București",
"city": "București",
"district": "Centru",
"street": "Strada Fictivă Demo",
"street_number": "1",
"latitude": 44.43,
"longitude": 26.1,
"is_precise": true
},
"images": [
{
"url": "https://example.invalid/apartment.jpg",
"position": 0,
"is_cover": true
}
],
"floor_plans": [],
"video_url": null,
"virtual_tour_url": null,
"created_at": "2026-11-07T12:00:00Z",
"updated_at": "2026-11-07T12:00:00Z",
"withdrawn_at": null
}
],
"next_cursor": null
}| Câmp / tip | Descriere și reguli |
|---|---|
dataobject[] Obligatoriu / prezent | |
data[].idstring Obligatoriu / prezent | Identificator UUID. |
data[].referencestring | null Obligatoriu / prezent | Referința anunțului. |
data[].agency_idstring Obligatoriu / prezent | Identificatorul agenției accesibile acestui portal. |
data[].agent_idstring | null Obligatoriu / prezent | Identificatorul agentului responsabil; poate lipsi. |
data[].statusstring Obligatoriu / prezent | Starea entității. Valori: active, reserved, withdrawn. |
data[].offersobject[] Obligatoriu / prezent | Oferte de vânzare și/sau închiriere. |
data[].offers[].typestring Obligatoriu / prezent | Valoarea type a entității. Valori: sale, rent. |
data[].offers[].pricenumber | null Obligatoriu / prezent | Valoarea price a entității. |
data[].offers[].currencystring | null Obligatoriu / prezent | Valoarea currency a entității. |
data[].offers[].vat_includedboolean | null Obligatoriu / prezent | Valoarea vat_included a entității. |
data[].offers[].negotiableboolean Obligatoriu / prezent | Valoarea negotiable a entității. |
data[].property_typestring | null Obligatoriu / prezent | Valoarea property_type a entității. |
data[].property_subtypestring | null Obligatoriu / prezent | Valoarea property_subtype a entității. |
data[].titlestring | null Obligatoriu / prezent | Valoarea title a entității. |
data[].descriptionstring | null Obligatoriu / prezent | Valoarea description a entității. |
data[].roomsnumber | null Obligatoriu / prezent | Valoarea rooms a entității. |
data[].bedroomsnumber | null Obligatoriu / prezent | Valoarea bedrooms a entității. |
data[].bathroomsnumber | null Obligatoriu / prezent | Valoarea bathrooms a entității. |
data[].kitchensnumber | null Obligatoriu / prezent | Valoarea kitchens a entității. |
data[].balconiesnumber | null Obligatoriu / prezent | Valoarea balconies a entității. |
data[].usable_areanumber | null Obligatoriu / prezent | Valoarea usable_area a entității. |
data[].built_areanumber | null Obligatoriu / prezent | Valoarea built_area a entității. |
data[].land_areanumber | null Obligatoriu / prezent | Valoarea land_area a entității. |
data[].floornumber | null Obligatoriu / prezent | Valoarea floor a entității. |
data[].floors_totalnumber | null Obligatoriu / prezent | Valoarea floors_total a entității. |
data[].build_yearnumber | null Obligatoriu / prezent | Valoarea build_year a entității. |
data[].layoutstring | null Obligatoriu / prezent | Valoarea layout a entității. |
data[].heatingstring | null Obligatoriu / prezent | Valoarea heating a entității. |
data[].furnishingstring | null Obligatoriu / prezent | Valoarea furnishing a entității. |
data[].parkingstring | null Obligatoriu / prezent | Valoarea parking a entității. |
data[].energy_classstring | null Obligatoriu / prezent | Valoarea energy_class a entității. |
data[].featuresstring[] Obligatoriu / prezent | Valoarea features a entității. |
data[].locationobject Obligatoriu / prezent | Valoarea location a entității. |
data[].location.countystring | null Obligatoriu / prezent | Valoarea county a entității. |
data[].location.citystring | null Obligatoriu / prezent | Valoarea city a entității. |
data[].location.districtstring | null Obligatoriu / prezent | Valoarea district a entității. |
data[].location.streetstring | null Obligatoriu / prezent | Strada fictivă sau publică numai dacă is_precise este true; altfel null. |
data[].location.street_numberstring | null Obligatoriu / prezent | Numărul stradal numai pentru locație precisă; altfel null. |
data[].location.latitudenumber | null Obligatoriu / prezent | Coordonată exactă pentru locație precisă; altfel aproximată determinist. |
data[].location.longitudenumber | null Obligatoriu / prezent | Coordonată exactă pentru locație precisă; altfel aproximată determinist. |
data[].location.is_preciseboolean Obligatoriu / prezent | Indică dacă locația poate fi prezentată exact. |
data[].imagesobject[] Obligatoriu / prezent | Valoarea images a entității. |
data[].images[].urlstring Obligatoriu / prezent | Valoarea url a entității. |
data[].images[].positionnumber Obligatoriu / prezent | Valoarea position a entității. |
data[].images[].is_coverboolean Obligatoriu / prezent | Valoarea is_cover a entității. |
data[].floor_plansobject[] Obligatoriu / prezent | Listă rezervată; momentan goală. |
data[].floor_plans[].urlstring Obligatoriu / prezent | Valoarea url a entității. |
data[].floor_plans[].positionnumber Obligatoriu / prezent | Valoarea position a entității. |
data[].video_urlstring | null Obligatoriu / prezent | Rezervat; momentan null. |
data[].virtual_tour_urlstring | null Obligatoriu / prezent | Rezervat; momentan null. |
data[].created_atstring | null Obligatoriu / prezent | Valoarea created_at a entității. |
data[].updated_atstring | null Obligatoriu / prezent | Valoarea updated_at a entității. |
data[].withdrawn_atstring | null Obligatoriu / prezent | Momentul retragerii; null pentru anunț activ. |
next_cursorstring | null Obligatoriu / prezent |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/listings/{id}Date accesibile numai portalului autentificat, în mediul cheii folosite.
idpath · string Obligatoriu | UUID al entității accesibile acestui portal. |
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/listings/11111111-1111-4111-8111-111111111111" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"id": "a7b50000-0000-4000-8000-000000000100",
"reference": "TEST-001",
"agency_id": "a7b50000-0000-4000-8000-000000000001",
"agent_id": "a7b50000-0000-4000-8000-000000000002",
"status": "active",
"offers": [
{
"type": "sale",
"price": 80000,
"currency": "EUR",
"vat_included": null,
"negotiable": false
}
],
"property_type": "apartment",
"property_subtype": null,
"title": "[Test] apartment — exemplu 1",
"description": "Anunț fictiv pentru testarea integrării Partner API. Nu reprezintă o ofertă reală.",
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"kitchens": null,
"balconies": null,
"usable_area": null,
"built_area": null,
"land_area": null,
"floor": 1,
"floors_total": null,
"build_year": 2020,
"layout": null,
"heating": null,
"furnishing": null,
"parking": null,
"energy_class": null,
"features": [],
"location": {
"county": "București",
"city": "București",
"district": "Centru",
"street": "Strada Fictivă Demo",
"street_number": "1",
"latitude": 44.43,
"longitude": 26.1,
"is_precise": true
},
"images": [
{
"url": "https://example.invalid/apartment.jpg",
"position": 0,
"is_cover": true
}
],
"floor_plans": [],
"video_url": null,
"virtual_tour_url": null,
"created_at": "2026-11-07T12:00:00Z",
"updated_at": "2026-11-07T12:00:00Z",
"withdrawn_at": null
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Identificator UUID. |
referencestring | null Obligatoriu / prezent | Referința anunțului. |
agency_idstring Obligatoriu / prezent | Identificatorul agenției accesibile acestui portal. |
agent_idstring | null Obligatoriu / prezent | Identificatorul agentului responsabil; poate lipsi. |
statusstring Obligatoriu / prezent | Starea entității. Valori: active, reserved, withdrawn. |
offersobject[] Obligatoriu / prezent | Oferte de vânzare și/sau închiriere. |
offers[].typestring Obligatoriu / prezent | Valoarea type a entității. Valori: sale, rent. |
offers[].pricenumber | null Obligatoriu / prezent | Valoarea price a entității. |
offers[].currencystring | null Obligatoriu / prezent | Valoarea currency a entității. |
offers[].vat_includedboolean | null Obligatoriu / prezent | Valoarea vat_included a entității. |
offers[].negotiableboolean Obligatoriu / prezent | Valoarea negotiable a entității. |
property_typestring | null Obligatoriu / prezent | Valoarea property_type a entității. |
property_subtypestring | null Obligatoriu / prezent | Valoarea property_subtype a entității. |
titlestring | null Obligatoriu / prezent | Valoarea title a entității. |
descriptionstring | null Obligatoriu / prezent | Valoarea description a entității. |
roomsnumber | null Obligatoriu / prezent | Valoarea rooms a entității. |
bedroomsnumber | null Obligatoriu / prezent | Valoarea bedrooms a entității. |
bathroomsnumber | null Obligatoriu / prezent | Valoarea bathrooms a entității. |
kitchensnumber | null Obligatoriu / prezent | Valoarea kitchens a entității. |
balconiesnumber | null Obligatoriu / prezent | Valoarea balconies a entității. |
usable_areanumber | null Obligatoriu / prezent | Valoarea usable_area a entității. |
built_areanumber | null Obligatoriu / prezent | Valoarea built_area a entității. |
land_areanumber | null Obligatoriu / prezent | Valoarea land_area a entității. |
floornumber | null Obligatoriu / prezent | Valoarea floor a entității. |
floors_totalnumber | null Obligatoriu / prezent | Valoarea floors_total a entității. |
build_yearnumber | null Obligatoriu / prezent | Valoarea build_year a entității. |
layoutstring | null Obligatoriu / prezent | Valoarea layout a entității. |
heatingstring | null Obligatoriu / prezent | Valoarea heating a entității. |
furnishingstring | null Obligatoriu / prezent | Valoarea furnishing a entității. |
parkingstring | null Obligatoriu / prezent | Valoarea parking a entității. |
energy_classstring | null Obligatoriu / prezent | Valoarea energy_class a entității. |
featuresstring[] Obligatoriu / prezent | Valoarea features a entității. |
locationobject Obligatoriu / prezent | Valoarea location a entității. |
location.countystring | null Obligatoriu / prezent | Valoarea county a entității. |
location.citystring | null Obligatoriu / prezent | Valoarea city a entității. |
location.districtstring | null Obligatoriu / prezent | Valoarea district a entității. |
location.streetstring | null Obligatoriu / prezent | Strada fictivă sau publică numai dacă is_precise este true; altfel null. |
location.street_numberstring | null Obligatoriu / prezent | Numărul stradal numai pentru locație precisă; altfel null. |
location.latitudenumber | null Obligatoriu / prezent | Coordonată exactă pentru locație precisă; altfel aproximată determinist. |
location.longitudenumber | null Obligatoriu / prezent | Coordonată exactă pentru locație precisă; altfel aproximată determinist. |
location.is_preciseboolean Obligatoriu / prezent | Indică dacă locația poate fi prezentată exact. |
imagesobject[] Obligatoriu / prezent | Valoarea images a entității. |
images[].urlstring Obligatoriu / prezent | Valoarea url a entității. |
images[].positionnumber Obligatoriu / prezent | Valoarea position a entității. |
images[].is_coverboolean Obligatoriu / prezent | Valoarea is_cover a entității. |
floor_plansobject[] Obligatoriu / prezent | Listă rezervată; momentan goală. |
floor_plans[].urlstring Obligatoriu / prezent | Valoarea url a entității. |
floor_plans[].positionnumber Obligatoriu / prezent | Valoarea position a entității. |
video_urlstring | null Obligatoriu / prezent | Rezervat; momentan null. |
virtual_tour_urlstring | null Obligatoriu / prezent | Rezervat; momentan null. |
created_atstring | null Obligatoriu / prezent | Valoarea created_at a entității. |
updated_atstring | null Obligatoriu / prezent | Valoarea updated_at a entității. |
withdrawn_atstring | null Obligatoriu / prezent | Momentul retragerii; null pentru anunț activ. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/agentsDate accesibile numai portalului autentificat, în mediul cheii folosite.
agency_idquery · string Opțional | Filtru opțional pe agenție. |
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/agents" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"data": [
{
"id": "a7b50000-0000-4000-8000-000000000002",
"agency_id": "a7b50000-0000-4000-8000-000000000001",
"name": "Agent Demo 1",
"first_name": "Agent",
"last_name": "Demo 1",
"email": "agent1@example.invalid",
"phone": "0000000000",
"photo_url": null,
"position": "Agent Demo"
}
]
}| Câmp / tip | Descriere și reguli |
|---|---|
dataobject[] Obligatoriu / prezent | |
data[].idstring Obligatoriu / prezent | Identificator UUID. |
data[].agency_idstring Obligatoriu / prezent | Identificatorul agenției accesibile acestui portal. |
data[].namestring Obligatoriu / prezent | Valoarea name a entității. |
data[].first_namestring | null Obligatoriu / prezent | Valoarea first_name a entității. |
data[].last_namestring | null Obligatoriu / prezent | Valoarea last_name a entității. |
data[].emailstring | null Obligatoriu / prezent | Valoarea email a entității. |
data[].phonestring | null Obligatoriu / prezent | Valoarea phone a entității. |
data[].photo_urlstring | null Obligatoriu / prezent | Valoarea photo_url a entității. |
data[].positionstring | null Obligatoriu / prezent | Valoarea position a entității. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/agents/{id}Date accesibile numai portalului autentificat, în mediul cheii folosite.
idpath · string Obligatoriu | UUID al entității accesibile acestui portal. |
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/agents/11111111-1111-4111-8111-111111111111" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"id": "a7b50000-0000-4000-8000-000000000002",
"agency_id": "a7b50000-0000-4000-8000-000000000001",
"name": "Agent Demo 1",
"first_name": "Agent",
"last_name": "Demo 1",
"email": "agent1@example.invalid",
"phone": "0000000000",
"photo_url": null,
"position": "Agent Demo"
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Identificator UUID. |
agency_idstring Obligatoriu / prezent | Identificatorul agenției accesibile acestui portal. |
namestring Obligatoriu / prezent | Valoarea name a entității. |
first_namestring | null Obligatoriu / prezent | Valoarea first_name a entității. |
last_namestring | null Obligatoriu / prezent | Valoarea last_name a entității. |
emailstring | null Obligatoriu / prezent | Valoarea email a entității. |
phonestring | null Obligatoriu / prezent | Valoarea phone a entității. |
photo_urlstring | null Obligatoriu / prezent | Valoarea photo_url a entității. |
positionstring | null Obligatoriu / prezent | Valoarea position a entității. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/taxonomiesDate accesibile numai portalului autentificat, în mediul cheii folosite.
Fără parametri în cale sau query. Authorization: Bearer este obligatoriu.
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/taxonomies" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"listing_status": [
{
"code": "active",
"label": "Activ"
},
{
"code": "reserved",
"label": "Rezervat"
},
{
"code": "withdrawn",
"label": "Retras"
}
],
"offer_type": [
{
"code": "sale",
"label": "Vânzare"
},
{
"code": "rent",
"label": "Închiriere"
}
],
"currency": [
{
"code": "EUR",
"label": "Euro"
},
{
"code": "RON",
"label": "Leu"
},
{
"code": "USD",
"label": "Dolar american"
}
],
"property_type": [
{
"code": "apartment",
"label": "Apartament"
},
{
"code": "studio",
"label": "Garsonieră"
},
{
"code": "house",
"label": "Casă"
},
{
"code": "villa",
"label": "Vilă"
},
{
"code": "land",
"label": "Teren"
},
{
"code": "commercial",
"label": "Spațiu comercial"
},
{
"code": "office",
"label": "Birou"
},
{
"code": "industrial",
"label": "Hală / spațiu industrial"
},
{
"code": "duplex",
"label": "Duplex"
},
{
"code": "penthouse",
"label": "Penthouse"
},
{
"code": "other",
"label": "Altele"
}
],
"layout": [
{
"code": "decomandat",
"label": "Decomandat"
},
{
"code": "semidecomandat",
"label": "Semidecomandat"
},
{
"code": "nedecomandat",
"label": "Nedecomandat"
},
{
"code": "circular",
"label": "Circular"
},
{
"code": "vagon",
"label": "Vagon"
},
{
"code": "open_space",
"label": "Open space"
}
],
"heating": [
{
"code": "termoficare",
"label": "Termoficare"
},
{
"code": "centrala_proprie",
"label": "Centrală proprie"
},
{
"code": "centrala_imobil",
"label": "Centrală imobil"
},
{
"code": "convectoare",
"label": "Convectoare"
},
{
"code": "soba_teracota",
"label": "Sobă teracotă"
},
{
"code": "centrala_pe_lemne",
"label": "Centrală pe lemne"
},
{
"code": "incalzire_pardoseala",
"label": "Încălzire pardoseală"
},
{
"code": "calorifere",
"label": "Calorifere"
},
{
"code": "pompa_de_caldura",
"label": "Pompă de căldură"
}
],
"furnishing": [
{
"code": "complet",
"label": "Complet"
},
{
"code": "partial",
"label": "Parțial"
},
{
"code": "nemobilat",
"label": "Nemobilat"
},
{
"code": "lux",
"label": "Lux"
},
{
"code": "modern",
"label": "Modern"
}
],
"parking": [
{
"code": "fara",
"label": "Fără"
},
{
"code": "loc_de_parcare",
"label": "Loc de parcare"
},
{
"code": "garaj",
"label": "Garaj"
},
{
"code": "parcare_subterana",
"label": "Parcare subterană"
},
{
"code": "parcare_supraterana",
"label": "Parcare supraterană"
}
],
"energy_class": [
{
"code": "A++",
"label": "Clasa A++"
},
{
"code": "A+",
"label": "Clasa A+"
},
{
"code": "A",
"label": "Clasa A"
},
{
"code": "B",
"label": "Clasa B"
},
{
"code": "C",
"label": "Clasa C"
},
{
"code": "D",
"label": "Clasa D"
},
{
"code": "E",
"label": "Clasa E"
},
{
"code": "F",
"label": "Clasa F"
},
{
"code": "G",
"label": "Clasa G"
}
],
"features": [
{
"code": "terasa",
"label": "Terasă"
},
{
"code": "wc_serviciu",
"label": "WC serviciu"
},
{
"code": "boxa_la_subsol",
"label": "Boxă la subsol"
},
{
"code": "debara",
"label": "Debara"
},
{
"code": "pivnita",
"label": "Pivniță"
},
{
"code": "dressing",
"label": "Dressing"
},
{
"code": "mobilata",
"label": "Mobilată"
},
{
"code": "partial_mobilata",
"label": "Parțial mobilată"
},
{
"code": "utilata",
"label": "Utilată"
},
{
"code": "partial_utilata",
"label": "Parțial utilată"
},
{
"code": "nemobilata",
"label": "Nemobilată"
},
{
"code": "neutilata",
"label": "Neutilată"
},
{
"code": "apometre",
"label": "Apometre"
},
{
"code": "contor_caldura",
"label": "Contor căldură"
},
{
"code": "contor_gaz",
"label": "Contor gaz"
},
{
"code": "contor_curent_electric",
"label": "Contor curent electric"
},
{
"code": "contorizare_separata",
"label": "Contorizare separată"
},
{
"code": "masina_de_spalat_rufe",
"label": "Mașină de spălat rufe"
},
{
"code": "frigider",
"label": "Frigider"
},
{
"code": "aragaz",
"label": "Aragaz"
},
{
"code": "masina_de_spalat_vase",
"label": "Mașină de spălat vase"
},
{
"code": "fier_de_calcat",
"label": "Fier de călcat"
},
{
"code": "tv",
"label": "TV"
},
{
"code": "cafetiera",
"label": "Cafetieră"
},
{
"code": "uscator_par",
"label": "Uscător păr"
},
{
"code": "toaster",
"label": "Toaster"
},
{
"code": "dvd",
"label": "DVD"
},
{
"code": "sandwich_maker",
"label": "Sandwich-maker"
},
{
"code": "cuptor_microunde",
"label": "Cuptor microunde"
},
{
"code": "hota",
"label": "Hotă"
},
{
"code": "robot_bucatarie",
"label": "Robot bucătărie"
},
{
"code": "aspirator",
"label": "Aspirator"
},
{
"code": "hi_fi",
"label": "HI-FI"
},
{
"code": "plita_electrica",
"label": "Plită electrică"
},
{
"code": "interfon",
"label": "Interfon"
},
{
"code": "videointerfon",
"label": "Videointerfon"
},
{
"code": "supraveghere_video",
"label": "Supraveghere video"
},
{
"code": "lift",
"label": "Lift"
},
{
"code": "spatii_agrement",
"label": "Spații agrement"
},
{
"code": "sauna",
"label": "Sauna"
},
{
"code": "spa",
"label": "SPA"
},
{
"code": "acoperis",
"label": "Acoperiș"
},
{
"code": "curte",
"label": "Curte"
},
{
"code": "curte_comuna",
"label": "Curte comună"
},
{
"code": "gradina",
"label": "Grădină"
},
{
"code": "piscina_interioara",
"label": "Piscină interioară"
},
{
"code": "piscina_exterioara",
"label": "Piscină exterioară"
},
{
"code": "uscatorie",
"label": "Uscătorie"
},
{
"code": "asfaltate",
"label": "Asfaltate"
},
{
"code": "pietruite",
"label": "Pietruite"
},
{
"code": "neamenajate",
"label": "Neamenajate"
},
{
"code": "betonate",
"label": "Betonate"
},
{
"code": "iluminat_stradal",
"label": "Iluminat stradal"
},
{
"code": "mijloace_de_transport_in_comun",
"label": "Mijloace de transport în comun"
},
{
"code": "panoramica",
"label": "Panoramică"
},
{
"code": "spre_lac",
"label": "Spre lac"
},
{
"code": "spre_mare",
"label": "Spre mare"
},
{
"code": "spre_munte",
"label": "Spre munte"
},
{
"code": "spre_oras",
"label": "Spre oraș"
},
{
"code": "spre_padure",
"label": "Spre pădure"
},
{
"code": "jacuzzi",
"label": "Jacuzzi"
},
{
"code": "scara_interioara",
"label": "Scară interioară"
},
{
"code": "semineu",
"label": "Șemineu"
},
{
"code": "senzor_de_fum",
"label": "Senzor de fum"
},
{
"code": "sistem_de_alarma",
"label": "Sistem de alarmă"
},
{
"code": "telecomanda_poarta_garaj",
"label": "Telecomandă poartă garaj"
},
{
"code": "telecomanda_poarta_acces_auto",
"label": "Telecomandă poartă acces auto"
},
{
"code": "aer_conditionat",
"label": "Aer condiționat"
},
{
"code": "ventiloconvectoare",
"label": "Ventiloconvectoare"
},
{
"code": "aeroterme",
"label": "Aeroterme"
}
],
"event_type": [
{
"code": "listing.upserted",
"label": "Anunț nou sau modificat"
},
{
"code": "listing.withdrawn",
"label": "Anunț retras"
},
{
"code": "agency.activated",
"label": "Agenție activată"
},
{
"code": "agency.deactivated",
"label": "Agenție dezactivată"
},
{
"code": "agent.updated",
"label": "Agent modificat"
}
]
}| Câmp / tip | Descriere și reguli |
|---|---|
listing_statusobject[] Obligatoriu / prezent | |
listing_status[].codestring Obligatoriu / prezent | Valori: active, reserved, withdrawn. |
listing_status[].labelstring Obligatoriu / prezent | |
offer_typeobject[] Obligatoriu / prezent | |
offer_type[].codestring Obligatoriu / prezent | Valori: sale, rent. |
offer_type[].labelstring Obligatoriu / prezent | |
currencyobject[] Obligatoriu / prezent | |
currency[].codestring Obligatoriu / prezent | Valori: EUR, RON, USD. |
currency[].labelstring Obligatoriu / prezent | |
property_typeobject[] Obligatoriu / prezent | |
property_type[].codestring Obligatoriu / prezent | Valori: apartment, studio, house, villa, land, commercial, office, industrial, duplex, penthouse, other. |
property_type[].labelstring Obligatoriu / prezent | |
layoutobject[] Obligatoriu / prezent | |
layout[].codestring Obligatoriu / prezent | Valori: decomandat, semidecomandat, nedecomandat, circular, vagon, open_space. |
layout[].labelstring Obligatoriu / prezent | |
heatingobject[] Obligatoriu / prezent | |
heating[].codestring Obligatoriu / prezent | Valori: termoficare, centrala_proprie, centrala_imobil, convectoare, soba_teracota, centrala_pe_lemne, incalzire_pardoseala, calorifere, pompa_de_caldura. |
heating[].labelstring Obligatoriu / prezent | |
furnishingobject[] Obligatoriu / prezent | |
furnishing[].codestring Obligatoriu / prezent | Valori: complet, partial, nemobilat, lux, modern. |
furnishing[].labelstring Obligatoriu / prezent | |
parkingobject[] Obligatoriu / prezent | |
parking[].codestring Obligatoriu / prezent | Valori: fara, loc_de_parcare, garaj, parcare_subterana, parcare_supraterana. |
parking[].labelstring Obligatoriu / prezent | |
energy_classobject[] Obligatoriu / prezent | |
energy_class[].codestring Obligatoriu / prezent | Valori: A++, A+, A, B, C, D, E, F, G. |
energy_class[].labelstring Obligatoriu / prezent | |
featuresobject[] Obligatoriu / prezent | |
features[].codestring Obligatoriu / prezent | Valori: terasa, wc_serviciu, boxa_la_subsol, debara, pivnita, dressing, mobilata, partial_mobilata, utilata, partial_utilata, nemobilata, neutilata, apometre, contor_caldura, contor_gaz, contor_curent_electric, contorizare_separata, masina_de_spalat_rufe, frigider, aragaz, masina_de_spalat_vase, fier_de_calcat, tv, cafetiera, uscator_par, toaster, dvd, sandwich_maker, cuptor_microunde, hota, robot_bucatarie, aspirator, hi_fi, plita_electrica, interfon, videointerfon, supraveghere_video, lift, spatii_agrement, sauna, spa, acoperis, curte, curte_comuna, gradina, piscina_interioara, piscina_exterioara, uscatorie, asfaltate, pietruite, neamenajate, betonate, iluminat_stradal, mijloace_de_transport_in_comun, panoramica, spre_lac, spre_mare, spre_munte, spre_oras, spre_padure, jacuzzi, scara_interioara, semineu, senzor_de_fum, sistem_de_alarma, telecomanda_poarta_garaj, telecomanda_poarta_acces_auto, aer_conditionat, ventiloconvectoare, aeroterme. |
features[].labelstring Obligatoriu / prezent | |
event_typeobject[] Obligatoriu / prezent | |
event_type[].codestring Obligatoriu / prezent | Valori: listing.upserted, listing.withdrawn, agency.activated, agency.deactivated, agent.updated. |
event_type[].labelstring Obligatoriu / prezent |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
Înainte de importul complet, citește /changes fără cursor și păstrează next_cursor: acest apel pornește de la poziția curentă și nu întoarce istoricul.
Importă toate paginile /listings, apoi reia /changes cu cursorul inițial. Aplică evenimentele în ordine după seq, citește detaliile entității, iar la listing.withdrawn retrage anunțul. Persistă cursorul numai după aplicarea completă a paginii; continuă cât has_more este true.
Evenimentele se păstrează 90 zile. Interoghează periodic cu ultimul cursor; după o pauză care depășește retenția, reia importul complet. Cursorul /listings nu este interschimbabil cu cel /changes.
/api/public/partner/v1/changesEvenimente crescătoare după seq, păstrate 90 zile. Salvează next_cursor numai după aplicarea paginii.
cursorquery · string Opțional | Fără cursor: inițializează poziția curentă, fără evenimente. |
limitquery · integer Opțional | Numărul de evenimente. Implicit: 100. Interval: 1–500. |
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/changes?limit=100" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"data": [],
"next_cursor": "eyJzIjowfQ",
"has_more": false
}| Câmp / tip | Descriere și reguli |
|---|---|
dataobject[] Obligatoriu / prezent | |
data[].seqinteger Obligatoriu / prezent | Minim: 1. |
data[].typestring Obligatoriu / prezent | Valori: listing.upserted, listing.withdrawn, agency.activated, agency.deactivated, agent.updated. |
data[].entity_typestring Obligatoriu / prezent | Valori: listing, agency, agent. |
data[].entity_idstring Obligatoriu / prezent | Format: uuid. |
data[].agency_idstring Obligatoriu / prezent | Format: uuid. |
data[].occurred_atstring Obligatoriu / prezent | Format: date-time. |
next_cursorstring Obligatoriu / prezent | |
has_moreboolean Obligatoriu / prezent |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
Configurează o adresă HTTPS publică pe portul 443, fără credențiale sau IP literal. DNS A și AAAA sunt verificate înainte de salvare și fiecare livrare; adresele private, rezervate și redirecționările sunt respinse.
Secretul de 32 bytes, hex, apare numai la prima setare sau rotate_secret:true. Decodează hex înainte de HMAC-SHA256. Semnătura X-Habitoo-Signature este t=timestamp,v1=hex, calculată pe timestamp + "." + corpul brut. Păstrează corpul brut, verifică semnătura în timp constant și respinge timestamp-uri mai vechi de 5 minute.
POST-ul conține id, type, seq, occurred_at și numai identificatori în data. Citește obiectul complet din API. X-Habitoo-Event indică tipul, X-Habitoo-Delivery identifică încercarea, User-Agent este Habitoo-Webhooks/1.0. Orice 2xx confirmă; timeout 10 secunde, citire răspuns maximum 64 KB, fără urmarea redirecționărilor.
Ordinea seq se păstrează per portal și mediu. Reîncercări după 1 min, 5 min, 30 min, 2 h, 6 h, 12 h, maximum 24 h; apoi suspendare și notificare SuperAdmin. PUT pe webhook activ păstrează livrările în așteptare; după suspendare reactivează o subscriere nouă, iar evenimentele omise se recuperează din /changes. Jurnalul livrărilor păstrează 14 zile. Deduplică id într-o coadă persistentă și confirmă după salvare, înainte de procesarea lentă.
Test și live au configurații și secrete separate. webhook.test încearcă imediat livrarea, dar nu depășește evenimente anterioare care așteaptă reîncercarea.
// Express: mount express.raw({ type: 'application/json' }) before JSON parsing.
import { createHmac, timingSafeEqual } from 'node:crypto';
const signature = req.get('X-Habitoo-Signature') ?? '';
const match = /^t=(\d+),v1=([a-f0-9]{64})$/.exec(signature);
if (!match || Math.abs(Date.now() / 1000 - Number(match[1])) > 300) {
return res.sendStatus(401);
}
const secret = Buffer.from(process.env.HABITOO_WEBHOOK_SECRET, 'hex');
const expected = createHmac('sha256', secret)
.update(match[1] + '.').update(req.body).digest();
if (!timingSafeEqual(expected, Buffer.from(match[2], 'hex'))) {
return res.sendStatus(401);
}
const event = JSON.parse(req.body.toString('utf8'));
// Persist event.id in a durable inbox with a UNIQUE constraint.
// Atomically enqueue once, then acknowledge; do not process twice.
await saveToInboxOnce(event);
res.sendStatus(204);<?php
$raw = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_HABITOO_SIGNATURE'] ?? '';
if (!preg_match('/^t=(\d+),v1=([a-f0-9]{64})$/', $signature, $m)
|| abs(time() - (int)$m[1]) > 300) {
http_response_code(401); exit;
}
$secret = hex2bin(getenv('HABITOO_WEBHOOK_SECRET'));
$expected = hash_hmac('sha256', $m[1] . '.' . $raw, $secret);
if (!hash_equals($expected, $m[2])) {
http_response_code(401); exit;
}
$event = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
// Durable inbox, UNIQUE event.id; enqueue atomically only once.
save_to_inbox_once($event);
http_response_code(204);import hashlib, hmac, os, re, time, json
# Flask: read the raw body before decoding JSON.
raw = request.get_data()
match = re.fullmatch(r"t=(\d+),v1=([a-f0-9]{64})",
request.headers.get("X-Habitoo-Signature", ""))
if not match or abs(time.time() - int(match[1])) > 300:
abort(401)
secret = bytes.fromhex(os.environ["HABITOO_WEBHOOK_SECRET"])
expected = hmac.new(secret, match[1].encode() + b"." + raw,
hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, match[2]):
abort(401)
event = json.loads(raw)
# Durable inbox, UNIQUE event.id; enqueue atomically only once.
save_to_inbox_once(event)
return "", 204/api/public/partner/v1/webhookConfigurație separată per portal și mediu; null dacă nu există. Secretul nu apare în listări.
Fără parametri în cale sau query. Authorization: Bearer este obligatoriu.
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/webhook" \
-H "Authorization: Bearer $HABITOO_API_KEY"{}| Câmp / tip | Descriere și reguli |
|---|---|
urlstring Obligatoriu / prezent | |
eventsstring[] Obligatoriu / prezent | |
statusstring Obligatoriu / prezent | Valori: active, suspended. |
has_secretboolean Obligatoriu / prezent | Valoare fixă: true. |
last_success_atstring | null Obligatoriu / prezent | |
consecutive_failuresinteger Obligatoriu / prezent | Minim: 0. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/webhookPrima setare sau rotate_secret:true întoarce secretul o singură dată. Pentru webhook activ păstrează livrările în așteptare. Pentru webhook suspendat, PUT reactivează o subscriere nouă; recuperează evenimentele omise din /changes. Lipsa events sau [] înseamnă toate evenimentele.
Fără parametri în cale sau query. Authorization: Bearer este obligatoriu.
| Câmp / tip | Descriere și reguli |
|---|---|
urlstring Obligatoriu / prezent | HTTPS public sur portul 443, fără credențiale, IP literal sau redirecționări. A și AAAA verificate prin DNS-over-HTTPS la salvare și livrare; orice adresă nepublică este respinsă. Format: uri. Maximum 2048 caractere. |
eventsstring[] Opțional | Valoare events. |
rotate_secretboolean Opțional | Generează un secret nou; vechiul secret nu mai semnează livrările viitoare. |
curl -X PUT "https://www.habitoo.ro/api/public/partner/v1/webhook" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"url": "https://example.invalid/habitoo-webhook",
"events": [
"listing.upserted",
"listing.withdrawn"
]
}'{
"url": "https://example.invalid/habitoo-webhook",
"events": [],
"status": "active",
"has_secret": true,
"last_success_at": null,
"consecutive_failures": 0
}| Câmp / tip | Descriere și reguli |
|---|---|
urlstring Obligatoriu / prezent | |
eventsstring[] Obligatoriu / prezent | |
statusstring Obligatoriu / prezent | Valori: active, suspended. |
has_secretboolean Obligatoriu / prezent | Valoare fixă: true. |
last_success_atstring | null Obligatoriu / prezent | |
consecutive_failuresinteger Obligatoriu / prezent | Minim: 0. |
secretstring Opțional | 32 bytes hex, afișat numai la prima setare sau rotate_secret. Pentru HMAC se decodează hex în 32 bytes, nu se folosește șirul hex ca text. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/webhookDate accesibile numai portalului autentificat, în mediul cheii folosite.
Fără parametri în cale sau query. Authorization: Bearer este obligatoriu.
curl -X DELETE "https://www.habitoo.ro/api/public/partner/v1/webhook" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"deleted": true
}| Câmp / tip | Descriere și reguli |
|---|---|
deletedboolean Obligatoriu / prezent |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/webhook/testÎncearcă imediat webhook.test prin aceeași coadă ordonată. Dacă un eveniment anterior așteaptă reîncercarea, testul rămâne în coadă; queued nu confirmă livrarea.
Idempotency-Keyheader · string Obligatoriu | 1–200 caractere ASCII vizibile; unic per operație, păstrat 24 ore. Reîncercarea păstrează metoda, URL-ul, Content-Type și corpul brut identice. |
| Câmp / tip | Descriere și reguli |
|---|
curl -X POST "https://www.habitoo.ro/api/public/partner/v1/webhook/test" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--webhook-test-001" \
-H "Content-Type: application/json" \
--data '{}'{
"id": "11111111-1111-4111-8111-111111111111",
"queued": true
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Format: uuid. |
queuedboolean Obligatoriu / prezent |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/webhook/deliveriesÎncercări în ordine descrescătoare, separate test/live, păstrate 14 zile.
limitquery · integer Opțional | Dimensiunea paginii. Implicit: 20. Interval: 1–100. |
cursorquery · string Opțional | Cursor numeric opac de la pagina anterioară. |
curl -X GET "https://www.habitoo.ro/api/public/partner/v1/webhook/deliveries?limit=20" \
-H "Authorization: Bearer $HABITOO_API_KEY"{
"data": [],
"next_cursor": null
}| Câmp / tip | Descriere și reguli |
|---|---|
dataobject[] Obligatoriu / prezent | |
data[].idstring Obligatoriu / prezent | Format: uuid. |
data[].eventstring Obligatoriu / prezent | Valori: listing.upserted, listing.withdrawn, agency.activated, agency.deactivated, agent.updated, webhook.test. |
data[].seqinteger Obligatoriu / prezent | |
data[].http_statusinteger | null Obligatoriu / prezent | |
data[].duration_msinteger Obligatoriu / prezent | |
data[].attemptinteger Obligatoriu / prezent | |
data[].occurred_atstring Obligatoriu / prezent | Format: date-time. |
data[].errorstring | null Obligatoriu / prezent | |
next_cursorstring | null Obligatoriu / prezent |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/listings/{id}/publicationAcceptă anunțuri vizibile acum sau retrase în ultimele 30 zile. O stare mai veche nu suprascrie starea nouă. Test: id este identificatorul înregistrării de feedback, nu listing_id.
idpath · string Obligatoriu | UUID al entității accesibile acestui portal. |
Idempotency-Keyheader · string Obligatoriu | 1–200 caractere ASCII vizibile; unic per operație, păstrat 24 ore. Reîncercarea păstrează metoda, URL-ul, Content-Type și corpul brut identice. |
| Câmp / tip | Descriere și reguli |
|---|---|
statusstring Obligatoriu / prezent | Starea entității. Valori: published, pending_review, rejected, removed. |
portal_listing_idstring Opțional | Valoare portal_listing_id. Maximum 200 caractere. |
urlstring Opțional | URL HTTPS opțional. Format: uri. Maximum 2000 caractere. |
reasonsobject[] Opțional | Valoare reasons. |
reasons[].codestring Opțional | Valoare code. Maximum 100 caractere. |
reasons[].messagestring Obligatoriu / prezent | Valoare message. Maximum 2000 caractere. |
occurred_atstring Opțional | Momentul evenimentului ISO 8601. Format: date-time. |
curl -X POST "https://www.habitoo.ro/api/public/partner/v1/listings/11111111-1111-4111-8111-111111111111/publication" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--listings-id-publication-001" \
-H "Content-Type: application/json" \
--data '{
"status": "published",
"portal_listing_id": "DEMO-001",
"url": "https://example.invalid/anunt/demo-001",
"occurred_at": "2026-11-07T12:00:00Z"
}'{
"id": "a7b50000-0000-4000-8000-000000000100",
"applied": true
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Format: uuid. |
deduplicatedboolean Opțional | |
appliedboolean Opțional | |
testboolean Opțional |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/leadsEmail sau telefon obligatoriu; listing_id sau agency_id obligatoriu. Deduplicare portal + external_id. Testul folosește date separate, fără emailuri, cu marcaj Test.
Idempotency-Keyheader · string Obligatoriu | 1–200 caractere ASCII vizibile; unic per operație, păstrat 24 ore. Reîncercarea păstrează metoda, URL-ul, Content-Type și corpul brut identice. |
| Câmp / tip | Descriere și reguli |
|---|---|
external_idstring Obligatoriu / prezent | Valoare external_id. Maximum 200 caractere. |
listing_idstring Opțional | Valoare listing_id. Format: uuid. |
agency_idstring Opțional | Identificatorul agenției accesibile acestui portal. Format: uuid. |
namestring Obligatoriu / prezent | Valoare name. Maximum 200 caractere. |
emailstring Opțional | Valoare email. Format: email. Maximum 254 caractere. |
phonestring Opțional | Valoare phone. Maximum 50 caractere. |
messagestring Opțional | Valoare message. Maximum 4000 caractere. |
created_atstring Opțional | Valoare created_at. Format: date-time. |
curl -X POST "https://www.habitoo.ro/api/public/partner/v1/leads" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--leads-001" \
-H "Content-Type: application/json" \
--data '{
"external_id": "DEMO-LEAD-001",
"agency_id": "a7b50000-0000-4000-8000-000000000001",
"name": "Client Demo",
"email": "demo@example.invalid",
"message": "Mesaj fictiv pentru test."
}'{
"id": "11111111-1111-4111-8111-111111111111",
"status": "accepted",
"deduplicated": false
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Format: uuid. |
statusstring Obligatoriu / prezent | Valoare fixă: accepted. |
deduplicatedboolean Obligatoriu / prezent | |
testboolean Opțional | |
labelstring Opțional | Valoare fixă: Test. |
| 200 | Lead deduplicat. |
|---|---|
| 201 | Cerere reușită. |
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/leads/{id}/messagesAcceptă numai lead-uri ale aceluiași portal și mediu.
idpath · string Obligatoriu | UUID al entității accesibile acestui portal. |
Idempotency-Keyheader · string Obligatoriu | 1–200 caractere ASCII vizibile; unic per operație, păstrat 24 ore. Reîncercarea păstrează metoda, URL-ul, Content-Type și corpul brut identice. |
| Câmp / tip | Descriere și reguli |
|---|---|
external_idstring Obligatoriu / prezent | Valoare external_id. Maximum 200 caractere. |
bodystring Obligatoriu / prezent | Valoare body. Maximum 4000 caractere. |
senderstring Obligatoriu / prezent | Valoare sender. Valoare fixă: client. |
created_atstring Opțional | Valoare created_at. Format: date-time. |
curl -X POST "https://www.habitoo.ro/api/public/partner/v1/leads/11111111-1111-4111-8111-111111111111/messages" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--leads-id-messages-001" \
-H "Content-Type: application/json" \
--data '{
"external_id": "DEMO-MSG-001",
"sender": "client",
"body": "Mesaj fictiv."
}'{
"id": "11111111-1111-4111-8111-111111111111",
"deduplicated": false
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Format: uuid. |
deduplicatedboolean Opțional | |
appliedboolean Opțional | |
testboolean Opțional |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/statsMaximum 500 rânduri; valorile suprascriu ziua, fără adunare la retrimitere. Anunț accesibil acum sau retras în ultimele 30 zile. Corpul este limitat la 1 MiB.
Idempotency-Keyheader · string Obligatoriu | 1–200 caractere ASCII vizibile; unic per operație, păstrat 24 ore. Reîncercarea păstrează metoda, URL-ul, Content-Type și corpul brut identice. |
| Câmp / tip | Descriere și reguli |
|---|---|
itemsobject[] Obligatoriu / prezent | Valoare items. |
items[].listing_idstring Obligatoriu / prezent | Valoare listing_id. Format: uuid. |
items[].datestring Obligatoriu / prezent | Valoare date. Format: date. |
items[].viewsinteger Opțional | Valoare views. Minim: 0. Maxim: 2147483647. |
items[].contactsinteger Opțional | Valoare contacts. Minim: 0. Maxim: 2147483647. |
items[].favoritesinteger Opțional | Valoare favorites. Minim: 0. Maxim: 2147483647. |
curl -X POST "https://www.habitoo.ro/api/public/partner/v1/stats" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--stats-001" \
-H "Content-Type: application/json" \
--data '{
"items": [
{
"listing_id": "a7b50000-0000-4000-8000-000000000100",
"date": "2026-11-07",
"views": 12,
"contacts": 2,
"favorites": 1
}
]
}'{
"accepted": 1
}| Câmp / tip | Descriere și reguli |
|---|---|
acceptedinteger Obligatoriu / prezent |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
Agenția Demo Habitoo are 2 agenți fictivi și 12 anunțuri variate: apartamente, garsoniere, case, teren și spațiu comercial; vânzare/închiriere, EUR/RON și locații precise/neprecise.
Demo nu intră în feedurile existente, paginile publice sau statisticile reale. Scrierile test sunt separate, nu trimit emailuri unor oameni reali și pot produce numai notificări SuperAdmin în aplicație marcate Test. Lead-urile sunt marcate Test; datele de scriere expiră după 30 zile.
Simularea generează aceleași evenimente în /changes și webhooks din mediul test. Resetarea restaurează datele portalului curent și elimină scrierile de test, fără a afecta alt portal.
/api/public/partner/v1/sandbox/simulateDoar test; live primește 403. Generează eveniment în /changes. Corpul este limitat la 1000 caractere.
Idempotency-Keyheader · string Obligatoriu | 1–200 caractere ASCII vizibile; unic per operație, păstrat 24 ore. Reîncercarea păstrează metoda, URL-ul, Content-Type și corpul brut identice. |
| Câmp / tip | Descriere și reguli |
|---|---|
actionstring Obligatoriu / prezent | Valori: listing_update, listing_withdraw, listing_create, agent_update. |
curl -X POST "https://www.habitoo.ro/api/public/partner/v1/sandbox/simulate" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--sandbox-simulate-001" \
-H "Content-Type: application/json" \
--data '{
"action": "listing_update"
}'{
"id": "a7b50000-0000-4000-8000-000000000100",
"type": "listing.upserted",
"seq": 1,
"agency_id": "a7b50000-0000-4000-8000-000000000001"
}| Câmp / tip | Descriere și reguli |
|---|---|
idstring Obligatoriu / prezent | Format: uuid. |
typestring Obligatoriu / prezent | Valori: listing.upserted, listing.withdrawn, agent.updated. |
seqinteger Obligatoriu / prezent | |
agency_idstring Obligatoriu / prezent | Format: uuid. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
/api/public/partner/v1/sandbox/resetRestaurează 12 anunțuri și 2 agenți pentru portalul curent. Șterge feedbackul demo, nu datele reale. Corpul este limitat la 1000 caractere.
Idempotency-Keyheader · string Obligatoriu | 1–200 caractere ASCII vizibile; unic per operație, păstrat 24 ore. Reîncercarea păstrează metoda, URL-ul, Content-Type și corpul brut identice. |
| Câmp / tip | Descriere și reguli |
|---|
curl -X POST "https://www.habitoo.ro/api/public/partner/v1/sandbox/reset" \
-H "Authorization: Bearer $HABITOO_API_KEY" \
-H "Idempotency-Key: DEMO--sandbox-reset-001" \
-H "Content-Type: application/json" \
--data '{}'{
"reset": true,
"listings": 12,
"agents": 2,
"agency_id": "a7b50000-0000-4000-8000-000000000001"
}| Câmp / tip | Descriere și reguli |
|---|---|
resetboolean Obligatoriu / prezent | |
listingsinteger Obligatoriu / prezent | Valoare fixă: 12. |
agentsinteger Obligatoriu / prezent | Valoare fixă: 2. |
agency_idstring Obligatoriu / prezent | Format: uuid. |
| 200 | Cerere reușită. |
|---|---|
| 400 | Parametru sau Idempotency-Key invalid/lipsă. |
| 401 | Cheie API lipsă sau invalidă. |
| 403 | Cheie revocată, portal dezactivat sau acțiune rezervată testului. |
| 404 | Entitatea nu este accesibilă acestui portal/mediu. |
| 405 | Metodă neacceptată (la /me se întoarce 400). |
| 409 | Conflict de idempotență, cerere în procesare sau external_id conflictual. |
| 413 | Corpul cererii depășește limita. |
| 415 | Content-Type trebuie să fie application/json. |
| 422 | JSON sau date invalide. |
| 429 | Limita de cereri este depășită. |
| 503 | Serviciu indisponibil temporar. |
Documentație Partner API: autentificare, citire și sincronizare, feedback și mediu demo. Webhooks semnate, reîncercări și jurnal de livrări disponibile în 1.1.0. Specificația feedului rămâne separată și neschimbată.
Pentru cheia de test, verificarea integrării, cheia live, rotire sau revocare:
contact@habitoo.ro