Înainte de toate: aprobarea
Accesul de integrator îl dă Housera. Scrie-ne la office@housera.ro cu:- numele aplicației, așa cum vrei să-l vadă agențiile;
- site-ul;
- adresele de întoarcere (
redirect_uri), exact cum le vei trimite. Le comparăm caracter cu caracter, fără wildcard. Acceptăm doarhttps, plushttp://localhostpentru dezvoltare; - drepturile de care ai nevoie (
listings:read,listings:write,media:write); - opțional, o adresă
httpsde webhook pentru evenimentele conturilor conectate.
client_id (hsrc_…), client_secret (hsrs_…) și, dacă ai cerut webhook, secretul lui (whsec_…). Le primești o singură dată; păstrează-le doar pe server. Pentru sandbox primești date separate, pe staging.housera.ro.
Fluxul
1
Pregătești cererea
Pentru fiecare conectare generezi două valori aleatoare și le păstrezi în sesiunea agentului, pe serverul tău:
state: protejează împotriva cererilor falsificate; îl verifici la întoarcere;code_verifier: 43–128 de caractere dinA-Z a-z 0-9 - . _ ~. Din el calculezicode_challenge = BASE64URL(SHA256(code_verifier)), fără=la final.
2
Trimiți agentul pe pagina de acord
Redirecționezi browserul agentului la:În sandbox, adresa e
https://staging.housera.ro/setari/api/conectare. Staging-ul nu e deschis publicului: pentru testele tale îți dăm, la cerere, un cont de test cu acces la el. Varianta în engleză, /en/settings/api/connect, e echivalentă.scope e opțional: fără el ceri toate drepturile pe care Housera ți le-a aprobat. Nu poți cere mai mult de atât, iar catalogul platformei nu se acordă niciodată prin conectare.3
Agentul acceptă sau refuză
Dacă agentul nu e autentificat, housera.ro îi cere întâi să intre în cont. Apoi vede numele aplicației tale, contul sau agenția pentru care acordă accesul, drepturile și domeniul la care se întoarce.Browserul revine la adresa ta de întoarcere:
- la acord:
https://crm.exemplu.ro/housera/callback?code=…&state=…; - la refuz:
…?error=access_denied&state=….
state e cel din sesiune. Dacă nu e, oprești fluxul.4
Schimbi codul pe cheie, de pe server
Codul expiră în 60 de secunde și merge o singură dată. Îl trimiți imediat la Poți trimite
POST /oauth/token:client_id și client_secret și prin HTTP Basic, în loc de corp.5
Lucrezi cu cheia, ca orice cheie
Păstrezi
access_token și connection_id lângă agenția din CRM-ul tău și folosești cheia exact ca în restul documentației: Authorization: Bearer …. Aceleași reguli, aceleași limite, aceeași moderare.Ce se întâmplă cu anunțurile
- Anunțurile pe care le publici sunt ale agenției. Agenții le pot edita și din portal; atunci primești
listing.edited_in_portalși nouletag. - Id-urile tale (
PUT /listings/ref/{ref}) sunt doar ale tale: două CRM-uri conectate la aceeași agenție nu se încurcă, chiar dacă folosesc aceleași id-uri. - În jurnalul cererilor, agenția vede fiecare cerere făcută prin legătura ta, cu numele aplicației.
Evenimentele
Dacă ai declarat un webhook la aprobare, primești pe el evenimentele tuturor conturilor conectate, semnate cu secretul webhook-ului (vezi Webhook-uri). Fiecare livrare are în plus câmpulconnection, egal cu connection_id din răspunsul de la schimbul de cod:
GET /events?after=…, folosind cheia lui.
Expirarea și deconectarea
- Cheia expiră după 365 de zile (
expires_in). Înainte de termen, treci agentul din nou prin pagina de acord: noua cheie o înlocuiește pe cea veche. - O nouă conectare a aceluiași cont îți dă o cheie nouă și o invalidează pe cea veche.
- Agenția te poate deconecta din Setări → API → Aplicații conectate. Din clipa aceea, cheia primește
401 unauthenticated, iar webhook-ul nu mai primește evenimentele contului. Tratezi401ca pe o deconectare și îi propui agentului să se reconecteze. - Dacă Housera îți dezactivează accesul, toate cheile tale primesc
401până la reactivare.
Erori
Pe pagina de acord, cât timp aplicația sau adresa de întoarcere nu sunt confirmate, eroarea rămâne pe housera.ro și nu ajunge la tine:
Odată confirmate, erorile revin la adresa ta de întoarcere, cu
error și state:
La
POST /oauth/token, erorile au forma RFC 6749, {"error": "…", "error_description": "…"}: