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

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.

Rapoarte

API-ul de rapoarte stochează și returnează cele patru tipuri de rapoarte fiscale produse de o integrare AMEF: rapoarte X (totaluri curente zilnice, fără resetare), rapoarte Z (închidere de zi, resetează contoarele), rapoarte JE (Jurnal Electronic — XML-ul cerut de ANAF) și rapoarte MF (arhivă Memorie Fiscală). Toate rutele sunt sub /api/v1/reports.

Fiecare endpoint din acest grup necesită scope-ul reports și acceptă fie o cheie API (x-api-key / Authorization: Bearer …), fie un JWT din Portal. Vezi Autentificare › Alege permisiunile pentru catalogul complet.

Plicul de eroare, limitele de rată și convențiile de paginare sunt documentate o singură dată pe Prezentarea API-ului; pe această pagină listăm doar codurile de eroare specifice fiecărui endpoint.

Endpoint-urile de listare (GET /reports/x, /z, /je, /mf) folosesc o fereastră bazată doar pe limit (cele mai noi primele, după timestamp / reportDate / archiveDate) — nu folosesc paginarea prin cursor de la Bonuri. Folosește filtrele de interval (from, to) ca să parcurgi istoricul.

Rapoarte X

Rapoartele X sunt instantanee fără resetare ale totalurilor curente de pe un dispozitiv. Nu modifică contoarele și pot fi emise de oricâte ori în cursul unei zile fiscale.

GET /api/v1/reports/x

Listează rapoartele X ale organizației, cele mai noi primele, după timestamp.

  • Scope auth: reports

Parametri query

ParametruTipImplicitNote
deviceIdstringFiltrează după dispozitiv.
fromstringTimestamp ISO 8601; rapoarte cu timestamp >= from.
tostringTimestamp ISO 8601; rapoarte cu timestamp <= to.
limitinteger501100.

Răspuns (200 OK)

{
  "reports": [
    {
      "id": "xrep_abc123",
      "deviceId": "dev_pos_01",
      "totals": { "sales": 1240.5, "refunds": 0, "net": 1240.5 },
      "vatBreakdown": [{ "rate": 9, "base": 1138.07, "amount": 102.43 }],
      "receiptCount": 42,
      "timestamp": "2026-04-09T14:00:00.000Z",
      "orgId": "acme_corp",
      "createdAt": "2026-04-09T14:00:01.123Z"
    }
  ]
}

Exemplu

curl "https://api.e-bon.ro/api/v1/reports/x?deviceId=dev_pos_01&limit=20" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

GET /api/v1/reports/x/{reportId}

Returnează un singur raport X după ID.

  • Scope auth: reports

Răspuns (200 OK)

{
  "report": {
    "id": "xrep_abc123",
    "deviceId": "dev_pos_01",
    "totals": { "sales": 1240.5, "refunds": 0, "net": 1240.5 },
    "vatBreakdown": [{ "rate": 9, "base": 1138.07, "amount": 102.43 }],
    "receiptCount": 42,
    "timestamp": "2026-04-09T14:00:00.000Z",
    "orgId": "acme_corp",
    "createdAt": "2026-04-09T14:00:01.123Z"
  }
}

Exemplu

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

Coduri de eroare

POST /api/v1/reports/x

Stochează un raport X nou pentru un dispozitiv.

  • Scope auth: reports

Corpul cererii

CâmpTipObligatoriuNote
deviceIdstringdaTrebuie să fie un dispozitiv care există în organizația ta.
totalsobjectda{ sales, refunds, net } — toate numere.
vatBreakdownarraydaCel puțin o intrare. Fiecare { rate, base, amount }. rate0, 9, 11, 21.
receiptCountintegerdaNumărul de bonuri acoperite de raport (≥ 0).
timestampstringdaTimestamp ISO 8601 când raportul a fost produs pe AMEF.

Răspuns (201 Created)

Returnează raportul creat (aceeași formă ca GET /reports/x/{reportId}).

Exemplu

