Dispozitive
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 — preluare/eliberare control (claim/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.
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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
name | string | da | 1–255 caractere. |
protocol | string | da | Una dintre datecs_compact, datecs_professional, datecs_extended, daisy, daisy_ro, eltrade, incotex, tremol, tremol_v2, custom, mfje. |
transport | string | da | Una dintre tcp, bluetooth, serial, usb. |
locationId | string | da | Locația de care aparține dispozitivul (≥ 1 caracter). |
connectionParams | object | da | Fie { host: string, port: number (1–65535) } (TCP), fie { address: string } (bluetooth/serial/usb). |
Răspuns (201 Created)
{
"id": "dev_pos_01",
"name": "Tejghea POS 1",
"protocol": "datecs_compact",
"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",
"protocol": "datecs_compact",
"transport": "tcp",
"locationId": "loc_main",
"connectionParams": { "host": "192.168.1.50", "port": 9100 }
}'
Coduri de eroare
VALIDATION_ERROR(400) — corpul nu a trecut validarea schemei.FORBIDDEN(403) — limita de dispozitive a planului organizației a fost atinsă.UNAUTHORIZED/FORBIDDEN— vezi Autentificare › Tratează erorile de autentificare.
GET /api/v1/devices
Listează dispozitivele organizației, opțional filtrate după status sau locationId.
- Scope auth:
devices:read
Parametri query
| Parametru | Tip | Note |
|---|---|---|
status | string | Una dintre online, offline, busy, error. |
locationId | string | Filtrează după locație. |
Răspuns (200 OK)
[
{
"id": "dev_pos_01",
"name": "Tejghea POS 1",
"protocol": "datecs_compact",
"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,
"firestoreStatus": "online",
"lastSeen": "2026-04-09T08:09:55.000Z"
},
"dev_pos_02": { "wsConnected": false, "firestoreStatus": "offline", "lastSeen": null }
}
}
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
| Parametru | Tip | Note |
|---|---|---|
severity | string | Filtrează 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âmp | Tip | Note |
|---|---|---|
name | string | 1–255 caractere. |
connectionParams | object | Aceeași formă ca la creare. |
locationId | string | Mută 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 Contentla 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
POST /api/v1/devices/{deviceId}/claim
Setează controllerId și controllerName pe un dispozitiv, indicând care instanță de aplicație îl conduce în prezent. Difuzează un eveniment device.claimed pe WebSocket-ul de evenimente al organizației.
- Scope auth:
devices:write
Corpul cererii
| Câmp | Tip | Obligatoriu | Note |
|---|---|---|---|
controllerId | string | da | 1–255 caractere. Stabil pe instanță. |
controllerName | string | da | 1–255 caractere. Etichetă lizibilă. |
Exemplu
curl -X POST https://api.e-bon.ro/api/v1/devices/dev_pos_01/claim \
-H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
-H "Content-Type: application/json" \
-d '{ "controllerId": "instance_a", "controllerName": "Counter A" }'
Coduri de eroare
VALIDATION_ERROR(400) — corpul nu a trecut validarea schemei.NOT_FOUND(404) — dispozitivul nu există.CONFLICT(409) — dispozitivul este deja controlat de un altcontrollerId.
POST /api/v1/devices/{deviceId}/release
Șterge controllerId / controllerName. Doar controllerul curent poate elibera dispozitivul.
- Scope auth:
devices:write
Corpul cererii
| Câmp | Tip | Obligatoriu | Note |
|---|---|---|---|
controllerId | string | da | controllerId al instanței care eliberează controlul. |
Coduri de eroare
FORBIDDEN(403) —controllerIdnu 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,
"firestoreStatus": "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
| Parametru | Tip | Note |
|---|---|---|
severity | string | Filtrează 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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
type | string | da | Una 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). |
payload | object | da | Payload 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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
datetime | string | nu | Ș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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
lines | string | da | Cel puțin o linie. Fiecare linie ≤ 48 caractere. |
header | string | nu | Antet 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.
POST /api/v1/devices/{deviceId}/logo
Încarcă o siglă de bon codată base64 (BMP/PNG/JPEG, în funcție de dispozitiv).
- Scope auth:
devices:write
Corpul cererii
| Câmp | Tip | Obligatoriu | Note |
|---|---|---|---|
logo | string | da | Date 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.
DELETE /api/v1/devices/{deviceId}/logo
Ș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": [
{ "name": "Standard", "percentage": 21 },
{ "name": "Redusă alimente", "percentage": 9 }
],
"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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
rates | array | da | Cel puțin o intrare. Fiecare { name: string (≥ 1 caracter), percentage: number (≥ 0) }. |
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
GET /api/v1/devices/{deviceId}/header-footer-capabilities
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.
GET /api/v1/devices/{deviceId}/header-footer
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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
header | string | da | Până la 10 linii, fiecare ≤ 48 caractere. |
footer | string | da | Pâ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âmp | Tip | Obligatoriu | Note |
|---|---|---|---|
operatorId | integer | da | Slot operator, ≥ 1. |
name | string | da | 1–32 caractere. |
password | string | nu | ≤ 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
| Parametru | Tip | Implicit | Note |
|---|---|---|---|
type | string | — | Filtrează după tipul bonului (sale / refund / storno). |
limit | integer | 50 | 1–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 — rapoartele X / Z / JE / MF construite peste jurnalul de bonuri.
- Autentificare — catalogul scope-urilor folosit de fiecare endpoint de mai sus.
- Prezentare API — URL de bază, plic de eroare, limite de rată, idempotență, paginare.
Rapoarte
Endpoint-uri REST pentru rapoarte fiscale — X (totaluri curente), Z (închidere de zi), JE (Jurnal Electronic XML pentru ANAF) și MF (arhivă Memorie Fiscală) — cu scheme cerere/răspuns, exemple curl și coduri de eroare per endpoint.
Webhook-uri
Endpoint-uri REST pentru gestionarea abonamentelor webhook — creare, listare, actualizare, ștergere, rotire chei de semnare, livrări de test și inspecția istoricului de livrări.