Date de referințăNou

API Nomenclatorul CPV

Vocabularul comun al achizițiilor publice: fiecare cod CPV cu cifra de control, denumirea în română și engleză, nivelul (diviziune, grup, clasă, categorie) și părintele.

GET/api/v1/cpv/{cod}
1 credit fix· credite generale
după cheie + căutare cu filtre
2 endpoint-uridupă cheie + căutare cu filtre
la căutarea după cheie
1 credit fixla căutarea după cheie
explicate mai jos
8 câmpuriexplicate mai jos
GET/api/v1/cpv/45000000
X-API-KEY: CHEIA_TA_API
{
  "success": true,
  "cod": "45000000",
  "sursa": "Comisia Europeană — TED/SIMAP",
  "rezultat": {
    "cod": "45000000-7",
    "cifre": 45000000,
    "denumire": "Lucrări de construcţii",
    "denumire_en": "Construction work",
    "nivel": "diviziune",
    "diviziune": "45",
    "diviziune_denumire": "Lucrări de construcţii",
    "parinte": null
  }
}
200 OKSursă: Comisia Europeană — TED/SIMAP
Toate câmpurile →

Exemplu cu date fictive · bază URL https://www.firmeapi.ro/api/v1

Despre date

Nomenclatorul CPV

Codurile CPV cu denumirea în română și engleză și ierarhia lor.

Vocabularul comun al achizițiilor publice: fiecare cod CPV cu cifra de control, denumirea în română și engleză, nivelul (diviziune, grup, clasă, categorie) și părintele.

Sursa
Comisia Europeană — TED/SIMAP
Credite
Generale — incluse în orice abonament

Integrare cu agenți AI

Agentul tău îl integrează din prima

Un ghid complet, scris pentru agenții de programare: endpoint-uri, câmpuri, erori, cod de referință și teste de acceptanță. Agentul face integrarea cap-coadă, fără să te întrebe nimic. Sau îl conectezi prin MCP și interoghează direct datele.

Ghidul pentru agenți
.md →
Specificația OpenAPI
openapi.json →
Rezumat pentru LLM-uri
llms.txt →
Ghid MCP pe fiecare client
Configurare MCP →

Prompt pentru agentul de programare

Agentul deschide ghidul de la adresa din prompt. Dacă nu poate accesa internetul, copiază-i .

Implementează în aplicația mea integrarea cu API-ul Nomenclatorul CPV FirmeAPI.ro.

Citește întâi ghidul complet de implementare:
https://www.firmeapi.ro/info-api/nomenclator-cpv.md

Urmează-l pas cu pas: configurarea cheii FIRMEAPI_KEY, clientul API cu
tratarea erorilor și reîncercările, cache-ul, regulile de domeniu
interfața și testele de acceptanță.

Respectă convențiile proiectului. La final rulează testele și spune-mi ce
fișiere ai creat sau modificat.

Documentație

Referința API

Parametrii, fiecare câmp al răspunsului și răspunsurile pe coduri de stare, cu exemple de cod în patru limbaje.

Bază URL
https://www.firmeapi.ro/api/v1
Autentificare
X-API-KEY: cheia ta
Format
JSON, UTF-8, date YYYY-MM-DD
Erori
nu consumă credite

Detaliile unui cod CPV#

GET/api/v1/cpv/{cod}
1 credit fix· general

Denumirea și ierarhia codului.

Parametri

codstring· în URLobligatoriu
Codul CPV, cu sau fără cifra de control (ex. 45000000 sau 45000000-7). ex.: 45000000

Câmpurile răspunsului

successboolean
true când cererea a reușit.
codstring
Valoarea cerută, normalizată.
sursastring
Sursa datelor.
rezultatobject
Obiectul găsit.
rezultat.codstring
Codul cu cifra de control.
rezultat.cifrestring
Cele 8 cifre.
rezultat.denumirestring
Denumirea în română.
rezultat.denumire_enstring
Denumirea în engleză.
rezultat.nivelstring
Nivelul în ierarhie.
rezultat.diviziunestring
Diviziunea.
rezultat.diviziune_denumirestring
Denumirea diviziunii.
rezultat.parintestring|null
Codul părinte.

Reguli pentru integrare

  1. 1Întoarce un singur obiect, în câmpul rezultat.