curl -X POST https://api.e-bon.ro/api/v1/reports/x \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceId": "dev_pos_01",
    "totals": { "sales": 1240.5, "refunds": 0, "net": 1240.5 },
    "vatBreakdown": [{ "rate": 9, "base": 1138.07, "amount": 102.43 }],
    "receiptCount": 42,
    "timestamp": "2026-04-09T14:00:00.000Z"
  }'

Coduri de eroare

Rapoarte Z

Rapoartele Z închid ziua fiscală pe AMEF și resetează contoarele curente. Postarea unui raport Z în e-bon declanșează și o notificare prin email (fire-and-forget) către fiecare adresă din notificationSettings.zReportEmails al organizației.

GET /api/v1/reports/z

Listează rapoartele Z ale organizației, cele mai noi primele, după timestamp.

  • Scope auth: reports

Parametri query

ParametruTipImplicitNote
deviceIdstringFiltrează după dispozitiv.
fromstringTimestamp ISO 8601; rapoarte cu timestamp >= from.
tostringTimestamp ISO 8601; rapoarte cu timestamp <= to.
limitinteger501100.

Răspuns (200 OK)

{
  "reports": [
    {
      "id": "zrep_xyz789",
      "deviceId": "dev_pos_01",
      "totals": { "sales": 5840.25, "refunds": 12.5, "net": 5827.75 },
      "vatBreakdown": [{ "rate": 9, "base": 5347.48, "amount": 480.27 }],
      "receiptCount": 187,
      "timestamp": "2026-04-09T22:00:00.000Z",
      "resetCounter": 134,
      "periodStart": "2026-04-09T05:00:00.000Z",
      "periodEnd": "2026-04-09T22:00:00.000Z",
      "orgId": "acme_corp",
      "createdAt": "2026-04-09T22:00:01.456Z"
    }
  ]
}

Exemplu

curl "https://api.e-bon.ro/api/v1/reports/z?deviceId=dev_pos_01" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

GET /api/v1/reports/z/{reportId}

Returnează un singur raport Z după ID.

  • Scope auth: reports

Exemplu

curl https://api.e-bon.ro/api/v1/reports/z/zrep_xyz789 \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

POST /api/v1/reports/z

Stochează un raport Z nou pentru un dispozitiv. Declanșează o notificare email pentru raportul Z (fire-and-forget) către destinatarii configurați pe organizație.

  • Scope auth: reports

Corpul cererii

CâmpTipObligatoriuNote
deviceIdstringdaTrebuie să fie un dispozitiv care există în organizația ta.
totalsobjectda{ sales, refunds, net } — toate numere.
vatBreakdownarraydaCel puțin o intrare. Fiecare { rate, base, amount }. rate0, 9, 11, 21.
receiptCountintegerdaNumărul de bonuri acoperite de raport (≥ 0).
timestampstringdaTimestamp ISO 8601 când raportul Z a fost produs pe AMEF.
resetCounterintegerdaValoarea contorului Z raportată de AMEF (≥ 0).
periodStartstringdaTimestamp ISO 8601 — începutul perioadei fiscale închise.
periodEndstringdaTimestamp ISO 8601 — sfârșitul perioadei fiscale închise.

Exemplu

curl -X POST https://api.e-bon.ro/api/v1/reports/z \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceId": "dev_pos_01",
    "totals": { "sales": 5840.25, "refunds": 12.5, "net": 5827.75 },
    "vatBreakdown": [{ "rate": 9, "base": 5347.48, "amount": 480.27 }],
    "receiptCount": 187,
    "timestamp": "2026-04-09T22:00:00.000Z",
    "resetCounter": 134,
    "periodStart": "2026-04-09T05:00:00.000Z",
    "periodEnd": "2026-04-09T22:00:00.000Z"
  }'

Coduri de eroare

Eșecurile la trimiterea email-ului sunt logate pe server, dar nu fac răspunsul să eșueze. Se returnează 201 imediat ce raportul este persistat.

Rapoarte JE — Jurnal Electronic

