{"openapi":"3.0.3","info":{"title":"DocFlowAI — API pentru integratori","version":"3.9.1041","description":"Primirea și expedierea comunicărilor înregistrate între instituție și aplicațiile externe.\n\n- **Autentificare:** antetul `X-API-Key`. Orice eșec ⇒ 401 `cheie_invalida` (același corp).\n- **Idempotență:** `POST /api/v1/comunicari` cere `Idempotency-Key`; reluarea ⇒ același răspuns.\n- **Interogare:** listele acceptă `since` (ISO 8601, inclusiv) — nu există webhook-uri.\n- **Limită:** 60 de cereri / minut / cheie (429 + `Retry-After`).\n- **Erori:** `{ \"error\": \"<cod>\" }`; câmpul greșit apare în `camp`, valoarea niciodată."},"servers":[{"url":"https://app.docflowai.ro","description":"Server"}],"tags":[{"name":"Integratori (API v1)","description":"Comunicări înregistrate prin API (#307a)"}],"security":[{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Cheia instituției pentru integrare: `dfai_<prefix>_<secret>`, creată în DocFlowAI → Admin → „Integrări API” (secretul se vede o singură dată). Se trimite DOAR în acest antet, prin HTTPS; fără cookie, fără Authorization."}}},"paths":{"/api/v1/openapi.json":{"get":{"tags":["Integratori (API v1)"],"summary":"Specificația publică a API-ului pentru integratori (OpenAPI 3.0.3)","description":"Fără autentificare. Conține DOAR rutele /api/v1 și schema de securitate `ApiKey`.","security":[],"responses":{"200":{"description":"Spec-ul OpenAPI.","content":{"application/json":{"schema":{"type":"object"},"example":{"openapi":"3.0.3","info":{"title":"DocFlowAI — API pentru integratori"}}}}}}}},"/api/v1/comunicari":{"post":{"tags":["Integratori (API v1)"],"summary":"Depune o comunicare ⇒ lucrare de intrare ÎNREGISTRATĂ în registrul instituției","description":"Scop: `comunicari:depunere`. Corp `multipart/form-data`: câmpul `comunicare` (JSON) și 1–10 fișiere (PDF, imagini, documente Office; max. 15 MB fiecare). Solicitantul se salvează cu nivelul de identitate `indicii` (instituția nu i-a verificat identitatea), orice nivel ar fi trimis. CNP / CUI se validează (cifra de control); o eroare întoarce `camp`, niciodată valoarea. `registru` e opțional: dintre registrele permise cheii (implicit Registrul Unic). Antetul `Idempotency-Key` e OBLIGATORIU: aceeași cheie cu aceeași cerere ⇒ 200 cu ACELAȘI răspuns (nicio lucrare nouă); aceeași cheie cu altă cerere ⇒ 409.","security":[{"ApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":200},"description":"1–200 caractere ASCII vizibile, unic per cerere logică.","example":"cerere-2026-000318"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["comunicare","fisier"],"properties":{"comunicare":{"type":"string","description":"JSON: `{ obiect, solicitant: { tip: pf|pj|necunoscut, nume, cnp?, cui?, email?, telefon?, adresa? }, registru? }`.","example":"{\"obiect\":\"Cerere certificat de urbanism\",\"solicitant\":{\"tip\":\"pf\",\"nume\":\"Ion Popescu\",\"cnp\":\"1800101420010\",\"email\":\"ion@exemplu.ro\"}}"},"fisier":{"type":"array","items":{"type":"string","format":"binary"},"description":"Unul sau mai multe fișiere (același nume de câmp, repetat)."}}}}}},"responses":{"200":{"description":"Reluare cu același `Idempotency-Key` și aceeași cerere: răspunsul inițial.","content":{"application/json":{"schema":{"type":"object","properties":{"comunicare":{"type":"object","properties":{"id":{"type":"string"},"numar":{"type":"integer"},"numarFormat":{"type":"string"},"registru":{"type":"string"},"dataInregistrare":{"type":"string","format":"date-time"},"stare":{"type":"string","example":"inregistrata"},"idempotencyKey":{"type":"string"},"acte":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"titlu":{"type":"string"},"sha256":{"type":"string"}}}}}}}},"example":{"comunicare":{"id":"1042","numar":318,"numarFormat":"RU-318/13.10.2026","registru":"general","dataInregistrare":"2026-10-13T09:14:02.511Z","stare":"inregistrata","idempotencyKey":"cerere-2026-000318","acte":[{"id":"5531","titlu":"cerere.pdf","sha256":"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"}]}}}}},"201":{"description":"Comunicarea a fost înregistrată.","content":{"application/json":{"schema":{"type":"object","properties":{"comunicare":{"type":"object","properties":{"id":{"type":"string"},"numar":{"type":"integer"},"numarFormat":{"type":"string"},"registru":{"type":"string"},"dataInregistrare":{"type":"string","format":"date-time"},"stare":{"type":"string","example":"inregistrata"},"idempotencyKey":{"type":"string"},"acte":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"titlu":{"type":"string"},"sha256":{"type":"string"}}}}}}}},"example":{"comunicare":{"id":"1042","numar":318,"numarFormat":"RU-318/13.10.2026","registru":"general","dataInregistrare":"2026-10-13T09:14:02.511Z","stare":"inregistrata","idempotencyKey":"cerere-2026-000318","acte":[{"id":"5531","titlu":"cerere.pdf","sha256":"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"}]}}}}},"400":{"description":"`idempotency_key_obligatoriu`, `idempotency_key_invalid`, `comunicare_invalida`, `obiect_required`, `solicitant_obligatoriu`, codurile solicitantului (`cifra_control`, `format_invalid`, `solicitant_nume_obligatoriu`… cu `camp`), `file_required`, `prea_multe_fisiere`, `tip_fisier_nepermis`, `registru_invalid`, `multipart_invalid`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cifra_control"},"camp":{"type":"string","example":"cnp"}}},"example":{"error":"cifra_control"}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`scop_lipsa`, `module_disabled`, `cheie_fara_mandatar`, `registru_nepermis` (registrul nu e permis cheii), `registru_fara_drept`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"registru_nepermis"}}},"example":{"error":"registru_nepermis"}}}},"409":{"description":"`idempotency_key_reutilizat` — aceeași cheie de idempotență cu o cerere diferită.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"idempotency_key_reutilizat"}}},"example":{"error":"idempotency_key_reutilizat"}}}},"413":{"description":"`too_large` — un fișier depășește 15 MB.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"too_large"}}},"example":{"error":"too_large"}}}},"415":{"description":"`multipart_obligatoriu`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"multipart_obligatoriu"}}},"example":{"error":"multipart_obligatoriu"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}}}},"get":{"tags":["Integratori (API v1)"],"summary":"Comunicările proprii, actualizate de la `since`","description":"Scop: `comunicari:citire`. DOAR comunicările depuse de această cheie; metadate (număr, dată, stare, mod și dată de finalizare), fără conținut intern. Ordinea: `actualizataLa`, apoi `id`.","security":[{"ApiKey":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"ISO 8601. Doar elementele actualizate / disponibile de la acest moment (INCLUSIV); deduplicați după `id`. Lipsă ⇒ de la început."},{"name":"limita","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":100}}],"responses":{"200":{"description":"Lista.","content":{"application/json":{"schema":{"type":"object","properties":{"comunicari":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"1042"},"numar":{"type":"integer","nullable":true,"example":318},"numarFormat":{"type":"string","nullable":true,"example":"RU-318/13.10.2026"},"registru":{"type":"string","nullable":true,"example":"general"},"dataInregistrare":{"type":"string","format":"date-time","nullable":true},"stare":{"type":"string","enum":["ciorna","inregistrata","repartizata","in_lucru","finalizata","clasata","arhivata"],"example":"inregistrata"},"modFinalizare":{"type":"string","nullable":true,"enum":["raspuns","clasare","conexare","redirectionare","alt","semnata",null]},"finalizataLa":{"type":"string","format":"date-time","nullable":true},"creataLa":{"type":"string","format":"date-time"},"actualizataLa":{"type":"string","format":"date-time"},"idempotencyKey":{"type":"string","example":"cerere-2026-000318"}}}}}},"example":{"comunicari":[{"id":"1042","numar":318,"numarFormat":"RU-318/13.10.2026","registru":"general","dataInregistrare":"2026-10-13T09:14:02.511Z","stare":"inregistrata","modFinalizare":null,"finalizataLa":null,"creataLa":"2026-10-13T09:14:02.402Z","actualizataLa":"2026-10-13T09:14:02.530Z","idempotencyKey":"cerere-2026-000318"}]}}}},"400":{"description":"`since_invalid`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"since_invalid"}}},"example":{"error":"since_invalid"}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`scop_lipsa` (cheia nu are scopul rutei), `module_disabled` (modulul rutei inactiv pe instituție: Registratură; pe /api/v1/efactura — e-Factura), `cheie_fara_mandatar` (utilizatorul care a creat cheia nu mai e administrator activ al instituției).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"scop_lipsa"},"scop":{"type":"string"}}},"example":{"error":"scop_lipsa"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}}}}},"/api/v1/comunicari/{id}":{"get":{"tags":["Integratori (API v1)"],"summary":"O comunicare proprie: număr, dată, stare, finalizare","description":"Scop: `comunicari:citire`. A altei chei / altei instituții ⇒ 404.","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID-ul comunicării (din răspunsul depunerii).","schema":{"type":"string","pattern":"^[1-9][0-9]*$"}}],"responses":{"200":{"description":"Comunicarea.","content":{"application/json":{"schema":{"type":"object","properties":{"comunicare":{"type":"object","properties":{"id":{"type":"string","example":"1042"},"numar":{"type":"integer","nullable":true,"example":318},"numarFormat":{"type":"string","nullable":true,"example":"RU-318/13.10.2026"},"registru":{"type":"string","nullable":true,"example":"general"},"dataInregistrare":{"type":"string","format":"date-time","nullable":true},"stare":{"type":"string","enum":["ciorna","inregistrata","repartizata","in_lucru","finalizata","clasata","arhivata"],"example":"inregistrata"},"modFinalizare":{"type":"string","nullable":true,"enum":["raspuns","clasare","conexare","redirectionare","alt","semnata",null]},"finalizataLa":{"type":"string","format":"date-time","nullable":true},"creataLa":{"type":"string","format":"date-time"},"actualizataLa":{"type":"string","format":"date-time"},"idempotencyKey":{"type":"string","example":"cerere-2026-000318"}}}}},"example":{"comunicare":{"id":"1042","numar":318,"numarFormat":"RU-318/13.10.2026","registru":"general","dataInregistrare":"2026-10-13T09:14:02.511Z","stare":"inregistrata","modFinalizare":null,"finalizataLa":null,"creataLa":"2026-10-13T09:14:02.402Z","actualizataLa":"2026-10-13T09:14:02.530Z","idempotencyKey":"cerere-2026-000318"}}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`scop_lipsa` (cheia nu are scopul rutei), `module_disabled` (modulul rutei inactiv pe instituție: Registratură; pe /api/v1/efactura — e-Factura), `cheie_fara_mandatar` (utilizatorul care a creat cheia nu mai e administrator activ al instituției).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"scop_lipsa"},"scop":{"type":"string"}}},"example":{"error":"scop_lipsa"}}}},"404":{"description":"`not_found` — inexistent sau al altui client (fără oracol).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not_found"}}},"example":{"error":"not_found"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}}}}},"/api/v1/iesiri":{"get":{"tags":["Integratori (API v1)"],"summary":"Ieșirile semnate adresate integrării (expediere pull)","description":"Scop: `iesiri:citire`. Lucrările de ieșire pe care instituția le-a adresat acestei integrări („Destinatar: integrare API”) și al căror flux de semnare e COMPLET. Ordinea: `disponibilaLa`, apoi `id`. Webhook-urile nu sunt disponibile: interogați periodic cu `since`.","security":[{"ApiKey":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"ISO 8601. Doar elementele actualizate / disponibile de la acest moment (INCLUSIV); deduplicați după `id`. Lipsă ⇒ de la început."},{"name":"limita","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":100}}],"responses":{"200":{"description":"Lista.","content":{"application/json":{"schema":{"type":"object","properties":{"iesiri":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"1077"},"numar":{"type":"integer","example":402},"numarFormat":{"type":"string","example":"RU-402/20.10.2026"},"registru":{"type":"string","example":"general"},"dataInregistrare":{"type":"string","format":"date-time"},"obiect":{"type":"string","example":"Răspuns la cererea RU-318/13.10.2026"},"disponibilaLa":{"type":"string","format":"date-time","description":"Momentul semnării finale (folosiți-l ca `since` la următoarea interogare)."},"raspunsLa":{"type":"array","items":{"type":"string"},"description":"Comunicările acestei integrări conexate cu ieșirea (același dosar de lucrări)."},"confirmataLa":{"type":"string","format":"date-time","nullable":true}}}}}},"example":{"iesiri":[{"id":"1077","numar":402,"numarFormat":"RU-402/20.10.2026","registru":"general","dataInregistrare":"2026-10-20T07:55:10.000Z","obiect":"Răspuns la cererea RU-318/13.10.2026","disponibilaLa":"2026-10-20T11:02:47.120Z","raspunsLa":["1042"],"confirmataLa":null}]}}}},"400":{"description":"`since_invalid`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"since_invalid"}}},"example":{"error":"since_invalid"}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`scop_lipsa` (cheia nu are scopul rutei), `module_disabled` (modulul rutei inactiv pe instituție: Registratură; pe /api/v1/efactura — e-Factura), `cheie_fara_mandatar` (utilizatorul care a creat cheia nu mai e administrator activ al instituției).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"scop_lipsa"},"scop":{"type":"string"}}},"example":{"error":"scop_lipsa"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}}}}},"/api/v1/iesiri/{id}/document":{"get":{"tags":["Integratori (API v1)"],"summary":"Descarcă PDF-ul semnat (QES) al ieșirii","description":"Scop: `iesiri:citire`. Octeții PDF-ului semnat, neschimbați (semnăturile calificate rămân verificabile). Documentul unei lucrări arhivate: accesul se scrie în jurnalul arhivei înaintea trimiterii; jurnal indisponibil ⇒ 503.","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID-ul ieșirii (din GET /api/v1/iesiri).","schema":{"type":"string","pattern":"^[1-9][0-9]*$"}}],"responses":{"200":{"description":"PDF-ul semnat.","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`scop_lipsa` (cheia nu are scopul rutei), `module_disabled` (modulul rutei inactiv pe instituție: Registratură; pe /api/v1/efactura — e-Factura), `cheie_fara_mandatar` (utilizatorul care a creat cheia nu mai e administrator activ al instituției).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"scop_lipsa"},"scop":{"type":"string"}}},"example":{"error":"scop_lipsa"}}}},"404":{"description":"`not_found` (inexistentă, nesemnată încă, a altui destinatar) sau `signed_pdf_missing`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not_found"}}},"example":{"error":"not_found"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}},"502":{"description":"`drive_unavailable` — documentul e în arhiva externă, temporar inaccesibilă.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"drive_unavailable"}}},"example":{"error":"drive_unavailable"}}}},"503":{"description":"`jurnal_indisponibil` — jurnalul accesărilor arhivei nu s-a putut scrie; nimic trimis.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"jurnal_indisponibil"}}},"example":{"error":"jurnal_indisponibil"}}}}}}},"/api/v1/iesiri/{id}/confirmare":{"post":{"tags":["Integratori (API v1)"],"summary":"Confirmă primirea ieșirii (o singură dată)","description":"Scop: `iesiri:citire`. Evenimentul intră în cronologia lucrării instituției. A doua confirmare ⇒ 409.","security":[{"ApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"ID-ul ieșirii.","schema":{"type":"string","pattern":"^[1-9][0-9]*$"}}],"responses":{"200":{"description":"Confirmat.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"confirmataLa":{"type":"string","format":"date-time"}}},"example":{"id":"1077","confirmataLa":"2026-10-20T11:05:00.000Z"}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`scop_lipsa` (cheia nu are scopul rutei), `module_disabled` (modulul rutei inactiv pe instituție: Registratură; pe /api/v1/efactura — e-Factura), `cheie_fara_mandatar` (utilizatorul care a creat cheia nu mai e administrator activ al instituției).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"scop_lipsa"},"scop":{"type":"string"}}},"example":{"error":"scop_lipsa"}}}},"404":{"description":"`not_found` — inexistent sau al altui client (fără oracol).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not_found"}}},"example":{"error":"not_found"}}}},"409":{"description":"`deja_confirmata`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"deja_confirmata"},"confirmataLa":{"type":"string","format":"date-time"}}},"example":{"error":"deja_confirmata"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}}}}},"/api/v1/efactura/primite":{"post":{"tags":["Integratori (API v1)"],"summary":"Trimite un ZIP e-Factura (o factură primită / trimisă), exact cum a fost descărcat","description":"Scop: `efactura:ingest`; modulul e-Factura activ pe instituție (altfel 403 `module_disabled`). Corp `multipart/form-data`: `zip` (fișierul `<index>.zip`, cel mult 10 MB) și `index_descarcare` (indexul de descărcare din lista Forexebug / SPV). Opțional: `data_mesaj` (AAAA-LL-ZZ, „Data creare” din listă), `tip` (`primita` — implicit — sau `trimisa`), `id_incarcare`, `cif` (coloana CIF din listă; diferit de CIF-ul instituției ⇒ 403). Idempotent pe (instituție, index): același index ⇒ 200 `duplicat: true`, nimic nou. ZIP-ul se păstrează NESCHIMBAT; unul care nu se poate citi se păstrează și el, marcat `eroare_citire` (422 cu `motiv`). Semnătura MF se verifică pe server; o semnătură invalidă NU respinge factura (`semnatura_mf: invalida`). Opțional (#EF-02 Faza B): `pdf` — PDF-ul MF descărcat din Forexebug („Descarcare pdf”, cel mult 10 MB, trebuie să înceapă cu `%PDF-`) și `pdf_sursa=forexebug`; se păstrează ca PDF-ul MF al facturii (pe 201, și pe 200 dacă lipsea), cu prioritate față de transformarea ANAF. Un PDF invalid / prea mare NU respinge factura: e ignorat, iar răspunsul are `avertismente`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["zip","index_descarcare"],"properties":{"zip":{"type":"string","format":"binary"},"index_descarcare":{"type":"string","pattern":"^[1-9][0-9]{0,17}$","example":"6970216921"},"data_mesaj":{"type":"string","format":"date","example":"2026-10-17"},"tip":{"type":"string","enum":["primita","trimisa"],"default":"primita"},"id_incarcare":{"type":"string","pattern":"^[1-9][0-9]{0,17}$"},"cif":{"type":"string","example":"19990001"},"pdf":{"type":"string","format":"binary","description":"Opțional: PDF-ul MF din Forexebug (`<index>.pdf`, ≤ 10 MB, `%PDF-`)."},"pdf_sursa":{"type":"string","enum":["forexebug"],"description":"Sursa PDF-ului; singura acceptată: `forexebug`."}}}}}},"responses":{"200":{"description":"Indexul era deja primit — nimic nou.","content":{"application/json":{"schema":{"type":"object","properties":{"duplicat":{"type":"boolean"},"factura":{"type":"object","properties":{"id":{"type":"string"},"index_descarcare":{"type":"string"},"tip":{"type":"string","enum":["primita","trimisa"]},"numar":{"type":"string","nullable":true},"cif_emitent":{"type":"string","nullable":true},"denumire_emitent":{"type":"string","nullable":true},"data_emitere":{"type":"string","format":"date","nullable":true},"data_scadenta":{"type":"string","format":"date","nullable":true},"moneda":{"type":"string","nullable":true},"total_fara_tva":{"type":"string","nullable":true},"total_tva":{"type":"string","nullable":true},"total_plata":{"type":"string","nullable":true},"tip_document":{"type":"string","enum":["Invoice","CreditNote"],"nullable":true},"semnatura_mf":{"type":"string","enum":["valida","invalida","lipsa","neverificata"]},"stare":{"type":"string","enum":["noua","vazuta","eroare_citire"]},"sursa":{"type":"string","enum":["conector_forexebug","api_anaf","incarcare_manuala"]},"sha256_zip":{"type":"string"},"motiv_eroare":{"type":"string","nullable":true},"primita_la":{"type":"string","format":"date-time"}}},"avertismente":{"type":"array","items":{"type":"string","enum":["pdf_invalid","pdf_prea_mare","pdf_sursa_invalida","pdf_neutilizat"]}}}},"example":{"duplicat":true,"factura":{"id":"17","index_descarcare":"6970216921","tip":"primita","numar":"FS-0001","cif_emitent":"39990003","denumire_emitent":"Furnizor Exemplu SRL","data_emitere":"2026-10-01","data_scadenta":"2026-10-31","moneda":"RON","total_fara_tva":"100.00","total_tva":"21.00","total_plata":"121.00","tip_document":"Invoice","semnatura_mf":"valida","stare":"noua","sursa":"conector_forexebug","sha256_zip":"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08","motiv_eroare":null,"primita_la":"2026-10-17T08:12:00.000Z"}}}}},"201":{"description":"Primită și citită.","content":{"application/json":{"schema":{"type":"object","properties":{"duplicat":{"type":"boolean"},"factura":{"type":"object","properties":{"id":{"type":"string"},"index_descarcare":{"type":"string"},"tip":{"type":"string","enum":["primita","trimisa"]},"numar":{"type":"string","nullable":true},"cif_emitent":{"type":"string","nullable":true},"denumire_emitent":{"type":"string","nullable":true},"data_emitere":{"type":"string","format":"date","nullable":true},"data_scadenta":{"type":"string","format":"date","nullable":true},"moneda":{"type":"string","nullable":true},"total_fara_tva":{"type":"string","nullable":true},"total_tva":{"type":"string","nullable":true},"total_plata":{"type":"string","nullable":true},"tip_document":{"type":"string","enum":["Invoice","CreditNote"],"nullable":true},"semnatura_mf":{"type":"string","enum":["valida","invalida","lipsa","neverificata"]},"stare":{"type":"string","enum":["noua","vazuta","eroare_citire"]},"sursa":{"type":"string","enum":["conector_forexebug","api_anaf","incarcare_manuala"]},"sha256_zip":{"type":"string"},"motiv_eroare":{"type":"string","nullable":true},"primita_la":{"type":"string","format":"date-time"}}},"avertismente":{"type":"array","items":{"type":"string","enum":["pdf_invalid","pdf_prea_mare","pdf_sursa_invalida","pdf_neutilizat"]}}}},"example":{"duplicat":false,"factura":{"id":"17","index_descarcare":"6970216921","tip":"primita","numar":"FS-0001","cif_emitent":"39990003","denumire_emitent":"Furnizor Exemplu SRL","data_emitere":"2026-10-01","data_scadenta":"2026-10-31","moneda":"RON","total_fara_tva":"100.00","total_tva":"21.00","total_plata":"121.00","tip_document":"Invoice","semnatura_mf":"valida","stare":"noua","sursa":"conector_forexebug","sha256_zip":"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08","motiv_eroare":null,"primita_la":"2026-10-17T08:12:00.000Z"}}}}},"400":{"description":"`index_invalid`, `zip_lipsa`, `tip_invalid`, `data_mesaj_invalida`, `id_incarcare_invalid`, `prea_multe_fisiere`, `multipart_invalid`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"index_invalid"}}},"example":{"error":"index_invalid"}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`cif_strain` (factura nu e a instituției: cumpărătorul / CIF-ul din antet diferă — nimic salvat), `scop_lipsa`, `module_disabled`, `cheie_fara_mandatar`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cif_strain"}}},"example":{"error":"cif_strain"}}}},"409":{"description":"`cif_organizatie_lipsa` — instituția nu are CIF completat.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cif_organizatie_lipsa"}}},"example":{"error":"cif_organizatie_lipsa"}}}},"413":{"description":"`too_large` — peste 10 MB.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"too_large"},"maxOcteti":{"type":"integer"}}},"example":{"error":"too_large"}}}},"415":{"description":"`multipart_obligatoriu`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"multipart_obligatoriu"}}},"example":{"error":"multipart_obligatoriu"}}}},"422":{"description":"`factura_necitita` — ZIP-ul a fost PĂSTRAT, marcat `eroare_citire`; `motiv`: `zip_corupt`, `crc_invalid`, `factura_lipsa`, `raport_compresie`, `cale_nepermisa`, `prea_multe_intrari`, `doctype_interzis`, `xml_invalid`, `radacina_necunoscuta`, `camp_lipsa`, `suma_invalida` etc.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"factura_necitita"},"motiv":{"type":"string","example":"zip_corupt"},"camp":{"type":"string"},"factura":{"type":"object"}}},"example":{"error":"factura_necitita"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}}}}},"/api/v1/efactura/primite/indexuri":{"get":{"tags":["Integratori (API v1)"],"summary":"Indexurile de descărcare deja primite (ca să nu mai fie descărcate)","description":"Scop: `efactura:ingest`. DOAR indexurile (șiruri), nimic altceva — nici sume, nici furnizori. `de_la` (AAAA-LL-ZZ, ora României) limitează la cele primite de atunci; lipsă ⇒ toate (cel mult 20 000).","security":[{"ApiKey":[]}],"parameters":[{"name":"de_la","in":"query","required":false,"schema":{"type":"string","format":"date"},"example":"2026-08-18"}],"responses":{"200":{"description":"Indexurile.","content":{"application/json":{"schema":{"type":"object","properties":{"indexuri":{"type":"array","items":{"type":"string"}}}},"example":{"indexuri":["6927058500","6970216921"]}}}},"400":{"description":"`data_invalida`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"data_invalida"}}},"example":{"error":"data_invalida"}}}},"401":{"description":"`cheie_invalida` — cheie lipsă, greșită, revocată, expirată, IP nepermis sau cerere cu cookie / Authorization (același corp pentru toate).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"cheie_invalida"}}},"example":{"error":"cheie_invalida"}}}},"403":{"description":"`scop_lipsa` (cheia nu are scopul rutei), `module_disabled` (modulul rutei inactiv pe instituție: Registratură; pe /api/v1/efactura — e-Factura), `cheie_fara_mandatar` (utilizatorul care a creat cheia nu mai e administrator activ al instituției).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"scop_lipsa"},"scop":{"type":"string"}}},"example":{"error":"scop_lipsa"}}}},"429":{"description":"`rate_limit_exceeded` — limita per cheie depășită.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secunde până la următoarea cerere permisă."}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"retryAfterSec":{"type":"integer"}}},"example":{"error":"rate_limit_exceeded","retryAfterSec":12}}}},"500":{"description":"`internal` — eroare neprevăzută (detaliile nu se trimit).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"internal"}}},"example":{"error":"internal"}}}}}}}}}