curl -X GET "https://www.firmeapi.ro/api/v1/cpv/45000000" \
  -H "X-API-KEY: CHEIA_TA_API" \
  -H "Accept: application/json"

200 OK · se taxează 1 credit fix

{
  "success": true,
  "cod": "45000000",
  "sursa": "Comisia Europeană — TED/SIMAP",
  "rezultat": {
    "cod": "45000000-7",
    "cifre": 45000000,
    "denumire": "Lucrări de construcţii",
    "denumire_en": "Construction work",
    "nivel": "diviziune",
    "diviziune": "45",
    "diviziune_denumire": "Lucrări de construcţii",
    "parinte": null
  }
}

Caută coduri CPV#

GET/api/v1/cpv/lista
1 credit / rezultat· general

După denumire, nivel, diviziune sau părinte. 1 credit pe rezultat întors.

Parametri

qstring· query
O parte din denumirea în română. ex.: reactivi
nivelstring· query
Nivelul. diviziunegrupclasacategoriesubcategorie
diviziunestring· query
Diviziunea (primele 2 cifre).
parintestring· query
Codul părinte (cu cifra de control).
paginainteger· query
Numărul paginii, de la 1. ex.: 1
per_paginainteger· query
Rezultate pe pagină, maxim 100. ex.: 20
ordinestring· query
Ordinea rezultatelor (vezi valorile permise pe endpoint). codex.: cod

Câmpurile răspunsului

successboolean
true când cererea a reușit.
sursastring
Sursa datelor.
pagina · per_paginainteger
Pagina curentă și rezultatele pe pagină.
total · total_paginiinteger
Totalul rezultatelor care se potrivesc filtrelor și numărul de pagini pe care le poți parcurge.
rezultatearray
Rezultatele paginii.
rezultate[].codstring
Codul cu cifra de control.
rezultate[].cifrestring
Cele 8 cifre.
rezultate[].denumirestring
Denumirea în română.
rezultate[].denumire_enstring
Denumirea în engleză.
rezultate[].nivelstring
Nivelul în ierarhie.
rezultate[].diviziunestring
Diviziunea.
rezultate[].diviziune_denumirestring
Denumirea diviziunii.
rezultate[].parintestring|null
Codul părinte.
cost.credite_consumate · mod · tipinteger · string
Creditele consumate de cerere, modul de taxare (fix sau per_rezultat) și tipul creditelor (general sau premium).

Reguli pentru integrare

  1. 1Maximum 100 rezultate pe pagină. Paginile acoperă toate rezultatele care se potrivesc filtrelor; dacă o căutare e prea largă pentru a fi paginată până la capăt, răspunsul spune până unde poți merge.
  2. 2Costul se calculează pe numărul de rezultate întoarse; o căutare fără rezultate nu costă nimic.
curl -X GET "https://www.firmeapi.ro/api/v1/cpv/lista" \
  -H "X-API-KEY: CHEIA_TA_API" \
  -H "Accept: application/json"

200 OK · se taxează 1 credit / rezultat

{
  "success": true,
  "sursa": "Comisia Europeană — TED/SIMAP",
  "pagina": 1,
  "per_pagina": 2,
  "total": 9454,
  "total_pagini": 4727,
  "rezultate": [
    {
      "cod": "03000000-1",
      "cifre": "03000000",
      "denumire": "Produse agricole, de fermă, de pescuit, de silvicultură şi produse conexe",
      "denumire_en": "Agricultural, farming, fishing, forestry and related products",
      "nivel": "diviziune",
      "diviziune": "03",
      "diviziune_denumire": "Produse agricole, de fermă, de pescuit, de silvicultură şi produse conexe",
      "parinte": null
    },
    {
      "cod": "03100000-2",
      "cifre": "03100000",
      "denumire": "Produse agricole şi horticole",
      "denumire_en": "Agricultural and horticultural products",
      "nivel": "grupa",
      "diviziune": "03",
      "diviziune_denumire": "Produse agricole, de fermă, de pescuit, de silvicultură şi produse conexe",
      "parinte": "03000000-1"
    }
  ],
  "cost": {
    "credite_consumate": 2,
    "mod": "per_rezultat",
    "tip": "general"
  }
}

Erori și limite

Ce face integrarea la fiecare eroare