Rapoartele JE (Jurnal Electronic) sunt exportul XML al jurnalului fiscal cerut de ANAF. e-bon stochează XML-ul trimis împreună cu anafStatus și poate genera la cerere un XML proaspăt, conform ANAF, din intrările de jurnal pe care le deține.

GET /api/v1/reports/je/{deviceId}/xml

Generează un XML de Jurnal Electronic conform ANAF din intrările de jurnal stocate pentru dispozitivul și intervalul date. Corpul răspunsului este chiar fișierul XML, servit ca atașament.

  • Scope auth: reports
  • Content-type răspuns: application/xml
  • Nume fișier: JE_{fiscalSeries}_{periodStart}_{periodEnd}.xml

Parametri query

ParametruTipObligatoriuNote
periodStartstringdaTimestamp ISO 8601.
periodEndstringdaTimestamp ISO 8601.

Răspuns (200 OK)

Corp XML brut, salvat de exemplu cu -o:

curl "https://api.e-bon.ro/api/v1/reports/je/dev_pos_01/xml?periodStart=2026-04-01T00:00:00Z&periodEnd=2026-04-30T23:59:59Z" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -o JE_dev_pos_01_2026-04.xml

Coduri de eroare

GET /api/v1/reports/je

Listează rapoartele JE stocate, cele mai noi primele, după reportDate.

  • Scope auth: reports

Parametri query

ParametruTipImplicitNote
deviceIdstringFiltrează după dispozitiv.
anafStatusstringUna dintre pending, accepted, rejected, error.
fromstringTimestamp ISO 8601; rapoarte cu reportDate >= from.
tostringTimestamp ISO 8601; rapoarte cu reportDate <= to.
limitinteger501100.

Răspuns (200 OK)

{
  "reports": [
    {
      "id": "jerep_2026_04",
      "deviceId": "dev_pos_01",
      "xmlContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>...",
      "reportDate": "2026-04-30T23:59:59.000Z",
      "submittedToAnaf": true,
      "anafStatus": "accepted",
      "p7bSignature": "MIIH...==",
      "orgId": "acme_corp",
      "createdAt": "2026-05-01T08:00:00.000Z"
    }
  ]
}

Exemplu

curl "https://api.e-bon.ro/api/v1/reports/je?anafStatus=accepted&limit=20" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

GET /api/v1/reports/je/{reportId}

Returnează un singur raport JE stocat după ID, cu payload-ul XML și statusul ANAF.

  • Scope auth: reports

Exemplu

curl https://api.e-bon.ro/api/v1/reports/je/jerep_2026_04 \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

POST /api/v1/reports/je

Stochează un raport JE (payload XML plus metadate ANAF).

  • Scope auth: reports

Corpul cererii

CâmpTipObligatoriuNote
deviceIdstringdaTrebuie să fie un dispozitiv care există în organizația ta.
xmlContentstringdaConținut XML formatat ANAF.
p7bSignaturestringnuSemnătură digitală PKCS#7 (base64), dacă este disponibilă.
reportDatestringdaTimestamp ISO 8601 acoperit de raport.
submittedToAnafbooleandatrue dacă XML-ul a fost deja trimis la ANAF.
anafStatusstringnuUna dintre pending, accepted, rejected, error.

Exemplu

curl -X POST https://api.e-bon.ro/api/v1/reports/je \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceId": "dev_pos_01",
    "xmlContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>...",
    "reportDate": "2026-04-30T23:59:59.000Z",
    "submittedToAnaf": true,
    "anafStatus": "pending"
  }'

Coduri de eroare

Rapoarte MF — Memorie Fiscală

Rapoartele MF (Memorie Fiscală) sunt arhiva pe termen lung a închiderilor de raport Z pentru un dispozitiv. Endpoint-ul de generare construiește la cerere un FiscalMemoryDocument din rapoartele Z deja stocate de e-bon; endpoint-urile list/get/post gestionează înregistrările arhivelor MF stocate și metadatele lor de retenție.

GET /api/v1/reports/mf/{deviceId}/generate

Generează la cerere un document de Memorie Fiscală agregând rapoartele Z pentru dispozitivul și intervalul date. Returnează JSON structurat cu toate închiderile de raport Z și un total general curent.

  • Scope auth: reports

Parametri query

ParametruTipObligatoriuNote
periodStartstringdaTimestamp ISO 8601.
periodEndstringdaTimestamp ISO 8601.

Răspuns (200 OK)

{
  "document": {
    "deviceId": "dev_pos_01",
    "orgId": "acme_corp",
    "periodStart": "2026-01-01T00:00:00.000Z",
    "periodEnd": "2026-03-31T23:59:59.000Z",
    "entries": [],
    "grandTotal": { "sales": 0, "refunds": 0, "net": 0 },
    "generatedAt": "2026-04-09T08:10:00.000Z"
  }
}

Exemplu

curl "https://api.e-bon.ro/api/v1/reports/mf/dev_pos_01/generate?periodStart=2026-01-01T00:00:00Z&periodEnd=2026-03-31T23:59:59Z" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

  • VALIDATION_ERROR (400) — periodStart / periodEnd lipsește sau nu sunt datetime ISO valide.
  • NOT_FOUND (404) — dispozitivul sau organizația nu au putut fi rezolvate de generator.
  • UNAUTHORIZED / FORBIDDEN — vezi Autentificare › Tratează erorile de autentificare.

GET /api/v1/reports/mf

Listează rapoartele MF arhivate stocate, cele mai noi primele, după archiveDate.

  • Scope auth: reports

Parametri query

ParametruTipImplicitNote
deviceIdstringFiltrează după dispozitiv.
fromstringTimestamp ISO 8601; rapoarte cu archiveDate >= from.
tostringTimestamp ISO 8601; rapoarte cu archiveDate <= to.
limitinteger501100.

Răspuns (200 OK)

{
  "reports": [
    {
      "id": "mfrep_q1_2026",
      "deviceId": "dev_pos_01",
      "content": "...dump memorie fiscală...",
      "archiveDate": "2026-04-01T00:00:00.000Z",
      "expiresAt": "2036-04-01T00:00:00.000Z",
      "orgId": "acme_corp",
      "createdAt": "2026-04-01T01:00:00.000Z"
    }
  ]
}

Exemplu

curl "https://api.e-bon.ro/api/v1/reports/mf?deviceId=dev_pos_01" \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

GET /api/v1/reports/mf/{reportId}

Returnează un singur raport MF stocat după ID.

  • Scope auth: reports

Exemplu

curl https://api.e-bon.ro/api/v1/reports/mf/mfrep_q1_2026 \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Coduri de eroare

POST /api/v1/reports/mf

Stochează o înregistrare de arhivă Memorie Fiscală împreună cu data de expirare a retenției.

  • Scope auth: reports

Corpul cererii

CâmpTipObligatoriuNote
deviceIdstringdaTrebuie să fie un dispozitiv care există în organizația ta.
contentstringdaConținutul dump-ului de memorie fiscală.
archiveDatestringdaTimestamp ISO 8601 — data acoperită de arhivă.
expiresAtstringdaTimestamp ISO 8601 — expirarea retenției (când arhiva este ștearsă automat).

Exemplu

curl -X POST https://api.e-bon.ro/api/v1/reports/mf \
  -H "x-api-key: ebon_live_acme_corp_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceId": "dev_pos_01",
    "content": "...dump memorie fiscală...",
    "archiveDate": "2026-04-01T00:00:00.000Z",
    "expiresAt": "2036-04-01T00:00:00.000Z"
  }'

Coduri de eroare

Vezi și

  • Bonuri — bonurile alimentează cele patru tipuri de rapoarte.
  • Comenzi pentru dispozitive — emite comenzile print_x_report, print_z_report, print_je_report și print_mf_report pe AMEF înainte să stochezi rezultatul aici.
  • Prezentare API — URL de bază, plic de eroare, limite de rată, idempotență, paginare.
  • Depanare › Respingere raport ANAF — categoriile frecvente de respingere P7B / MF / JE și calea de remediere pe categorie.