e-bon
e-bon.ro
Referință API

Dispozitive

Endpoint-uri REST pentru gestionarea dispozitivelor fiscale (AMEF) — CRUD, release, status live, alerte și setul complet de comenzi (sold de casă, dată/oră, sigle, cote TVA, antet/subsol, operatori, anulare, storno etc.).

Dispozitive

API-ul de dispozitive este cea mai largă suprafață din e-bon. Se împarte în două straturi, ambele montate sub /api/v1/devices:

  • CRUD & introspecție — înregistrează, actualizează și șterge dispozitive, le listează, citește status și alerte. Aceste endpoint-uri citesc/scriu în înregistrarea dispozitivului din Firestore și în gateway-ul WebSocket din memorie.
  • Comenzi & operațiuni live — eliberare control (release), trimitere de comenzi fiscale (set_datetime, print_duplicate, non_fiscal_receipt, set_logo, configurări TVA/antet/subsol/operator, anulări, stornări…) și citire de date live de pe dispozitiv. Pentru majoritatea rutelor de comandă, platforma transmite cererea spre dispozitiv prin WebSocket și așteaptă răspunsul acestuia înainte de a răspunde.

Fiecare endpoint își declară mai jos propriul scope. Cele patru scope-uri folosite în acest grup sunt devices:read, devices:write, commands și receipts — vezi Autentificare › Alege permisiunile pentru catalogul complet. Plicul de eroare, limitele de rată și regulile de autentificare sunt documentate o singură dată pe Prezentarea API-ului.

Endpoint-urile de tip comandă live (sold de casă, set datetime, print duplicate, non-fiscal, sigla, cote TVA, antet/subsol, operator, info, last-receipt, void, storno) cer ca dispozitivul să fie online prin WebSocket și să aibă un controller atribuit. Dacă vreuna din condiții nu e îndeplinită, cererea eșuează cu 503 SERVICE_UNAVAILABLE.

CRUD

POST /api/v1/devices

Înregistrează un dispozitiv fiscal nou pe organizație.

  • Scope auth: devices:write
  • Verificare plan: cererea este verificată față de limita de dispozitive a planului tău înainte de validarea corpului; dacă organizația ta a atins deja limita de dispozitive, cererea este respinsă cu 403.

Corpul cererii

CâmpTipObligatoriuNote
namestringda1–255 caractere.
driverstringdaUna dintre datecs.isl, daisy.isl, eltrade.isl, incotex.isl, tremol.zfp, mfje.shtrih, custom.serial.
transportstringdaUna dintre tcp, bluetooth, serial.
locationIdstringdaLocația de care aparține dispozitivul (≥ 1 caracter).
connectionParamsobjectdaFie { host: string, port: number (1–65535) } (TCP), fie { address: string } (bluetooth/serial).

Răspuns (201 Created)

{
  "id": "dev_pos_01",
  "name": "Tejghea POS 1",
  "driver": "datecs.isl",
  "transport": "tcp",
  "locationId": "loc_main",
  "connectionParams": { "host": "192.168.1.50", "port": 9100 },
  "orgId": "acme_corp",
  "status": "offline",
  "controllerId": null,
  "controllerName": null,
  "createdAt": "2026-04-09T08:10:00.000Z",
  "updatedAt": "2026-04-09T08:10:00.000Z"
}

Exemplu

curl -X POST https://api.e-bon.ro/api/v1/devices \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Tejghea POS 1",
    "driver": "datecs.isl",
    "transport": "tcp",
    "locationId": "loc_main",
    "connectionParams": { "host": "192.168.1.50", "port": 9100 }
  }'

Coduri de eroare

GET /api/v1/devices

Listează dispozitivele organizației, opțional filtrate după status, locationId sau controllerId.

  • Scope auth: devices:read

Parametri query

ParametruTipNote
statusstringUna dintre online, offline, busy, error.
locationIdstringFiltrează după locație.
controllerIdstringDoar dispozitivele controlate de acest controller. Cele nealocate apar doar fără filtrul.

Răspuns (200 OK)