Fiecare cod are o reacție clară: unele se reîncearcă automat, restul înseamnă configurare, credite sau date lipsă. Erorile nu consumă credite.

401AUTH_MISSING_KEY · AUTH_INVALID_KEY · AUTH_KEY_EXPIRED

Cheia lipsește, e greșită sau a expirat.

Eroare de configurare: loghează și verifică FIRMEAPI_KEY.

Reîncearcă: nu

403CREDITS_EXHAUSTED

Rezultatele paginii costă mai mult decât creditele disponibile.

Răspunsul spune costul cererii și soldul: cere mai puține rezultate (per_pagina mai mic) sau cumpără credite.

Reîncearcă: nu

403ACCESS_DENIED_IP · ACCESS_DENIED_SCOPE

Cheia e limitată la alte IP-uri sau endpoint-uri.

Eroare de configurare a cheii, din contul FirmeAPI.

Reîncearcă: nu

403MONTHLY_LIMIT_REACHED

Planul gratuit și-a atins limita lunară de cereri.

Mesaj către utilizator cu linkul din upgrade_url.

Reîncearcă: nu

404—

Nu există date pentru cheia cerută.

Afișează „fără date”. Păstrează în cache scurt (de exemplu o oră).

Reîncearcă: nu

422VALIDATION_FAILED

Un filtru invalid sau lipsește un parametru obligatoriu.

Arată eroarea din errors, pe câmp. Validează înainte de cerere.

Reîncearcă: nu

429LIMIT_EXCEEDED_SECOND

Prea multe cereri într-o secundă.

Așteaptă retry_after secunde și reia cererea.

Reîncearcă: da

429LIMIT_EXCEEDED_DAILY · LIMIT_EXCEEDED_MONTHLY

Limita zilnică sau lunară a planului.

Oprește cererile până la retry_after și anunță utilizatorul.

Reîncearcă: nu

500—

Eroare neașteptată pe server.

Reîncearcă de cel mult 3 ori, la 1, 2 și 4 secunde.

Reîncearcă: da

Corpul erorii: {"success": false, "error": "…", "code": "…", "message": "…"}. Decide după statusul HTTP și code, nu după text. Nicio eroare nu consumă credite.

Header-e de răspuns

X-Credit-Cost
Creditele consumate de cerere.
X-Credit-Type
Tipul creditelor folosite de endpoint.
X-Credit-Balance-General
Soldul de credite generale.
X-Credit-Balance-{TIP}
Soldul pentru tipul cererii, când nu e general (de exemplu X-Credit-Balance-ACTIONARI).
X-RateLimit-Limit-Second · -Day · -Month
Limitele planului.
X-RateLimit-Remaining-Second · -Day · -Month
Cât a mai rămas din fiecare limită.

Utilizare

Unde îl folosesc clienții

  • 01

    Afișarea denumirilor pentru codurile CPV din SICAP/TED

  • 02

    Clasificarea achizițiilor

FAQ

Întrebări frecvente

Nu găsești răspunsul? Scrie-ne.

Cât costă API-ul Nomenclatorul CPV?

/api/v1/cpv/{cod}: 1 credit fix; /api/v1/cpv/lista: 1 credit / rezultat. Căutările cu filtre se taxează pe rezultat: creditele consumate = rezultatele întoarse × prețul endpoint-ului, deci o pagină de 20 costă de zece ori mai puțin decât una de 200. Erorile și răspunsurile fără date (404 sau zero rezultate) nu consumă credite și nu scad din plafonul zilnic.

De unde provin datele?

Comisia Europeană — TED/SIMAP.

Ce înseamnă un câmp null?

Că sursa nu precizează informația pentru acel rând. Nu completăm golurile cu valori deduse.

Pot limita o cheie API doar la aceste endpoint-uri?

Da. La Chei API → Acces alegi „Doar ce aleg eu” și bifezi endpoint-urile dorite; restul primesc 403 ACCESS_DENIED_SCOPE pentru acea cheie.

Funcționează și prin MCP (Claude, ChatGPT, Cursor)?

Da. Fiecare endpoint e disponibil ca tool MCP (cpv, cpv_cauta), cu același cost.

Integrează Nomenclatorul CPV

Cont gratuit, cheia API imediat. Plătești doar cererile reușite; 404 și erorile nu consumă credite.