> ## Documentation Index
> Fetch the complete documentation index at: https://api.housera.ro/llms.txt
> Use this file to discover all available pages before exploring further.

# Schimbă codul pe cheia contului

> Pasul server la server din „Conectează cu Housera”: integratorul, autentificat cu secretul lui, schimbă codul de unică folosință primit pe adresa de întoarcere (și `code_verifier`-ul PKCE) pe cheia contului care a acceptat. Codul expiră în 60 de secunde și merge o singură dată; un cod folosit a doua oară revocă cheia pe care a dat-o. Ghidul complet e în pagina Conectează cu Housera.



## OpenAPI

````yaml ro/openapi.json POST /oauth/token
openapi: 3.1.2
info:
  title: Housera API
  version: 1.0.0
  description: >-
    Publică și gestionează anunțuri imobiliare pe Housera din CRM-ul sau din
    aplicația ta, cu aceleași reguli ca formularul Housera.
servers:
  - url: https://staging.housera.ro/api/v1
    description: 'Sandbox (staging): date de test, aceleași reguli ca producția.'
  - url: https://housera.ro/api/v1
    description: 'Producție: anunțurile reale de pe housera.ro.'
security:
  - bearer: []
tags:
  - name: Anunțurile tale
  - name: Poze
  - name: Evenimente
  - name: Vocabular
  - name: Conectează cu Housera
paths:
  /oauth/token:
    post:
      tags:
        - Conectează cu Housera
      summary: Schimbă codul pe cheia contului
      description: >-
        Pasul server la server din „Conectează cu Housera”: integratorul,
        autentificat cu secretul lui, schimbă codul de unică folosință primit pe
        adresa de întoarcere (și `code_verifier`-ul PKCE) pe cheia contului care
        a acceptat. Codul expiră în 60 de secunde și merge o singură dată; un
        cod folosit a doua oară revocă cheia pe care a dat-o. Ghidul complet e
        în pagina Conectează cu Housera.
      operationId: v1.oauth.token
      parameters:
        - name: locale
          in: query
          required: false
          schema:
            type: string
            enum:
              - ro
              - en
            default: ro
          example: ro
          description: >-
            Limba răspunsului: mesajele (`title`, `detail`) și etichetele, `ro`
            sau `en`. Codurile sunt aceleași în orice limbă. Are întâietate față
            de `Accept-Language` și de limba contului.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/OAuthTokenRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuthToken'
          description: >-
            Cheia contului, legată de integrator. Păstreaz-o pe server, lângă
            `connection_id`.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuthError'
          description: >-
            Codul nu e valid, a expirat, a fost deja folosit sau nu se
            potrivește cu cererea de acord (`invalid_grant`), ori `grant_type`
            nu e `authorization_code`.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuthError'
          description: >-
            `client_id` sau `client_secret` greșite, ori integratorul e
            dezactivat (`invalid_client`).
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Prea multe cereri; reîncearcă după `Retry-After` secunde.
      security: []
components:
  schemas:
    OAuthTokenRequest:
      type: object
      title: OAuthTokenRequest
      properties:
        grant_type:
          type: string
          enum:
            - authorization_code
          description: Mereu `authorization_code`.
        code:
          type: string
          description: Codul primit pe adresa de întoarcere, în `?code=`.
        redirect_uri:
          type: string
          description: Exact adresa de întoarcere din cererea de acord.
        code_verifier:
          type: string
          minLength: 43
          maxLength: 128
          description: >-
            Verificatorul PKCE pe care l-ai generat înainte de cererea de acord
            (43–128 caractere).
        client_id:
          type: string
          description: >-
            Identificatorul public al integratorului (`hsrc_…`). Se poate
            trimite și prin HTTP Basic.
        client_secret:
          type: string
          description: >-
            Secretul integratorului (`hsrs_…`), doar de pe serverul tău. Se
            poate trimite și prin HTTP Basic.
      required:
        - grant_type
        - code
        - redirect_uri
        - code_verifier
        - client_id
        - client_secret
    OAuthToken:
      type: object
      title: OAuthToken
      properties:
        access_token:
          type: string
          description: 'Cheia contului, de trimis ca `Authorization: Bearer`.'
        token_type:
          type: string
          enum:
            - Bearer
          description: Mereu `Bearer`.
        expires_in:
          type: integer
          description: >-
            În câte secunde expiră cheia (365 de zile). Înainte de termen,
            contul trece din nou prin acord.
        scope:
          type: string
          description: Drepturile acordate, separate prin spațiu.
        connection_id:
          type: integer
          description: >-
            Legătura cu acest cont. Vine în câmpul `connection` al fiecărui
            eveniment livrat pe webhook-ul integratorului.
      required:
        - access_token
        - token_type
        - expires_in
        - scope
        - connection_id
    OAuthError:
      type: object
      title: OAuthError
      properties:
        error:
          type: string
          enum:
            - invalid_client
            - invalid_grant
            - unsupported_grant_type
          description: Codul erorii, după RFC 6749.
        error_description:
          type: string
          description: Explicația, în limba cererii.
      required:
        - error
        - error_description
    Problem:
      type: object
      title: Problem
      properties:
        type:
          type: string
          format: uri
          description: Adresa tipului de problemă (RFC 9457).
        title:
          type: string
          description: Rezumatul problemei, în limba cererii.
        status:
          type: integer
          description: Codul HTTP.
        code:
          type: string
          description: >-
            Codul stabil al refuzului, pe care ramifică un client (lista în
            pagina Erori).
        detail:
          type: string
          description: Explicația, în limba cererii.
      required:
        - type
        - title
        - status
        - code
        - detail
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: 'Authorization: Bearer <key>'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.