FiscalBridge pentru integratori.

Aici găsești tot ce îți trebuie ca programul tău să emită bonuri prin FiscalBridge: formatele de fișiere, API-ul HTTP local, codurile de eroare și kitul pentru tehnicianul care face instalarea.

Documentație actualizată la 25 septembrie 2026 (versiunea 1 a API-ului).

Trei feluri de a trimite bonuri.

  1. Fișiere într-un folder. Programul tău scrie bonul într-un fișier text, iar FiscalBridge îl emite și scrie răspunsul lângă el.
  2. API HTTP local. Programul tău trimite bonul ca JSON pe portul 5078, implicit doar de pe calculatorul pe care rulează FiscalBridge.
  3. Stații în rețea. Celelalte calculatoare din aceeași rețea folosesc aceeași casă de marcat prin portul 5077, care e oprit până pornești casa partajată.

Fișiere.

Formatele de fișier pe care FiscalBridge le primește în folderele configurate (canalul de fișiere) și prin FiscalBridgePrint.exe. Import fișiere în formatul FiscalNet / Fisco; FiscalNet și Fisco sunt mărci ale titularilor lor; POSEO nu este afiliată.

Folderele

  • Bonuri: folderul de intrare configurat, unde programul tău scrie fișierele
  • Raspuns: răspunsurile (lângă folderul de intrare; la Fisco: BonOK / BonERR / BonANSWER)
  • Istoric: fișierele procesate, pe zile
  • C:\ProgramData\FiscalBridge\files\cli\in: plicurile FiscalBridgePrint.exe (nu se scrie de mână)

Reguli

  • Numele fiecărui fișier e unic: un nume refolosit în fereastra de protecție întoarce răspunsul primului fișier, fără al doilea bon.
  • Fișierul se scrie complet și abia apoi se pune în folder (sau se redenumește): FiscalBridge îl preia doar după ce dimensiunea nu se mai schimbă.
  • Codificarea: UTF-8 (cu sau fără BOM) sau Windows-1250; diacriticele se păstrează.
  • Fișierele peste 256 KB sunt refuzate înainte de casă.
  • Unitatea de măsură e obligatorie pe fiecare articol (OUG 69/2024); lipsa ⇒ „buc” și un avertisment.
  • Căile de export (RF, JE) sunt acceptate doar sub folderul de exporturi al FiscalBridge; altfel EXPORT_PATH_NOT_ALLOWED.

Linii cu ^ (formatul FiscalNet)

Extensii: .txt · separatorul ^ · sumele în bani (1000 = 10,00 lei); cantități în miimi.

Comenzile formatului Linii cu ^ (formatul FiscalNet)
Comanda Ce face Câmpuri Licența Exemplu
S Vânzare articol denumire; preț în bani (1000 = 10,00 lei); cantitate în miimi (1000 = 1); unitate de măsură (obligatorie după OUG 69/2024; lipsă ⇒ „buc” + avertisment); grupa de TVA; departament bon fiscal nou S^CAFEA^1000^1000^buc^1^1
P^1^1000
VS Stornare articol (în bonul curent) denumire; preț în bani; cantitate în miimi; unitate de măsură; grupa de TVA; departament bon fiscal nou S^CAFEA^1000^2000^buc^1^1
VS^CAFEA^1000^1000^buc^1^1
P^1^1000
P Plată tipul plății (1..9, după tabelul casei; 1 = numerar); suma în bani bon fiscal nou S^CAFEA^1000^1000^buc^1^1
P^1^1000
TL Text liber pe bon textul bon fiscal nou S^CAFEA^1000^1000^buc^1^1
TL^Mulțumim pentru vizită!
P^1^1000
ST Subtotal — bon fiscal nou S^CAFEA^1000^1000^buc^1^1
ST^
P^1^1000
DP Reducere procentuală pe subtotal procentul ×100 (1000 = 10%) bon fiscal nou S^CAFEA^1000^1000^buc^1^1
ST^
DP^1000
P^1^900
DV Reducere valorică pe subtotal valoarea în bani bon fiscal nou S^CAFEA^1000^1000^buc^1^1
ST^
DV^100
P^1^900
MP Adaos procentual pe subtotal procentul ×100 bon fiscal nou S^CAFEA^1000^1000^buc^1^1
ST^
MP^1000
P^1^1100
MV Adaos valoric pe subtotal valoarea în bani bon fiscal nou S^CAFEA^1000^1000^buc^1^1
ST^
MV^100
P^1^1100
CB Cod de bare pe bon codul; tipul (1..4) bon fiscal nou S^CAFEA^1000^1000^buc^1^1
CB^5941234567890^2
P^1^1000
CF Codul fiscal al cumpărătorului (tipărit pe bon) CIF-ul bon fiscal nou CF^55376780
S^CAFEA^1000^1000^buc^1^1
P^1^1000
I Intrare de numerar în casă suma în bani mereu disponibilă I^10000
O Extragere de numerar din casă suma în bani mereu disponibilă O^5000
X Raportul X — mereu disponibilă X^
Z Raportul Z (închiderea zilei) — mereu disponibilă Z^
RF Raport periodic pe interval de date (fără cale); cu a treia valoare = exportul ANAF în folderul de exporturi data de început (zz/ll/aaaa); data de sfârșit; cale de export (opțională; doar sub folderul de exporturi al FiscalBridge) mereu disponibilă RF^01/09/2026^20/09/2026^
RFP Raport periodic pe interval de date data de început; data de sfârșit; D = detaliat (implicit) / S = sumar mereu disponibilă RFP^01/09/2026^20/09/2026^S
RFZ Raport periodic pe interval de numere Z primul Z; ultimul Z; D / S mereu disponibilă RFZ^1^20^D
JE Citirea jurnalului electronic primul document (opțional); ultimul document (opțional); cale de export (opțională; doar sub folderul de exporturi) mereu disponibilă JE^1^10
VB Anularea bonului rămas deschis — mereu disponibilă VB^
DS Deschiderea sertarului de bani — mereu disponibilă DS^
MD Mesaj pe afișajul clientului rândul 1; rândul 2 (opțional) bon fiscal nou MD^Bine ati venit!
POS Plată cu cardul pe terminalul bancar, legată de bon suma în bani plată nouă cu cardul + bon fiscal nou S^CAFEA^1000^1000^buc^1^1
POS^1000
P^2^1000
COPIEBON Duplicatul ultimului bon prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal). FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă. — mereu disponibilă COPIEBON^

Linii FPrint (CMD,NR,______,_,__;câmp;…)

Extensii: .inp, .bon · separatorul ; · sumele în lei, cu punct zecimal (sau întregi, dacă folderul e configurat așa).

Comenzile formatului Linii FPrint (CMD,NR,______,_,__;câmp;…)
Comanda Ce face Câmpuri Licența Exemplu
S Vânzare articol denumire; preț (lei cu punct); cantitate; departament; grupă; cota/grupa de TVA; tip reducere (0 = fără); valoare reducere; unitate de măsură bon fiscal nou S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
T,1,______,_,__;0;;;;;
T Plată (0 = numerar; fără sumă = restul) tipul plății; suma (opțională) bon fiscal nou S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
T,1,______,_,__;0;;;;;
L Subtotal — bon fiscal nou S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
L,1,______,_,__;
T,1,______,_,__;0;;;;;
C Reducere sau adaos pe subtotal tipul; valoarea bon fiscal nou S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
L,1,______,_,__;
C,1,______,_,__;1;1.00;
T,1,______,_,__;0;;;;;
P Text liber pe bon (până la 3 rânduri) rândul 1; rândul 2; rândul 3 bon fiscal nou S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
P,1,______,_,__;Multumim;;;
T,1,______,_,__;0;;;;;
K Codul fiscal al cumpărătorului CIF-ul bon fiscal nou K,1,______,_,__;55376780;
S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
T,1,______,_,__;0;;;;;
I Intrare/extragere de numerar tipul (0 = intrare, 1 = extragere); suma mereu disponibilă I,1,______,_,__;0;100.00;
Z Raportul Z opțiuni (opțional) mereu disponibilă Z,1,______,_,__;
A Raportul vânzărilor pe articole —; —; X sau Z mereu disponibilă A,1,______,_,__;;;X;
X Raportul X — mereu disponibilă X,1,______,_,__;
R Raport periodic tipul; detaliat; data de început (zz-ll-aaaa); data de sfârșit mereu disponibilă R,1,______,_,__;7;1;01-09-2026;20-09-2026;
V Mesaj pe afișajul clientului acțiunea (0 = golire, 1 = rândul de sus, 2 = rândul de jos); textul bon fiscal nou V,1,______,_,__;1;Bine ati venit;
D Duplicatul ultimului bon prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal; singur în fișier). FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă. — mereu disponibilă D,1,______,_,__;
H Blocarea tastaturii casei (acceptată, fără efect: răspuns „Ok”) — bon fiscal nou H,1,______,_,__;
S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
T,1,______,_,__;0;;;;;
F,1,______,_,__;
F Deblocarea tastaturii casei (acceptată, fără efect) — bon fiscal nou H,1,______,_,__;
S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
T,1,______,_,__;0;;;;;
F,1,______,_,__;
Q Cod de bare pe bon tipul; codul bon fiscal nou S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
Q,1,______,_,__;2;5941234567890;
T,1,______,_,__;0;;;;;
W Text liber cu stil (stilul se ignoră) stilul; textul bon fiscal nou S,1,______,_,__;CAFEA;10.00;1.000;1;1;1;0;0;buc;
W,1,______,_,__;0;Multumim;
T,1,______,_,__;0;;;;;

Răspunsurile

Profilurile de răspuns
Profilul Unde e răspunsul Exemple
FiscalNet Raspuns\<același nume> (folderul „Raspuns” de lângă folderul în care vin bonurile) Bon emis BONOK=1
NRBON=779
ERRINFO=
Eroare BONOK=0
ERRCODE=NO_PAPER
ERRINFO=Casa de marcat nu are hartie.
Refuz de licență BONOK=0
ERRCODE=LICENSE_MISSING
ERRINFO=FiscalBridge nu este activat pe acest calculator. Deschide ecranul "Licenta" si introdu codul de activare din contul poseo.ro sau porneste perioada de proba de 15 zile.
Duplicat refuzat BONOK=0
ERRCODE=COPY_NOT_ALLOWED
ERRINFO=Casa de marcat nu are o functie de duplicat, iar FiscalBridge nu tipareste copii ale bonului fiscal. Pentru dovada vanzarii foloseste raportul din jurnalul electronic.
Fisco la succes: BonOK\<bază>.nrb, BonANSWER\<același nume> ([Answer]) și, ultimul, fișierul mutat în BonOK\<același nume>; la eroare: BonERR\<același nume> = fișierul original + liniile # Bon emis [Answer]
CommandName=receipt_Fiscal_Close
ErrorCode=0
SlipNumber=779
nZrep=41
nFNum=3
DeviceSerial=DT123456
Refuz de licență #FiscalBridge nu este activat pe acest calculator. Deschide ecranul "Licenta" si introdu codul de activare din contul poseo.ro sau porneste perioada de proba de 15 zile. (LICENSE_MISSING)
#ErrorCode=LICENSE_MISSING
FPrint Raspuns\<același nume>, câte o linie pe comandă (+ Raspuns\<bază>.nrb la succes); cu FiscalBridgePrint.exe: <bază>.out lângă fișier Bon emis Ok
Ok
Refuz de licență Er-LICENSE_MISSING
Sd
Legacy <bază>.out (+ <bază>.nrb și <bază>.ini) în folderul de răspuns Bon emis BONOK=1
NRBON=779
ERRINFO=
Refuz de licență BONOK=0
ERRCODE=LICENSE_MISSING
ERRINFO=FiscalBridge nu este activat pe acest calculator. Deschide ecranul „Licență” și introdu codul de activare din contul poseo.ro sau pornește perioada de probă de 15 zile.
CLI FiscalBridgePrint.exe: codul de ieșire 5, textul pe stderr și fișierul de răspuns; rezultatul complet (JSON cu ok, code, messageRo) în files\cli\out\<id>.result.json Refuz de licență {"ok":false,"code":"LICENSE_MISSING","messageRo":"FiscalBridge nu este activat pe acest calculator. Deschide ecranul „Licență” și introdu codul de activare din contul poseo.ro sau pornește perioada de probă de 15 zile."}

FiscalNet, Fisco, SmartSell și celelalte denumiri de produse sunt mărci ale titularilor lor. POSEO S.R.L. nu este afiliată cu aceștia; le numim doar ca să arătăm cu ce fișiere lucrează FiscalBridge.

API HTTP local.

Fiecare cerere poartă antetul X-Api-Key. Portul api (5078, doar pe acest calculator, implicit): cheia din agent.settings.json, secțiunea Api:ApiKey (utilizatorii Windows o pot citi). Portul statii (5077, casa partajată, oprit implicit): antetul X-Poseo-Fiscal-Key cu cheia din Broker:ApiKey și antetul X-Poseo-Fiscal-Protocol cu versiunea protocolului (1).

Exemplu: un bon prin POST /receipt

Emite un bon fiscal (câmpurile cererii documentate mai jos). Idempotent după id: aceeași cerere nu tipărește al doilea bon. Un produs gratuit se trimite la prețul lui de listă, cu discountAmount = price × quantity (reducere valorică pe linie); o reducere procentuală cât toată valoarea liniei (discountPercent) e refuzată de unele case (Tremol). Logarea pe casă: operator (cod), operatorPassword, till; cu operator trimis gol se folosește operatorul din configurarea casei, iar textul tipărit vine din operatorText.

Cererea

{
  "id": "vanzare-1024",
  "operator": "1",
  "operatorPassword": "0001",
  "till": "1",
  "lines": [
    {
      "name": "CAFEA",
      "quantity": 1,
      "price": 10.0,
      "vatGroup": 1,
      "unit": "buc",
      "department": 1
    }
  ],
  "payments": [
    {
      "type": 1,
      "amount": 10.0
    }
  ]
}

Răspunsul

{
  "bonOk": 1,
  "nrBon": "779",
  "fiscalNet": "BONOK=1\r\nNRBON=779\r\nERRINFO=\r\n",
  "fisco": "OK;Z=|NR=779|BF=779",
  "id": "vanzare-1024",
  "code": null,
  "outcome": "Issued",
  "message": null,
  "licenseWarning": null,
  "warnings": []
}

Fără bon dublu la retrimitere. Câmpul id: o cerere repetată cu același id și același conținut întoarce rezultatul memorat, fără al doilea bon; același id cu alt conținut e refuzat.

Toate rutele

Rutele API-ului local FiscalBridge
Ruta Portul Cheie Licența Ce face
GET / 5078 (acest calculator) nu fără licență Sonda de viață: agentul răspunde, starea licenței (licensed, license = cod C3) și starea brokerului. Fără I/O pe casă.
GET /about 5078 (acest calculator) nu fără licență Numele, versiunea, mediul (Production/Test), serverul și cheia de licență ale build-ului, timpul de funcționare.
GET /banks 5078 (acest calculator) da fără licență Catalogul băncilor și al terminalelor POS cunoscute (static).
POST /close 5078 (acest calculator) da fără licență Oprește agentul. Doar de pe acest calculator.
POST /cloud/flush 5078 (acest calculator) da fără licență Trimite acum sumarele de bon din coada locală către cloud (dacă abonamentul include cloud).
GET /cloud/status 5078 (acest calculator) da fără licență Starea trimiterii sumarelor de bon către cloud (coada locală, ultima trimitere).
GET /config/device 5078 (acest calculator) da fără licență Configurația casei de marcat salvată pe acest calculator (secretele mascate).
PUT /config/device 5078 (acest calculator) da configurare Salvează configurația casei de marcat (prin coada unică).
POST /config/device/detect 5078 (acest calculator) da configurare Caută automat casa de marcat pe porturile calculatorului.
POST /config/device/test 5078 (acest calculator) da configurare Testează legătura cu casa de marcat din configurația trimisă, fără s-o salveze.
GET /config/devices 5078 (acest calculator) da fără licență Catalogul aparatelor (mărci, modele, profiluri POS) pe care FiscalBridge le poate configura.
POST /config/devices 5078 (acest calculator) da fără licență Adaugă un aparat în lista configurată.
GET /config/devices/configured 5078 (acest calculator) da fără licență Aparatele configurate pe acest calculator.
POST /config/devices/licence 5078 (acest calculator) da fără licență Retrasă: încărcarea licenței din fișier. Răspunde 410 cu indicația „POST /license/activate”.
DELETE /config/devices/{id} 5078 (acest calculator) da fără licență Scoate un aparat din lista configurată.
GET /config/devices/{id} 5078 (acest calculator) da fără licență Un aparat configurat, după identificator.
PUT /config/devices/{id} 5078 (acest calculator) da fără licență Modifică un aparat din lista configurată.
POST /config/devices/{id}/activate 5078 (acest calculator) da configurare Face aparatul din listă casa activă (salvare prin coada unică).
POST /config/reset 5078 (acest calculator) da configurare Șterge configurarea casei (păstrează jurnalul bonurilor, plățile, licența). Doar de pe acest calculator.
GET /config/webservice 5078 (acest calculator) da fără licență Setările serviciului web local (port, TLS); cheia nu se afișează.
POST /config/webservice 5078 (acest calculator) da fără licență Salvează setările ne-sensibile ale serviciului web local (efect după repornire).
GET /events 5078 (acest calculator) da fără licență Flux de evenimente (Server-Sent Events): starea casei, a terminalului și a lucrărilor.
GET /files/activity 5078 (acest calculator) da fără licență Activitatea canalului de fișiere (FiscalNet, Fisco, FPrint), cu CNP-urile mascate.
GET /files/activity/{jobId:guid} 5078 (acest calculator) da fără licență Detaliul unui fișier procesat: ce s-a trimis casei și răspunsul scris.
GET /files/attention 5078 (acest calculator) da fără licență Fișierele care cer o decizie (în așteptare, puse deoparte).
GET /files/config 5078 (acest calculator) da fără licență Folderele de fișiere configurate.
PUT /files/config 5078 (acest calculator) da fără licență Salvează folderele de fișiere.
POST /files/config/validate 5078 (acest calculator) da fără licență Verifică o configurare de foldere fără s-o salveze.
POST /files/dry-run 5078 (acest calculator) da fără licență Arată cum ar fi înțeles un fișier (comenzile, răspunsul), fără casă și fără nicio scriere.
POST /files/pending/{claimId:guid}/recheck 5078 (acest calculator) da fără licență Reverifică pe casă un fișier cu rezultat incert.
POST /files/pending/{claimId:guid}/resolve 5078 (acest calculator) da fără licență Închide manual un fișier cu rezultat incert (emis / neemis), cu cine a decis.
POST /files/quarantine/{id}/discard 5078 (acest calculator) da fără licență Mută în istoric un fișier pus deoparte, fără să-l tipărească.
POST /files/quarantine/{id}/release 5078 (acest calculator) da fără licență Eliberează un fișier pus deoparte (se procesează din nou).
GET /files/status 5078 (acest calculator) da fără licență Starea fiecărui folder de fișiere.
POST /kitchen/print 5078 (acest calculator) da fără licență Tipărește un bon de bucătărie (imprimantă ESC/POS nefiscală), prin coada durabilă a imprimantelor.
POST /label/print 5078 (acest calculator) da fără licență Tipărește o etichetă (imprimantă ZPL nefiscală).
GET /license 5078 (acest calculator) da fără licență Starea licenței FiscalBridge pe acest calculator (cod C3, termene, drepturi).
POST /license/activate 5078 (acest calculator) da fără licență Activează licența cu codul de activare din portalul poseo.ro (cere acceptarea termenilor).
POST /license/demo 5078 (acest calculator) da fără licență Pornește perioada de probă (CUI-ul firmei + acceptarea termenilor).
POST /license/refresh 5078 (acest calculator) da fără licență Reînnoiește acum licența de pe serverul de licențe.
GET /logs 5078 (acest calculator) da fără licență Ultimele 100 de linii din jurnalul agentului (agent-*.log din folderul de jurnale).
GET /logs/access 5078 (acest calculator) da fără licență Ultimele 200 de linii din jurnalul de acces HTTP.
POST /payments 5078 (acest calculator) da bon fiscal nou + plată nouă cu cardul Plată cu cardul + bon fiscal în aceeași cerere, idempotentă după id (cardul NU se debitează dacă bonul nu poate fi emis).
GET /payments/{id} 5078 (acest calculator) da fără licență Rezultatul memorat al unei plăți, după id. Nu atinge casa, nici terminalul.
GET /pos/cashback/status 5078 (acest calculator) da mereu disponibilă Starea funcției cashback pe terminal.
POST /pos/completion 5078 (acest calculator) da mereu disponibilă Finalizarea unei preautorizări.
GET /pos/device/info 5078 (acest calculator) da mereu disponibilă Informațiile terminalului bancar.
POST /pos/preauthorization 5078 (acest calculator) da plată nouă cu cardul Preautorizare nouă pe terminalul bancar.
GET /pos/report/details 5078 (acest calculator) da mereu disponibilă Raportul detaliat al terminalului bancar.
GET /pos/report/summary 5078 (acest calculator) da mereu disponibilă Raportul sumar al terminalului bancar.
POST /pos/sale 5078 (acest calculator) da plată nouă cu cardul Plată nouă pe terminalul bancar (fără bon).
POST /pos/settlement 5078 (acest calculator) da mereu disponibilă Închiderea de zi a terminalului bancar.
POST /pos/void 5078 (acest calculator) da mereu disponibilă Anularea unei tranzacții pe card.
POST /receipt 5078 (acest calculator) da bon fiscal nou Emite un bon fiscal (câmpurile cererii documentate mai jos). Idempotent după id: aceeași cerere nu tipărește al doilea bon. Un produs gratuit se trimite la prețul lui de listă, cu discountAmount = price × quantity (reducere valorică pe linie); o reducere procentuală cât toată valoarea liniei (discountPercent) e refuzată de unele case (Tremol). Logarea pe casă: operator (cod), operatorPassword, till; cu operator trimis gol se folosește operatorul din configurarea casei, iar textul tipărit vine din operatorText.
GET /receipt/{id} 5078 (acest calculator) da fără licență Rezultatul memorat al unui bon, după id (din jurnalul durabil). Nu atinge casa.
GET /reports/{type} 5078 (acest calculator) da mereu disponibilă Rapoartele fiscale: x, z, periodice, jurnal electronic, export ANAF (type = x | z | periodic | journal | anaf …). Mereu disponibile, și fără licență.
GET /status 5078 (acest calculator) da mereu disponibilă Starea casei de marcat (citită prin coada unică).
POST /update/apply-now 5078 (acest calculator) da fără licență Instalează acum versiunea descărcată: 202 acceptat, 409 casa lucrează, 404 nimic descărcat.
POST /update/check 5078 (acest calculator) da fără licență Pornește o verificare de versiune nouă; răspunde imediat 202 cu starea curentă.
GET /update/status 5078 (acest calculator) da fără licență Starea actualizărilor automate (versiune, fereastră, mesaj în română).
POST /cash/in 5077 (stații) da mereu disponibilă Intrare de numerar.
POST /cash/out 5077 (stații) da mereu disponibilă Extragere de numerar.
GET /device/capabilities 5077 (stații) da fără licență Ce știe casa de marcat (duplicat nativ, cote programabile), din configurația salvată, fără I/O.
POST /device/config 5077 (stații) da configurare Salvează configurația casei (de pe stația de administrare).
GET /device/descriptor 5077 (stații) da mereu disponibilă Datele casei (marcă, model, serie).
GET /device/status 5077 (stații) da mereu disponibilă Starea casei.
GET /device/vat 5077 (stații) da mereu disponibilă Cotele TVA programate în casă.
POST /device/vat 5077 (stații) da configurare Programează cotele TVA în casă.
GET /device/vat/can-program 5077 (stații) da fără licență Dacă se pot programa cotele TVA acum (fără I/O).
POST /drawer/open 5077 (stații) da mereu disponibilă Deschide sertarul de bani.
GET /health 5077 (stații) da fără licență Sonda brokerului: versiunea protocolului și numele real al serviciului.
GET /operations/{key} 5077 (stații) da fără licență Starea unei operațiuni idempotente (în curs, încheiată, incertă). Nu atinge casa.
POST /receipt 5077 (stații) da bon fiscal nou Emite bonul unei stații (protocolul v1), idempotent după id.
POST /receipt/cancel 5077 (stații) da mereu disponibilă Anulează bonul rămas deschis.
GET /receipt/caps 5077 (stații) da fără licență Ce acceptă constructorul de bon al acestei versiuni (fără I/O).
GET /receipt/evidence 5077 (stații) da mereu disponibilă Dovada ultimului bon citită din casă (recuperarea după o întrerupere).
POST /receipt/unlock 5077 (stații) da mereu disponibilă Deblochează casa rămasă cu un bon neînchis.
POST /receipt/validate 5077 (stații) da bon fiscal nou Validează bonul pe gazdă, fără I/O pe casă, înainte ca stația să debiteze cardul.
POST /reports/anaf 5077 (stații) da mereu disponibilă Exportul ANAF pe interval de date.
POST /reports/anaf-z 5077 (stații) da mereu disponibilă Exportul ANAF pe interval de numere Z.
POST /reports/journal 5077 (stații) da mereu disponibilă Citirea jurnalului electronic.
POST /reports/periodic-date 5077 (stații) da mereu disponibilă Raportul periodic pe interval de date.
POST /reports/periodic-z 5077 (stații) da mereu disponibilă Raportul periodic pe interval de numere Z.
POST /reports/receipt-copy 5077 (stații) da mereu disponibilă Duplicatul bonului prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal). FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ 400 COPY_NOT_ALLOWED, fără nicio comandă trimisă.
POST /reports/x 5077 (stații) da mereu disponibilă Raportul X.
POST /reports/z 5077 (stații) da mereu disponibilă Raportul Z.

Exemple complete: curl, C#, Python, Node.

Înlocuiește CHEIA-DIN-agent.settings.json cu cheia din agent.settings.json (secțiunea Api:ApiKey). Manifestul complet al API-ului e public, în format JSON: /fiscalbridge/api.json.

Un bon fiscal: POST /receipt

bon.json

{
  "id": "vanzare-1024",
  "operator": "1",
  "operatorPassword": "0001",
  "till": "1",
  "lines": [
    {
      "name": "CAFEA",
      "quantity": 1,
      "price": 10.0,
      "vatGroup": 1,
      "unit": "buc",
      "department": 1
    }
  ],
  "payments": [
    {
      "type": 1,
      "amount": 10.0
    }
  ]
}

curl

curl -X POST http://127.0.0.1:5078/receipt -H "X-Api-Key: CHEIA-DIN-agent.settings.json" -H "Content-Type: application/json" --data @bon.json

C#

using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "CHEIA-DIN-agent.settings.json");
var bon = File.ReadAllText("bon.json");
var raspuns = await http.PostAsync("http://127.0.0.1:5078/receipt", new StringContent(bon, System.Text.Encoding.UTF8, "application/json"));
Console.WriteLine(await raspuns.Content.ReadAsStringAsync());

Python

import json, requests

with open("bon.json", encoding="utf-8") as f:
    bon = json.load(f)
raspuns = requests.post("http://127.0.0.1:5078/receipt", headers={"X-Api-Key": "CHEIA-DIN-agent.settings.json"}, json=bon)
print(raspuns.json())

Node

import { readFile } from "node:fs/promises";

const bon = await readFile("bon.json", "utf8");
const raspuns = await fetch("http://127.0.0.1:5078/receipt", {
  method: "POST",
  headers: { "X-Api-Key": "CHEIA-DIN-agent.settings.json", "Content-Type": "application/json" },
  body: bon,
});
console.log(await raspuns.json());

Raportul Z: GET /reports/z

curl

curl http://127.0.0.1:5078/reports/z -H "X-Api-Key: CHEIA-DIN-agent.settings.json"

C#

using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "CHEIA-DIN-agent.settings.json");
Console.WriteLine(await http.GetStringAsync("http://127.0.0.1:5078/reports/z"));

Python

import requests

print(requests.get("http://127.0.0.1:5078/reports/z", headers={"X-Api-Key": "CHEIA-DIN-agent.settings.json"}).text)

Node

const raspuns = await fetch("http://127.0.0.1:5078/reports/z", { headers: { "X-Api-Key": "CHEIA-DIN-agent.settings.json" } });
console.log(await raspuns.text());

Raportul X: GET /reports/x

curl

curl http://127.0.0.1:5078/reports/x -H "X-Api-Key: CHEIA-DIN-agent.settings.json"

C#

using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "CHEIA-DIN-agent.settings.json");
Console.WriteLine(await http.GetStringAsync("http://127.0.0.1:5078/reports/x"));

Python

import requests

print(requests.get("http://127.0.0.1:5078/reports/x", headers={"X-Api-Key": "CHEIA-DIN-agent.settings.json"}).text)

Node

const raspuns = await fetch("http://127.0.0.1:5078/reports/x", { headers: { "X-Api-Key": "CHEIA-DIN-agent.settings.json" } });
console.log(await raspuns.text());

Licența și ce e mereu permis.

Coloana „Licența” din tabele spune ce drept cere fiecare operațiune:

  • mereu disponibilă: Mereu disponibilă, și cu licența expirată sau lipsă: rapoarte Z/X, anulare bon deschis, numerar, jurnal, export ANAF, stare.
  • bon fiscal nou: Bon fiscal nou: cere o licență valabilă care acoperă casa activă.
  • plată nouă cu cardul: Plată nouă pe terminalul bancar: cere dreptul de POS bancar.
  • configurare: Salvarea configurației și testele de conexiune: mereu disponibile.

Plata cu cardul urmată de bon (POST /payments) cere ambele drepturi: bonul fiscal nou pe casa de marcat și plata pe terminalul bancar.

Cum arată refuzul de licență.

Când licența nu permite o operațiune, FiscalBridge nu trimite nimic casei de marcat sau terminalului și răspunde în forma canalului pe care a venit cererea.

Forma refuzului de licență pe fiecare canal
Canalul Forma Exemplu
API local (portul 5078) HTTP 403, application/problem+json, antetul X-FiscalBridge-License și câmpul code = LICENSE_* { "type": "https://poseo.ro/fiscalbridge/licenta", "title": "Licență", "status": 403, "detail": "Nu există o licență activă pe acest calculator.", "code": "LICENSE_MISSING" }
Stații în rețea (portul 5077) HTTP 400 cu câmpul code = LICENSE_*Stația tratează răspunsul ca NEEMIS: bonul nu s-a tipărit, cardul nu s-a debitat. { "code": "LICENSE_MISSING", "message": "Nu există o licență activă pe acest calculator.", "kind": "invalid-operation" }
Fișiere, profilul FiscalNet BONOK=0 / ERRCODE=LICENSE_* / ERRINFO=<mesaj> —
Fișiere, profilul Fisco BonERR cu ErrorCode=LICENSE_* —
Fișiere, profilul FPrint forma de eroare a profilului; codul în activitate —
Fișiere, profilul CLI {"ok":false,"code":"LICENSE_*","messageRo":"…"} și codul de ieșire 5 —

Codurile de licență

LICENSE_OKLICENSE_WARNING_OFFLINELICENSE_EXPIREDLICENSE_DEMO_EXPIREDLICENSE_WRONG_ENVIRONMENTLICENSE_MISSINGLICENSE_DEVICE_NOT_COVEREDLICENSE_CLOCK_INVALID

Ce trebuie să trimită programul tău ca bonul să fie corect.

FiscalBridge emite exact ce primește. Programul tău răspunde de conținutul bonului:

  • unitatea de măsură pe fiecare articol (de exemplu „buc” sau „kg”);
  • codul operatorului care face vânzarea;
  • CUI-ul cumpărătorului, când îl cere, prin câmpul dedicat (comanda CF sau câmpul fiscal din API), nu ca text liber;
  • tipul de plată corect (numerar, card, tichete și celelalte), după tabelul casei de marcat;
  • bacșișul ca articol separat, cu denumirea „bacșiș”;
  • garanția SGR pe o linie distinctă a bonului.

Ce nu face FiscalBridge.

  • Duplicatul bonului: Tipărește duplicatul bonului prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal); FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă.
  • FiscalBridge nu corectează un bon după emitere. Un bon rămas deschis se poate anula; un bon emis rămâne în memoria fiscală așa cum a fost tipărit.
  • Nu fiscalizează casa de marcat și nu îi schimbă antetul: acestea rămân la unitatea de service acreditată.

Kitul pentru tehnician.

Arhiva conține ghidul de instalare, documentația de pe această pagină, fișiere-exemplu, scriptul de verificare Test-FiscalBridge.ps1 și procesul-verbal de verificare a integrării. Procesul-verbal e un document de lucru pentru verificarea integrării; nu înlocuiește declarația de instalare sau formularele oficiale ale distribuitorului autorizat.

Case de marcat verificate.

Aparatele pe care am emis bonuri reale prin FiscalBridge:

  • Datecs FP-700 (rețea)
  • Datecs DP-05 (serial, USB)
  • Tremol M20 (serial, USB)

Tabelul complet, cu data fiecărei verificări, e pe pagina case de marcat compatibile. Ai alt model? Scrie-ne.

Întrebări frecvente ale integratorilor.

Cum emit un bon fiscal din aplicația mea?

Trimiți bonul ca JSON la POST http://127.0.0.1:5078/receipt, cu cheia în antetul X-Api-Key; FiscalBridge îl emite pe casa de marcat și răspunde cu numărul bonului. Exemplele de pe această pagină arată cererea în curl, C#, Python și Node.

Ce se întâmplă dacă retrimit aceeași cerere?

Câmpul id: o cerere repetată cu același id și același conținut întoarce rezultatul memorat, fără al doilea bon; același id cu alt conținut e refuzat.

Ce merge și fără licență?

Rapoartele fiscale și operațiunile obligatorii nu depind de licență. Mereu disponibilă, și cu licența expirată sau lipsă: rapoarte Z/X, anulare bon deschis, numerar, jurnal, export ANAF, stare.

Ce se întâmplă când calculatorul nu are internet?

Funcționează până la 14 zile fără internet; te anunțăm din ziua 7.

Poate FiscalBridge să tipărească o copie a unui bon?

Tipărește duplicatul bonului prin funcția de duplicat a casei (marcat DUPLICAT, nefiscal); FiscalBridge nu produce copii; o casă fără funcție de duplicat ⇒ COPY_NOT_ALLOWED, fără nicio comandă trimisă.

Unde găsesc descrierea completă a API-ului?

Manifestul API, cu toate rutele, clasele de licență și formele de refuz, e public în format JSON la /fiscalbridge/api.json.