[
  {
    "id": "dev_pos_01",
    "name": "Tejghea POS 1",
    "driver": "datecs.isl",
    "transport": "tcp",
    "locationId": "loc_main",
    "connectionParams": { "host": "192.168.1.50", "port": 9100 },
    "status": "online",
    "orgId": "acme_corp",
    "controllerId": "instance_a",
    "controllerName": "Counter A",
    "createdAt": "2026-04-09T08:10:00.000Z",
    "updatedAt": "2026-04-09T08:10:00.000Z"
  }
]

Exemplu

curl "https://api.e-bon.ro/api/v1/devices?status=online" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

GET /api/v1/devices/statuses

Returnează conectivitatea WebSocket (wsConnected) și statusul Firestore pentru toate dispozitivele organizației, într-un singur apel.

  • Scope auth: devices:read

Răspuns (200 OK)

{
  "statuses": {
    "dev_pos_01": {
      "wsConnected": true,
      "controllerOnline": true,
      "firestoreStatus": "online",
      "effectiveStatus": "online",
      "lastSeen": "2026-04-09T08:09:55.000Z"
    },
    "dev_pos_02": {
      "wsConnected": false,
      "controllerOnline": false,
      "firestoreStatus": "offline",
      "effectiveStatus": "offline",
      "lastSeen": null
    }
  }
}

effectiveStatus este singura sursă de adevăr pentru conectivitate — derivată live din gateway (socket-ul controlerului deschis și link-ul dispozitivului raportat up). firestoreStatus este o proiecție persistată a aceleiași derivații și poate întârzia sau deveni stale; folosiți întotdeauna effectiveStatus.

Exemplu

curl https://api.e-bon.ro/api/v1/devices/statuses \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

GET /api/v1/devices/alerts

Returnează alertele derivate pentru toate dispozitivele organizației, indexate după deviceId.

  • Scope auth: devices:read

Parametri query

ParametruTipNote
severitystringFiltrează după severitate: warning, error, info.

Răspuns (200 OK)

{
  "alerts": {
    "dev_pos_01": [
      {
        "type": "paper_low",
        "severity": "warning",
        "message": "Paper roll is below 10%",
        "deviceId": "dev_pos_01",
        "deviceName": "Tejghea POS 1",
        "detectedAt": "2026-04-09T08:00:00.000Z"
      }
    ]
  }
}

Exemplu

curl "https://api.e-bon.ro/api/v1/devices/alerts?severity=error" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

GET /api/v1/devices/{deviceId}

Returnează un singur dispozitiv după ID.

  • Scope auth: devices:read

Exemplu

curl https://api.e-bon.ro/api/v1/devices/dev_pos_01 \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există în organizația ta.

PATCH /api/v1/devices/{deviceId}

Actualizează name, connectionParams și/sau locationId. Trebuie furnizat cel puțin un câmp.

  • Scope auth: devices:write

Corpul cererii

CâmpTipNote
namestring1–255 caractere.
connectionParamsobjectAceeași formă ca la creare.
locationIdstringMută dispozitivul într-o altă locație.

Exemplu

curl -X PATCH https://api.e-bon.ro/api/v1/devices/dev_pos_01 \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Tejghea POS 1 (renumită)" }'

Coduri de eroare

  • VALIDATION_ERROR (400) — corpul nu a trecut validarea schemei (de ex. corp gol).
  • NOT_FOUND (404) — dispozitivul nu există în organizația ta.

DELETE /api/v1/devices/{deviceId}

Șterge definitiv un dispozitiv.

  • Scope auth: devices:write
  • Răspuns: 204 No Content la succes.

Exemplu

curl -X DELETE https://api.e-bon.ro/api/v1/devices/dev_pos_01 \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există în organizația ta.

Control & status

Proprietatea asupra unui dispozitiv se stabilește implicit: controllerul care se conectează fizic și anunță dispozitivul (device.announce prin WebSocket) îl deține. O preluare de la alt controller este respinsă cât timp legătura proprietarului curent este online și aplicată când acesta este offline.

POST /api/v1/devices/{deviceId}/release

