Preskoči na sadržaj

Upiti i pokazivanja ​

POST /v1/inquiries · POST /v1/viewing-requests · opseg public:inquiry

Oba poziva prave upit u CRM-u agencije (kanal „website“) i šalju obaveštenje agentima. Zahtev za pokazivanje pored toga upisuje pokazivanje sa statusom „requested“ u kalendar agencije, koje agent potvrđuje ili predlaže drugo vreme.

Upit (kontakt forma) ​

http
POST /api/v1/inquiries
x-api-key: pk_…
content-type: application/json

{
  "propertyId": "5b1f0c7e-3a2d-4c51-9a7e-0f9a1f6d2c11",
  "name": "Marko Marković",
  "email": "marko@example.com",
  "phone": "+381601234567",
  "message": "Da li je stan još dostupan? Zanima me razgledanje vikendom.",
  "consent": true,
  "website": ""
}

Odgovor 201:

json
{ "id": "e4a1…" }
PoljeObaveznoPravilo
nameda1–200 znakova
consentdamora biti true: posetilac je pristao na obradu podataka (checkbox u formi)
propertyIdneUUID oglasa; bez njega je to opšti upit agenciji
emailneispravna email adresa, do 200 znakova, ili null
phonenedo 40 znakova, ili null
messagenedo 5.000 znakova (podrazumevano prazno)
websitenehoneypot, mora ostati prazan (vidi ispod)

Tražite bar telefon ili email, inače agent nema kako da odgovori (API to ne proverava). Upit o oglasu stiže u filijalu oglasa; opšti upit sa ključem filijale stiže u tu filijalu. Nepoznat ili nevidljiv propertyId vraća 404.

Zahtev za pokazivanje ​

http
POST /api/v1/viewing-requests
x-api-key: pk_…
content-type: application/json

{
  "propertyId": "5b1f0c7e-3a2d-4c51-9a7e-0f9a1f6d2c11",
  "name": "Marko Marković",
  "phone": "+381601234567",
  "email": "marko@example.com",
  "preferredAt": "2026-11-03T10:00:00+01:00",
  "message": "Može i posle 17h.",
  "consent": true,
  "website": ""
}

Odgovor 201:

json
{ "id": "9d3c…", "status": "requested" }
PoljeObaveznoPravilo
propertyIddaUUID aktivnog oglasa koji je vidljiv sajtu (inače 404)
nameda1–200 znakova
phoneda5–40 znakova
preferredAtdaISO 8601 sa vremenskom zonom (…+01:00 ili …Z); mora biti u budućnosti, inače 400 BAD_REQUEST
consentdatrue
emailneemail ili null
messagenedo 2.000 znakova
websitenehoneypot, prazan

Termin traje 30 minuta u kalendaru. Agencija može predložiti drugo vreme; posetioca kontaktira agent (telefonom), API ne šalje potvrdu posetiocu. Na sajtu napišite nešto poput „Agent će vas kontaktirati da potvrdi termin“.

Lokalno vreme

Posetioci biraju vreme po beogradskom vremenu. Iz <input type="datetime-local"> dobijate 2026-11-03T10:00 bez zone: dodajte zonu (+01:00 zimi, +02:00 leti) ili pretvorite u UTC pre slanja. new Date(value).toISOString() u browseru koristi zonu posetioca, što je obično tačno.

Kada Propertio prepozna postojećeg klijenta po tačno istom telefonu (i istom emailu, ako ga obe strane imaju), pokazivanje se veže za njega. Odgovor sajtu je isti u oba slučaja.

Zaštita od spama (honeypot) ​

Polje website je zamka za botove: u formi ga napravite kao skriveno tekstualno polje koje čovek ne vidi i ne popunjava. Ako stigne neprazno, API odgovara kao da je uspelo (201 sa nultim id-em 00000000-0000-4000-8000-000000000000), ali ništa ne upisuje.

html
<!-- sakriveno za ljude, ne type="hidden" (botovi ga preskaču) -->
<div aria-hidden="true" style="position:absolute;left:-10000px">
  <label>Ne popunjavati <input name="website" tabindex="-1" autocomplete="off"></label>
</div>

Pošaljite vrednost polja onakvu kakva je stigla iz forme. Uz honeypot, limit od 20 upita u minuti po IP adresi štiti od poplave; za dodatnu zaštitu na svom serveru možete dodati CAPTCHA pre poziva API-ja.

Iz browsera ili sa servera ​

  • Sa servera (preporučeno: Next.js server action, API ruta, PHP): ključ ostaje tajan, a limit od 20/min se odnosi na IP servera, pa za sajt sa puno upita javite nam se.
  • Iz browsera: radi (CORS je otvoren), ali ključ je vidljiv u kodu stranice. Tada obavezno podesite dozvoljene sajtove.

Lični podaci ​

Ime, telefon i email posetioca su lični podaci. Šaljite ih samo preko HTTPS-a, ne upisujte ih u logove sajta i ne čuvajte kopije na sajtu ako vam nisu potrebne. Polje consent: true šaljite samo kada je posetilac zaista označio saglasnost; tekst saglasnosti i link na politiku privatnosti agencije stavite pored checkboxa.