{
  "openapi": "3.0.4",
  "info": {
    "title": "FGO API",
    "description": "## Autentificare\n\nFiecare operație autentificată poartă cheia API și codul unic al firmei:\n\n```http\nAuthorization: Bearer fgo_test_api_v1....\nFgo-Cod-Unic: 12345678\n```\n\nCheia aparține unei singure firme și o generezi din contul FGO, în **Setări → Utilizatori**.\n\n## Începe aici\n\n- [Primii pași](../ghiduri/inceput-rapid) — de la contul de test la prima factură.\n- [Emiterea unei facturi](../ghiduri/emiterea-unei-facturi) — ce pregătești, ce trimiți, ce\n  faci cu răspunsul.\n- [Erori, limite și reluări](../ghiduri/erori-si-reluari) — `application/problem+json`,\n  `429` și când e sigur să reîncerci.\n- [Liste, paginare și fields](../ghiduri/liste-si-paginare),\n  [Date, ore și numere](../ghiduri/formate), [Identificatori](../ghiduri/identificatori).\n- [Depreciere și retragere](../ghiduri/compatibilitate-si-retragere) — anunțuri de migrare\n  și headerele `Deprecation`, `Sunset` și `Link`.\n- [Migrarea de la v1](../ghiduri/migrare-de-la-v1) — ce se schimbă și unde s-a mutat fiecare\n  operație.",
    "termsOfService": "https://www.fgo.ro/termeni/",
    "contact": {
      "name": "Suport FGO",
      "url": "https://www.fgo.ro/contact",
      "email": "suport@fgo.ro"
    },
    "version": "2.0"
  },
  "paths": {
    "/v2/arhive-pdf/verifica-limite": {
      "post": {
        "tags": [
          "Arhive PDF"
        ],
        "summary": "Verifică limitele unei arhive PDF",
        "description": "Verifică numărul de documente și limita firmei, fără să creeze arhiva. Primul pas al fluxului de arhivare.\n\n**Drept necesar:** `arhive:gestionare`",
        "operationId": "post_arhive-pdf_verifica-limite",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_arhive_pdf_verifica_request"
              },
              "example": {
                "data_de_la": "2026-08-01",
                "data_pana_la": "2026-08-31",
                "tip_arhiva": "facturi_emise"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_arhive_pdf_verifica_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_arhive_pdf_verifica_request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_arhive_pdf_limite_response"
                },
                "example": {
                  "data": {
                    "numar_documente_ramase": 9250,
                    "poate_genera_arhiva": true,
                    "numar_documente_gasite": 750
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 5 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/arhive-pdf": {
      "post": {
        "tags": [
          "Arhive PDF"
        ],
        "summary": "Creează o arhivă PDF",
        "description": "Verifică limitele și pornește generarea asincronă. Folosește `id`-ul returnat pentru a interoga statusul și, după procesare, pentru a genera linkul de descărcare.\n\n**Drept necesar:** `arhive:gestionare`",
        "operationId": "post_arhive-pdf",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_arhive_pdf_creeaza_request"
              },
              "example": {
                "data_de_la": "2026-08-01",
                "data_pana_la": "2026-08-31",
                "tip_arhiva": "facturi_emise"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_arhive_pdf_creeaza_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_arhive_pdf_creeaza_request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Arhiva a fost programată.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_arhive_pdf_creata_response"
                },
                "example": {
                  "data": {
                    "id": "arh_17",
                    "creata_la": "2026-09-03T12:00:00+03:00",
                    "status": "in_lucru",
                    "numar_documente_gasite": 750
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 30 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/arhive-pdf/{id_arhiva}": {
      "get": {
        "tags": [
          "Arhive PDF"
        ],
        "summary": "Citește statusul unei arhive PDF",
        "description": "Un `id_arhiva` inexistent și unul asociat altei firme răspund identic, cu `404`: arhivele altei firme nu se pot distinge de cele inexistente.\n\nInteroghează până când `este_gata` devine `true` sau `are_eroare` devine `true`. **Ramifică pe cele două câmpuri, nu pe textul din `status`** — setul de stări este extensibil, iar valorile noi apar fără schimbarea versiunii.\n\n| `status` | Înseamnă |\n| --- | --- |\n| `de_generat_arhiva` | Cererea este acceptată, generarea nu a început încă. |\n| `in_lucru` | Arhiva se generează. |\n| `intermediar` | Generarea se reia, după o primă încercare care a durat prea mult. |\n| `procesat` | Arhiva este gata. |\n| `eroare` | Generarea a eșuat. |\n| `eroare_solutie` | Generarea a eșuat din configurația firmei. |\n| `skip_access_denied` | Generarea s-a oprit: lipsesc drepturi pe documentele cerute. |\n| `sters` | Arhiva a fost ștearsă. |\n| `necunoscut` | Stare pe care API-ul nu o recunoaște. |\n\nUltimele cinci înseamnă că arhiva nu se va mai finaliza: oprește interogarea și cere-o din nou.\n\n**Drept necesar:** `arhive:gestionare`",
        "operationId": "get_arhive-pdf_id_arhiva",
        "parameters": [
          {
            "name": "id_arhiva",
            "in": "path",
            "description": "Identificator opac (prefix `arh`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `arh`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "arh_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            }
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_arhive_pdf_status_response"
                },
                "example": {
                  "data": {
                    "id": "arh_17",
                    "data_de_la": "2026-08-01",
                    "data_pana_la": "2026-08-31",
                    "status": "procesat",
                    "creata_la": "2026-09-03T12:00:00+03:00",
                    "notificata_la": "2026-09-03T12:04:15+03:00",
                    "durata_secunde": 255,
                    "numar_documente": 750,
                    "tip_arhiva": "facturi_emise",
                    "este_gata": true,
                    "are_eroare": false
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Arhiva nu există sau nu este accesibilă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 5 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/arhive-pdf/{id_arhiva}/genereaza-link-de-descarcare": {
      "post": {
        "tags": [
          "Arhive PDF"
        ],
        "summary": "Generează linkul de descărcare al arhivei",
        "description": "Arhiva trebuie să fie procesată. Linkul temporar expiră după intervalul indicat în răspuns.\n\n**Drept necesar:** `arhive:gestionare`",
        "operationId": "post_arhive-pdf_id_arhiva_genereaza-link-de-descarcare",
        "parameters": [
          {
            "name": "id_arhiva",
            "in": "path",
            "description": "Identificator opac (prefix `arh`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `arh`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "arh_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            }
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_arhive_pdf_link_response"
                },
                "example": {
                  "data": {
                    "id": "arh_17",
                    "link": "https://fgo-downloads.s3.eu-central-1.amazonaws.com/arhive/arhiva-17.zip",
                    "expira_in_secunde": 600
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Arhiva nu există sau nu este accesibilă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/articole": {
      "get": {
        "tags": [
          "Articole"
        ],
        "summary": "Listează articolele",
        "description": "**Abonament necesar:** Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nÎntoarce articolele active ale firmei, paginate keyset, în ordinea internă stabilă. Fără filtru, întoarce tot nomenclatorul. Filtrul de identificare depinde de setarea firmei „Căutare articole după” (Configurare API): `cod` (potrivire exactă, implicit), `cod_bare` (potrivire exactă) sau `nume` („conține”). Un filtru care nu este cel al firmei răspunde `400 validation`. Niciun filtru nu este unic, deci rezultatul poate avea mai multe articole. Cursorul este legat de firmă și de filtru și nu poate fi reutilizat cu altă valoare.\n\n**Drept necesar:** `articole:citire`",
        "operationId": "get_articole",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "cod",
            "in": "query",
            "description": "Codul comercial al articolului. Potrivire exactă; poate întoarce mai multe rezultate, deoarece codul nu este unic în firmă. Acceptat doar dacă firma caută articolele după cod articol (setarea „Căutare articole după” din Configurare API); altfel răspunde `400 validation`.",
            "schema": {
              "maxLength": 128,
              "type": "string",
              "description": "Codul comercial al articolului. Potrivire exactă; poate întoarce mai multe rezultate, deoarece codul nu este unic în firmă. Acceptat doar dacă firma caută articolele după cod articol (setarea „Căutare articole după” din Configurare API); altfel răspunde `400 validation`."
            },
            "example": "SERV-CONSULT"
          },
          {
            "name": "cod_bare",
            "in": "query",
            "description": "Codul de bare al articolului. Potrivire exactă. Acceptat doar dacă firma caută articolele după cod de bare (setarea „Căutare articole după” din Configurare API); altfel răspunde `400 validation`.",
            "schema": {
              "maxLength": 20,
              "type": "string",
              "description": "Codul de bare al articolului. Potrivire exactă. Acceptat doar dacă firma caută articolele după cod de bare (setarea „Căutare articole după” din Configurare API); altfel răspunde `400 validation`."
            },
            "example": "5941234567005"
          },
          {
            "name": "nume",
            "in": "query",
            "description": "Denumirea articolului, sau o parte din ea: potrivire „conține”, fără majuscule/minuscule. Acceptată doar dacă firma caută articolele după denumire (setarea „Căutare articole după” din Configurare API); altfel răspunde `400 validation`.",
            "schema": {
              "maxLength": 2000,
              "type": "string",
              "description": "Denumirea articolului, sau o parte din ea: potrivire „conține”, fără majuscule/minuscule. Acceptată doar dacă firma caută articolele după denumire (setarea „Căutare articole după” din Configurare API); altfel răspunde `400 validation`."
            },
            "example": "Produs demonstrativ"
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`, `pret_unitar`, `cota_tva`, `um`, `cod`, `stoc`, `cod_bare`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume",
              "pret_unitar",
              "cota_tva",
              "um",
              "cod",
              "stoc",
              "cod_bare"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_articole_articol_response"
                },
                "example": {
                  "data": [
                    {
                      "cod": "SERV-CONSULT",
                      "nume": "Servicii consultanta",
                      "pret_unitar": 100.0000,
                      "cota_tva": 0.2100,
                      "um": "ora",
                      "stoc": 0.000,
                      "cod_bare": "5941234567890"
                    },
                    {
                      "cod": "PROD-001",
                      "nume": "Produs demonstrativ",
                      "pret_unitar": 25.5000,
                      "cota_tva": 0.2100,
                      "um": "buc",
                      "stoc": 42.000,
                      "cod_bare": "5941234567005"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/balante/balanta-indicatori-financiari": {
      "get": {
        "tags": [
          "Balanțe"
        ],
        "summary": "Citește indicatorii financiari din balanță",
        "description": "Returnează indicatorii predefiniți și evoluția lor lunară. Nu este lista completă a conturilor din balanță — pentru aceea folosește `GET /v2/balante/balanta-contabila`.\n\n**Drept necesar:** `contabilitate:citire`",
        "operationId": "get_balante_balanta-indicatori-financiari",
        "parameters": [
          {
            "name": "an",
            "in": "query",
            "description": "Anul calendaristic. Dacă lipsește, se folosește anul curent.",
            "schema": {
              "type": "integer",
              "description": "Anul calendaristic. Dacă lipsește, se folosește anul curent.",
              "format": "int32"
            },
            "example": 2026
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_balanta_indicatori_response"
                },
                "example": {
                  "data": {
                    "an": 2026,
                    "indicatori": [
                      {
                        "nume": "Venituri",
                        "cont": "7",
                        "indicator": "venituri",
                        "evolutie": [
                          {
                            "luna": "2026-08",
                            "valoare_luna": 14500.00,
                            "valoare_cumulata": 98500.00
                          }
                        ]
                      }
                    ]
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 10 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/balante/balanta-contabila": {
      "get": {
        "tags": [
          "Balanțe"
        ],
        "summary": "Citește balanța contabilă",
        "description": "Returnează balanța activă a firmei. Fără filtre este selectată cea mai recentă balanță; cu `an` și, opțional, `luna`, este selectată cea mai recentă balanță din perioada cerută.\n\n**Drept necesar:** `contabilitate:citire`",
        "operationId": "get_balante_balanta-contabila",
        "parameters": [
          {
            "name": "an",
            "in": "query",
            "description": "Anul balanței. Fără el se alege cea mai recentă balanță a firmei.",
            "schema": {
              "type": "integer",
              "description": "Anul balanței. Fără el se alege cea mai recentă balanță a firmei.",
              "format": "int32"
            },
            "example": 2026
          },
          {
            "name": "luna",
            "in": "query",
            "description": "Luna, între 1 și 12. Poate fi folosită numai împreună cu `an`.",
            "schema": {
              "type": "integer",
              "description": "Luna, între 1 și 12. Poate fi folosită numai împreună cu `an`.",
              "format": "int32"
            },
            "example": 8
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit. `conturi` este gol dacă nu există o balanță în perioada cerută.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_balanta_response"
                },
                "example": {
                  "data": {
                    "an": 2026,
                    "luna": 8,
                    "data_de_la": "2026-08-01",
                    "data_pana_la": "2026-08-31",
                    "conturi": [
                      {
                        "cont": "4111",
                        "denumire": "Clienti",
                        "sold_initial_debit": 1000.00,
                        "sold_initial_credit": 0.00,
                        "rulaje_debitoare": 500.00,
                        "rulaje_creditoare": 300.00,
                        "sold_final_debit": 1200.00,
                        "sold_final_credit": 0.00
                      }
                    ]
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 10 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/clienti/{id}": {
      "get": {
        "tags": [
          "Clienți"
        ],
        "summary": "Citeste un client",
        "description": "Citeste datele de identificare si contact, independent de documente.\n\n**Drept necesar:** `clienti:citire`",
        "operationId": "get_clienti_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Datele partenerului.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_client_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "cod_judet": "B",
                    "localitate": "Bucuresti",
                    "id": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Partener inexistent, sters sau din alta firma.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Clienți"
        ],
        "summary": "Actualizeaza partial un client",
        "description": "Campurile omise raman nemodificate; null goleste campurile optionale. Codul unic si tipul persoanei nu se schimba, cu exceptia completarii CNP-ului lipsa al unui client PF. Modificarea denumirii este explicita si confirmata prin acest apel.\n\n**Drept necesar:** `clienti:scriere`",
        "operationId": "patch_clienti_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              },
              "example": {
                "email": "contact@exemplu.ro",
                "telefon": null
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Partener actualizat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_client_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "cod_judet": "B",
                    "localitate": "Bucuresti",
                    "id": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Partener inexistent, sters sau din alta firma.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/clienti": {
      "post": {
        "tags": [
          "Clienți"
        ],
        "summary": "Creeaza un client",
        "description": "Creeaza partenerul fara emiterea unui document. Nu actualizeaza automat un partener existent. Vezi ghidul Parteneri si CRM pentru regulile duplicatelor.\n\n**Drept necesar:** `clienti:scriere`",
        "operationId": "post_clienti",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              },
              "example": {
                "denumire": "Partener exemplu SRL",
                "cod_unic": "12345674",
                "tip_persoana": "PJ",
                "cod_tara": "RO",
                "adresa": "Str. Exemplu nr. 10",
                "email": "contact@exemplu.ro",
                "telefon": "+40722123456",
                "cod_judet": "B",
                "localitate": "Bucuresti"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Partener creat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_client_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "cod_judet": "B",
                    "localitate": "Bucuresti",
                    "id": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Clienți"
        ],
        "summary": "Listează clienții",
        "description": "Listează clienții activi ai firmei asociate cheii API, cu paginare prin cursor. Filtrele sunt opționale. `id` este identificatorul opac al clientului, cu prefixul `cli_`. Dacă niciun client nu corespunde filtrelor, prima pagină răspunde `200` cu `data: []`.\n\n**Drept necesar:** `clienti:citire`",
        "operationId": "get_clienti",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "Identificatorul clientului. Filtrează exact un client. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificatorul clientului. Filtrează exact un client. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Începutul denumirii clientului, minimum două caractere.",
            "schema": {
              "type": "string",
              "description": "Începutul denumirii clientului, minimum două caractere."
            },
            "example": "consultanta"
          },
          {
            "name": "cod_unic",
            "in": "query",
            "description": "Codul unic sau CNP-ul clientului, fără prefixul `RO` și fără spații.",
            "schema": {
              "type": "string",
              "description": "Codul unic sau CNP-ul clientului, fără prefixul `RO` și fără spații."
            },
            "example": "12345674"
          },
          {
            "name": "email",
            "in": "query",
            "description": "Adresa de e-mail a clientului, potrivire exactă.",
            "schema": {
              "type": "string",
              "description": "Adresa de e-mail a clientului, potrivire exactă."
            },
            "example": "facturi@client-exemplu.ro"
          },
          {
            "name": "telefon",
            "in": "query",
            "description": "Numărul de telefon al clientului, potrivire exactă.",
            "schema": {
              "maxLength": 100,
              "type": "string",
              "description": "Numărul de telefon al clientului, potrivire exactă."
            },
            "example": "+40722123456"
          },
          {
            "name": "cod_tara",
            "in": "query",
            "description": "Codul ISO 3166-1 alpha-2 al țării.",
            "schema": {
              "type": "string",
              "description": "Codul ISO 3166-1 alpha-2 al țării."
            },
            "example": "RO"
          },
          {
            "name": "cod_judet",
            "in": "query",
            "description": "Codul județului, din `GET /v2/nomenclatoare/judete`.",
            "schema": {
              "type": "string",
              "description": "Codul județului, din `GET /v2/nomenclatoare/judete`."
            },
            "example": "B"
          },
          {
            "name": "localitate",
            "in": "query",
            "description": "Localitatea clientului.",
            "schema": {
              "type": "string",
              "description": "Localitatea clientului."
            },
            "example": "Bucuresti"
          },
          {
            "name": "adresa",
            "in": "query",
            "description": "Fragment din adresa clientului.",
            "schema": {
              "type": "string",
              "description": "Fragment din adresa clientului."
            },
            "example": "Str. Exemplu nr. 10"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`id`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `id`, `denumire`, `cod_unic`, `email`, `telefon`, `cod_tara`, `tara`, `cod_judet`, `judet`, `localitate`, `adresa`, `tip_persoana`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "id",
              "denumire",
              "cod_unic",
              "email",
              "telefon",
              "cod_tara",
              "tara",
              "cod_judet",
              "judet",
              "localitate",
              "adresa",
              "tip_persoana"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_clienti_client_response"
                },
                "example": {
                  "data": [
                    {
                      "id": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                      "denumire": "Client Exemplu SRL",
                      "cod_unic": "12345674",
                      "email": "facturi@client-exemplu.ro",
                      "telefon": "+40722123456",
                      "cod_tara": "RO",
                      "tara": "ROMANIA",
                      "cod_judet": "B",
                      "judet": "Bucuresti",
                      "localitate": "Bucuresti",
                      "adresa": "Str. Exemplu nr. 10",
                      "tip_persoana": "PJ"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/clienti/{id_client}/sold": {
      "get": {
        "tags": [
          "Clienți"
        ],
        "summary": "Citește soldul unui client",
        "description": "Soldul curent al clientului în firma cheii API: suma totală rămasă de încasat (`sold_total`) și suma cu scadența depășită (`sold_depasit`).\n\n**Drept necesar:** `solduri:citire`",
        "operationId": "get_clienti_id_client_sold",
        "parameters": [
          {
            "name": "id_client",
            "in": "path",
            "description": "Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            }
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Clientul nu există, este șters sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_solduri_partener_response"
                },
                "example": {
                  "data": {
                    "sold_total": 121.00,
                    "sold_depasit": 121.00,
                    "rulaj_total": null
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/clienti/clienti-cu-restante": {
      "get": {
        "tags": [
          "Clienți"
        ],
        "summary": "Listează clienții cu restanțe",
        "description": "Perioada scadențelor este inclusivă și nu poate depăși 31 de zile. Implicit se folosesc ultimele 30 de zile, până astăzi.\n\n**Drept necesar:** `clienti:citire`",
        "operationId": "get_clienti_clienti-cu-restante",
        "parameters": [
          {
            "name": "data_scadenta_de_la",
            "in": "query",
            "description": "Începutul intervalului de scadență, inclusiv, strict `YYYY-MM-DD`. Implicit: acum 30 de zile.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Începutul intervalului de scadență, inclusiv, strict `YYYY-MM-DD`. Implicit: acum 30 de zile.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_scadenta_pana_la",
            "in": "query",
            "description": "Sfârșitul intervalului de scadență, inclusiv, strict `YYYY-MM-DD`. Implicit: astăzi. Intervalul nu poate depăși 31 de zile.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Sfârșitul intervalului de scadență, inclusiv, strict `YYYY-MM-DD`. Implicit: astăzi. Intervalul nu poate depăși 31 de zile.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`id`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `id`, `denumire`, `cod_unic`, `email`, `telefon`, `total_restant`, `numar_facturi`, `data_cea_mai_veche_scadenta`, `zile_intarziere`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "id",
              "denumire",
              "cod_unic",
              "email",
              "telefon",
              "total_restant",
              "numar_facturi",
              "data_cea_mai_veche_scadenta",
              "zile_intarziere"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_clienti_client_cu_restante_response"
                },
                "example": {
                  "data": [
                    {
                      "id": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                      "denumire": "Client Exemplu SRL",
                      "cod_unic": "12345674",
                      "email": "facturi@client-exemplu.ro",
                      "telefon": "+40722123456",
                      "total_restant": 121.00,
                      "numar_facturi": 1,
                      "data_cea_mai_veche_scadenta": "2026-08-16",
                      "zile_intarziere": 18
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Emite o factură",
        "description": "Creează și emite o factură pentru firma asociată cheii API. Clientul se identifică după codul unic sau CNP; dacă nu există, este creat din datele trimise. Câmpul `articole` este obligatoriu și trebuie să conțină cel puțin un articol.\n\nÎnainte de primul apel, configurează în FGO un registru care conține seria trimisă.\n\nOperația **nu** este idempotentă: fiecare apel reușit emite o factură nouă. Dacă nu primești răspunsul, nu repeta cererea automat — verifică întâi cu `GET /v2/facturi` dacă factura a fost totuși emisă. Cu `verificare_duplicat=true`, caută mai întâi factura după `id_extern` sau, dacă acesta lipsește, după serie și număr. O factură găsită oprește emiterea cu `400 invalid-state` și `motiv.cod=factura_duplicata`. Verificarea nu este atomică între cereri simultane.\n\nOrice câmp obligatoriu lipsă sau valoare din afara nomenclatoarelor oprește operația cu `400`, fără să creeze documentul. Operația acceptă un apel pe secundă, pe firmă.\n\n### Detalii e-Factura\n\n`efactura` (opțional) adaugă informații e-Factura, la nivel de factură și pe fiecare element din `articole`. Clasificările de produs folosesc `tip`, din nomenclatorul `GET /v2/nomenclatoare/tipuri-clasificare-produs`: `STI` (cod CPV, validat contra `coduri-clasificare-produs`), `NB` (număr de lot, liber), `ZZZ` (cod convenit, liber). Maximum 10 clasificări și 10 proprietăți pe articol; nu este permis pe elementele de tip `Discount`; primul cod `STI` devine CPV-ul articolului și înlocuiește CPV-ul implicit al produsului, celelalte clasificări se adaugă.\n\nMaparea către câmpurile e-Factura (BT):\n\n| Câmp | BT | Semnificație |\n| --- | --- | --- |\n| `efactura.referinta_cumparator` | BT-10 | Referința cumpărătorului |\n| `efactura.referinta_contract` | BT-12 | Referința contractului |\n| `efactura.referinta_contabila_cumparator` | BT-19 | Referința contabilă a cumpărătorului |\n| `articole[].efactura.nota` | BT-127 | Nota articolului |\n| `articole[].efactura.referinta_contabila_cumparator` | BT-133 | Referința contabilă a cumpărătorului, pe articol |\n| `articole[].efactura.identificator_cumparator` | BT-156 | Identificatorul articolului la cumpărător |\n| `articole[].efactura.gtin` | BT-157 | Identificatorul standard al articolului; FGO îl declară cu schema `0088` (GTIN) |\n| `articole[].efactura.clasificari[].cod` | BT-158 | Codul clasificării |\n| `articole[].efactura.clasificari[].tip` | atribut BT-158 | Tipul: `STI`, `NB` sau `ZZZ` |\n| `articole[].efactura.atribute[].nume` | BT-160 | Numele atributului |\n| `articole[].efactura.atribute[].valoare` | BT-161 | Valoarea atributului |\n\n`pret_include_compensatie_agricultori=true` înseamnă că prețul transmis include deja compensația în cotă forfetară de 8%; FGO o scoate din baza articolului și o declară separat, fără să o adauge peste total.\n\n**Drept necesar:** `facturi:emitere`",
        "operationId": "post_facturi",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          },
          {
            "name": "Fgo-Url-Platforma",
            "in": "header",
            "description": "Adresa site-ului integrării sau a magazinului pentru care se face apelul. Trebuie să corespundă unei adrese înregistrate pe firmă (Setări → eCommerce → API). Headerul declară magazinul; nu autentifică apelantul, nu dovedește originea cererii și nu poate schimba firma asociată cheii API.",
            "required": true,
            "schema": {
              "maxLength": 256,
              "type": "string",
              "example": "https://magazin.exemplu.ro"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_emite_request"
              },
              "examples": {
                "articol": {
                  "summary": "O linie de articol",
                  "value": {
                    "id_extern": "comanda-10425",
                    "verificare_duplicat": true,
                    "valuta": "RON",
                    "tip_factura": "F",
                    "serie": "FGO",
                    "data_emitere": "2026-09-03",
                    "data_scadenta": "2026-09-18",
                    "articole": [
                      {
                        "cod_articol": "SERV-CONSULT",
                        "denumire": "Servicii consultanta",
                        "um": "ora",
                        "nr_produse": 1.000,
                        "pret_unitar": 100.0000,
                        "cota_tva": 0.2100,
                        "efactura": {
                          "identificator_cumparator": "SERV-01",
                          "clasificari": [
                            {
                              "tip": "STI",
                              "cod": "72200000-7"
                            }
                          ]
                        }
                      }
                    ],
                    "client": {
                      "denumire": "Client Exemplu SRL",
                      "tip": "PJ",
                      "cod_unic": "12345674",
                      "email": "facturi@client-exemplu.ro",
                      "tara": "Romania",
                      "cod_judet": "B",
                      "localitate": "Bucuresti",
                      "adresa": "Str. Exemplu nr. 10"
                    },
                    "efactura": {
                      "referinta_cumparator": "PO-2026-10425",
                      "referinta_contract": "CTR-2026-18"
                    }
                  }
                },
                "cu-discount": {
                  "summary": "Articol cu discount pe linie",
                  "value": {
                    "id_extern": "comanda-10425",
                    "verificare_duplicat": true,
                    "valuta": "RON",
                    "tip_factura": "F",
                    "serie": "FGO",
                    "data_emitere": "2026-09-03",
                    "data_scadenta": "2026-09-18",
                    "articole": [
                      {
                        "tip": "Articol",
                        "nr_crt": 1,
                        "cod_articol": "SERV-CONSULT",
                        "denumire": "Servicii consultanta",
                        "um": "ora",
                        "nr_produse": 1.000,
                        "pret_unitar": 100.0000,
                        "cota_tva": 0.2100,
                        "efactura": {
                          "identificator_cumparator": "SERV-01",
                          "clasificari": [
                            {
                              "tip": "STI",
                              "cod": "72200000-7"
                            }
                          ]
                        }
                      },
                      {
                        "tip": "Discount",
                        "nr_crt": 2,
                        "nr_crt_articol": 1,
                        "denumire": "Discount 10% Servicii consultanta",
                        "um": "ora",
                        "nr_produse": 1.000,
                        "pret_total": -12.10,
                        "cota_tva": 0.2100
                      }
                    ],
                    "client": {
                      "denumire": "Client Exemplu SRL",
                      "tip": "PJ",
                      "cod_unic": "12345674",
                      "email": "facturi@client-exemplu.ro",
                      "tara": "Romania",
                      "cod_judet": "B",
                      "localitate": "Bucuresti",
                      "adresa": "Str. Exemplu nr. 10"
                    },
                    "efactura": {
                      "referinta_cumparator": "PO-2026-10425",
                      "referinta_contract": "CTR-2026-18"
                    }
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Factura a fost emisă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_emite_response"
                },
                "example": {
                  "data": {
                    "serie": "FGO",
                    "numar": "1201",
                    "stocuri": [
                      {
                        "cod_articol": "PROD-001",
                        "cod_bare": "5941234567005",
                        "nume": "Produs demonstrativ",
                        "cod_gestiune": "DEPOZIT",
                        "stoc": 41.000
                      }
                    ]
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "body",
                          "pointer": "/articole",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Campul 'articole' trebuie sa contina cel putin un articol."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Factura nu poate fi emisa cu datele transmise.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "Factura nu poate fi emisa cu datele transmise."
                      }
                    }
                  },
                  "invalid-state.factura_duplicata": {
                    "summary": "invalid-state.factura_duplicata",
                    "description": "Cu `verificare_duplicat=true`, a fost găsită o factură după `id_extern` sau, dacă acesta lipsește, după serie și număr. Nu se emite o factură nouă. `motiv.cod`: `factura_duplicata`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Factura FGO 1201 exista deja salvata.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "factura_duplicata",
                        "mesaj": "Factura FGO 1201 exista deja salvata."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Facturi"
        ],
        "summary": "Listează facturile emise",
        "description": "Listează facturile fiscale active ale firmei. Implicit caută ultimele 30 de zile; intervalul inclusiv nu poate depăși un an. Cursorul este invalidat dacă se schimbă filtrele.\n\n**Drept necesar:** `facturi:citire`",
        "operationId": "get_facturi",
        "parameters": [
          {
            "name": "data_emitere_de_la",
            "in": "query",
            "description": "Începutul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`. Implicit: acum 30 de zile. Intervalul nu poate depăși un an.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Începutul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`. Implicit: acum 30 de zile. Intervalul nu poate depăși un an.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_emitere_pana_la",
            "in": "query",
            "description": "Sfârșitul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`. Implicit: astăzi.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Sfârșitul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`. Implicit: astăzi.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "client_id",
            "in": "query",
            "description": "Identificatorul clientului, evaluat numai în firma cheii API. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificatorul clientului, evaluat numai în firma cheii API. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "cod_unic_client",
            "in": "query",
            "description": "Codul unic al clientului, fără prefixul `RO` și fără spații.",
            "schema": {
              "type": "string",
              "description": "Codul unic al clientului, fără prefixul `RO` și fără spații."
            },
            "example": "12345674"
          },
          {
            "name": "serie",
            "in": "query",
            "description": "Seria facturii, potrivire exactă.",
            "schema": {
              "type": "string",
              "description": "Seria facturii, potrivire exactă."
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "query",
            "description": "Numărul facturii, potrivire exactă.",
            "schema": {
              "type": "string",
              "description": "Numărul facturii, potrivire exactă."
            },
            "example": "1201"
          },
          {
            "name": "restanta",
            "in": "query",
            "description": "`true` păstrează numai facturile neîncasate integral, `false` numai pe cele încasate.",
            "schema": {
              "type": "boolean",
              "description": "`true` păstrează numai facturile neîncasate integral, `false` numai pe cele încasate."
            },
            "example": true
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`serie`, `numar`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `serie`, `numar`, `data_emitere`, `data_scadenta`, `valoare_totala`, `valoare_fara_tva`, `valoare_tva`, `valoare_ramasa`, `valuta`, `status`, `status_plata`, `trimisa_pe_email`, `client_id`, `client`, `cod_unic_client`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "serie",
              "numar",
              "data_emitere",
              "data_scadenta",
              "valoare_totala",
              "valoare_fara_tva",
              "valoare_tva",
              "valoare_ramasa",
              "valuta",
              "status",
              "status_plata",
              "trimisa_pe_email",
              "client_id",
              "client",
              "cod_unic_client"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_facturi_factura_lista_response"
                },
                "example": {
                  "data": [
                    {
                      "serie": "FGO",
                      "numar": "1201",
                      "data_emitere": "2026-09-03",
                      "data_scadenta": "2026-09-18",
                      "valoare_totala": 121.00,
                      "valoare_fara_tva": 100.00,
                      "valoare_tva": 21.00,
                      "valoare_ramasa": 121.00,
                      "valuta": "RON",
                      "status": "emisa",
                      "status_plata": "in_termen",
                      "trimisa_pe_email": false,
                      "client_id": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                      "client": "Client Exemplu SRL",
                      "cod_unic_client": "12345674"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Clientul filtrat nu există, este șters sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/efactura": {
      "get": {
        "tags": [
          "Facturi"
        ],
        "summary": "Citește ultimul status e-Factura",
        "description": "Întoarce ultimul eveniment e-Factura pentru document. `data` este `null` dacă factura există, dar nu are încă un eveniment e-Factura.\n\n**Drept necesar:** `facturi:citire`",
        "operationId": "get_facturi_serie_numar_efactura",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "maxLength": 20,
              "minLength": 0,
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "maxLength": 50,
              "minLength": 0,
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_status_e_factura_response"
                },
                "examples": {
                  "cu_eveniment": {
                    "summary": "Factura are un eveniment e-Factura",
                    "value": {
                      "data": {
                        "actualizat_la": "2026-09-03T12:00:00+03:00",
                        "status": "acceptata",
                        "descriere": "Factura a fost validata de ANAF.",
                        "detalii": null,
                        "eroare_anaf": false,
                        "eroare_fgo": false
                      },
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "fara_eveniment": {
                    "summary": "Factura există, fără evenimente e-Factura",
                    "value": {
                      "data": null,
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}": {
      "get": {
        "tags": [
          "Facturi"
        ],
        "summary": "Starea unei facturi",
        "description": "Întoarce informațiile curente ale facturii identificate prin serie și număr.\n\nÎmparte limita de apeluri cu `POST /v2/facturi/{serie}/{numar}/trimite-in-spv`: un apel la una dintre ele o blochează pe cealaltă, pentru aceeași firmă, o secundă.\n\n**Drept necesar:** `facturi:citire`",
        "operationId": "get_facturi_serie_numar",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`numar`, `serie`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Subcâmpurile obiectelor și ale listelor se cer prin grupare (`incasari(suma_incasata,data_incasare)`). Un obiect cerut fără subcâmpuri răspunde `400 validation`, cu codul `subfields_required`; cere explicit subcâmpurile necesare. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `incasari`, `incasari.suma_incasata`, `incasari.data_incasare`, `incasari.valuta`, `numar`, `serie`, `valoare`, `valoare_achitata`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "incasari(suma_incasata,data_incasare,valuta)",
              "numar",
              "serie",
              "valoare",
              "valoare_achitata"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_get_factura_response"
                },
                "example": {
                  "data": {
                    "numar": "1201",
                    "serie": "FGO",
                    "valoare": 121.00,
                    "valoare_achitata": 121.00,
                    "incasari": [
                      {
                        "suma_incasata": 121.00,
                        "data_incasare": "2026-09-03",
                        "valuta": "RON"
                      }
                    ]
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Facturi"
        ],
        "summary": "Șterge o factură",
        "description": "Șterge definitiv o factură din evidență.\n\nO factură încasată sau trimisă în SPV nu se poate șterge: răspunsul este `400`.\n\n**Drept necesar:** `facturi:anulare`",
        "operationId": "delete_facturi_serie_numar",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          },
          {
            "name": "Fgo-Url-Platforma",
            "in": "header",
            "description": "Adresa site-ului integrării sau a magazinului pentru care se face apelul. Trebuie să corespundă unei adrese înregistrate pe firmă (Setări → eCommerce → API). Headerul declară magazinul; nu autentifică apelantul, nu dovedește originea cererii și nu poate schimba firma asociată cheii API.",
            "required": true,
            "schema": {
              "maxLength": 256,
              "type": "string",
              "example": "https://magazin.exemplu.ro"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Factura a fost incasata si nu se poate sterge.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "Factura a fost incasata si nu se poate sterge."
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit. Corpul este `{ data: null, meta }`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_object"
                },
                "example": {
                  "data": null,
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/genereaza-link-de-descarcare": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Generează linkul de descărcare al facturii",
        "description": "Generează sau refolosește linkul de descărcare al facturii în format PDF. Este un short link FGO, nu un URL S3 presemnat. În producție are forma `https://www.fgo.ro/n/p/{short_code}?ap=true`, iar domeniul se adaptează mediului. Linkul rămâne același cât timp conținutul facturii nu se modifică.\n\n**Drept necesar:** `facturi:citire`",
        "operationId": "post_facturi_serie_numar_genereaza-link-de-descarcare",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Linkul a fost generat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_genereaza_link_de_descarcare_response"
                },
                "example": {
                  "data": {
                    "link": "https://www.fgo.ro/n/p/q83vZ1nKRUy5c4QmT2x9_A?ap=true"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/genereaza-link-de-plata": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Generează linkul de plată al facturii",
        "description": "Generează linkul de plată pentru o factură eligibilă. Firma trebuie să aibă un procesator compatibil configurat și linkul de plată activ pentru tipul documentului; un link existent este refolosit.\n\n**Drept necesar:** `facturi:citire`",
        "operationId": "post_facturi_serie_numar_genereaza-link-de-plata",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Linkul de plată a fost generat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_genereaza_link_de_plata_response"
                },
                "example": {
                  "data": {
                    "link": "https://www.fgo.ro/online-pay/12345/10293d1d-1afa-4cbc-8e34-28468d8b4768/67890"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Factura nu este eligibila pentru generarea linkului de plata.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "Factura nu este eligibila pentru generarea linkului de plata."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/awb": {
      "put": {
        "tags": [
          "Facturi"
        ],
        "summary": "Actualizează AWB-ul unei facturi",
        "description": "Leagă (sau înlocuiește) numărul de AWB al unei facturi deja emise. Operația este idempotentă: același AWB trimis din nou lasă factura în aceeași stare.\n\n**Drept necesar:** `facturi:emitere`",
        "operationId": "put_facturi_serie_numar_awb",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_ataseaza_awb_request"
              },
              "example": {
                "awb": "RO987654321"
              }
            }
          },
          "required": true
        },
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit. Corpul este `{ data: null, meta }`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_object"
                },
                "example": {
                  "data": null,
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "body",
                          "pointer": "/awb",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Campul 'awb' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/anuleaza": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Anulează o factură",
        "description": "Anulează o factură emisă. Factura rămâne în evidență, marcată ca anulată.\n\nOperația răspunde `400` dacă factura este trimisă în SPV, trimisă în SAGA sau încasată integral. Bonurile de casă, inclusiv cele cu cod fiscal, sunt exceptate de la restricția privind încasarea. Facturile stornate și documentele storno nu se anulează separat; folosește repunerea în vigoare a facturii stornate pentru retragerea documentului storno.\n\n**Drept necesar:** `facturi:anulare`",
        "operationId": "post_facturi_serie_numar_anuleaza",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          },
          {
            "name": "Fgo-Url-Platforma",
            "in": "header",
            "description": "Adresa site-ului integrării sau a magazinului pentru care se face apelul. Trebuie să corespundă unei adrese înregistrate pe firmă (Setări → eCommerce → API). Headerul declară magazinul; nu autentifică apelantul, nu dovedește originea cererii și nu poate schimba firma asociată cheii API.",
            "required": true,
            "schema": {
              "maxLength": 256,
              "type": "string",
              "example": "https://magazin.exemplu.ro"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Factura a fost incasata si nu se poate anula.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "Factura a fost incasata si nu se poate anula."
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit. Corpul este `{ data: null, meta }`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_object"
                },
                "example": {
                  "data": null,
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/repune-in-vigoare-factura-stornata": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Repune în vigoare o factură stornată",
        "description": "Identifică factura originală prin serie și număr. Originalul revine la starea emisă, iar factura storno asociată este retrasă prin ștergere logică. Se actualizează stocul. Operația este refuzată dacă perechea nu mai este validă, are încasări sau documente trimise în contabilitate, ori dacă factura storno este trimisă în SPV. O repetare după succes răspunde `400 invalid-state`.\n\n**Drept necesar:** `facturi:anulare`",
        "operationId": "post_facturi_serie_numar_repune-in-vigoare-factura-stornata",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          },
          {
            "name": "Fgo-Url-Platforma",
            "in": "header",
            "description": "Adresa site-ului integrării sau a magazinului pentru care se face apelul. Trebuie să corespundă unei adrese înregistrate pe firmă (Setări → eCommerce → API). Headerul declară magazinul; nu autentifică apelantul, nu dovedește originea cererii și nu poate schimba firma asociată cheii API.",
            "required": true,
            "schema": {
              "maxLength": 256,
              "type": "string",
              "example": "https://magazin.exemplu.ro"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit. Corpul este `{ data: null, meta }`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_object"
                },
                "example": {
                  "data": null,
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Perechea de stornare nu mai este valida. Verificati starea ambelor facturi in FGO.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "Perechea de stornare nu mai este valida. Verificati starea ambelor facturi in FGO."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/incasari": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Înregistrează o încasare",
        "description": "**Abonament necesar:** Premium sau Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nÎnregistrează o încasare pe o factură emisă și generează documentul de încasare corespunzător.\n\n`data_incasare` este o dată civilă, strict `YYYY-MM-DD`; dacă lipsește, FGO folosește data curentă. `suma_incasata` este un număr JSON (`1234.56`), nu text. `tip_incasare` trebuie să fie exact una dintre valorile `nume` întoarse de `GET /v2/nomenclatoare/tipuri-incasare`; de exemplu, plata prin bancă folosește valoarea `Banca`, nu `Ordin de plata`. `cont_incasare` este opțional: dacă lipsește, FGO folosește contul implicit configurat pentru tipul ales; dacă este trimis, trebuie să corespundă exact unui cont din **Setări → Încasare**.\n\n**Drept necesar:** `facturi:incasare`",
        "operationId": "post_facturi_serie_numar_incasari",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_adauga_incasare_request"
              },
              "example": {
                "suma_incasata": 121.00,
                "data_incasare": "2026-09-03",
                "tip_incasare": "Banca"
              }
            }
          },
          "required": true
        },
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "body",
                          "pointer": "/suma_incasata",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Campul 'suma_incasata' trebuie sa fie mai mare decat zero."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Clientul facturii a fost sters sau nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "Clientul facturii a fost sters sau nu exista."
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_adauga_incasare_response"
                },
                "example": {
                  "data": {
                    "serie_incasare": "CH",
                    "numar_incasare": "348"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Facturi"
        ],
        "summary": "Șterge toate încasările facturii",
        "description": "**Abonament necesar:** Premium sau Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nȘterge toate încasările neșterse ale facturii, cu documentele de încasare asociate. Operație distructivă, deci confirmarea `?toate=true` este obligatorie; fără ea, răspunsul este `400`.\n\nDacă factura nu are nicio încasare, răspunsul este `404`.\n\n**Drept necesar:** `facturi:incasare`",
        "operationId": "delete_facturi_serie_numar_incasari",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "toate",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "toate",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Confirmati stergerea tuturor incasarilor cu ?toate=true."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Factura nu există sau nu are nicio încasare.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista sau nu are nicio incasare.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit și întoarce numărul elementelor șterse.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_common_stergere_response"
                },
                "example": {
                  "data": {
                    "nr_sterse": 2,
                    "nr_total": 2
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/incasari/{serie_incasare}/{numar_incasare}": {
      "delete": {
        "tags": [
          "Facturi"
        ],
        "summary": "Șterge o încasare",
        "description": "**Abonament necesar:** Premium sau Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nȘterge o încasare înregistrată anterior pe o factură, împreună cu documentul de încasare asociat. Încasarea se identifică prin seria și numărul ei din cale.\n\nDacă factura nu are încasarea indicată, răspunsul este `404`.\n\n**Drept necesar:** `facturi:incasare`",
        "operationId": "delete_facturi_serie_numar_incasari_serie_incasare_numar_incasare",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "serie_incasare",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "CH"
          },
          {
            "name": "numar_incasare",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "348"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Factura sau încasarea nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura sau incasarea nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit. Corpul este `{ data: null, meta }`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_object"
                },
                "example": {
                  "data": null,
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/storneaza": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Stornează o factură",
        "description": "Emite factura de stornare pentru o factură existentă. `data_emitere`, dacă este trimisă, este o dată civilă, strict `YYYY-MM-DD`; nu acceptă oră sau fus.\n\nO factură storno, o proformă, o factură deja stornată sau una anulată nu se pot storna: răspunsul este `400`.\n\n**Drept necesar:** `facturi:anulare`",
        "operationId": "post_facturi_serie_numar_storneaza",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          },
          {
            "name": "Fgo-Url-Platforma",
            "in": "header",
            "description": "Adresa site-ului integrării sau a magazinului pentru care se face apelul. Trebuie să corespundă unei adrese înregistrate pe firmă (Setări → eCommerce → API). Headerul declară magazinul; nu autentifică apelantul, nu dovedește originea cererii și nu poate schimba firma asociată cheii API.",
            "required": true,
            "schema": {
              "maxLength": 256,
              "type": "string",
              "example": "https://magazin.exemplu.ro"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_storneaza_request"
              },
              "example": {
                "serie_storno": "STFGO",
                "data_emitere": "2026-09-03"
              }
            }
          }
        },
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "body",
                          "pointer": "/serie_storno",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Campul 'serie_storno' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "Factura este anulata si nu se poate storna.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "Factura este anulata si nu se poate storna."
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_storneaza_response"
                },
                "example": {
                  "data": {
                    "serie": "STFGO",
                    "numar": "381"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/trimite-in-spv": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Trimite factura în SPV (e-Factura)",
        "description": "Trimite factura către Spațiul Privat Virtual al ANAF.\n\nÎmparte limita de apeluri cu `GET /v2/facturi/{serie}/{numar}`: un apel la una dintre ele o blochează pe cealaltă, pentru aceeași firmă, o secundă.\n\n**Drept necesar:** `facturi:spv`",
        "operationId": "post_facturi_serie_numar_trimite-in-spv",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Factura nu există.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nOperația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "invalid-state.stare_nepermisa": {
                    "summary": "invalid-state.stare_nepermisa",
                    "description": "Operația este refuzată din cauza regulilor de business sau a stării resursei (`invalid-state`). Cauza este în `motiv`. Codul motivului este `stare_nepermisa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-state",
                      "title": "Starea curenta nu permite operatia",
                      "status": 400,
                      "detail": "e-Factura a fost trimisa deja in SPV.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "stare_nepermisa",
                        "mesaj": "e-Factura a fost trimisa deja in SPV."
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit. Corpul este `{ data: null, meta }`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_object"
                },
                "example": {
                  "data": null,
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/asociate": {
      "get": {
        "tags": [
          "Facturi"
        ],
        "summary": "Facturile generate dintr-o proformă",
        "description": "**Abonament necesar:** Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nArată ce facturi fiscale au fost emise pornind de la proforma identificată prin `serie` și `numar`. Parametrii din cale identifică proforma-sursă, nu una dintre facturile din răspuns. Sunt incluse numai facturile active de tip `Factura`, de la cea mai nouă la cea mai veche; avizele, alte documente și documentele șterse nu sunt incluse. O proformă validă din care nu s-a emis nicio factură întoarce `200` cu `data: []`.\n\n**Drept necesar:** `facturi:citire`",
        "operationId": "get_facturi_serie_numar_asociate",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`numar`, `serie`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `data_emitere`, `numar`, `serie`, `valoare`, `valoare_achitata`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "data_emitere",
              "numar",
              "serie",
              "valoare",
              "valoare_achitata"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Proforma nu există sau a fost ștearsă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Proforma nu exista",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_facturi_get_facturi_asociate_factura"
                },
                "example": {
                  "data": [
                    {
                      "numar": "1201",
                      "serie": "FGO",
                      "valoare": 121.00,
                      "valoare_achitata": 0.00,
                      "data_emitere": "2026-09-01"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/{serie}/{numar}/trimite-pe-email": {
      "post": {
        "tags": [
          "Facturi"
        ],
        "summary": "Trimite factura pe email",
        "description": "Trimite sau retrimite o factură existentă. Dacă `email` lipsește, se folosește adresa salvată pe client. Atașează PDF-ul facturii și nu trimite notificare WhatsApp.\n\n**Drept necesar:** `facturi:trimitere`",
        "operationId": "post_facturi_serie_numar_trimite-pe-email",
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "description": "Seria facturii.",
            "required": true,
            "schema": {
              "maxLength": 20,
              "minLength": 0,
              "type": "string"
            },
            "example": "FGO"
          },
          {
            "name": "numar",
            "in": "path",
            "description": "Numărul facturii.",
            "required": true,
            "schema": {
              "maxLength": 50,
              "minLength": 0,
              "type": "string"
            },
            "example": "1201"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_trimite_email_request"
              },
              "example": {
                "email": "facturi@client-exemplu.ro"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_trimite_email_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_trimite_email_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Factura a fost programată pentru trimitere. Corpul este `{ data: null, meta }`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_object"
                },
                "example": {
                  "data": null,
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Factura nu există sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi-furnizori": {
      "post": {
        "tags": [
          "Facturi furnizor"
        ],
        "summary": "Înregistrează o factură furnizor",
        "description": "Creează o factură primită, cu articole și preluare opțională în stoc (stoc_preluat), fără plăți. Furnizorul trebuie să existe în firma cheii. Articolele se identifică prin cod_articol sau cod_bare (potrivire exactă și unică); fără coduri se creează articole de achiziție. Necesită accesul firmei pentru adăugarea documentelor contabile. Nu deduplică după furnizor și număr și nu oferă idempotency: retrimiterea poate crea alt document. După un rezultat incert verifică listarea înainte de a retrimite.\n\n**Drept necesar:** `facturi-furnizori:scriere`",
        "operationId": "post_facturi-furnizori",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_furnizori_creare_request"
              },
              "example": {
                "furnizor_id": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                "numar": "FF-123",
                "stoc_preluat": false,
                "data_emitere": "2026-10-13",
                "valuta": "RON",
                "valoare": 100.00,
                "valoare_tva": 21.00,
                "articole": [
                  {
                    "denumire": "Serviciu achiziționat",
                    "um": "buc",
                    "cantitate": 2,
                    "pret_unitar": 50,
                    "cota_tva": 0.21
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_furnizori_creare_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_facturi_furnizori_creare_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Factura furnizorului a fost înregistrată.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_facturi_furnizori_creare_response"
                },
                "example": {
                  "data": {
                    "id": "ffr_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Furnizorul, articolul sau gestiunea nu există, este șters sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Facturi furnizor"
        ],
        "summary": "Listează facturile furnizorilor",
        "description": "Listează documentele primite ale firmei. Dacă `furnizor_id` este prezent, el este evaluat numai în firma cheii API.\n\n**Drept necesar:** `furnizori:citire`",
        "operationId": "get_facturi-furnizori",
        "parameters": [
          {
            "name": "furnizor_id",
            "in": "query",
            "description": "Identificatorul furnizorului, evaluat numai în firma cheii API. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificatorul furnizorului, evaluat numai în firma cheii API. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "data_emitere_de_la",
            "in": "query",
            "description": "Începutul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Începutul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_emitere_pana_la",
            "in": "query",
            "description": "Sfârșitul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Sfârșitul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_primire_de_la",
            "in": "query",
            "description": "Începutul intervalului de înregistrare în FGO, inclusiv.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Începutul intervalului de înregistrare în FGO, inclusiv.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_primire_pana_la",
            "in": "query",
            "description": "Sfârșitul intervalului de înregistrare în FGO, inclusiv.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Sfârșitul intervalului de înregistrare în FGO, inclusiv.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_scadenta_de_la",
            "in": "query",
            "description": "Începutul intervalului de scadență, inclusiv.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Începutul intervalului de scadență, inclusiv.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_scadenta_pana_la",
            "in": "query",
            "description": "Sfârșitul intervalului de scadență, inclusiv.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Sfârșitul intervalului de scadență, inclusiv.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "numar",
            "in": "query",
            "description": "Numărul documentului primit, potrivire exactă.",
            "schema": {
              "type": "string",
              "description": "Numărul documentului primit, potrivire exactă."
            },
            "example": "1201"
          },
          {
            "name": "nume_document",
            "in": "query",
            "description": "Denumirea documentului primit.",
            "schema": {
              "type": "string",
              "description": "Denumirea documentului primit."
            },
            "example": "Factura"
          },
          {
            "name": "platita",
            "in": "query",
            "description": "`true` păstrează numai documentele achitate, `false` numai pe cele neachitate.",
            "schema": {
              "type": "boolean",
              "description": "`true` păstrează numai documentele achitate, `false` numai pe cele neachitate."
            },
            "example": true
          },
          {
            "name": "valuta",
            "in": "query",
            "description": "Codul valutei documentului, de exemplu `RON`.",
            "schema": {
              "type": "string",
              "description": "Codul valutei documentului, de exemplu `RON`."
            },
            "example": "RON"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`id`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `id`, `furnizor_id`, `furnizor`, `cod_unic_furnizor`, `numar`, `nume_document`, `data_emitere`, `data_scadenta`, `creat_la`, `valoare`, `valoare_tva`, `total`, `suma_ramasa`, `valuta`, `platita`, `status`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "id",
              "furnizor_id",
              "furnizor",
              "cod_unic_furnizor",
              "numar",
              "nume_document",
              "data_emitere",
              "data_scadenta",
              "creat_la",
              "valoare",
              "valoare_tva",
              "total",
              "suma_ramasa",
              "valuta",
              "platita",
              "status"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_facturi_furnizori_factura_response"
                },
                "example": {
                  "data": [
                    {
                      "id": "ffr_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                      "furnizor_id": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                      "furnizor": "Furnizor Exemplu SRL",
                      "cod_unic_furnizor": "87654321",
                      "numar": "FF-908",
                      "nume_document": "Factura",
                      "data_emitere": "2026-08-20",
                      "data_scadenta": "2026-09-19",
                      "creat_la": "2026-08-21T10:15:00+03:00",
                      "valoare": 714.29,
                      "valoare_tva": 135.71,
                      "total": 850.00,
                      "suma_ramasa": 850.00,
                      "valuta": "RON",
                      "platita": false,
                      "status": "aprobat"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Furnizorul filtrat nu există, este șters sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/facturi/facturi-restante": {
      "get": {
        "tags": [
          "Facturi"
        ],
        "summary": "Listează facturile restante ale unui client",
        "description": "Facturile emise clientului și neîncasate integral, în ordinea scadenței. `client_id` este obligatoriu: pentru toate restanțele firmei folosește `GET /v2/facturi` cu `restanta=true`.\n\n**Drept necesar:** `clienti:citire`",
        "operationId": "get_facturi_facturi-restante",
        "parameters": [
          {
            "name": "client_id",
            "in": "query",
            "description": "**Obligatoriu.** Clientul ale cărui facturi restante se cer. Pentru toate restanțele firmei folosește `GET /v2/facturi` cu `restanta=true`. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "**Obligatoriu.** Clientul ale cărui facturi restante se cer. Pentru toate restanțele firmei folosește `GET /v2/facturi` cu `restanta=true`. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`serie`, `numar`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `serie`, `numar`, `data_emitere`, `data_scadenta`, `valoare_totala`, `sold`, `sold_depasit`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "serie",
              "numar",
              "data_emitere",
              "data_scadenta",
              "valoare_totala",
              "sold",
              "sold_depasit"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Clientul nu există, este șters sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_clienti_factura_restanta_response"
                },
                "example": {
                  "data": [
                    {
                      "serie": "FGO",
                      "numar": "1201",
                      "data_emitere": "2026-08-01",
                      "data_scadenta": "2026-08-16",
                      "valoare_totala": 121.00,
                      "sold": 121.00,
                      "sold_depasit": 121.00
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/firme/pozitie-anaf": {
      "get": {
        "tags": [
          "Firme"
        ],
        "summary": "Citește poziția unei firme la ANAF",
        "description": "Datele ANAF sunt publice. Parametrul opțional `cod_unic` selectează firma analizată; dacă lipsește, se folosește firma asociată cheii API. Headerul `Fgo-Cod-Unic` continuă să confirme firma cheii și nu este folosit drept firmă țintă.\n\n**Drept necesar:** `firma:citire`",
        "operationId": "get_firme_pozitie-anaf",
        "parameters": [
          {
            "name": "cod_unic",
            "in": "query",
            "description": "Codul unic al firmei analizate, fără prefixul `RO` și fără spații. Dacă lipsește, se analizează firma asociată cheii API.",
            "schema": {
              "pattern": "^[0-9]{1,10}$",
              "type": "string",
              "description": "Codul unic al firmei analizate, fără prefixul `RO` și fără spații. Dacă lipsește, se analizează firma asociată cheii API."
            },
            "example": "12345674"
          },
          {
            "name": "an",
            "in": "query",
            "description": "Anul situațiilor financiare. Dacă lipsește, se folosește anul curent.",
            "schema": {
              "type": "integer",
              "description": "Anul situațiilor financiare. Dacă lipsește, se folosește anul curent.",
              "format": "int32"
            },
            "example": 2026
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_firma_pozitie_anaf_response"
                },
                "example": {
                  "data": {
                    "an": 2025,
                    "ani_disponibili": [
                      2025,
                      2024
                    ],
                    "indicatori": [
                      {
                        "indicator": "cifra_afaceri",
                        "suma": 1500000.00
                      }
                    ],
                    "pozitii": [
                      {
                        "tip_comparatie": "oras_caen",
                        "zone": [
                          {
                            "zona": "Bucuresti",
                            "caen": 6201,
                            "numar_firme": 2400,
                            "pozitie_cifra_afaceri": 125
                          }
                        ],
                        "clasamente": [
                          {
                            "cifra_afaceri": 1500000.00,
                            "pozitie_cifra_afaceri": 125,
                            "medie_cifra_afaceri": 820000.00,
                            "profit": 210000.00,
                            "pozitie_profit": 140,
                            "medie_profit": 95000.00,
                            "angajati": 12,
                            "pozitie_angajati": 310,
                            "medie_angajati": 6.00,
                            "cifra_afaceri_pe_angajat": 125000.00,
                            "pozitie_cifra_afaceri_pe_angajat": 98
                          }
                        ]
                      }
                    ],
                    "topuri": [
                      {
                        "tip_comparatie": "oras_caen",
                        "firme": [
                          {
                            "denumire": "Firma Lider SRL",
                            "cod_unic": 14399840,
                            "pozitie": 1,
                            "valoare": 48200000.00
                          }
                        ]
                      }
                    ],
                    "link_detalii": "https://www.fgo.ro/n/firme-romania/12345678"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 10 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/fise-partener": {
      "post": {
        "tags": [
          "Fișe de partener"
        ],
        "summary": "Generează fișa unui partener",
        "description": "Extrasul de cont al unui client sau al unui furnizor, pentru perioada cerută.\n\n`tip_partener` decide restul cererii: pentru `client` trimiți `id_client`, pentru `furnizor` trimiți `id_furnizor`. Id-ul care nu se potrivește cu tipul răspunde `400 validation`.\n\nImplicit se folosesc ultimele 30 de zile, iar intervalul nu poate depăși 366 de zile. Răspunsul conține un link temporar către fișă, nu documentul însuși.\n\n**Drept necesar:** `parteneri:citire`",
        "operationId": "post_fise-partener",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_parteneri_genereaza_fisa_request"
              },
              "examples": {
                "client": {
                  "summary": "Fișa unui client",
                  "value": {
                    "tip_partener": "client",
                    "id_client": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                    "data_de_la": "2026-08-01",
                    "data_pana_la": "2026-08-31"
                  }
                },
                "furnizor": {
                  "summary": "Fișa unui furnizor",
                  "value": {
                    "tip_partener": "furnizor",
                    "id_furnizor": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                    "data_de_la": "2026-08-01",
                    "data_pana_la": "2026-08-31"
                  }
                }
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_parteneri_genereaza_fisa_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_parteneri_genereaza_fisa_request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_parteneri_fisa_response"
                },
                "examples": {
                  "client": {
                    "summary": "Fișa unui client",
                    "value": {
                      "data": {
                        "tip_partener": "client",
                        "denumire": "Client Exemplu SRL",
                        "cod_unic": "12345674",
                        "data_de_la": "2026-08-01",
                        "data_pana_la": "2026-08-31",
                        "link": "https://fgo-downloads.s3.eu-central-1.amazonaws.com/fise/fisa-partener.xlsx"
                      },
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "furnizor": {
                    "summary": "Fișa unui furnizor",
                    "value": {
                      "data": {
                        "tip_partener": "furnizor",
                        "denumire": "Furnizor Exemplu SRL",
                        "cod_unic": "87654321",
                        "data_de_la": "2026-08-01",
                        "data_pana_la": "2026-08-31",
                        "link": "https://fgo-downloads.s3.eu-central-1.amazonaws.com/fise/fisa-partener.xlsx"
                      },
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Partenerul nu există, este șters sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 10 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/furnizori/{id}": {
      "get": {
        "tags": [
          "Furnizori"
        ],
        "summary": "Citeste un furnizor",
        "description": "Citeste datele de identificare si contact, independent de documente.\n\n**Drept necesar:** `furnizori:citire`",
        "operationId": "get_furnizori_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Datele partenerului.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_furnizor_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "cod_judet": "B",
                    "localitate": "Bucuresti",
                    "id": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Partener inexistent, sters sau din alta firma.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Furnizori"
        ],
        "summary": "Actualizeaza partial un furnizor",
        "description": "Campurile omise raman nemodificate; null goleste campurile optionale. Codul unic si tipul persoanei nu se schimba. Modificarea denumirii este explicita si confirmata prin acest apel.\n\n**Drept necesar:** `furnizori:scriere`",
        "operationId": "patch_furnizori_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              },
              "example": {
                "email": "contact@exemplu.ro",
                "telefon": null
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Partener actualizat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_furnizor_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "cod_judet": "B",
                    "localitate": "Bucuresti",
                    "id": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Partener inexistent, sters sau din alta firma.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/furnizori": {
      "post": {
        "tags": [
          "Furnizori"
        ],
        "summary": "Creeaza un furnizor",
        "description": "Creeaza partenerul fara emiterea unui document. Nu actualizeaza automat un partener existent. Vezi ghidul Parteneri si CRM pentru regulile duplicatelor.\n\n**Drept necesar:** `furnizori:scriere`",
        "operationId": "post_furnizori",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              },
              "example": {
                "denumire": "Partener exemplu SRL",
                "cod_unic": "12345674",
                "tip_persoana": "PJ",
                "cod_tara": "RO",
                "adresa": "Str. Exemplu nr. 10",
                "email": "contact@exemplu.ro",
                "telefon": "+40722123456",
                "cod_judet": "B",
                "localitate": "Bucuresti"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_partener_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Partener creat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_furnizor_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "cod_judet": "B",
                    "localitate": "Bucuresti",
                    "id": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Furnizori"
        ],
        "summary": "Caută furnizori",
        "description": "Caută furnizorii activi ai firmei asociate cheii API. `id` este identificatorul opac al furnizorului, cu prefixul `frn_`.\n\n**Drept necesar:** `furnizori:citire`",
        "operationId": "get_furnizori",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "Identificatorul furnizorului. Filtrează exact un furnizor. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificatorul furnizorului. Filtrează exact un furnizor. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Fragment din denumirea furnizorului, minimum două caractere.",
            "schema": {
              "type": "string",
              "description": "Fragment din denumirea furnizorului, minimum două caractere."
            },
            "example": "consultanta"
          },
          {
            "name": "cod_unic",
            "in": "query",
            "description": "Codul unic sau CNP-ul furnizorului, fără prefixul `RO` și fără spații.",
            "schema": {
              "type": "string",
              "description": "Codul unic sau CNP-ul furnizorului, fără prefixul `RO` și fără spații."
            },
            "example": "12345674"
          },
          {
            "name": "email",
            "in": "query",
            "description": "Adresa de e-mail a furnizorului, potrivire exactă.",
            "schema": {
              "type": "string",
              "description": "Adresa de e-mail a furnizorului, potrivire exactă."
            },
            "example": "facturi@client-exemplu.ro"
          },
          {
            "name": "telefon",
            "in": "query",
            "description": "Numărul de telefon al furnizorului, potrivire exactă.",
            "schema": {
              "maxLength": 100,
              "type": "string",
              "description": "Numărul de telefon al furnizorului, potrivire exactă."
            },
            "example": "+40722123456"
          },
          {
            "name": "cod_tara",
            "in": "query",
            "description": "Codul ISO 3166-1 alpha-2 al țării.",
            "schema": {
              "type": "string",
              "description": "Codul ISO 3166-1 alpha-2 al țării."
            },
            "example": "RO"
          },
          {
            "name": "cod_judet",
            "in": "query",
            "description": "Codul județului, din `GET /v2/nomenclatoare/judete`.",
            "schema": {
              "type": "string",
              "description": "Codul județului, din `GET /v2/nomenclatoare/judete`."
            },
            "example": "B"
          },
          {
            "name": "localitate",
            "in": "query",
            "description": "Localitatea furnizorului.",
            "schema": {
              "type": "string",
              "description": "Localitatea furnizorului."
            },
            "example": "Bucuresti"
          },
          {
            "name": "adresa",
            "in": "query",
            "description": "Fragment din adresa furnizorului.",
            "schema": {
              "type": "string",
              "description": "Fragment din adresa furnizorului."
            },
            "example": "Str. Exemplu nr. 10"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`id`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `id`, `denumire`, `cod_unic`, `email`, `telefon`, `cod_tara`, `tara`, `cod_judet`, `judet`, `localitate`, `adresa`, `tip_persoana`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "id",
              "denumire",
              "cod_unic",
              "email",
              "telefon",
              "cod_tara",
              "tara",
              "cod_judet",
              "judet",
              "localitate",
              "adresa",
              "tip_persoana"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_furnizori_furnizor_response"
                },
                "example": {
                  "data": [
                    {
                      "id": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59",
                      "denumire": "Furnizor Exemplu SRL",
                      "cod_unic": "87654321",
                      "email": "facturi@furnizor-exemplu.ro",
                      "telefon": "+40733123456",
                      "cod_tara": "RO",
                      "tara": "ROMANIA",
                      "cod_judet": "CJ",
                      "judet": "Cluj",
                      "localitate": "Cluj-Napoca",
                      "adresa": "Str. Furnizorului nr. 2",
                      "tip_persoana": "PJ"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/furnizori/{id_furnizor}/sold": {
      "get": {
        "tags": [
          "Furnizori"
        ],
        "summary": "Citește soldul și facturile restante ale furnizorului",
        "description": "Soldul curent al furnizorului în firma cheii API, împreună cu facturile lui neachitate integral, în ordinea scadenței.\n\n**Drept necesar:** `furnizori:citire`",
        "operationId": "get_furnizori_id_furnizor_sold",
        "parameters": [
          {
            "name": "id_furnizor",
            "in": "path",
            "description": "Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            }
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_furnizori_sumar_restante_response"
                },
                "example": {
                  "data": {
                    "sold_total": 850.00,
                    "rulaj_total": 2400.00,
                    "facturi": [
                      {
                        "document": "FF-908",
                        "tip_document": "Factura",
                        "valuta": "RON",
                        "suma": 850.00,
                        "curs_valutar": 1,
                        "data_emitere": "2026-08-20",
                        "data_inregistrare": "2026-08-21"
                      }
                    ]
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Furnizorul nu există, este șters sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/gestiuni": {
      "get": {
        "tags": [
          "Gestiuni"
        ],
        "summary": "Gestiunile firmei",
        "description": "Gestiunile active ale firmei, pentru câmpul de gestiune de la emitere.\n\n**Drept necesar:** `articole:citire`",
        "operationId": "get_gestiuni",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod_gestiune`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod_gestiune`, `nume`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod_gestiune",
              "nume"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_gestiuni_gestiune_response"
                },
                "example": {
                  "data": [
                    {
                      "cod_gestiune": "MAG",
                      "nume": "Depozit central"
                    },
                    {
                      "cod_gestiune": "MAG2",
                      "nume": "Magazin Bucuresti"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/identitate": {
      "get": {
        "tags": [
          "Identitate"
        ],
        "summary": "Verifică cheia API — drepturi, expirare și modul de căutare a articolelor",
        "description": "Confirmă cheia API și firma declarată prin `Fgo-Cod-Unic`, apoi întoarce drepturile și expirarea cheii API, plus câmpul după care firma identifică articolele (`cautare_articol_dupa`), ca integrarea să știe ce cod să trimită. Codul unic confirmă firma din cheie, dar nu este returnat și nu poate selecta altă firmă. Operația nu cere un drept funcțional.",
        "operationId": "get_identitate",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Cheia API este validă, iar firma declarată corespunde.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_identitate_context_response"
                },
                "example": {
                  "data": {
                    "drepturi": [
                      "facturi:citire",
                      "articole:citire"
                    ],
                    "expira_la": "2026-12-31T23:59:59+02:00",
                    "cautare_articol_dupa": "cod_articol"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/leaduri": {
      "get": {
        "tags": [
          "Lead-uri CRM"
        ],
        "summary": "Listeaza lead-urile CRM",
        "description": "Lead-urile active ale firmei cheii. Denumirea se cauta dupa prefix; CUI, email si telefon prin potrivire exacta. Paginare prin cursor.\n\n**Drept necesar:** `leaduri:citire`",
        "operationId": "get_leaduri",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Textul liber de căutare.",
            "schema": {
              "maxLength": 255,
              "minLength": 2,
              "type": "string"
            },
            "example": "consultanta"
          },
          {
            "name": "cod_unic",
            "in": "query",
            "schema": {
              "maxLength": 128,
              "type": "string"
            },
            "example": "12345674"
          },
          {
            "name": "email",
            "in": "query",
            "schema": {
              "maxLength": 500,
              "type": "string",
              "format": "email"
            },
            "example": "facturi@client-exemplu.ro"
          },
          {
            "name": "telefon",
            "in": "query",
            "schema": {
              "maxLength": 100,
              "type": "string"
            },
            "example": "+40722123456"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`id`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `id`, `sursa`, `observatii`, `data`, `denumire`, `cod_unic`, `tip_persoana`, `cod_tara`, `adresa`, `email`, `telefon`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "id",
              "sursa",
              "observatii",
              "data",
              "denumire",
              "cod_unic",
              "tip_persoana",
              "cod_tara",
              "adresa",
              "email",
              "telefon"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Pagina de lead-uri.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_crm_lead_response"
                },
                "example": {
                  "data": [
                    {
                      "denumire": "Partener exemplu SRL",
                      "cod_unic": "12345674",
                      "tip_persoana": "PJ",
                      "cod_tara": "RO",
                      "adresa": "Str. Exemplu nr. 10",
                      "email": "contact@exemplu.ro",
                      "telefon": "+40722123456",
                      "sursa": "CRM propriu",
                      "observatii": "De contactat",
                      "data": "2026-10-12",
                      "id": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Lead-uri CRM"
        ],
        "summary": "Creeaza un lead CRM",
        "description": "Nu emite documente si nu creeaza un client. Lead-urile pot avea acelasi CUI; nu exista upsert automat.\n\n**Drept necesar:** `leaduri:scriere`",
        "operationId": "post_leaduri",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_lead_request"
              },
              "example": {
                "denumire": "Partener exemplu SRL",
                "cod_unic": "12345674",
                "tip_persoana": "PJ",
                "cod_tara": "RO",
                "adresa": "Str. Exemplu nr. 10",
                "email": "contact@exemplu.ro",
                "telefon": "+40722123456",
                "sursa": "CRM propriu",
                "observatii": "De contactat",
                "data": "2026-10-12"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_lead_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_lead_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lead creat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_lead_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "sursa": "CRM propriu",
                    "observatii": "De contactat",
                    "data": "2026-10-12",
                    "id": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/leaduri/{id}": {
      "get": {
        "tags": [
          "Lead-uri CRM"
        ],
        "summary": "Citeste un lead CRM",
        "description": "Citeste identificarea, contactul, sursa, observatiile si data unui lead activ al firmei.\n\n**Drept necesar:** `leaduri:citire`",
        "operationId": "get_leaduri_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identificator opac (prefix `lead`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `lead`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Datele lead-ului.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_lead_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "sursa": "CRM propriu",
                    "observatii": "De contactat",
                    "data": "2026-10-12",
                    "id": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Lead inexistent, sters sau din alta firma.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Lead-uri CRM"
        ],
        "summary": "Actualizeaza partial un lead CRM",
        "description": "Campurile omise raman nemodificate; null goleste campurile optionale. Nu modifica activitatile CRM.\n\n**Drept necesar:** `leaduri:scriere`",
        "operationId": "patch_leaduri_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Identificator opac (prefix `lead`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string",
              "description": "Identificator opac (prefix `lead`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
              "example": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
            },
            "example": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_lead_request"
              },
              "example": {
                "email": "contact@exemplu.ro",
                "telefon": null
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_lead_request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/v2_crm_lead_request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lead actualizat.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_crm_lead_response"
                },
                "example": {
                  "data": {
                    "denumire": "Partener exemplu SRL",
                    "cod_unic": "12345674",
                    "tip_persoana": "PJ",
                    "cod_tara": "RO",
                    "adresa": "Str. Exemplu nr. 10",
                    "email": "contact@exemplu.ro",
                    "telefon": "+40722123456",
                    "sursa": "CRM propriu",
                    "observatii": "De contactat",
                    "data": "2026-10-12",
                    "id": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Lead inexistent, sters sau din alta firma.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Content-Type-ul cererii nu este suportat. Trimite `application/json`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unsupported-media-type": {
                    "summary": "unsupported-media-type",
                    "description": "Content-Type-ul cererii nu este suportat.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unsupported-media-type",
                      "title": "Content-Type-ul cererii nu este suportat.",
                      "status": 415,
                      "detail": "Trimiteti corpul cererii cu Content-Type: application/json.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/nomenclatoare/judete": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Județele",
        "description": "Lista județelor. Câmpul `cod` este referința canonică folosită în parametrul `cod_judet` al operației `localitati` și în `client.cod_judet` la emitere; `nume` este pentru afișare.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_judete",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`, `cod`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume",
              "cod"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_judet_response"
                },
                "example": {
                  "data": [
                    {
                      "cod": "B",
                      "nume": "Bucuresti"
                    },
                    {
                      "cod": "CJ",
                      "nume": "Cluj"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/localitati": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Localitățile unui județ",
        "description": "Parametrul `cod_judet` este obligatoriu și primește codul canonic returnat de `GET /v2/nomenclatoare/judete`, de exemplu `B` sau `IS`.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_localitati",
        "parameters": [
          {
            "name": "cod_judet",
            "in": "query",
            "description": "Codul canonic returnat de nomenclatorul de județe.",
            "required": true,
            "schema": {
              "pattern": "^[A-Z]{1,2}$",
              "type": "string"
            },
            "example": "B"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_localitate_response"
                },
                "example": {
                  "data": [
                    {
                      "nume": "Bucuresti"
                    },
                    {
                      "nume": "Sector 1"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "cod_judet",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Campul 'cod_judet' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/banci": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Băncile",
        "description": "Băncile acceptate la completarea contului bancar.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_banci",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`bic`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`, `bic`, `alias`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume",
              "bic",
              "alias"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_banca_response"
                },
                "example": {
                  "data": [
                    {
                      "bic": "RNCBROBU",
                      "nume": "BANCA COMERCIALA ROMANA",
                      "alias": "BCR"
                    },
                    {
                      "bic": "BTRLRO22",
                      "nume": "BANCA TRANSILVANIA",
                      "alias": "BT"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/valute": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Valutele",
        "description": "Valutele în care se poate emite o factură.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_valute",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_valuta_response"
                },
                "example": {
                  "data": [
                    {
                      "nume": "RON"
                    },
                    {
                      "nume": "EUR"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/tari": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Țările",
        "description": "Țările acceptate pentru clienții din afara României.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_tari",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`, `cod`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume",
              "cod"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_tara_response"
                },
                "example": {
                  "data": [
                    {
                      "cod": "RO",
                      "nume": "ROMANIA"
                    },
                    {
                      "cod": "DE",
                      "nume": "GERMANIA"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/cote-tva": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Cotele de TVA",
        "description": "Cotele de TVA valabile pentru țara și data cerute. `tara` folosește codul din `GET /v2/nomenclatoare/tari` și are valoarea implicită `RO`; `data` are formatul `YYYY-MM-DD` și implicit este ziua curentă. Fiecare element conține numai `valoare`, coeficientul zecimal care se transmite în `articole[].cota_tva` (de exemplu `0.21` pentru 21%). Cotele se schimbă în timp, deci citește-le din API și nu le fixa în cod.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_cote-tva",
        "parameters": [
          {
            "name": "tara",
            "in": "query",
            "description": "Codul de țară din două litere, returnat de `GET /v2/nomenclatoare/tari`. Codurile urmează ISO 3166-1 alpha-2, cu convenția fiscală UE `EL` pentru Grecia (în loc de `GR`). Implicit: `RO`.",
            "schema": {
              "pattern": "^[A-Z]{2}$",
              "type": "string"
            },
            "example": "RO"
          },
          {
            "name": "data",
            "in": "query",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `valoare`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "valoare"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_cota_tva_response"
                },
                "example": {
                  "data": [
                    {
                      "valoare": 0.2100
                    },
                    {
                      "valoare": 0.1100
                    },
                    {
                      "valoare": 0.0000
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/tipuri-factura": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Tipurile de factură",
        "description": "Valorile acceptate de câmpul `tip_factura` la emiterea unei facturi.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_tipuri-factura",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`, `cod`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume",
              "cod"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_tip_factura_response"
                },
                "example": {
                  "data": [
                    {
                      "cod": "F",
                      "nume": "Factura"
                    },
                    {
                      "cod": "P",
                      "nume": "Proforma"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/tipuri-incasare": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Tipurile de încasare",
        "description": "Valorile acceptate de câmpul `tip_incasare` din `POST /v2/facturi/{serie}/{numar}/incasari`. Orice altă valoare primește `400`.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_tipuri-incasare",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `nume`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "nume"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_tip_incasare_response"
                },
                "example": {
                  "data": [
                    {
                      "nume": "Chitanta"
                    },
                    {
                      "nume": "Bon"
                    },
                    {
                      "nume": "Banca"
                    },
                    {
                      "nume": "Retur casa"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/tipuri-clasificare-produs": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Tipurile de clasificare a produsului",
        "description": "Tipurile acceptate în `articole[].efactura.clasificari[].tip` la emitere: `STI` (cod CPV din nomenclator), `NB` (număr de lot, liber) și `ZZZ` (cod convenit, liber). `are_nomenclator_coduri` arată dacă există o listă de coduri de interogat prin `GET /v2/nomenclatoare/coduri-clasificare-produs`.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_tipuri-clasificare-produs",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "maximum": 2147483647,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod`, `are_nomenclator_coduri`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod",
              "are_nomenclator_coduri"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_tip_clasificare_produs_response"
                },
                "example": {
                  "data": [
                    {
                      "cod": "STI",
                      "are_nomenclator_coduri": true
                    },
                    {
                      "cod": "NB",
                      "are_nomenclator_coduri": false
                    },
                    {
                      "cod": "ZZZ",
                      "are_nomenclator_coduri": false
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": null,
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/nomenclatoare/coduri-clasificare-produs": {
      "get": {
        "tags": [
          "Nomenclatoare"
        ],
        "summary": "Codurile unei clasificări de produs",
        "description": "Codurile CPV pentru `tip=STI`, cu căutare după începutul codului sau după textul denumirii. Pentru `NB` și `ZZZ`, `data` este o listă goală, deoarece valorile se introduc liber. Prima pagină se cere fără `cursor`; paginile următoare folosesc `meta.pagination.next_cursor` din răspuns. `limit` este implicit 500 și are plafonul 5000.\n\nOperație publică: nu cere cheie API.",
        "operationId": "get_nomenclatoare_coduri-clasificare-produs",
        "parameters": [
          {
            "name": "tip",
            "in": "query",
            "description": "Tipul de clasificare, din `GET /v2/nomenclatoare/tipuri-clasificare-produs`. Numai `STI` are coduri; `NB` și `ZZZ` întorc o listă goală.",
            "required": true,
            "schema": {
              "minLength": 1,
              "enum": [
                "STI",
                "NB",
                "ZZZ"
              ],
              "type": "string",
              "description": "Tipul de clasificare, din `GET /v2/nomenclatoare/tipuri-clasificare-produs`. Numai `STI` are coduri; `NB` și `ZZZ` întorc o listă goală."
            },
            "example": "STI"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Caută după începutul codului sau după text din denumire.",
            "schema": {
              "type": "string",
              "description": "Caută după începutul codului sau după text din denumire."
            },
            "example": "consultanta"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod`, `denumire`, `tip`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod",
              "denumire",
              "tip"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_nomenclatoare_cod_clasificare_produs_response"
                },
                "example": {
                  "data": [
                    {
                      "cod": "72200000-7",
                      "denumire": "Servicii de programare si consultanta software",
                      "tip": "STI"
                    },
                    {
                      "cod": "72220000-3",
                      "denumire": "Servicii de consultanta privind sistemele informatice",
                      "tip": "STI"
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "fields",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'fields' trebuie sa contina cel putin o valoare."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/v2/rapoarte/totaluri-vanzari": {
      "get": {
        "tags": [
          "Rapoarte"
        ],
        "summary": "Citește totalurile vânzărilor",
        "description": "Calculează indicatorii de vânzări pentru intervalul civil inclusiv. Implicit se folosesc ultimele 30 de zile, până astăzi.\n\n**Drept necesar:** `rapoarte:citire`",
        "operationId": "get_rapoarte_totaluri-vanzari",
        "parameters": [
          {
            "name": "data_de_la",
            "in": "query",
            "description": "Începutul intervalului, inclusiv, strict `YYYY-MM-DD`. Implicit: acum 30 de zile.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Începutul intervalului, inclusiv, strict `YYYY-MM-DD`. Implicit: acum 30 de zile.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "data_pana_la",
            "in": "query",
            "description": "Sfârșitul intervalului, inclusiv, strict `YYYY-MM-DD`. Implicit: astăzi.",
            "schema": {
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
              "type": "string",
              "description": "Sfârșitul intervalului, inclusiv, strict `YYYY-MM-DD`. Implicit: astăzi.",
              "format": "date",
              "example": "2026-09-10"
            },
            "example": "2026-09-08"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_rapoarte_sumar_vanzari_response"
                },
                "example": {
                  "data": {
                    "data_de_la": "2026-08-01",
                    "data_pana_la": "2026-08-31",
                    "indicatori": [
                      {
                        "indicator": "facturat_luna",
                        "numar_facturi": 32,
                        "total": 14500.00,
                        "evolutie": 8.25,
                        "tva": 2516.53
                      }
                    ]
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 10 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/rapoarte/vanzari-lunare": {
      "get": {
        "tags": [
          "Rapoarte"
        ],
        "summary": "Citește vânzările lunare pe articole",
        "description": "Raport agregat, fără identitate publică unică; de aceea cursorul folosește poziția în rezultatul raportului, nu cheia articolului.\n\n**Drept necesar:** `rapoarte:citire`",
        "operationId": "get_rapoarte_vanzari-lunare",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod_articol`, `nume_articol`, `um_articol`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Subcâmpurile obiectelor și ale listelor se cer prin grupare (`luni(luna,cantitate)`). Un obiect cerut fără subcâmpuri răspunde `400 validation`, cu codul `subfields_required`; cere explicit subcâmpurile necesare. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod_articol`, `nume_articol`, `um_articol`, `stoc_actual`, `luni`, `luni.luna`, `luni.cantitate`, `luni.valoare`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod_articol",
              "nume_articol",
              "um_articol",
              "stoc_actual",
              "luni(luna,cantitate,valoare)"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_rapoarte_vanzari_lunare_articol_response"
                },
                "example": {
                  "data": [
                    {
                      "cod_articol": "SERV-CONSULT",
                      "nume_articol": "Servicii consultanta",
                      "um_articol": "ora",
                      "stoc_actual": 0.000,
                      "luni": [
                        {
                          "luna": "2026-08",
                          "cantitate": 12.000,
                          "valoare": 1200.00
                        }
                      ]
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 10 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/rapoarte/vanzari-achizitii-articole": {
      "get": {
        "tags": [
          "Rapoarte"
        ],
        "summary": "Compară vânzările și achizițiile pe articole",
        "description": "Raport agregat, fără identitate publică unică; cursorul folosește poziția în rezultatul raportului.\n\n**Drept necesar:** `rapoarte:citire`",
        "operationId": "get_rapoarte_vanzari-achizitii-articole",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate în fiecare element, pe lângă identitate (`cod_articol`, `nume_articol`, `um_articol`), care se întoarce întotdeauna. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** identitatea și câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod_articol`, `nume_articol`, `um_articol`, `cantitate_intrata`, `valoare_intrata_fara_tva`, `valoare_intrata_cu_tva`, `cantitate_vanduta`, `valoare_vanzari_fara_tva`, `tva_vanzari`, `total_vanzari_cu_tva`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod_articol",
              "nume_articol",
              "um_articol",
              "cantitate_intrata",
              "valoare_intrata_fara_tva",
              "valoare_intrata_cu_tva",
              "cantitate_vanduta",
              "valoare_vanzari_fara_tva",
              "tva_vanzari",
              "total_vanzari_cu_tva"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_rapoarte_vanzari_achizitii_articol_response"
                },
                "example": {
                  "data": [
                    {
                      "cod_articol": "PROD-001",
                      "nume_articol": "Produs demonstrativ",
                      "um_articol": "buc",
                      "cantitate_intrata": 25.000,
                      "valoare_intrata_fara_tva": 500.00,
                      "valoare_intrata_cu_tva": 605.00,
                      "cantitate_vanduta": 10.000,
                      "valoare_vanzari_fara_tva": 300.00,
                      "tva_vanzari": 63.00,
                      "total_vanzari_cu_tva": 363.00
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la 10 secunde pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/solduri-conturi-bancare": {
      "get": {
        "tags": [
          "Solduri"
        ],
        "summary": "Solduri conturi bancare",
        "description": "Returnează numai conturile active ale firmei asociate cheii API și totalurile grupate pe valută.\n\n**Drept necesar:** `solduri:citire`",
        "operationId": "get_solduri-conturi-bancare",
        "parameters": [
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_solduri_conturi_bancare_response"
                },
                "example": {
                  "data": {
                    "numar_conturi": 1,
                    "actualizat_la": "2026-09-03T12:00:00+03:00",
                    "totaluri": [
                      {
                        "valuta": "RON",
                        "numar_conturi": 1,
                        "total_disponibil": 12500.00
                      }
                    ],
                    "conturi": [
                      {
                        "nume": "Cont curent",
                        "iban": "RO49AAAA1B31007593840000",
                        "valuta": "RON",
                        "sold": 12500.00,
                        "sursa": "open_banking",
                        "actualizat_la": "2026-09-03T11:55:00+03:00"
                      }
                    ]
                  },
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "header",
                          "name": "Fgo-Cod-Unic",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Headerul 'Fgo-Cod-Unic' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/stocuri/stoc-gestiune-articol": {
      "get": {
        "tags": [
          "Stocuri"
        ],
        "summary": "Stocul unui articol într-o gestiune",
        "description": "**Abonament necesar:** Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nArticolele care se potrivesc filtrului și au evidență de stoc în gestiunea `cod_gestiune`, cu cantitatea fiecăruia de acolo. Cere `cod_gestiune` și exact un filtru de articol: `cod_articol` sau `cod_bare` (potrivire exactă) sau `nume_articol` („conține”); două filtre în aceeași cerere răspund `400 validation`. Filtrul trebuie să fie cel al setării firmei „Căutare articole după” (Configurare API); un alt filtru răspunde `400 validation`. Răspunsul e o listă pentru că nici codul, nici numele nu sunt unice: cel mult `limit` articole (implicit și maximum 200), fără cursor; caută după `cod_bare` dacă vrei unul anume. `fields` alege câmpurile returnate. Un articol fără evidență în gestiune nu apare; un filtru fără potriviri răspunde cu lista goală.\n\n**Drept necesar:** `articole:citire`",
        "operationId": "get_stocuri_stoc-gestiune-articol",
        "parameters": [
          {
            "name": "cod_gestiune",
            "in": "query",
            "description": "Codul gestiunii (`cod_gestiune` din `GET /v2/gestiuni`). O gestiune inexistentă răspunde `404`.",
            "required": true,
            "schema": {
              "maxLength": 255,
              "minLength": 1,
              "type": "string",
              "description": "Codul gestiunii (`cod_gestiune` din `GET /v2/gestiuni`). O gestiune inexistentă răspunde `404`."
            },
            "example": "MAG"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod_articol`, `cod_bare`, `nume_articol`, `stoc`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod_articol",
              "cod_bare",
              "nume_articol",
              "stoc"
            ]
          },
          {
            "name": "cod_articol",
            "in": "query",
            "description": "Codul comercial al articolului (`cod` din `GET /v2/articole`). Potrivire exactă; nu este unic. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`.",
            "schema": {
              "maxLength": 128,
              "type": "string",
              "description": "Codul comercial al articolului (`cod` din `GET /v2/articole`). Potrivire exactă; nu este unic. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`."
            },
            "example": "SERV-CONSULT"
          },
          {
            "name": "cod_bare",
            "in": "query",
            "description": "Codul de bare al articolului (`cod_bare` din `GET /v2/articole`). Potrivire exactă. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`.",
            "schema": {
              "maxLength": 20,
              "type": "string",
              "description": "Codul de bare al articolului (`cod_bare` din `GET /v2/articole`). Potrivire exactă. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`."
            },
            "example": "5941234567005"
          },
          {
            "name": "nume_articol",
            "in": "query",
            "description": "Denumirea articolului, sau o parte din ea: potrivire „conține”, fără majuscule/minuscule. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`.",
            "schema": {
              "maxLength": 2000,
              "type": "string",
              "description": "Denumirea articolului, sau o parte din ea: potrivire „conține”, fără majuscule/minuscule. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`."
            },
            "example": "Produs demonstrativ"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Gestiunea din `cod_gestiune` nu există, este ștearsă sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_array_stocuri_stoc_articol_gestiune_response"
                },
                "example": {
                  "data": [
                    {
                      "cod_articol": "PROD-001",
                      "cod_bare": "5941234567005",
                      "nume_articol": "Produs demonstrativ",
                      "stoc": 42.000
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "cod_gestiune",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'cod_gestiune' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/stocuri/stoc-gestiune": {
      "get": {
        "tags": [
          "Stocuri"
        ],
        "summary": "Stocul unei gestiuni",
        "description": "**Abonament necesar:** Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nToate articolele cu evidență de stoc în gestiunea `cod_gestiune`, cu cantitatea fiecăruia, paginate keyset în ordinea internă a articolelor: `limit` elemente pe pagină (implicit 50, maximum 200), `cursor` pentru pagina următoare. Cursorul este legat de firmă și de gestiune. `fields` alege câmpurile returnate.\n\n**Drept necesar:** `articole:citire`",
        "operationId": "get_stocuri_stoc-gestiune",
        "parameters": [
          {
            "name": "cod_gestiune",
            "in": "query",
            "description": "Codul gestiunii (`cod_gestiune` din `GET /v2/gestiuni`). O gestiune inexistentă răspunde `404`.",
            "required": true,
            "schema": {
              "maxLength": 255,
              "minLength": 1,
              "type": "string",
              "description": "Codul gestiunii (`cod_gestiune` din `GET /v2/gestiuni`). O gestiune inexistentă răspunde `404`."
            },
            "example": "MAG"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Cursorul opac de continuare, primit în `meta.pagination.next_cursor`. Se retrimite verbatim și numai cu aceleași filtre; dacă filtrele se schimbă, cere prima pagină fără cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod_articol`, `cod_bare`, `nume_articol`, `stoc`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod_articol",
              "cod_bare",
              "nume_articol",
              "stoc"
            ]
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "404": {
            "description": "Gestiunea din `cod_gestiune` nu există, este ștearsă sau aparține altei firme.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "resource-not-found": {
                    "summary": "resource-not-found",
                    "description": "Resursa nu exista.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:resource-not-found",
                      "title": "Resursa nu exista.",
                      "status": 404,
                      "detail": "Factura nu exista.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_page_envelope_array_stocuri_stoc_articol_gestiune_response"
                },
                "example": {
                  "data": [
                    {
                      "cod_articol": "PROD-001",
                      "cod_bare": "5941234567005",
                      "nume_articol": "Produs demonstrativ",
                      "stoc": 42.000
                    },
                    {
                      "cod_articol": "PROD-002",
                      "cod_bare": "5941234567012",
                      "nume_articol": "Produs demonstrativ 2",
                      "stoc": 0.000
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                    "pagination": {
                      "next_cursor": "eyJ2IjoxLCJvZmZzZXQiOjEwMH0.7f1d9e3a",
                      "prev_cursor": null
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.\n\nCursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "invalid-cursor": {
                    "summary": "invalid-cursor",
                    "description": "Cursorul de paginare nu este valid (`invalid-cursor`). Reia de la prima pagină.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:invalid-cursor",
                      "title": "Cursorul nu este valid.",
                      "status": 400,
                      "detail": "Cursorul de paginare este invalid. Reluati de la prima pagina.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  },
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "cod_gestiune",
                          "issues": [
                            {
                              "code": "required",
                              "message": "Campul 'cod_gestiune' este obligatoriu."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    },
    "/v2/stocuri/stoc-articol": {
      "get": {
        "tags": [
          "Stocuri"
        ],
        "summary": "Stocul unui articol pe gestiuni",
        "description": "**Abonament necesar:** Enterprise. Dreptul de pe cheia API nu înlocuiește accesul inclus în abonamentul firmei.\n\nCantitatea articolelor care se potrivesc filtrului, în fiecare gestiune în care au evidență de stoc: un element pentru fiecare pereche articol–gestiune. Cere exact un filtru: `cod_articol` sau `cod_bare` (potrivire exactă) sau `nume_articol` („conține”); două filtre în aceeași cerere răspund `400 validation`. Filtrul trebuie să fie cel al setării firmei „Căutare articole după” (Configurare API); un alt filtru răspunde `400 validation`. Cel mult `limit` articole (implicit și maximum 200), fără cursor; `fields` alege câmpurile returnate. Un articol fără evidență în nicio gestiune nu apare.\n\n**Drept necesar:** `articole:citire`",
        "operationId": "get_stocuri_stoc-articol",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Numărul maxim de elemente din răspuns. Fără el, operația întoarce până la numărul ei implicit de elemente; peste plafonul ei, cererea e servită la plafon. Răspunsul poate conține mai puține elemente, dar niciodată mai multe.",
            "schema": {
              "minimum": 0,
              "exclusiveMinimum": true,
              "type": "integer",
              "format": "int32"
            },
            "example": 100
          },
          {
            "name": "fields",
            "in": "query",
            "description": "**Obligatoriu**. Câmpurile returnate. Listă separată prin virgulă (`fields=camp1,camp2`); spațiile marginale se ignoră, iar duplicatele se păstrează o singură dată. Înlocuiește `camp1` și `camp2` cu nume din lista câmpurilor acceptate de această operație. Răspunsul poartă **numai** câmpurile cerute, deci `null` înseamnă „valoarea este null”, nu „câmpul nu a fost cerut”. Lipsa unei valori efective răspunde `400 validation`. Un nume necunoscut răspunde `400 validation`, cu numele invalide în mesaj. Câmpuri acceptate: `cod_articol`, `cod_bare`, `nume_articol`, `cod_gestiune`, `stoc`.",
            "required": true,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "example": [
              "cod_articol",
              "cod_bare",
              "nume_articol",
              "cod_gestiune",
              "stoc"
            ]
          },
          {
            "name": "cod_articol",
            "in": "query",
            "description": "Codul comercial al articolului (`cod` din `GET /v2/articole`). Potrivire exactă; nu este unic. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`.",
            "schema": {
              "maxLength": 128,
              "type": "string",
              "description": "Codul comercial al articolului (`cod` din `GET /v2/articole`). Potrivire exactă; nu este unic. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`."
            },
            "example": "SERV-CONSULT"
          },
          {
            "name": "cod_bare",
            "in": "query",
            "description": "Codul de bare al articolului (`cod_bare` din `GET /v2/articole`). Potrivire exactă. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`.",
            "schema": {
              "maxLength": 20,
              "type": "string",
              "description": "Codul de bare al articolului (`cod_bare` din `GET /v2/articole`). Potrivire exactă. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`."
            },
            "example": "5941234567005"
          },
          {
            "name": "nume_articol",
            "in": "query",
            "description": "Denumirea articolului, sau o parte din ea: potrivire „conține”, fără majuscule/minuscule. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`.",
            "schema": {
              "maxLength": 2000,
              "type": "string",
              "description": "Denumirea articolului, sau o parte din ea: potrivire „conține”, fără majuscule/minuscule. Trimite exact unul dintre `cod_articol`, `cod_bare` și `nume_articol`."
            },
            "example": "Produs demonstrativ"
          },
          {
            "name": "Fgo-Cod-Unic",
            "in": "header",
            "description": "Codul unic al firmei asociate cheii API. Confirmă că folosești cheia API dorită, dar nu selectează și nu poate schimba firma apelului. Trimite numai cifrele codului unic, fără prefixul `RO` și fără spații.",
            "required": true,
            "schema": {
              "pattern": "^[0-9]+$",
              "type": "string",
              "example": "12345678"
            },
            "example": "12345678"
          }
        ],
        "responses": {
          "200": {
            "description": "Operația a reușit.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_envelope_array_stocuri_stoc_articol_pe_gestiune_response"
                },
                "example": {
                  "data": [
                    {
                      "cod_articol": "PROD-001",
                      "cod_bare": "5941234567005",
                      "nume_articol": "Produs demonstrativ",
                      "cod_gestiune": "MAG",
                      "stoc": 42.000
                    },
                    {
                      "cod_articol": "PROD-001",
                      "cod_bare": "5941234567005",
                      "nume_articol": "Produs demonstrativ",
                      "cod_gestiune": "MAG2",
                      "stoc": 3.000
                    }
                  ],
                  "meta": {
                    "timestamp": "2026-09-03T12:00:00+03:00",
                    "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Eroare internă. Pentru investigare, trimite-ne valorile headerelor `Server-Timing` și `x-fapi-interaction-id`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "internal": {
                    "summary": "internal",
                    "description": "Eroare interna.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:internal",
                      "title": "Eroare interna.",
                      "status": 500,
                      "detail": "Nu am putut raspunde la aceasta cerere. Pentru investigare, trimiteti suportului valorile Server-Timing si x-fapi-interaction-id din raspuns.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Mentenanță planificată: API-ul e închis temporar. Cererea nu a fost procesată; reia după intervalul din `Retry-After`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "maintenance": {
                    "summary": "maintenance",
                    "description": "API-ul este in mentenanta.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:maintenance",
                      "title": "API-ul este in mentenanta.",
                      "status": 503,
                      "detail": "API-ul este temporar indisponibil pentru mentenanta. Reincercati dupa intervalul din Retry-After.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/v2_common_problema_validare_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                    },
                    {
                      "$ref": "#/components/schemas/v2_common_problema_response"
                    }
                  ]
                },
                "examples": {
                  "validation": {
                    "summary": "validation",
                    "description": "Forma sau valorile cererii sunt invalide (`validation`). Câmpurile respinse sunt în `validation_errors`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:validation",
                      "title": "Cererea nu a trecut validarea.",
                      "status": 400,
                      "detail": "Corectati campurile indicate in validation_errors si retrimiteti cererea.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "validation_errors": [
                        {
                          "location": "query",
                          "name": "cod_articol",
                          "issues": [
                            {
                              "code": "invalid_value",
                              "message": "Trimite exact unul dintre 'cod_articol', 'cod_bare' sau 'nume_articol'."
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Cheia API lipsește, este expirată sau nu este validă.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "unauthenticated": {
                    "summary": "unauthenticated",
                    "description": "Autentificarea nu a reusit.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:unauthenticated",
                      "title": "Autentificarea nu a reusit.",
                      "status": 401,
                      "detail": "Cheia de acces lipseste sau nu este valida.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Operația este refuzată. `motiv.cod` este `drept_lipsa` când cheia nu are dreptul cerut sau abonamentul nu include operația, și `cod_unic_neasociat` când `Fgo-Cod-Unic` nu corespunde firmei cheii.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_refuz_response"
                },
                "examples": {
                  "forbidden.drept_lipsa": {
                    "summary": "forbidden.drept_lipsa",
                    "description": "Cheia nu are dreptul cerut sau abonamentul nu include operația. `motiv.cod`: `drept_lipsa`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "drept_lipsa",
                        "mesaj": "Cheia API nu are dreptul de a face aceasta operatie."
                      }
                    }
                  },
                  "forbidden.cod_unic_neasociat": {
                    "summary": "forbidden.cod_unic_neasociat",
                    "description": "Headerul `Fgo-Cod-Unic` nu corespunde firmei asociate cheii API. `motiv.cod`: `cod_unic_neasociat`.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:forbidden",
                      "title": "Drepturi insuficiente",
                      "status": 403,
                      "detail": "Nu ai suficiente drepturi, vezi motiv.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      },
                      "motiv": {
                        "cod": "cod_unic_neasociat",
                        "mesaj": "Codul unic indicat nu este asociat cheii API."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Prea multe apeluri: operația acceptă un apel la o secundă pe firmă. Limitele se pot modifica; așteaptă intervalul din `Retry-After` înainte de a reîncerca.",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "Identificatorul de corelare al cererii, în format UUID (GUID), conform RFC 9562. Dacă trimiți un UUID valid, îl păstrăm și îl folosim în audit; altfel generăm noi unul. Păstrează-l: este valoarea pe care o cere suportul când o cerere nu a mers.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Server-Timing": {
                "description": "Informații de diagnosticare ale cererii. Pentru investigare, trimite suportului valoarea completă împreună cu `x-fapi-interaction-id`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Secundele după care are rost să reîncerci.",
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/v2_common_problema_response"
                },
                "examples": {
                  "rate-limited": {
                    "summary": "rate-limited",
                    "description": "Prea multe apeluri.",
                    "value": {
                      "type": "urn:fgo:api:v2:problem:rate-limited",
                      "title": "Prea multe apeluri.",
                      "status": 429,
                      "detail": "Limita de apeluri a fost depasita. Reincercati peste 1 secunda.",
                      "instance": "urn:trace:00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01",
                      "meta": {
                        "timestamp": "2026-09-03T12:00:00+03:00",
                        "trace": "00-8f3a1c2e6b7d4e219c0a2f1d3e4b5a6c-5f2a9c1d3e4b6a7c-01"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "CheieAccesFgo": [ ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "v2_arhive_pdf_creata_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identitatea arhivei. Folosește-o pentru a interoga statusul și a genera linkul de descărcare. Identificator opac (prefix `arh`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "arh_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "creata_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul creării cererii de arhivare, în RFC 3339 cu offset.",
            "format": "date-time",
            "example": "2026-09-10T14:05:12+03:00"
          },
          "status": {
            "type": "string",
            "description": "Starea arhivei imediat după programare — la creare este întotdeauna `in_lucru`. Urmărește-o prin `GET /v2/arhive-pdf/{id_arhiva}` până când `este_gata` devine `true`."
          },
          "numar_documente_gasite": {
            "type": "integer",
            "description": "Câte documente au fost incluse în arhivă.",
            "format": "int32"
          }
        }
      },
      "v2_arhive_pdf_creeaza_request": {
        "required": [
          "data_de_la",
          "data_pana_la"
        ],
        "type": "object",
        "properties": {
          "data_de_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Începutul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`. Documentele se selectează după data emiterii.",
            "format": "date",
            "example": "2026-09-10"
          },
          "data_pana_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Sfârșitul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`.",
            "format": "date",
            "example": "2026-09-10"
          },
          "tip_arhiva": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_arhive_pdf_tip_documente_public_api"
              }
            ],
            "description": "Tipul documentelor incluse: `facturi_emise` sau `facturi_furnizori`."
          }
        },
        "additionalProperties": false
      },
      "v2_arhive_pdf_limite_response": {
        "type": "object",
        "properties": {
          "numar_documente_ramase": {
            "type": "integer",
            "description": "Câte documente mai poate arhiva firma în perioada curentă, după limita abonamentului.",
            "format": "int32"
          },
          "poate_genera_arhiva": {
            "type": "boolean",
            "description": "`true` dacă arhiva poate fi cerută acum. `false` înseamnă că documentele găsite depășesc limita rămasă — restrânge intervalul."
          },
          "numar_documente_gasite": {
            "type": "integer",
            "description": "Câte documente intră în arhivă pentru intervalul și tipul cerute.",
            "format": "int32"
          }
        }
      },
      "v2_arhive_pdf_link_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identitatea arhivei pentru care s-a generat linkul. Identificator opac (prefix `arh`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "arh_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "link": {
            "type": "string",
            "description": "Linkul temporar de descărcare a arhivei ZIP. Nu îl stoca: expiră; cere altul când ai nevoie."
          },
          "expira_in_secunde": {
            "type": "integer",
            "description": "Câte secunde rămâne valabil linkul.",
            "format": "int32"
          }
        }
      },
      "v2_arhive_pdf_status_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identitatea arhivei. Identificator opac (prefix `arh`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "arh_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "data_de_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Începutul intervalului cerut la creare, inclusiv.",
            "format": "date",
            "example": "2026-09-10"
          },
          "data_pana_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Sfârșitul intervalului cerut la creare, inclusiv.",
            "format": "date",
            "example": "2026-09-10"
          },
          "status": {
            "type": "string",
            "description": "Starea curentă a procesării: `de_generat_arhiva`, `in_lucru`, `intermediar`, `procesat`, `eroare`, `eroare_solutie`, `skip_access_denied`, `sters` sau `necunoscut`. **Ramifică pe `este_gata` și `are_eroare`, nu pe acest text** — setul este extensibil, iar valorile noi apar fără schimbarea versiunii. Înțelesul fiecăreia este descris la operație."
          },
          "creata_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul creării cererii de arhivare, în RFC 3339 cu offset.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-09-10T14:05:12+03:00"
          },
          "notificata_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul la care firma a fost notificată că arhiva este gata. `null` cât timp încă se procesează.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-09-10T14:05:12+03:00"
          },
          "durata_secunde": {
            "type": "integer",
            "description": "Durata procesării, în secunde.",
            "format": "int64",
            "nullable": true
          },
          "numar_documente": {
            "type": "integer",
            "description": "Câte documente conține arhiva.",
            "format": "int32",
            "nullable": true
          },
          "tip_arhiva": {
            "type": "string",
            "description": "Valoare extensibilă; în prezent `facturi_emise` sau `facturi_furnizori`.",
            "nullable": true
          },
          "este_gata": {
            "type": "boolean",
            "description": "`true` când arhiva este procesată și se poate genera linkul de descărcare."
          },
          "are_eroare": {
            "type": "boolean",
            "description": "`true` dacă procesarea a eșuat. Arhiva nu se va mai finaliza; cere-o din nou."
          }
        }
      },
      "v2_arhive_pdf_tip_documente_public_api": {
        "enum": [
          "facturi_emise",
          "facturi_furnizori"
        ],
        "type": "string"
      },
      "v2_arhive_pdf_verifica_request": {
        "required": [
          "data_de_la",
          "data_pana_la"
        ],
        "type": "object",
        "properties": {
          "data_de_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Începutul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`. Documentele se selectează după data emiterii.",
            "format": "date",
            "example": "2026-09-10"
          },
          "data_pana_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Sfârșitul intervalului de emitere, inclusiv, strict `YYYY-MM-DD`.",
            "format": "date",
            "example": "2026-09-10"
          },
          "tip_arhiva": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_arhive_pdf_tip_documente_public_api"
              }
            ],
            "description": "Tipul documentelor incluse: `facturi_emise` sau `facturi_furnizori`."
          }
        },
        "additionalProperties": false
      },
      "v2_articole_articol_response": {
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea articolului, așa cum apare pe factură.",
            "nullable": true
          },
          "pret_unitar": {
            "type": "number",
            "description": "Prețul unitar configurat pentru articol. Număr zecimal cu maximum 4 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 4 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 4
          },
          "cota_tva": {
            "type": "number",
            "description": "Coeficientul cotei de TVA a articolului, de exemplu `0.21` pentru 21%. Număr zecimal cu maximum 4 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 4 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 4
          },
          "um": {
            "type": "string",
            "description": "Unitatea de măsură a articolului, de exemplu `buc`.",
            "nullable": true
          },
          "cod": {
            "type": "string",
            "description": "Codul comercial al articolului. Nu este unic în firmă — mai multe articole pot avea același cod. Este valoarea pe care o filtrează exact parametrul `cod`.",
            "nullable": true
          },
          "stoc": {
            "type": "number",
            "description": "Cantitatea curentă din stoc. Poate fi negativă sau `null` când drepturile firmei nu permit expunerea stocului. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 3
          },
          "cod_bare": {
            "type": "string",
            "description": "Codul de bare al articolului, dacă este configurat.",
            "nullable": true
          }
        }
      },
      "v2_balanta_cont_response": {
        "type": "object",
        "properties": {
          "cont": {
            "type": "string",
            "description": "Simbolul contului contabil, de exemplu `4111`.",
            "nullable": true
          },
          "denumire": {
            "type": "string",
            "description": "Denumirea contului, pentru afișare.",
            "nullable": true
          },
          "sold_initial_debit": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "sold_initial_credit": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "rulaje_debitoare": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "rulaje_creditoare": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "sold_final_debit": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "sold_final_credit": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          }
        }
      },
      "v2_balanta_evolutie_indicator_response": {
        "type": "object",
        "properties": {
          "luna": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "type": "string",
            "description": "Luna calendaristică a valorilor, în format `YYYY-MM`.",
            "format": "year-month",
            "example": "2026-09"
          },
          "valoare_luna": {
            "type": "number",
            "description": "Valoarea indicatorului în luna respectivă, luată singură. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "valoare_cumulata": {
            "type": "number",
            "description": "Valoarea indicatorului cumulată de la începutul anului până la luna respectivă. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          }
        }
      },
      "v2_balanta_indicator_response": {
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea indicatorului, pentru afișare.",
            "nullable": true
          },
          "cont": {
            "type": "string",
            "description": "Contul contabil din care se calculează indicatorul.",
            "nullable": true
          },
          "indicator": {
            "type": "string",
            "description": "Codul indicatorului: `venituri`, `profit`, `vanzari`, `cheltuieli`, `salarii`, `taxe`, `furnizori`, `banca`, `casa`, `clienti_neincasati`. Set extensibil; ramifică pe el, nu pe `nume`.",
            "nullable": true
          },
          "evolutie": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_balanta_evolutie_indicator_response"
            },
            "description": "Valorile indicatorului, lună de lună, în anul cerut.",
            "nullable": true
          }
        }
      },
      "v2_balanta_indicatori_response": {
        "type": "object",
        "properties": {
          "an": {
            "type": "integer",
            "description": "Anul pentru care s-au calculat indicatorii.",
            "format": "int32"
          },
          "indicatori": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_balanta_indicator_response"
            },
            "description": "Indicatorii predefiniți și evoluția lor lunară. Nu este lista completă a conturilor din balanță.",
            "nullable": true
          }
        }
      },
      "v2_balanta_response": {
        "type": "object",
        "properties": {
          "an": {
            "type": "integer",
            "description": "Anul balanței selectate.",
            "format": "int32",
            "nullable": true
          },
          "luna": {
            "type": "integer",
            "description": "Luna balanței selectate, între 1 și 12.",
            "format": "int32",
            "nullable": true
          },
          "data_de_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Începutul perioadei acoperite de balanță, inclusiv.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "data_pana_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Sfârșitul perioadei acoperite de balanță, inclusiv.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "conturi": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_balanta_cont_response"
            },
            "description": "Conturile din balanță. Listă goală dacă firma nu are o balanță în perioada cerută.",
            "nullable": true
          }
        }
      },
      "v2_clienti_client_cu_restante_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identitatea clientului. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "denumire": {
            "type": "string",
            "description": "Denumirea persoanei juridice sau numele persoanei fizice.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "Codul unic sau CNP-ul clientului, fără prefixul `RO`.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de e-mail salvată pe client.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numărul de telefon al clientului.",
            "nullable": true
          },
          "total_restant": {
            "type": "number",
            "description": "Suma totală restantă a clientului, pe facturile din intervalul cerut. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "numar_facturi": {
            "type": "integer",
            "description": "Câte facturi restante are clientul în intervalul cerut.",
            "format": "int32"
          },
          "data_cea_mai_veche_scadenta": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Scadența celei mai vechi facturi restante.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "zile_intarziere": {
            "type": "integer",
            "description": "Câte zile au trecut de la cea mai veche scadență restantă, până astăzi.",
            "format": "int32"
          }
        }
      },
      "v2_clienti_client_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identitatea clientului. Este valoarea de folosit în celelalte operații pe client și este stabilă numai în firma cheii API. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "denumire": {
            "type": "string",
            "description": "Denumirea persoanei juridice sau numele persoanei fizice.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "Codul unic sau CNP-ul clientului, fără prefixul `RO`.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de e-mail salvată pe client, folosită implicit la trimiterea facturii.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numărul de telefon al clientului.",
            "nullable": true
          },
          "cod_tara": {
            "type": "string",
            "description": "Codul ISO 3166-1 alpha-2 al țării clientului.",
            "nullable": true
          },
          "tara": {
            "type": "string",
            "description": "Denumirea țării clientului, pentru afișare.",
            "nullable": true
          },
          "cod_judet": {
            "type": "string",
            "description": "Codul canonic al județului, de exemplu `B` sau `IS`.",
            "nullable": true
          },
          "judet": {
            "type": "string",
            "description": "Denumirea județului, pentru afișare.",
            "nullable": true
          },
          "localitate": {
            "type": "string",
            "description": "Localitatea clientului.",
            "nullable": true
          },
          "adresa": {
            "type": "string",
            "description": "Adresa poștală a clientului.",
            "nullable": true
          },
          "tip_persoana": {
            "type": "string",
            "description": "Tipul persoanei: `PJ` (juridică) sau `PF` (fizică).",
            "nullable": true
          }
        }
      },
      "v2_clienti_factura_restanta_response": {
        "required": [
          "serie",
          "numar"
        ],
        "type": "object",
        "properties": {
          "serie": {
            "type": "string",
            "description": "Seria facturii. Împreună cu `numar`, identifică documentul."
          },
          "numar": {
            "type": "string",
            "description": "Numărul facturii. Împreună cu `serie`, identifică documentul."
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a emiterii facturii.",
            "format": "date",
            "example": "2026-09-10"
          },
          "data_scadenta": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a scadenței. Restanța se calculează față de ea.",
            "format": "date",
            "example": "2026-09-10"
          },
          "valoare_totala": {
            "type": "number",
            "description": "Valoarea totală a facturii, cu TVA, în valuta documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "sold": {
            "type": "number",
            "description": "Suma rămasă de încasat din factură. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "sold_depasit": {
            "type": "number",
            "description": "Partea din sold ajunsă deja la scadență. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          }
        }
      },
      "v2_common_problema_refuz_response": {
        "required": [
          "motiv",
          "type",
          "title",
          "status",
          "meta",
          "detail",
          "instance"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "URN-ul care numește categoria erorii, de exemplu `urn:fgo:api:v2:problem:validation`. Este identificatorul stabil pe care se ramifică integrarea; `title` și `detail` sunt texte și se pot schimba."
          },
          "title": {
            "type": "string",
            "description": "Titlul scurt al categoriei, pentru dezvoltatori și jurnale. Nu îl afișa utilizatorului final și nu ramifica pe el."
          },
          "status": {
            "type": "integer",
            "description": "Statusul HTTP al răspunsului, repetat în corp așa cum cere RFC 9457. Coincide întotdeauna cu statusul liniei de răspuns.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "Ce s-a întâmplat concret, în această cerere. Este un mesaj de business, niciodată un detaliu intern al serverului. Textul se poate schimba, deci nu construi logică pe el.",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "description": "Identificatorul acestei apariții a erorii, în forma `urn:trace:{trace}`. Trimite-l suportului împreună cu `Server-Timing` și `x-fapi-interaction-id`.",
            "nullable": true
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Aceleași date despre răspuns ca la o operație reușită: `timestamp` și, opțional, `trace`."
          },
          "motiv": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_motiv"
              }
            ],
            "description": "Motivul refuzului, pe `403 forbidden` și pe conflictele de stare. Ramifică pe `motiv.cod`: `drept_lipsa`, `cod_unic_neasociat`, `factura_duplicata` sau `stare_nepermisa`. Setul este extensibil; pot apărea coduri noi."
          }
        }
      },
      "v2_common_problema_response": {
        "required": [
          "type",
          "title",
          "status",
          "meta",
          "detail",
          "instance"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "URN-ul care numește categoria erorii, de exemplu `urn:fgo:api:v2:problem:validation`. Este identificatorul stabil pe care se ramifică integrarea; `title` și `detail` sunt texte și se pot schimba."
          },
          "title": {
            "type": "string",
            "description": "Titlul scurt al categoriei, pentru dezvoltatori și jurnale. Nu îl afișa utilizatorului final și nu ramifica pe el."
          },
          "status": {
            "type": "integer",
            "description": "Statusul HTTP al răspunsului, repetat în corp așa cum cere RFC 9457. Coincide întotdeauna cu statusul liniei de răspuns.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "Ce s-a întâmplat concret, în această cerere. Este un mesaj de business, niciodată un detaliu intern al serverului. Textul se poate schimba, deci nu construi logică pe el.",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "description": "Identificatorul acestei apariții a erorii, în forma `urn:trace:{trace}`. Trimite-l suportului împreună cu `Server-Timing` și `x-fapi-interaction-id`.",
            "nullable": true
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Aceleași date despre răspuns ca la o operație reușită: `timestamp` și, opțional, `trace`."
          }
        }
      },
      "v2_common_problema_validare_response": {
        "required": [
          "validation_errors",
          "type",
          "title",
          "status",
          "meta",
          "detail",
          "instance"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "URN-ul care numește categoria erorii, de exemplu `urn:fgo:api:v2:problem:validation`. Este identificatorul stabil pe care se ramifică integrarea; `title` și `detail` sunt texte și se pot schimba."
          },
          "title": {
            "type": "string",
            "description": "Titlul scurt al categoriei, pentru dezvoltatori și jurnale. Nu îl afișa utilizatorului final și nu ramifica pe el."
          },
          "status": {
            "type": "integer",
            "description": "Statusul HTTP al răspunsului, repetat în corp așa cum cere RFC 9457. Coincide întotdeauna cu statusul liniei de răspuns.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "Ce s-a întâmplat concret, în această cerere. Este un mesaj de business, niciodată un detaliu intern al serverului. Textul se poate schimba, deci nu construi logică pe el.",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "description": "Identificatorul acestei apariții a erorii, în forma `urn:trace:{trace}`. Trimite-l suportului împreună cu `Server-Timing` și `x-fapi-interaction-id`.",
            "nullable": true
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Aceleași date despre răspuns ca la o operație reușită: `timestamp` și, opțional, `trace`."
          },
          "validation_errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_element_validare_public_api"
            },
            "description": "Elementele respinse din cerere, câte unul pe câmp. Corectează-le pe toate înainte de a retrimite cererea."
          }
        }
      },
      "v2_common_stergere_response": {
        "required": [
          "nr_sterse",
          "nr_total"
        ],
        "type": "object",
        "properties": {
          "nr_sterse": {
            "type": "integer",
            "description": "Câte elemente au fost șterse efectiv.",
            "format": "int32"
          },
          "nr_total": {
            "type": "integer",
            "description": "Câte elemente viza operația. O valoare mai mare decât `nr_sterse` înseamnă că unele nu au putut fi șterse.",
            "format": "int32"
          }
        }
      },
      "v2_crm_client_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "denumire": {
            "type": "string",
            "description": "Denumirea. Obligatorie la creare.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "CUI/CNP fara prefix RO pentru Romania. Obligatoriu la crearea partenerilor PJ.",
            "nullable": true
          },
          "tip_persoana": {
            "type": "string",
            "description": "PF sau PJ. Obligatoriu la creare; nu se schimba pe clienti/furnizori.",
            "nullable": true
          },
          "cod_tara": {
            "type": "string",
            "description": "Cod ISO alpha-2 cu majuscule. Obligatoriu la creare.",
            "nullable": true
          },
          "adresa": {
            "type": "string",
            "description": "Adresa postala. Null goleste campul optional.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de email. Null o sterge.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numarul de telefon. Null il sterge.",
            "nullable": true
          },
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "cod_judet": {
            "type": "string",
            "description": "Cod judet din nomenclator, numai pentru Romania.",
            "nullable": true
          },
          "localitate": {
            "type": "string",
            "description": "Numele localitatii.",
            "nullable": true
          }
        }
      },
      "v2_crm_furnizor_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "denumire": {
            "type": "string",
            "description": "Denumirea. Obligatorie la creare.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "CUI/CNP fara prefix RO pentru Romania. Obligatoriu la crearea partenerilor PJ.",
            "nullable": true
          },
          "tip_persoana": {
            "type": "string",
            "description": "PF sau PJ. Obligatoriu la creare; nu se schimba pe clienti/furnizori.",
            "nullable": true
          },
          "cod_tara": {
            "type": "string",
            "description": "Cod ISO alpha-2 cu majuscule. Obligatoriu la creare.",
            "nullable": true
          },
          "adresa": {
            "type": "string",
            "description": "Adresa postala. Null goleste campul optional.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de email. Null o sterge.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numarul de telefon. Null il sterge.",
            "nullable": true
          },
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "cod_judet": {
            "type": "string",
            "description": "Cod judet din nomenclator, numai pentru Romania.",
            "nullable": true
          },
          "localitate": {
            "type": "string",
            "description": "Numele localitatii.",
            "nullable": true
          }
        }
      },
      "v2_crm_lead_request": {
        "type": "object",
        "properties": {
          "denumire": {
            "type": "string",
            "description": "Denumirea. Obligatorie la creare. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "CUI/CNP fara prefix RO pentru Romania. Obligatoriu la crearea partenerilor PJ. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "tip_persoana": {
            "type": "string",
            "description": "PF sau PJ. Obligatoriu la creare; nu se schimba pe clienti/furnizori. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "cod_tara": {
            "type": "string",
            "description": "Cod ISO alpha-2 cu majuscule. Obligatoriu la creare. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "adresa": {
            "type": "string",
            "description": "Adresa postala. Null goleste campul optional. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de email. Null o sterge. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numarul de telefon. Null il sterge. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "sursa": {
            "type": "string",
            "description": "Sursa lead-ului, de exemplu CRM propriu. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "observatii": {
            "type": "string",
            "description": "Observatii despre lead. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "data": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data lead-ului, yyyy-MM-dd. La PATCH, omiterea pastreaza valoarea existenta.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          }
        },
        "additionalProperties": false
      },
      "v2_crm_lead_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "denumire": {
            "type": "string",
            "description": "Denumirea. Obligatorie la creare.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "CUI/CNP fara prefix RO pentru Romania. Obligatoriu la crearea partenerilor PJ.",
            "nullable": true
          },
          "tip_persoana": {
            "type": "string",
            "description": "PF sau PJ. Obligatoriu la creare; nu se schimba pe clienti/furnizori.",
            "nullable": true
          },
          "cod_tara": {
            "type": "string",
            "description": "Cod ISO alpha-2 cu majuscule. Obligatoriu la creare.",
            "nullable": true
          },
          "adresa": {
            "type": "string",
            "description": "Adresa postala. Null goleste campul optional.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de email. Null o sterge.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numarul de telefon. Null il sterge.",
            "nullable": true
          },
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identificator opac (prefix `lead`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "lead_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "sursa": {
            "type": "string",
            "description": "Sursa lead-ului, de exemplu CRM propriu.",
            "nullable": true
          },
          "observatii": {
            "type": "string",
            "description": "Observatii despre lead.",
            "nullable": true
          },
          "data": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data lead-ului, yyyy-MM-dd.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          }
        }
      },
      "v2_crm_partener_request": {
        "type": "object",
        "properties": {
          "denumire": {
            "type": "string",
            "description": "Denumirea. Obligatorie la creare. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "CUI/CNP fara prefix RO pentru Romania. Obligatoriu la crearea partenerilor PJ. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "tip_persoana": {
            "type": "string",
            "description": "PF sau PJ. Obligatoriu la creare; nu se schimba pe clienti/furnizori. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "cod_tara": {
            "type": "string",
            "description": "Cod ISO alpha-2 cu majuscule. Obligatoriu la creare. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "adresa": {
            "type": "string",
            "description": "Adresa postala. Null goleste campul optional. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de email. Null o sterge. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numarul de telefon. Null il sterge. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "cod_judet": {
            "type": "string",
            "description": "Cod judet din nomenclator, numai pentru Romania. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          },
          "localitate": {
            "type": "string",
            "description": "Numele localitatii. La PATCH, omiterea pastreaza valoarea existenta.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_element_validare_public_api": {
        "required": [
          "location",
          "issues"
        ],
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "Unde se află elementul respins: `body`, `query`, `path`, `header` sau `form`. Decide care dintre `pointer` și `name` este prezent."
          },
          "pointer": {
            "type": "string",
            "description": "Poziția din corpul cererii, ca JSON Pointer (RFC 6901), fără prefixul `#` — de exemplu `/articole/0/cota_tva`. Prezent numai când `location` este `body`.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "Numele parametrului sau al headerului respins. Prezent când `location` este `query`, `path`, `header` sau `form`.",
            "nullable": true
          },
          "issues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_issue_validare_public_api"
            },
            "description": "Una sau mai multe probleme găsite pe același element — de exemplu lipsă și format greșit pe același câmp."
          }
        }
      },
      "v2_envelope_arhive_pdf_creata_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_arhive_pdf_creata_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_arhive_pdf_limite_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_arhive_pdf_limite_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_arhive_pdf_link_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_arhive_pdf_link_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_arhive_pdf_status_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_arhive_pdf_status_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_array_stocuri_stoc_articol_gestiune_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_stocuri_stoc_articol_gestiune_response"
            },
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_array_stocuri_stoc_articol_pe_gestiune_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_stocuri_stoc_articol_pe_gestiune_response"
            },
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_balanta_indicatori_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_balanta_indicatori_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_balanta_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_balanta_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_common_stergere_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_common_stergere_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_crm_client_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_crm_client_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_crm_furnizor_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_crm_furnizor_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_crm_lead_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_crm_lead_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_adauga_incasare_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_adauga_incasare_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_emite_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_emite_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_furnizori_creare_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_furnizori_creare_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_genereaza_link_de_descarcare_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_genereaza_link_de_descarcare_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_genereaza_link_de_plata_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_genereaza_link_de_plata_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_get_factura_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_get_factura_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_status_e_factura_response": {
        "required": [
          "meta",
          "data"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_status_e_factura_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă.",
            "nullable": true
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_facturi_storneaza_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_storneaza_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_firma_pozitie_anaf_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_firma_pozitie_anaf_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_furnizori_sumar_restante_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_furnizori_sumar_restante_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_identitate_context_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_identitate_context_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_object": {
        "required": [
          "meta",
          "data"
        ],
        "type": "object",
        "properties": {
          "data": {
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă.",
            "nullable": true
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_parteneri_fisa_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_parteneri_fisa_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_rapoarte_sumar_vanzari_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_rapoarte_sumar_vanzari_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_solduri_conturi_bancare_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_solduri_conturi_bancare_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_envelope_solduri_partener_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_solduri_partener_response"
              }
            ],
            "description": "Rezultatul operației. Este `null` — emis explicit, nu omis — la operațiile care nu întorc o resursă."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși — momentul generării, urmărirea și eventualele mesaje informative. Prezent pe orice răspuns, inclusiv pe erori."
          }
        }
      },
      "v2_facturi_adauga_incasare_request": {
        "required": [
          "suma_incasata",
          "tip_incasare"
        ],
        "type": "object",
        "properties": {
          "suma_incasata": {
            "type": "number",
            "description": "Suma care se înregistrează pe factură, în valuta documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "data_incasare": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a încasării, strict `YYYY-MM-DD`, fără oră sau fus. Dacă lipsește, FGO folosește data curentă.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "tip_incasare": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "description": "Valoarea exactă din câmpul `nume` al `GET /v2/nomenclatoare/tipuri-incasare`, de exemplu `Banca`. Orice altă valoare răspunde `400`."
          },
          "cont_incasare": {
            "maxLength": 128,
            "type": "string",
            "description": "Contul configurat în FGO la **Setări → Încasare**. Dacă lipsește, se folosește contul implicit al tipului de încasare. Nu trimite un IBAN care nu este configurat acolo.",
            "nullable": true
          },
          "serie_chitanta": {
            "maxLength": 50,
            "type": "string",
            "description": "Seria chitanței de emis, când tipul de încasare este chitanță. Dacă lipsește, se folosește seria implicită a firmei.",
            "nullable": true
          },
          "tip_factura": {
            "maxLength": 50,
            "type": "string",
            "description": "Tipul documentului încasat, când firma are configurări diferite pe tip. Opțional.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_adauga_incasare_response": {
        "required": [
          "serie_incasare",
          "numar_incasare"
        ],
        "type": "object",
        "properties": {
          "serie_incasare": {
            "type": "string",
            "description": "Seria chitanței emise odată cu încasarea. Este `null` când tipul de încasare nu produce chitanță."
          },
          "numar_incasare": {
            "type": "string",
            "description": "Numărul chitanței emise odată cu încasarea. Este `null` când tipul de încasare nu produce chitanță."
          }
        }
      },
      "v2_facturi_ataseaza_awb_request": {
        "required": [
          "awb"
        ],
        "type": "object",
        "properties": {
          "awb": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Numărul AWB de asociat facturii. Înlocuiește un AWB existent; același AWB trimis din nou lasă factura în aceeași stare."
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_articol": {
        "required": [
          "denumire",
          "nr_produse"
        ],
        "type": "object",
        "anyOf": [
          {
            "required": [
              "pret_unitar"
            ]
          },
          {
            "required": [
              "pret_total"
            ]
          }
        ],
        "properties": {
          "cod_articol": {
            "maxLength": 128,
            "type": "string",
            "description": "Codul articolului din nomenclatorul FGO. Opțional. Articolul se caută după el dacă firma caută articolele după cod articol (setarea „Căutare articole după” din Configurare API); dacă nu există, se creează un articol nou cu toate codurile trimise. În celelalte moduri nu intră în căutare, doar se scrie pe articolul nou. Fără codul modului, articolul se caută după `denumire`.",
            "nullable": true
          },
          "cod_bare": {
            "maxLength": 20,
            "type": "string",
            "description": "Codul de bare al articolului din nomenclatorul FGO. Opțional. Articolul se caută după el dacă firma caută articolele după cod de bare (setarea „Căutare articole după” din Configurare API); dacă nu există, se creează un articol nou cu toate codurile trimise. În celelalte moduri nu intră în căutare, doar se scrie pe articolul nou. Fără codul modului, articolul se caută după `denumire`.",
            "nullable": true
          },
          "cod_gestiune": {
            "maxLength": 255,
            "type": "string",
            "description": "Codul gestiunii din FGO, dacă articolul actualizează stocul.",
            "nullable": true
          },
          "cod_centru_cost": {
            "maxLength": 255,
            "type": "string",
            "description": "Codul centrului de cost.",
            "nullable": true
          },
          "denumire": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Denumirea afișată pe factură."
          },
          "descriere": {
            "maxLength": 4000,
            "type": "string",
            "description": "Descrierea opțională a articolului.",
            "nullable": true
          },
          "um": {
            "maxLength": 5,
            "type": "string",
            "description": "Unitatea de măsură, de exemplu `buc`.",
            "nullable": true
          },
          "pret_unitar": {
            "minimum": 0,
            "type": "number",
            "description": "Prețul unitar, transmis ca număr JSON. Număr zecimal cu maximum 4 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 4 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 4
          },
          "pret_total": {
            "type": "number",
            "description": "Prețul total al articolului, ca număr JSON. Dacă este transmis, FGO calculează prețul unitar. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "nr_produse": {
            "type": "number",
            "not": {
              "enum": [
                0
              ]
            },
            "description": "Cantitatea, transmisă ca număr JSON. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 3
          },
          "cota_tva": {
            "type": "number",
            "description": "Valoarea din `GET /v2/nomenclatoare/cote-tva`, ca număr JSON; de exemplu `0.21` pentru 21%. Este obligatorie, cu excepția tipului `T` (`Taxare inversa`), pentru care poate lipsi — FGO aplică automat cota zero. Număr zecimal cu maximum 4 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 4 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 4
          },
          "tip": {
            "enum": [
              "Articol",
              "Discount"
            ],
            "type": "string",
            "description": "Tipul elementului: `Articol` sau `Discount`.",
            "nullable": true
          },
          "nr_crt": {
            "type": "integer",
            "description": "Poziția articolului în document.",
            "format": "int32",
            "nullable": true
          },
          "nr_crt_articol": {
            "type": "integer",
            "description": "Pentru un discount, poziția articolului la care se aplică.",
            "format": "int32",
            "nullable": true
          },
          "efactura": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_emite_efactura_articol"
              }
            ],
            "description": "Informații e-Factura opționale, la nivelul articolului.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_atribut": {
        "required": [
          "nume",
          "valoare"
        ],
        "type": "object",
        "properties": {
          "nume": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string",
            "description": "Numele atributului (BT-160), de exemplu `Culoare`."
          },
          "valoare": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Valoarea atributului (BT-161), de exemplu `Roșu`."
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_clasificare": {
        "required": [
          "cod",
          "tip"
        ],
        "type": "object",
        "properties": {
          "tip": {
            "minLength": 1,
            "enum": [
              "STI",
              "NB",
              "ZZZ"
            ],
            "type": "string",
            "description": "Tipul clasificării, din `GET /v2/nomenclatoare/tipuri-clasificare-produs`: `STI` (cod CPV), `NB` (număr de lot) sau `ZZZ` (cod convenit)."
          },
          "cod": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string",
            "description": "Codul clasificării. Pentru `STI` este validat contra `GET /v2/nomenclatoare/coduri-clasificare-produs`; pentru `NB` și `ZZZ` este text liber."
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_client": {
        "required": [
          "tip"
        ],
        "type": "object",
        "properties": {
          "cod_unic": {
            "maxLength": 128,
            "type": "string",
            "description": "Codul unic sau CNP-ul clientului. Pentru o persoană juridică este obligatoriu.",
            "nullable": true
          },
          "denumire": {
            "maxLength": 255,
            "type": "string",
            "description": "Denumirea persoanei juridice sau numele persoanei fizice.",
            "nullable": true
          },
          "nr_reg_com": {
            "maxLength": 128,
            "type": "string",
            "description": "Numărul de înregistrare la Registrul Comerțului.",
            "nullable": true
          },
          "email": {
            "maxLength": 500,
            "type": "string",
            "description": "Adresa de e-mail a clientului.",
            "nullable": true
          },
          "telefon": {
            "maxLength": 100,
            "type": "string",
            "description": "Numărul de telefon al clientului.",
            "nullable": true
          },
          "tara": {
            "maxLength": 100,
            "type": "string",
            "description": "Țara, din `GET /v2/nomenclatoare/tari`.",
            "nullable": true
          },
          "cod_judet": {
            "pattern": "^[A-Z]{1,2}$",
            "type": "string",
            "description": "Codul canonic al județului, din `GET /v2/nomenclatoare/judete`, de exemplu `B` sau `IS`.",
            "nullable": true
          },
          "localitate": {
            "maxLength": 100,
            "type": "string",
            "description": "Localitatea clientului.",
            "nullable": true
          },
          "adresa": {
            "maxLength": 500,
            "type": "string",
            "description": "Adresa poștală a clientului.",
            "nullable": true
          },
          "tip": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_tip_persoana"
              }
            ],
            "description": "Tipul clientului: `PJ` pentru persoană juridică sau `PF` pentru persoană fizică."
          },
          "id_extern": {
            "type": "string",
            "description": "Identificatorul clientului în sistemul tău. Se trimite ca text, dar trebuie să conțină numai cifre (cel mult 10) — FGO îl păstrează ca număr. Omite-l sau trimite `null` dacă nu ai unul.",
            "nullable": true
          },
          "cont_bancar": {
            "maxLength": 50,
            "type": "string",
            "description": "Contul bancar al clientului.",
            "nullable": true
          },
          "platitor_tva": {
            "type": "boolean",
            "description": "Indică dacă clientul este plătitor de TVA.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_efactura_articol": {
        "type": "object",
        "properties": {
          "identificator_cumparator": {
            "maxLength": 100,
            "type": "string",
            "description": "Identificatorul pe care îl dă cumpărătorul acestui articol (BT-156).",
            "nullable": true
          },
          "gtin": {
            "type": "string",
            "description": "Codul GTIN (EAN) al articolului (BT-157). FGO îl declară cu schema `0088`, deci aici merge numai un GTIN.",
            "nullable": true
          },
          "referinta_contabila_cumparator": {
            "maxLength": 100,
            "type": "string",
            "description": "Referința contabilă a cumpărătorului, la nivel de articol (BT-133).",
            "nullable": true
          },
          "nota": {
            "maxLength": 1000,
            "type": "string",
            "description": "Nota liberă a articolului (BT-127, „invoice line note” în standard).",
            "nullable": true
          },
          "clasificari": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_emite_clasificare"
            },
            "description": "Clasificările articolului (BT-158). Maximum 10 pe articol; nu sunt permise pe elementele de tip `Discount`. Primul cod `STI` devine CPV-ul articolului și înlocuiește CPV-ul implicit al produsului; celelalte se adaugă.",
            "nullable": true
          },
          "atribute": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_emite_atribut"
            },
            "description": "Atributele articolului (BT-160/BT-161), de exemplu culoarea. Maximum 10 pe articol.",
            "nullable": true
          },
          "pret_include_compensatie_agricultori": {
            "type": "boolean",
            "description": "`true` înseamnă că prețul transmis include deja compensația în cotă forfetară de 8% pentru agricultori; FGO o scoate din baza articolului și o declară separat, fără să o adauge peste total.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_efactura_factura": {
        "type": "object",
        "properties": {
          "referinta_cumparator": {
            "maxLength": 200,
            "type": "string",
            "description": "Referința cumpărătorului (BT-10) — de exemplu numărul comenzii lui.",
            "nullable": true
          },
          "referinta_contract": {
            "maxLength": 30,
            "type": "string",
            "description": "Referința contractului în baza căruia se emite factura (BT-12).",
            "nullable": true
          },
          "referinta_contabila_cumparator": {
            "maxLength": 100,
            "type": "string",
            "description": "Referința contabilă a cumpărătorului, la nivel de factură (BT-19).",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_request": {
        "required": [
          "articole",
          "serie",
          "tip_factura",
          "valuta"
        ],
        "type": "object",
        "properties": {
          "text": {
            "maxLength": 2000,
            "type": "string",
            "description": "Text opțional afișat pe factură.",
            "nullable": true
          },
          "explicatii": {
            "maxLength": 2000,
            "type": "string",
            "description": "Explicații opționale adăugate facturii.",
            "nullable": true
          },
          "valuta": {
            "maxLength": 3,
            "minLength": 3,
            "type": "string",
            "description": "Codul valutei, din `GET /v2/nomenclatoare/valute`, de exemplu `RON`."
          },
          "tip_factura": {
            "minLength": 1,
            "type": "string",
            "description": "Codul sau denumirea tipului, din `GET /v2/nomenclatoare/tipuri-factura`."
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a emiterii, strict `YYYY-MM-DD`, fără oră sau fus. Dacă lipsește, se folosește data curentă.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "data_scadenta": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a scadenței, strict `YYYY-MM-DD`, fără oră sau fus. Dacă lipsește, se calculează din setările firmei.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "serie": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "description": "Seria din registrul de facturi configurat în FGO."
          },
          "numar": {
            "maxLength": 50,
            "type": "string",
            "description": "Numărul dorit. Lasă-l necompletat pentru alocare automată din registru.",
            "nullable": true
          },
          "tva_la_incasare": {
            "type": "boolean",
            "description": "Indică dacă factura aplică TVA la încasare.",
            "nullable": true
          },
          "id_extern": {
            "maxLength": 36,
            "type": "string",
            "description": "Referința opțională a facturii în sistemul tău. Cu `verificare_duplicat=true`, este folosită pentru căutarea unei facturi existente înainte de emitere.",
            "nullable": true
          },
          "verificare_duplicat": {
            "type": "boolean",
            "description": "Activează verificarea unei facturi existente înainte de emitere. Implicit false. Cu `id_extern` nenul, caută după acesta; altfel, după `serie` și `numar`, dacă sunt completate. Dacă găsește factura, răspunde `400 invalid-state`, fără o nouă emitere. Verificarea nu garantează unicitatea între cereri simultane.",
            "nullable": true
          },
          "awb": {
            "maxLength": 128,
            "type": "string",
            "description": "Numărul AWB asociat facturii, dacă există deja.",
            "nullable": true
          },
          "articole": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_emite_articol"
            },
            "description": "Articolele facturii. Este necesar cel puțin unul."
          },
          "client": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_emite_client"
              }
            ],
            "description": "Clientul facturat. Pentru un client `PJ` sunt necesare denumirea și codul unic.",
            "nullable": true
          },
          "valideaza_cod_unic_ro": {
            "type": "boolean",
            "description": "Dacă este `true`, validează codul unic românesc al clientului înainte de emitere.",
            "nullable": true
          },
          "efactura": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_facturi_emite_efactura_factura"
              }
            ],
            "description": "Informații e-Factura opționale, la nivelul documentului.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_emite_response": {
        "required": [
          "serie",
          "numar",
          "stocuri"
        ],
        "type": "object",
        "properties": {
          "serie": {
            "type": "string",
            "description": "Seria facturii emise. Împreună cu `numar`, identifică documentul în toate celelalte operații."
          },
          "numar": {
            "type": "string",
            "description": "Numărul facturii emise, alocat din registrul seriei."
          },
          "stocuri": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_emite_stoc"
            },
            "description": "Stocul articolelor de pe factură care au descărcat stoc, după descărcare: un element pentru fiecare linie cu evidență de stoc, cu codul, codul de bare și numele articolului din nomenclator. O integrare de magazin îl scrie direct pe produsul vândut, fără o cerere separată. Lista e goală când firma nu ține stoc pe articol, când tipul de document nu descarcă stoc sau când drepturile firmei nu permit expunerea stocului."
          }
        }
      },
      "v2_facturi_emite_stoc": {
        "type": "object",
        "properties": {
          "cod_articol": {
            "type": "string",
            "description": "Codul articolului din nomenclator (`cod_articol`), dacă are.",
            "nullable": true
          },
          "cod_bare": {
            "type": "string",
            "description": "Codul de bare al articolului din nomenclator (`cod_bare`), dacă are.",
            "nullable": true
          },
          "nume": {
            "type": "string",
            "description": "Numele articolului din nomenclator.",
            "nullable": true
          },
          "cod_gestiune": {
            "type": "string",
            "description": "Gestiunea din care a descărcat linia (`cod_gestiune` trimis pe linie), când firma lucrează cu gestiuni pe linie; atunci `stoc` este stocul rămas în această gestiune. `null` când linia nu a avut gestiune: `stoc` este stocul total al articolului.",
            "nullable": true
          },
          "stoc": {
            "type": "number",
            "description": "Cantitatea rămasă după descărcarea acestei facturi: în gestiunea din `cod_gestiune` sau, fără ea, pe articol. Același articol pe mai multe linii scade cumulat. Poate fi negativă. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 3
          }
        }
      },
      "v2_facturi_factura_lista_response": {
        "required": [
          "serie",
          "numar"
        ],
        "type": "object",
        "properties": {
          "serie": {
            "type": "string",
            "description": "Seria facturii. Împreună cu `numar`, identifică documentul."
          },
          "numar": {
            "type": "string",
            "description": "Numărul facturii. Împreună cu `serie`, identifică documentul."
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a emiterii facturii.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "data_scadenta": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a scadenței facturii.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "valoare_totala": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "valoare_fara_tva": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "valoare_tva": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "valoare_ramasa": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "valuta": {
            "type": "string",
            "description": "Codul valutei documentului, de exemplu `RON`.",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Starea documentului: `draft`, `emisa`, `anulata`, `stornata` (are un storno), `storno` (este un storno). Set extensibil.",
            "nullable": true
          },
          "status_plata": {
            "type": "string",
            "description": "Starea încasării: `in_termen` (neîncasată, în termen), `depasita` (neîncasată, scadență depășită), `incasata_partial`, `incasata`. Set extensibil.",
            "nullable": true
          },
          "trimisa_pe_email": {
            "type": "boolean",
            "description": "`true` dacă factura a fost trimisă pe email cel puțin o dată."
          },
          "client_id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identificatorul clientului facturat, în firma cheii API. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "nullable": true,
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "client": {
            "type": "string",
            "description": "Denumirea clientului facturat.",
            "nullable": true
          },
          "cod_unic_client": {
            "type": "string",
            "description": "Codul unic al clientului facturat, fără prefixul `RO`.",
            "nullable": true
          }
        }
      },
      "v2_facturi_furnizori_creare_articol": {
        "required": [
          "cantitate",
          "cota_tva",
          "pret_unitar",
          "um"
        ],
        "type": "object",
        "properties": {
          "cod_articol": {
            "type": "string",
            "description": "Cod comercial existent, potrivire exactă. Trimite cod_articol sau cod_bare, niciodată ambele. Lipsa potrivirii răspunde 404; mai multe potriviri răspund 400.",
            "nullable": true
          },
          "cod_bare": {
            "type": "string",
            "description": "Cod de bare existent, potrivire exactă și unică în firma cheii.",
            "nullable": true
          },
          "cod_gestiune": {
            "type": "string",
            "description": "Cod opțional din GET /v2/gestiuni; identifică exact o gestiune activă din firma cheii. Necesită acces la gestiuni. Fără cod se păstrează comportamentul aplicației pentru o linie fără gestiune.",
            "nullable": true
          },
          "denumire": {
            "type": "string",
            "description": "Obligatorie fără coduri: creează un articol de achiziție, fără stoc, ca în aplicație. Cu un cod existent se folosește articolul găsit.",
            "nullable": true
          },
          "um": {
            "minLength": 1,
            "type": "string",
            "description": "Unitatea de măsură a liniei, de exemplu buc."
          },
          "cantitate": {
            "type": "number",
            "description": "Cantitatea liniei, diferită de zero. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 3
          },
          "pret_unitar": {
            "type": "number",
            "description": "Prețul unitar fără TVA, în moneda facturii, diferit de zero. Număr zecimal cu maximum 4 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 4 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 4
          },
          "cota_tva": {
            "type": "number",
            "description": "Coeficient TVA: 0.21 pentru 21%, 0 pentru fără TVA. TVA liniei se calculează din valoarea fără TVA rotunjită la 2 zecimale. Număr zecimal cu maximum 4 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 4 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 4
          },
          "detalii": {
            "type": "string",
            "description": "Descriere suplimentară pentru linia facturii.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_furnizori_creare_request": {
        "required": [
          "articole",
          "data_emitere",
          "furnizor_id",
          "numar",
          "valoare",
          "valoare_tva"
        ],
        "type": "object",
        "properties": {
          "furnizor_id": {
            "maxLength": 64,
            "type": "string",
            "description": "ID-ul opac al unui furnizor existent din firma cheii; primit de la GET /v2/furnizori. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "numar": {
            "minLength": 1,
            "type": "string",
            "description": "Numărul facturii furnizorului. Retrimiterea nu deduplică documentele."
          },
          "nume_document": {
            "type": "string",
            "description": "Denumire opțională a documentului.",
            "nullable": true
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data calendaristică a emiterii facturii de către furnizor.",
            "format": "date",
            "example": "2026-09-10"
          },
          "data_scadenta": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data calendaristică a scadenței; opțională.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "data_inregistrare": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data calendaristică a înregistrării contabile; opțională.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "valuta": {
            "type": "string",
            "description": "Codul monedei, implicit RON.",
            "nullable": true
          },
          "curs_valutar": {
            "type": "number",
            "description": "Cursul în lei pentru o unitate monetară. Obligatoriu pentru alte monede; pentru RON este 1. Număr zecimal cu maximum 6 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 6 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 6
          },
          "valoare": {
            "type": "number",
            "description": "Total fără TVA; trebuie să coincidă cu suma valorilor liniilor, rotunjite fiecare la 2 zecimale. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "valoare_tva": {
            "type": "number",
            "description": "TVA total; suma TVA calculată și rotunjită la 2 zecimale pentru fiecare linie. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "stoc_preluat": {
            "type": "boolean",
            "description": "Implicit false. Cere preluarea în stoc, ca în aplicație: cantitățile se actualizează numai dacă firma are dreptul și bifa Stoc pe articol activă, pentru articolele existente care folosesc stoc. Articolele noi sunt create fără stoc."
          },
          "articole": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_furnizori_creare_articol"
            },
            "description": "Liniile facturii, cu gestiune opțională. Fără centre de cost."
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_furnizori_creare_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "ID-ul opac al documentului creat, același format ca în GET /v2/facturi-furnizori. Identificator opac (prefix `ffr`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "ffr_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          }
        }
      },
      "v2_facturi_furnizori_factura_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identitatea documentului primit, în firma cheii API. Identificator opac (prefix `ffr`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "ffr_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "furnizor_id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identificatorul furnizorului emitent. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "nullable": true,
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "furnizor": {
            "type": "string",
            "description": "Denumirea furnizorului emitent.",
            "nullable": true
          },
          "cod_unic_furnizor": {
            "type": "string",
            "description": "Codul unic al furnizorului emitent, fără prefixul `RO`.",
            "nullable": true
          },
          "numar": {
            "type": "string",
            "description": "Numărul documentului, așa cum l-a dat furnizorul.",
            "nullable": true
          },
          "nume_document": {
            "type": "string",
            "description": "Denumirea documentului primit.",
            "nullable": true
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a emiterii documentului de către furnizor.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "data_scadenta": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a scadenței documentului.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "creat_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul înregistrării documentului în FGO, în RFC 3339 cu offset.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-09-10T14:05:12+03:00"
          },
          "valoare": {
            "type": "number",
            "description": "Valoarea documentului fără TVA, în valuta lui. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "valoare_tva": {
            "type": "number",
            "description": "Valoarea TVA a documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "total": {
            "type": "number",
            "description": "Valoarea totală a documentului, cu TVA. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "suma_ramasa": {
            "type": "number",
            "description": "Suma rămasă de achitat din document. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "valuta": {
            "type": "string",
            "description": "Codul valutei documentului, de exemplu `RON`.",
            "nullable": true
          },
          "platita": {
            "type": "boolean",
            "description": "`true` dacă documentul este achitat integral (nu mai are sumă rămasă).",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Starea documentului în evidența firmei: `in_asteptare`, `aprobat`, `aprobat_automat`, `respins`, `stersa_de_furnizor`, `in_curs_de_procesare`. Set extensibil.",
            "nullable": true
          }
        }
      },
      "v2_facturi_genereaza_link_de_descarcare_response": {
        "required": [
          "link"
        ],
        "type": "object",
        "properties": {
          "link": {
            "type": "string",
            "description": "Short linkul FGO către PDF-ul facturii. Rămâne același cât timp conținutul facturii nu se modifică, deci poate fi păstrat."
          }
        }
      },
      "v2_facturi_genereaza_link_de_plata_response": {
        "required": [
          "link"
        ],
        "type": "object",
        "properties": {
          "link": {
            "type": "string",
            "description": "Linkul de plată al facturii, către procesatorul configurat pe firmă. Un link existent este refolosit."
          }
        }
      },
      "v2_facturi_get_factura_incasare": {
        "type": "object",
        "properties": {
          "suma_incasata": {
            "type": "number",
            "description": "Suma acestei încasări, în valuta indicată de câmpul `valuta`. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "data_incasare": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă la care s-a înregistrat încasarea.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "valuta": {
            "type": "string",
            "description": "Codul valutei încasării, de exemplu `RON`.",
            "nullable": true
          }
        }
      },
      "v2_facturi_get_factura_response": {
        "required": [
          "numar",
          "serie"
        ],
        "type": "object",
        "properties": {
          "numar": {
            "type": "string",
            "description": "Numărul facturii. Împreună cu `serie`, identifică documentul."
          },
          "serie": {
            "type": "string",
            "description": "Seria facturii. Împreună cu `numar`, identifică documentul."
          },
          "valoare": {
            "type": "number",
            "description": "Valoarea totală a facturii, în valuta documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "valoare_achitata": {
            "type": "number",
            "description": "Valoarea încasată din factură, în valuta documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "incasari": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_get_factura_incasare"
            },
            "description": "Încasările înregistrate pe factură, în ordinea adăugării. O factură neîncasată are aici o listă goală."
          }
        }
      },
      "v2_facturi_get_facturi_asociate_factura": {
        "required": [
          "numar",
          "serie"
        ],
        "type": "object",
        "properties": {
          "numar": {
            "type": "string",
            "description": "Numărul facturii. Împreună cu `serie`, identifică documentul."
          },
          "serie": {
            "type": "string",
            "description": "Seria facturii. Împreună cu `numar`, identifică documentul."
          },
          "valoare": {
            "type": "number",
            "description": "Valoarea totală a facturii, în valuta documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "valoare_achitata": {
            "type": "number",
            "description": "Valoarea încasată din factură, în valuta documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a emiterii facturii generate, în format `YYYY-MM-DD`.",
            "format": "date",
            "example": "2026-09-10"
          }
        }
      },
      "v2_facturi_status_e_factura_response": {
        "type": "object",
        "properties": {
          "actualizat_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul ultimului eveniment e-Factura pentru document, în RFC 3339 cu offset.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-09-10T14:05:12+03:00"
          },
          "status": {
            "type": "string",
            "description": "Starea e-Factura a documentului. Set extensibil — ramifică pe `eroare_anaf` și `eroare_fgo` pentru a distinge un eșec.",
            "nullable": true
          },
          "descriere": {
            "type": "string",
            "description": "Descrierea stării, pentru afișare.",
            "nullable": true
          },
          "detalii": {
            "type": "string",
            "description": "Detaliile evenimentului, inclusiv mesajul ANAF când există o respingere.",
            "nullable": true
          },
          "eroare_anaf": {
            "type": "boolean",
            "description": "`true` dacă eșecul vine de la ANAF — de exemplu o validare a XML-ului.",
            "nullable": true
          },
          "eroare_fgo": {
            "type": "boolean",
            "description": "`true` dacă eșecul s-a produs în FGO, înainte de trimiterea către ANAF.",
            "nullable": true
          }
        }
      },
      "v2_facturi_storneaza_request": {
        "type": "object",
        "properties": {
          "serie_storno": {
            "maxLength": 50,
            "type": "string",
            "description": "Seria documentului de stornare. Dacă lipsește, se folosește seria implicită din registrul firmei.",
            "nullable": true
          },
          "numar_storno": {
            "maxLength": 50,
            "type": "string",
            "description": "Numărul documentului de stornare. Dacă lipsește, se alocă automat din registru.",
            "nullable": true
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a documentului storno, strict `YYYY-MM-DD`, fără oră sau fus.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          }
        },
        "additionalProperties": false
      },
      "v2_facturi_storneaza_response": {
        "required": [
          "serie",
          "numar"
        ],
        "type": "object",
        "properties": {
          "serie": {
            "type": "string",
            "description": "Seria documentului de stornare creat, nu a facturii stornate."
          },
          "numar": {
            "type": "string",
            "description": "Numărul documentului de stornare creat, nu al facturii stornate."
          }
        }
      },
      "v2_facturi_tip_persoana": {
        "enum": [
          "PJ",
          "PF"
        ],
        "type": "string"
      },
      "v2_facturi_trimite_email_request": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Destinatarul. Dacă lipsește, se folosește adresa salvată pe clientul facturii.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "v2_firma_clasament_pozitie_anaf_response": {
        "type": "object",
        "properties": {
          "cifra_afaceri": {
            "type": "number",
            "description": "Cifra de afaceri a firmei, în anul analizat. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "pozitie_cifra_afaceri": {
            "type": "integer",
            "description": "Poziția firmei după cifra de afaceri, `1` fiind prima.",
            "format": "int32",
            "nullable": true
          },
          "medie_cifra_afaceri": {
            "type": "number",
            "description": "Cifra de afaceri medie a firmelor din comparație. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "profit": {
            "type": "number",
            "description": "Profitul firmei, în anul analizat. Negativ la pierdere. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "pozitie_profit": {
            "type": "integer",
            "description": "Poziția firmei după profit, `1` fiind prima.",
            "format": "int32",
            "nullable": true
          },
          "medie_profit": {
            "type": "number",
            "description": "Profitul mediu al firmelor din comparație. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "angajati": {
            "type": "integer",
            "description": "Numărul mediu de angajați ai firmei, în anul analizat.",
            "format": "int32",
            "nullable": true
          },
          "pozitie_angajati": {
            "type": "integer",
            "description": "Poziția firmei după numărul de angajați, `1` fiind prima.",
            "format": "int32",
            "nullable": true
          },
          "medie_angajati": {
            "type": "number",
            "description": "Numărul mediu de angajați al firmelor din comparație. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "cifra_afaceri_pe_angajat": {
            "type": "number",
            "description": "Cifra de afaceri raportată la numărul de angajați. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "pozitie_cifra_afaceri_pe_angajat": {
            "type": "integer",
            "description": "Poziția firmei după cifra de afaceri pe angajat, `1` fiind prima.",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "v2_firma_indicator_anaf_response": {
        "type": "object",
        "properties": {
          "indicator": {
            "type": "string",
            "description": "Numele indicatorului din situațiile financiare depuse la ANAF. Set extensibil.",
            "nullable": true
          },
          "suma": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          }
        }
      },
      "v2_firma_pozitie_anaf_item_response": {
        "type": "object",
        "properties": {
          "tip_comparatie": {
            "type": "string",
            "description": "Criteriul comparației: `oras_caen`, `judet_caen`, `tara_caen` (același domeniu de activitate în oraș, județ, țară) sau `tara` (toate firmele). Set extensibil.",
            "nullable": true
          },
          "zone": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_firma_zona_pozitie_anaf_response"
            },
            "description": "Zonele în care s-a făcut comparația.",
            "nullable": true
          },
          "clasamente": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_firma_clasament_pozitie_anaf_response"
            },
            "description": "Clasamentele firmei pe fiecare indicator, în comparația respectivă.",
            "nullable": true
          }
        }
      },
      "v2_firma_pozitie_anaf_response": {
        "type": "object",
        "properties": {
          "an": {
            "type": "integer",
            "description": "Anul situațiilor financiare din care s-a calculat analiza.",
            "format": "int32"
          },
          "ani_disponibili": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Anii pentru care firma are situații financiare depuse. Folosește-i în parametrul `an`.",
            "nullable": true
          },
          "indicatori": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_firma_indicator_anaf_response"
            },
            "description": "Indicatorii financiari ai firmei, în anul analizat.",
            "nullable": true
          },
          "pozitii": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_firma_pozitie_anaf_item_response"
            },
            "description": "Pozițiile firmei, pe fiecare criteriu de comparație.",
            "nullable": true
          },
          "topuri": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_firma_top_anaf_response"
            },
            "description": "Clasamentele în care apare firma.",
            "nullable": true
          },
          "link_detalii": {
            "type": "string",
            "description": "Linkul către analiza completă, pe site-ul FGO.",
            "nullable": true
          }
        }
      },
      "v2_firma_top_anaf_item_response": {
        "type": "object",
        "properties": {
          "denumire": {
            "type": "string",
            "description": "Denumirea firmei din clasament. Dată publică ANAF.",
            "nullable": true
          },
          "cod_unic": {
            "type": "integer",
            "description": "Codul unic al firmei din clasament, fără prefixul `RO`.",
            "format": "int32",
            "nullable": true
          },
          "pozitie": {
            "type": "integer",
            "description": "Poziția în clasament, `1` fiind prima.",
            "format": "int32",
            "nullable": true
          },
          "valoare": {
            "type": "number",
            "description": "Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          }
        }
      },
      "v2_firma_top_anaf_response": {
        "type": "object",
        "properties": {
          "tip_comparatie": {
            "type": "string",
            "description": "Criteriul clasamentului: `oras_caen`, `judet_caen`, `tara_caen` sau `tara`. Set extensibil.",
            "nullable": true
          },
          "firme": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_firma_top_anaf_item_response"
            },
            "description": "Firmele din clasament, în ordinea poziției.",
            "nullable": true
          }
        }
      },
      "v2_firma_zona_pozitie_anaf_response": {
        "type": "object",
        "properties": {
          "zona": {
            "type": "string",
            "description": "Zona geografică a comparației — județul sau întreaga țară.",
            "nullable": true
          },
          "caen": {
            "type": "integer",
            "description": "Codul CAEN al domeniului de activitate comparat.",
            "format": "int32",
            "nullable": true
          },
          "numar_firme": {
            "type": "integer",
            "description": "Câte firme intră în comparație în zona și domeniul respectiv.",
            "format": "int32",
            "nullable": true
          },
          "pozitie_cifra_afaceri": {
            "type": "integer",
            "description": "Poziția firmei după cifra de afaceri, `1` fiind prima.",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "v2_furnizori_factura_restanta_response": {
        "required": [
          "document"
        ],
        "type": "object",
        "properties": {
          "document": {
            "type": "string",
            "description": "Identitatea documentului primit, așa cum apare în evidența firmei — de regulă seria și numărul furnizorului."
          },
          "tip_document": {
            "type": "string",
            "description": "Tipul documentului primit, de exemplu factură sau aviz.",
            "nullable": true
          },
          "valuta": {
            "type": "string",
            "description": "Codul valutei documentului, de exemplu `RON`.",
            "nullable": true
          },
          "suma": {
            "type": "number",
            "description": "Suma rămasă de achitat, în valuta documentului. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "curs_valutar": {
            "type": "number",
            "description": "Cursul de schimb folosit la înregistrare. Pentru documentele în lei este `1`. Număr zecimal cu maximum 6 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 6 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 6
          },
          "data_emitere": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă a emiterii documentului de către furnizor.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "data_inregistrare": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Data civilă la care documentul a fost înregistrat în FGO.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          }
        }
      },
      "v2_furnizori_furnizor_response": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 64,
            "type": "string",
            "description": "Identitatea furnizorului. Este stabilă numai în firma cheii API. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "denumire": {
            "type": "string",
            "description": "Denumirea persoanei juridice sau numele persoanei fizice.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "Codul unic sau CNP-ul furnizorului, fără prefixul `RO`.",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Adresa de e-mail salvată pe furnizor.",
            "nullable": true
          },
          "telefon": {
            "type": "string",
            "description": "Numărul de telefon al furnizorului.",
            "nullable": true
          },
          "cod_tara": {
            "type": "string",
            "description": "Codul ISO 3166-1 alpha-2 al țării furnizorului.",
            "nullable": true
          },
          "tara": {
            "type": "string",
            "description": "Denumirea țării furnizorului, pentru afișare.",
            "nullable": true
          },
          "cod_judet": {
            "type": "string",
            "description": "Codul canonic al județului, de exemplu `B` sau `IS`.",
            "nullable": true
          },
          "judet": {
            "type": "string",
            "description": "Denumirea județului, pentru afișare.",
            "nullable": true
          },
          "localitate": {
            "type": "string",
            "description": "Localitatea furnizorului.",
            "nullable": true
          },
          "adresa": {
            "type": "string",
            "description": "Adresa poștală a furnizorului.",
            "nullable": true
          },
          "tip_persoana": {
            "type": "string",
            "description": "Tipul persoanei: `PJ` (juridică) sau `PF` (fizică).",
            "nullable": true
          }
        }
      },
      "v2_furnizori_sumar_restante_response": {
        "type": "object",
        "properties": {
          "sold_total": {
            "type": "number",
            "description": "Soldul curent al furnizorului: totalul rămas de achitat. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "rulaj_total": {
            "type": "number",
            "description": "Rulajul total înregistrat cu furnizorul. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "facturi": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_furnizori_factura_restanta_response"
            },
            "description": "Documentele neachitate integral care compun soldul. Listă goală când nu există niciunul.",
            "nullable": true
          }
        }
      },
      "v2_gestiuni_gestiune_response": {
        "required": [
          "cod_gestiune"
        ],
        "type": "object",
        "properties": {
          "cod_gestiune": {
            "type": "string",
            "description": "Codul gestiunii. Este valoarea de trimis în `articole[].cod_gestiune` la emiterea unei facturi cu descărcare de stoc."
          },
          "nume": {
            "type": "string",
            "description": "Denumirea gestiunii, pentru afișare.",
            "nullable": true
          }
        }
      },
      "v2_identitate_context_response": {
        "required": [
          "drepturi",
          "cautare_articol_dupa",
          "expira_la"
        ],
        "type": "object",
        "properties": {
          "drepturi": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Drepturile acordate cheii API, în forma canonică folosită de operații."
          },
          "expira_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul expirării cheii, în RFC 3339 cu offset. `null` înseamnă că cheia nu are expirare configurată.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-09-10T14:05:12+03:00"
          },
          "cautare_articol_dupa": {
            "type": "string",
            "description": "Câmpul după care firma identifică articolele în API, setarea „Căutare articole după” din Configurare API: `cod_articol` (implicit), `cod_bare` sau `denumire`. La emitere articolul se caută după acest câmp când linia îl are; pe listare și stocuri e singurul filtru de identificare acceptat. O integrare îl citește la pornire ca să știe ce cod să trimită."
          }
        }
      },
      "v2_issue_validare_public_api": {
        "required": [
          "code",
          "message"
        ],
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Codul stabil al problemei: `required` (element obligatoriu lipsă sau gol), `invalid_format` (valoarea nu se poate citi în tipul sau forma așteptată: dată, număr, identificator, JSON, tipar), `out_of_range` (număr sau lungime în afara limitelor; limitele sunt în `args`), `subfields_required` (câmp compus cerut în `fields` fără subcâmpuri) sau `invalid_value` (orice altă regulă: valoare din afara nomenclatorului, parametru sau câmp necunoscut). Setul este extensibil; pot apărea coduri noi. Ramifică pe cod, cu un tratament general pentru coduri necunoscute, nu pe `message`."
          },
          "message": {
            "type": "string",
            "description": "Explicația problemei, pentru dezvoltator. Textul se poate schimba fără schimbarea versiunii.",
            "nullable": true
          },
          "args": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Valorile care completează mesajul, ca pereche nume–valoare; omis când nu există. Pe `out_of_range`: `min`, `max`, `exclusive`, `value` pentru numere, respectiv `min_length`, `max_length`, `length` pentru texte și liste.",
            "nullable": true
          }
        }
      },
      "v2_meta": {
        "required": [
          "timestamp"
        ],
        "type": "object",
        "properties": {
          "timestamp": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul generării răspunsului, în RFC 3339 cu offset, cu precizie de o secundă. Este ora serverului, nu a clientului.",
            "format": "date-time",
            "example": "2026-09-10T14:05:12+03:00"
          },
          "trace": {
            "type": "string",
            "description": "Copie a contextului de urmărire W3C al cererii, oferită pentru comoditate. Poate lipsi, deci integrarea nu trebuie să depindă de prezența ei; pentru investigare folosește headerele `Server-Timing` și `x-fapi-interaction-id`.",
            "nullable": true
          }
        }
      },
      "v2_motiv": {
        "required": [
          "cod"
        ],
        "type": "object",
        "properties": {
          "cod": {
            "type": "string",
            "description": "Codul stabil al motivului, destinat ramificării automate. Pe `403`, `drept_lipsa` înseamnă drept sau abonament insuficient, iar `cod_unic_neasociat` înseamnă că headerul `Fgo-Cod-Unic` nu corespunde firmei cheii API."
          },
          "mesaj": {
            "type": "string",
            "description": "Explicația motivului, pentru afișare. Poate lipsi; ramifică pe `cod`.",
            "nullable": true
          },
          "args": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "description": "Valorile care completează mesajul, ca pereche nume–valoare. Omis când nu există.",
            "nullable": true
          }
        }
      },
      "v2_nomenclatoare_banca_response": {
        "required": [
          "bic"
        ],
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea completă a băncii.",
            "nullable": true
          },
          "bic": {
            "type": "string",
            "description": "Codul BIC/SWIFT al băncii. Este identitatea ei în nomenclator."
          },
          "alias": {
            "type": "string",
            "description": "Denumirea scurtă, folosită în interfața FGO.",
            "nullable": true
          }
        }
      },
      "v2_nomenclatoare_cod_clasificare_produs_response": {
        "required": [
          "cod"
        ],
        "type": "object",
        "properties": {
          "cod": {
            "type": "string",
            "description": "Codul din nomenclator — pentru `STI`, codul CPV. Este valoarea de trimis în `clasificari[].cod`."
          },
          "denumire": {
            "type": "string",
            "description": "Denumirea codului, pentru afișare.",
            "nullable": true
          },
          "tip": {
            "type": "string",
            "description": "Tipul de clasificare din care face parte codul, de exemplu `STI`.",
            "nullable": true
          }
        }
      },
      "v2_nomenclatoare_cota_tva_response": {
        "type": "object",
        "properties": {
          "valoare": {
            "type": "number",
            "description": "Coeficientul transmis în `articole[].cota_tva`, de exemplu `0.21` pentru 21%. Număr zecimal cu maximum 4 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 4 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 4
          }
        }
      },
      "v2_nomenclatoare_judet_response": {
        "required": [
          "cod"
        ],
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea județului, pentru afișare.",
            "nullable": true
          },
          "cod": {
            "type": "string",
            "description": "Codul canonic al județului, de exemplu `B` sau `IS`. Este valoarea de trimis în `cod_judet`, la localități și la emitere."
          }
        }
      },
      "v2_nomenclatoare_localitate_response": {
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea localității. Este valoarea de trimis în `client.localitate` la emitere.",
            "nullable": true
          }
        }
      },
      "v2_nomenclatoare_tara_response": {
        "required": [
          "cod"
        ],
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea țării, pentru afișare.",
            "nullable": true
          },
          "cod": {
            "type": "string",
            "description": "Codul ISO 3166-1 alpha-2 al țării, cu convenția fiscală UE `EL` pentru Grecia. Este valoarea de trimis în `client.tara`.",
            "nullable": true
          }
        }
      },
      "v2_nomenclatoare_tip_clasificare_produs_response": {
        "required": [
          "cod"
        ],
        "type": "object",
        "properties": {
          "cod": {
            "type": "string",
            "description": "Codul tipului de clasificare: `STI` (cod CPV), `NB` (număr de lot) sau `ZZZ` (cod convenit). Este valoarea de trimis în `tip`, pe clasificările articolului."
          },
          "are_nomenclator_coduri": {
            "type": "boolean",
            "description": "`true` dacă tipul are o listă de coduri de interogat prin `GET /v2/nomenclatoare/coduri-clasificare-produs`. Pentru `NB` și `ZZZ` este `false`: valorile se introduc liber."
          }
        }
      },
      "v2_nomenclatoare_tip_factura_response": {
        "required": [
          "cod"
        ],
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea tipului de document, de exemplu `Factura` sau `Proforma`.",
            "nullable": true
          },
          "cod": {
            "type": "string",
            "description": "Codul tipului. `cod` și `nume` sunt amândouă acceptate în câmpul `tip_factura` de la emitere."
          }
        }
      },
      "v2_nomenclatoare_tip_incasare_response": {
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea tipului de încasare, de exemplu `Banca` sau `Chitanta`. Este exact valoarea de trimis în `tip_incasare`; orice altceva răspunde `400`.",
            "nullable": true
          }
        }
      },
      "v2_nomenclatoare_valuta_response": {
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Codul valutei, de exemplu `RON` sau `EUR`. Este valoarea de trimis în `valuta` la emitere.",
            "nullable": true
          }
        }
      },
      "v2_page_envelope_array_articole_articol_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_articole_articol_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_clienti_client_cu_restante_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_clienti_client_cu_restante_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_clienti_client_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_clienti_client_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_clienti_factura_restanta_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_clienti_factura_restanta_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_crm_lead_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_crm_lead_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_facturi_factura_lista_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_factura_lista_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_facturi_furnizori_factura_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_furnizori_factura_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_facturi_get_facturi_asociate_factura": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_facturi_get_facturi_asociate_factura"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_furnizori_furnizor_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_furnizori_furnizor_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_gestiuni_gestiune_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_gestiuni_gestiune_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_banca_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_banca_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_cod_clasificare_produs_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_cod_clasificare_produs_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_cota_tva_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_cota_tva_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_judet_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_judet_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_localitate_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_localitate_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_tara_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_tara_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_tip_clasificare_produs_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_tip_clasificare_produs_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_tip_factura_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_tip_factura_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_tip_incasare_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_tip_incasare_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_nomenclatoare_valuta_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_nomenclatoare_valuta_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_rapoarte_vanzari_achizitii_articol_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_rapoarte_vanzari_achizitii_articol_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_rapoarte_vanzari_lunare_articol_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_rapoarte_vanzari_lunare_articol_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_page_envelope_array_stocuri_stoc_articol_gestiune_response": {
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_stocuri_stoc_articol_gestiune_response"
            },
            "description": "Elementele paginii curente. Este o listă goală când filtrul nu potrivește nimic."
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination_meta"
              }
            ],
            "description": "Datele despre răspunsul însuși, plus `pagination`, de unde se continuă colecția."
          }
        }
      },
      "v2_pagination": {
        "required": [
          "next_cursor",
          "prev_cursor"
        ],
        "type": "object",
        "properties": {
          "next_cursor": {
            "type": "string",
            "description": "Cursorul paginii următoare. Retrimite-l neschimbat în parametrul `cursor`, cu aceleași filtre. Valoarea `null` înseamnă că aceasta este ultima pagină.",
            "nullable": true
          },
          "prev_cursor": {
            "type": "string",
            "description": "Cursorul paginii anterioare, folosit la fel ca `next_cursor`. Valoarea `null` înseamnă că aceasta este prima pagină.",
            "nullable": true
          }
        }
      },
      "v2_pagination_meta": {
        "required": [
          "pagination",
          "timestamp"
        ],
        "type": "object",
        "properties": {
          "timestamp": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul generării răspunsului, în RFC 3339 cu offset, cu precizie de o secundă. Este ora serverului, nu a clientului.",
            "format": "date-time",
            "example": "2026-09-10T14:05:12+03:00"
          },
          "trace": {
            "type": "string",
            "description": "Copie a contextului de urmărire W3C al cererii, oferită pentru comoditate. Poate lipsi, deci integrarea nu trebuie să depindă de prezența ei; pentru investigare folosește headerele `Server-Timing` și `x-fapi-interaction-id`.",
            "nullable": true
          },
          "pagination": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_pagination"
              }
            ],
            "description": "Poziția de continuare a colecției."
          }
        }
      },
      "v2_parteneri_fisa_response": {
        "required": [
          "tip_partener"
        ],
        "type": "object",
        "properties": {
          "tip_partener": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_parteneri_tip_partener"
              }
            ],
            "description": "Felul partenerului a cărui fișă este: `client` sau `furnizor`. Repetă valoarea din cerere."
          },
          "denumire": {
            "type": "string",
            "description": "Denumirea partenerului, pentru afișare.",
            "nullable": true
          },
          "cod_unic": {
            "type": "string",
            "description": "Codul unic sau CNP-ul partenerului, fără prefixul `RO`.",
            "nullable": true
          },
          "data_de_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Începutul perioadei acoperite de fișă, inclusiv.",
            "format": "date",
            "example": "2026-09-10"
          },
          "data_pana_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Sfârșitul perioadei acoperite de fișă, inclusiv.",
            "format": "date",
            "example": "2026-09-10"
          },
          "link": {
            "type": "string",
            "description": "Linkul temporar către fișa generată. Nu îl stoca: expiră; cere altul când ai nevoie.",
            "nullable": true
          }
        }
      },
      "v2_parteneri_genereaza_fisa_request": {
        "required": [
          "tip_partener"
        ],
        "type": "object",
        "properties": {
          "tip_partener": {
            "allOf": [
              {
                "$ref": "#/components/schemas/v2_parteneri_tip_partener"
              }
            ],
            "description": "Felul partenerului: `client` sau `furnizor`. Decide care dintre `id_client` și `id_furnizor` se trimite."
          },
          "id_client": {
            "maxLength": 64,
            "type": "string",
            "description": "Clientul pentru care se generează fișa. Se trimite când `tip_partener` este `client`. Identificator opac (prefix `cli`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "nullable": true,
            "example": "cli_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "id_furnizor": {
            "maxLength": 64,
            "type": "string",
            "description": "Furnizorul pentru care se generează fișa. Se trimite când `tip_partener` este `furnizor`. Identificator opac (prefix `frn`). Se păstrează și se compară ca text; nu îl construi și nu îl interpreta.",
            "nullable": true,
            "example": "frn_4f1c9b2e7a3d4c6b8e5f0a1d2c3b4a59"
          },
          "data_de_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Începutul perioadei acoperite de fișă, inclusiv, strict `YYYY-MM-DD`. Implicit: cu 30 de zile înainte de `data_pana_la` (sau de astăzi, dacă sfârșitul lipsește).",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          },
          "data_pana_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Sfârșitul perioadei acoperite de fișă, inclusiv, strict `YYYY-MM-DD`. Implicit: astăzi.",
            "format": "date",
            "nullable": true,
            "example": "2026-09-10"
          }
        },
        "additionalProperties": false
      },
      "v2_parteneri_tip_partener": {
        "enum": [
          "client",
          "furnizor"
        ],
        "type": "string"
      },
      "v2_rapoarte_indicator_vanzari_response": {
        "type": "object",
        "properties": {
          "indicator": {
            "type": "string",
            "description": "Codul indicatorului agregat: `facturat_luna`, `facturat_an`, `incasat_luna`, `neincasat`, `scadenta_depasita`. Set extensibil.",
            "nullable": true
          },
          "numar_facturi": {
            "type": "integer",
            "description": "Câte facturi compun indicatorul în intervalul cerut.",
            "format": "int32"
          },
          "total": {
            "type": "number",
            "description": "Valoarea totală a indicatorului, în lei. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "evolutie": {
            "type": "number",
            "description": "Variația procentuală față de perioada anterioară, de aceeași lungime. Negativă la scădere. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "tva": {
            "type": "number",
            "description": "Valoarea TVA cuprinsă în indicator. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          }
        }
      },
      "v2_rapoarte_sumar_vanzari_response": {
        "type": "object",
        "properties": {
          "data_de_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Începutul intervalului efectiv folosit, inclusiv.",
            "format": "date",
            "example": "2026-09-10"
          },
          "data_pana_la": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Sfârșitul intervalului efectiv folosit, inclusiv.",
            "format": "date",
            "example": "2026-09-10"
          },
          "indicatori": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_rapoarte_indicator_vanzari_response"
            },
            "description": "Indicatorii calculați pentru interval.",
            "nullable": true
          }
        }
      },
      "v2_rapoarte_valori_luna_response": {
        "type": "object",
        "properties": {
          "luna": {
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "type": "string",
            "description": "Luna calendaristică a valorilor, în format `YYYY-MM`.",
            "format": "year-month",
            "example": "2026-09"
          },
          "cantitate": {
            "type": "number",
            "description": "Cantitatea vândută în luna respectivă. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 3
          },
          "valoare": {
            "type": "number",
            "description": "Valoarea vândută în luna respectivă. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          }
        }
      },
      "v2_rapoarte_vanzari_achizitii_articol_response": {
        "required": [
          "cod_articol",
          "nume_articol",
          "um_articol"
        ],
        "type": "object",
        "properties": {
          "cod_articol": {
            "type": "string",
            "description": "Codul comercial al articolului."
          },
          "nume_articol": {
            "type": "string",
            "description": "Denumirea articolului."
          },
          "um_articol": {
            "type": "string",
            "description": "Unitatea de măsură a articolului, de exemplu `buc`."
          },
          "cantitate_intrata": {
            "type": "number",
            "description": "Cantitatea intrată în stoc, din documentele de la furnizori. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 3
          },
          "valoare_intrata_fara_tva": {
            "type": "number",
            "description": "Valoarea achizițiilor, fără TVA. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "valoare_intrata_cu_tva": {
            "type": "number",
            "description": "Valoarea achizițiilor, cu TVA. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "cantitate_vanduta": {
            "type": "number",
            "description": "Cantitatea vândută, din facturile emise. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 3
          },
          "valoare_vanzari_fara_tva": {
            "type": "number",
            "description": "Valoarea vânzărilor, fără TVA. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "tva_vanzari": {
            "type": "number",
            "description": "Valoarea TVA a vânzărilor. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "total_vanzari_cu_tva": {
            "type": "number",
            "description": "Valoarea vânzărilor, cu TVA. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          }
        }
      },
      "v2_rapoarte_vanzari_lunare_articol_response": {
        "required": [
          "cod_articol",
          "nume_articol",
          "um_articol"
        ],
        "type": "object",
        "properties": {
          "cod_articol": {
            "type": "string",
            "description": "Codul comercial al articolului."
          },
          "nume_articol": {
            "type": "string",
            "description": "Denumirea articolului."
          },
          "um_articol": {
            "type": "string",
            "description": "Unitatea de măsură a articolului, de exemplu `buc`."
          },
          "stoc_actual": {
            "type": "number",
            "description": "Stocul curent al articolului, la momentul raportului. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 3
          },
          "luni": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_rapoarte_valori_luna_response"
            },
            "description": "Valorile pe fiecare lună din intervalul raportului."
          }
        }
      },
      "v2_solduri_cont_bancar_response": {
        "type": "object",
        "properties": {
          "nume": {
            "type": "string",
            "description": "Denumirea contului, așa cum este configurată în FGO.",
            "nullable": true
          },
          "iban": {
            "type": "string",
            "description": "IBAN-ul contului.",
            "nullable": true
          },
          "valuta": {
            "type": "string",
            "description": "Codul valutei contului, de exemplu `RON`.",
            "nullable": true
          },
          "sold": {
            "type": "number",
            "description": "Soldul contului, în valuta lui. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "sursa": {
            "type": "string",
            "description": "De unde vine soldul: `open_banking` (conexiune bancară) sau `manual_sau_extras`. Set extensibil.",
            "nullable": true
          },
          "actualizat_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Momentul ultimei actualizări a soldului, în RFC 3339 cu offset. Soldurile din conexiuni bancare pot avea o întârziere față de bancă.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-09-10T14:05:12+03:00"
          }
        }
      },
      "v2_solduri_conturi_bancare_response": {
        "type": "object",
        "properties": {
          "numar_conturi": {
            "type": "integer",
            "description": "Câte conturi active are firma.",
            "format": "int32"
          },
          "actualizat_la": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z|[+-]\\d{2}:\\d{2})$",
            "type": "string",
            "description": "Cea mai recentă actualizare dintre toate conturile, în RFC 3339 cu offset.",
            "format": "date-time",
            "nullable": true,
            "example": "2026-09-10T14:05:12+03:00"
          },
          "totaluri": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_solduri_total_valuta_response"
            },
            "description": "Totalurile grupate pe valută.",
            "nullable": true
          },
          "conturi": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v2_solduri_cont_bancar_response"
            },
            "description": "Conturile active ale firmei, cu soldul fiecăruia.",
            "nullable": true
          }
        }
      },
      "v2_solduri_partener_response": {
        "type": "object",
        "properties": {
          "sold_total": {
            "type": "number",
            "description": "Soldul curent al partenerului: totalul rămas de încasat sau de achitat. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          },
          "sold_depasit": {
            "type": "number",
            "description": "Partea din sold ajunsă deja la scadență. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          },
          "rulaj_total": {
            "type": "number",
            "description": "Rulajul total înregistrat cu partenerul. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 2
          }
        }
      },
      "v2_solduri_total_valuta_response": {
        "type": "object",
        "properties": {
          "valuta": {
            "type": "string",
            "description": "Codul valutei pentru care se face totalul, de exemplu `RON`; `null` pentru conturile fara valuta.",
            "nullable": true
          },
          "numar_conturi": {
            "type": "integer",
            "description": "Câte conturi din această valută intră în total.",
            "format": "int32"
          },
          "total_disponibil": {
            "type": "number",
            "description": "Suma soldurilor conturilor din această valută. Totalurile nu se convertesc între valute. Număr zecimal cu maximum 2 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 2 zecimale.",
            "format": "decimal",
            "x-fgo-scale": 2
          }
        }
      },
      "v2_stocuri_stoc_articol_gestiune_response": {
        "type": "object",
        "properties": {
          "cod_articol": {
            "type": "string",
            "description": "Codul comercial al articolului.",
            "nullable": true
          },
          "cod_bare": {
            "type": "string",
            "description": "Codul de bare al articolului, dacă este configurat.",
            "nullable": true
          },
          "nume_articol": {
            "type": "string",
            "description": "Denumirea articolului.",
            "nullable": true
          },
          "stoc": {
            "type": "number",
            "description": "Cantitatea articolului în gestiune; poate fi `0` sau negativă. `null` când drepturile firmei nu permit expunerea stocului. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 3
          }
        }
      },
      "v2_stocuri_stoc_articol_pe_gestiune_response": {
        "type": "object",
        "properties": {
          "cod_articol": {
            "type": "string",
            "description": "Codul comercial al articolului.",
            "nullable": true
          },
          "cod_bare": {
            "type": "string",
            "description": "Codul de bare al articolului, dacă este configurat.",
            "nullable": true
          },
          "nume_articol": {
            "type": "string",
            "description": "Denumirea articolului.",
            "nullable": true
          },
          "cod_gestiune": {
            "type": "string",
            "description": "Codul gestiunii în care articolul are evidență de stoc (`cod_gestiune` din `GET /v2/gestiuni`).",
            "nullable": true
          },
          "stoc": {
            "type": "number",
            "description": "Cantitatea articolului în această gestiune; poate fi `0` sau negativă. `null` când drepturile firmei nu permit expunerea stocului. Număr zecimal cu maximum 3 zecimale și maximum 15 cifre semnificative. Într-o cerere, zecimalele suplimentare sunt respinse. În răspuns, valoarea este emisă cu exact 3 zecimale.",
            "format": "decimal",
            "nullable": true,
            "x-fgo-scale": 3
          }
        }
      }
    },
    "securitySchemes": {
      "CheieAccesFgo": {
        "type": "http",
        "description": "Cheia API a firmei. Se trimite ca `Authorization: Bearer {cheie}`. Cheia se generează din contul FGO și se păstrează în siguranță: cine o are poate emite facturi în numele firmei.",
        "scheme": "bearer"
      }
    }
  },
  "security": [
    {
      "CheieAccesFgo": [ ]
    }
  ],
  "tags": [
    {
      "name": "Identitate",
      "description": "Verificarea cheii API: firma confirmată prin header, drepturile acordate integrării și expirarea cheii. Este primul apel al oricărei integrări noi."
    },
    {
      "name": "Facturi",
      "description": "Emiterea și administrarea facturilor proprii: emitere, anulare, stornare, ștergere, încasări, trimitere în SPV (e-Factura), trimitere pe email și generarea linkurilor de descărcare și de plată."
    },
    {
      "name": "Facturi furnizor",
      "description": "Facturile primite de la furnizori, așa cum au fost înregistrate în FGO. Listare și înregistrare din date structurate, cu preluare opțională în stoc. Modificarea se face din aplicație."
    },
    {
      "name": "Arhive PDF",
      "description": "Arhive ZIP cu PDF-urile facturilor, generate asincron. Fluxul are trei pași: verifici limitele, ceri arhiva, apoi întrebi statusul până devine disponibilă și generezi linkul de descărcare."
    },
    {
      "name": "Clienți",
      "description": "Clienții firmei și situația lor financiară: căutare, sold, facturi restante și lista clienților cu restanțe. Creare și actualizare a datelor de identificare și contact fără emiterea unui document."
    },
    {
      "name": "Furnizori",
      "description": "Furnizorii firmei și situația lor financiară: căutare, sold și facturi restante. Creare și actualizare fără documente."
    },
    {
      "name": "Lead-uri CRM",
      "description": "Căutare, citire, creare și actualizare parțială a lead-urilor firmei. Nu include activități CRM, ștergere sau conversie în client."
    },
    {
      "name": "Fișe de partener",
      "description": "Fișa de partener — extrasul de cont al unui client sau furnizor. Operația generează un link temporar către document, nu documentul însuși."
    },
    {
      "name": "Articole",
      "description": "Nomenclatorul de articole al firmei. Doar citire: articolele se administrează din aplicația FGO. `cod_articol` este codul comercial: poate fi comun mai multor articole și se filtrează exact, pe operația de listare."
    },
    {
      "name": "Gestiuni",
      "description": "Gestiunile firmei, folosite la emiterea facturilor cu descărcare de stoc. Doar citire."
    },
    {
      "name": "Stocuri",
      "description": "Stocul articolelor pe gestiuni: cantitatea unui articol într-o gestiune dată, din evidența de stoc. Doar citire."
    },
    {
      "name": "Rapoarte",
      "description": "Totalurile și evoluțiile vânzărilor, agregate pe perioadă și pe articole, inclusiv comparația vânzări–achiziții."
    },
    {
      "name": "Solduri",
      "description": "Soldurile conturilor bancare ale firmei, pe valute, așa cum sunt reflectate în FGO."
    },
    {
      "name": "Balanțe",
      "description": "Balanța contabilă activă a firmei și indicatorii financiari derivați din ea, cu evoluția lor lunară."
    },
    {
      "name": "Firme",
      "description": "Date publice despre o firmă, preluate de la ANAF: poziția ei în topul cifrei de afaceri, pe județ și pe domeniu de activitate."
    },
    {
      "name": "Nomenclatoare",
      "description": "Listele de valori acceptate de celelalte operații: județe, localități, bănci, țări, valute, cote de TVA, tipuri de factură și de încasare, clasificări de produs. Sunt publice — nu cer cheie API."
    }
  ]
}