Șterge controllerId / controllerName și marchează dispozitivul offline, lăsându-l nealocat (vizibil doar în cloud) până când un controller îl anunță din nou. Doar controllerul curent poate elibera dispozitivul. Difuzează un eveniment device.released pe WebSocket-ul de evenimente al organizației.

  • Scope auth: devices:write

Corpul cererii

CâmpTipObligatoriuNote
controllerIdstringdacontrollerId al instanței care eliberează controlul.

Coduri de eroare

  • VALIDATION_ERROR (400) — corpul lipsește sau este invalid (de ex. controllerId gol).
  • FORBIDDEN (403) — controllerId nu corespunde controllerului curent.
  • NOT_FOUND (404) — dispozitivul nu există.

GET /api/v1/devices/{deviceId}/status

Returnează conectivitatea WebSocket și statusul Firestore pentru un singur dispozitiv.

  • Scope auth: devices:read

Răspuns (200 OK)

{
  "deviceId": "dev_pos_01",
  "wsConnected": true,
  "controllerOnline": true,
  "firestoreStatus": "online",
  "effectiveStatus": "online",
  "lastSeen": "2026-04-09T08:09:55.000Z"
}

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.

GET /api/v1/devices/{deviceId}/connection-history

Returnează ultimele 20 de evenimente de conectare/deconectare pentru un dispozitiv, cele mai noi primele.

  • Scope auth: devices:read

Răspuns (200 OK)

{
  "events": [
    {
      "type": "connected",
      "timestamp": "2026-04-09T08:00:00.000Z",
      "deviceModel": "Datecs DP-25",
      "appVersion": "2.4.1",
      "osVersion": "Android 14",
      "code": null,
      "reason": null
    },
    {
      "type": "disconnected",
      "timestamp": "2026-04-08T22:15:00.000Z",
      "deviceModel": "Datecs DP-25",
      "appVersion": "2.4.1",
      "osVersion": "Android 14",
      "code": 1006,
      "reason": "network unreachable"
    }
  ]
}

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.

GET /api/v1/devices/{deviceId}/alerts

Returnează alertele derivate pentru un singur dispozitiv.

  • Scope auth: devices:read

Parametri query

ParametruTipNote
severitystringFiltrează după severitate: warning, error, info.

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.

Comenzi

POST /api/v1/devices/{deviceId}/commands

Scurtătură generică pentru a pune în coadă o comandă fiscală țintită spre un dispozitiv. Corpul este pre-validat față de schema payload-ului pentru type-ul dat înainte de dispatch.

  • Scope auth: commands
  • Limită de rată: această rută este supusă unei limite de rată dedicate, mai stricte, pentru comenzi (în plus față de limita globală a API-ului).

Corpul cererii

CâmpTipObligatoriuNote
typestringdaUna dintre: print_receipt, void_receipt, x_report, z_report, cash_in, cash_out, get_status, get_cash_amount, set_datetime, print_duplicate, non_fiscal_receipt, set_logo, delete_logo, raw_command, open_drawer (plus tipurile mai specifice listate în rutele dedicate de mai jos).
payloadobjectdaPayload specific comenzii. Pre-validat pe server.

Răspuns (201 Created)

{
  "id": "cmd_abc123",
  "deviceId": "dev_pos_01",
  "type": "print_receipt",
  "payload": { "items": [], "payments": [] },
  "orgId": "acme_corp",
  "status": "pending",
  "apiKeyId": "apikey_abc",
  "createdAt": "2026-04-09T08:10:00.000Z",
  "updatedAt": "2026-04-09T08:10:00.000Z"
}

Coduri de eroare

  • VALIDATION_ERROR (400) — payload de comandă invalid.
  • NOT_FOUND (404) — dispozitivul nu există.
  • RATE_LIMIT_EXCEEDED (429) — limita de rată pentru comenzi a fost atinsă.

GET /api/v1/devices/{deviceId}/cash-balance

Trimite o comandă get_cash_amount și returnează soldul curent de casă al dispozitivului.

  • Scope auth: devices:read

Răspuns (200 OK)

{
  "cashBalance": 1234.5,
  "currency": "RON",
  "deviceId": "dev_pos_01",
  "timestamp": "2026-04-09T08:10:00.000Z"
}

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul a răspuns dar nu a returnat date despre sold.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/set-datetime

Trimite o comandă set_datetime. Dacă datetime lipsește, se folosește ora curentă a serverului.

  • Scope auth: devices:write

Corpul cererii

CâmpTipObligatoriuNote
datetimestringnuȘir ISO 8601. Implicit, ora serverului.

Răspuns (200 OK)

{
  "success": true,
  "datetime": "2026-04-09T08:10:00.000Z",
  "deviceId": "dev_pos_01",
  "timestamp": "2026-04-09T08:10:00.000Z"
}

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/print-duplicate

Trimite o comandă print_duplicate pentru a retipări ultimul bon. Fără corp.

  • Scope auth: devices:write

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/non-fiscal

Tipărește un bon non-fiscal cu text liber (ocolește logica fiscală). Util pentru note interne, training, vouchere etc.

  • Scope auth: devices:write

Corpul cererii

CâmpTipObligatoriuNote
linesstringdaCel puțin o linie. Fiecare linie ≤ 48 caractere.
headerstringnuAntet opțional, tipărit bold/centrat în partea de sus. ≤ 48 caractere.

Exemplu

curl -X POST https://api.e-bon.ro/api/v1/devices/dev_pos_01/non-fiscal \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -H "Content-Type: application/json" \
  -d '{
    "header": "MULȚUMIM",
    "lines": ["Cod cupon: ABC-123", "Valabil până la 30.06.2026"]
  }'

Coduri de eroare

  • VALIDATION_ERROR (400) — corpul nu a trecut validarea schemei.
  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

Încarcă o siglă de bon codată base64 (BMP/PNG/JPEG, în funcție de dispozitiv).

  • Scope auth: devices:write

Corpul cererii

CâmpTipObligatoriuNote
logostringdaDate imagine codate base64, ≥ 1 caracter.

Coduri de eroare

  • VALIDATION_ERROR (400) — corpul nu a trecut validarea schemei.
  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

Șterge sigla de bon stocată curent pe dispozitiv. Fără corp.

  • Scope auth: devices:write

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

Configurare TVA

GET /api/v1/devices/{deviceId}/vat-rates

Interoghează cotele TVA programate curent pe dispozitiv.

  • Scope auth: devices:read

Răspuns (200 OK)

{
  "rates": [
    { "group": "VAT1", "rate": 21, "enabled": true },
    { "group": "VAT2", "rate": 11, "enabled": true }
  ],
  "deviceId": "dev_pos_01",
  "timestamp": "2026-04-09T08:10:00.000Z"
}

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul a răspuns dar nu a returnat datele despre cote.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

GET /api/v1/devices/{deviceId}/vat-capabilities

Interoghează capabilitățile dispozitivului pentru cotele TVA (număr maxim de cote, dacă numele sunt programabile etc.).

  • Scope auth: devices:read

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul nu a returnat datele despre capabilități.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/vat-rates

Reprogramează cotele TVA pe dispozitiv.

  • Scope auth: devices:write

Corpul cererii

CâmpTipObligatoriuNote
ratesarraydaCel puțin o intrare. Fiecare { group: "VAT1".."VAT16" | "exempt", rate: number (≥ 0), enabled: boolean }.

Coduri de eroare

  • VALIDATION_ERROR (400) — corpul nu a trecut validarea schemei.
  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

Antet / subsol / operator

Interoghează capabilitățile dispozitivului pentru antet/subsol (număr maxim de linii, lungime linie etc.).

  • Scope auth: devices:read

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul nu a returnat datele despre capabilități.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

Returnează antetul și subsolul programate curent pe dispozitiv.

  • Scope auth: devices:read

Răspuns (200 OK)

{
  "header": ["ACME SRL", "Strada Exemplu 1, Bucuresti"],
  "footer": ["www.acme.ro", "Vă mulțumim!"],
  "deviceId": "dev_pos_01",
  "timestamp": "2026-04-09T08:10:00.000Z"
}

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul nu a returnat datele despre antet/subsol.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/header-footer

Reprogramează antetul și subsolul tipărite pe fiecare bon.

  • Scope auth: devices:write

Corpul cererii

CâmpTipObligatoriuNote
headerstringdaPână la 10 linii, fiecare ≤ 48 caractere.
footerstringdaPână la 10 linii, fiecare ≤ 48 caractere.

Coduri de eroare

  • VALIDATION_ERROR (400) — corpul nu a trecut validarea schemei.
  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

GET /api/v1/devices/{deviceId}/operator-capabilities

Interoghează capabilitățile dispozitivului pentru operatori (număr maxim de operatori, dacă numele/parolele sunt programabile etc.).

  • Scope auth: devices:read

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul nu a returnat datele despre capabilități.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/operator

Programează un slot de operator (casier) pe dispozitiv.

  • Scope auth: devices:write

Corpul cererii

CâmpTipObligatoriuNote
operatorIdintegerdaSlot operator, ≥ 1.
namestringda1–32 caractere.
passwordstringnu≤ 8 caractere.

Coduri de eroare

  • VALIDATION_ERROR (400) — corpul nu a trecut validarea schemei.
  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

Date live & acțiuni corective

GET /api/v1/devices/{deviceId}/info

Trimite o comandă get_info și returnează informațiile de identificare ale dispozitivului (model, firmware, serie fiscală etc., după cum sunt expuse de protocol).

  • Scope auth: devices:read

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul nu a returnat datele cerute.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

GET /api/v1/devices/{deviceId}/last-receipt

Trimite o comandă get_last_receipt_info și returnează rezumatul ultimului bon al dispozitivului.

  • Scope auth: devices:read

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • INTERNAL_ERROR (500) — dispozitivul nu a returnat datele cerute.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/void-open

Trimite o comandă void_open_receipt pentru a anula un bon deschis pe AMEF (de ex. după o vânzare întreruptă). Fără corp.

  • Scope auth: devices:write

Răspuns (200 OK)

{
  "success": true,
  "message": "Open receipt voided successfully",
  "deviceId": "dev_pos_01",
  "timestamp": "2026-04-09T08:10:00.000Z"
}

Coduri de eroare

  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

POST /api/v1/devices/{deviceId}/reversal

Trimite o comandă print_reversal_receipt. Corpul este transmis ca payload al comenzii după validarea pe server față de schema payload-ului de stornare. Returnează receiptNumber-ul bonului de stornare tipărit, atunci când dispozitivul îl raportează.

  • Scope auth: devices:write

Răspuns (201 Created)

{
  "success": true,
  "message": "Reversal receipt printed successfully",
  "receiptNumber": "0000123",
  "deviceId": "dev_pos_01",
  "timestamp": "2026-04-09T08:10:00.000Z"
}

Coduri de eroare

  • VALIDATION_ERROR (400) — payload-ul nu a trecut validarea bonului de stornare.
  • NOT_FOUND (404) — dispozitivul nu există.
  • SERVICE_UNAVAILABLE (503) — dispozitiv offline sau fără controller atribuit.

GET /api/v1/devices/{deviceId}/receipts

Scurtătură pentru a lista bonurile filtrate după dispozitiv, cele mai noi primele. Este un wrapper de comoditate peste GET /receipts.

  • Scope auth: receipts

Parametri query

ParametruTipImplicitNote
typestring—Filtrează după tipul bonului (sale / refund / storno).
limitinteger501–100.

Exemplu

curl "https://api.e-bon.ro/api/v1/devices/dev_pos_01/receipts?type=sale&limit=20" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

  • VALIDATION_ERROR (400) — query invalid.
  • NOT_FOUND (404) — dispozitivul nu există.

Vezi și

  • Bonuri — stochează și caută bonurile produse de aceste dispozitive.
  • Rapoarte — rapoarte live de pe dispozitiv: citiri MF/EJ, tipăriri X/Z/periodice, export arhivă ANAF.
  • Autentificare — catalogul scope-urilor folosit de fiecare endpoint de mai sus.
  • Prezentare API — URL de bază, plic de eroare, limite de rată, idempotență, paginare.