Business v1 / Nomenclatoare
Semantic CAEN matching
Takes a free text describing an activity (e.g. „I want to repair bicycles") and returns the NACE (Rev. 3) codes closest in MEANING, with a confidence score — not a word search but a meaning search (it catches paraphrases, synonyms, different wordings). ?text= (required), ?limita= (how many, 5 by default, 20 at most).
GET
https://oneapi.ro/api/business/v1/caen/potriveste
Query parameters
NameTypeDescriptionAccepted values
limitaoptional
string | null
How many suggestions to return (default 5, max 20).
e.g. 3
textoptional
string | null
The free text to classify (required). E.g. "I want to repair bicycles".
e.g. vreau sa repar bicicletee.g. transport rutier de marfae.g. cabinet stomatologic
niveloptional
string | null
How it behaves
- Takes a free-text description of an activity and returns the CAEN codes closest in meaning, each with a confidence score. It is not word search (like
/caen?q=) but meaning search — it catches paraphrases, synonyms and wordings completely different from the official name. - Example: "I want to repair bicycles" returns 9529 ("Repair of personal and household goods…") first — even though the word "bicycles" is not in the code's name, only in its notes. A word search would miss this or return "Manufacture of bicycles" (the wrong sense).
- Under the hood: the text is turned into a meaning vector (bge-m3 model, self-hosted) and compared against the precomputed index of CAEN codes. The result is a ranked list of suggestions, not a verdict — use the score and take the top few, leaving the final choice to the user or a threshold rule.
?text=is required.?limita=chooses how many suggestions (default 5, max 20). Matching is done against CAEN Rev.3 (the current edition).
What it is for
- A "describe what you do" field that suggests the CAEN code when registering a company.
- Bulk-classifying activity descriptions into CAEN codes.
- Help choosing the right code when the official names are hard to search.
Response structure
All fields below live inside data.
FieldTypeDescription
text
string
The text.
nivel
string
The nomenclature level requested;
clasa by default, because a 4-digit class is what gets declared at the Trade Register.
potrivire_sigura
boolean
There is at least one row we trust: either the term is explicitly tied to a class (
sursa: sinonim), or the returned code contains the searched words themselves (ancora_lexicala). False does NOT mean the rows are wrong — it means nothing confirms them beyond closeness of meaning.
potriviri[].cod
string
The code.
potriviri[].denumire
string
The name.
potriviri[].nivel
string
The level of the code:
sectiune, diviziune, grupa or clasa.
potriviri[].versiune
string
The CAEN edition the code is expressed in. The same code means different things across editions, so this field is needed to tie the code to its page.
potriviri[].scor
number
The match score (0–1).
potriviri[].ancora_lexicala
boolean
The code contains THE VERY words searched for, in its official name or notes. A verifiable signal, not a calibrated one.
potriviri[].sursa
string
sinonim (a term explicitly tied to a class) or semantic (closeness of meaning).
Response examples
GEThttps://oneapi.ro/api/business/v1/caen/potriveste?text=vreau+sa+repar+biciclete&limita=3
{
"data": {
"text": "vreau sa repar biciclete",
"potriviri": [
{
"cod": "9529",
"denumire": "Repararea și întreținerea articolelor de uz personal și gospodăresc n.c.a.",
"scor": 0.6010549664497375
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/caen/potriveste?text=transport+rutier+de+marfa&limita=3
{
"data": {
"text": "transport rutier de marfa",
"potriviri": [
{
"cod": "492",
"denumire": "Transporturi de marfă pe calea ferată",
"scor": 0.7638886570930535
}
]
}
}
GEThttps://oneapi.ro/api/business/v1/caen/potriveste?text=cabinet+stomatologic&limita=3
{
"data": {
"text": "cabinet stomatologic",
"potriviri": [
{
"cod": "325",
"denumire": "Fabricarea de dispozitive, aparate şi instrumente medicale şi stomatologice",
"scor": 0.5422151250307302
}
]
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 422 | validare | The text parameter is missing. |
| 429 | cota_depasita | The plan's monthly quota has been exceeded (see Retry-After). |
| 503 | mentenanta | The semantic index is not built for the requested version, or the embeddings service is temporarily unavailable. |
All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.
{
"eroare": {
"cod": "validare",
"mesaj": "The text parameter is missing.",
"detalii": {
"limita": [
"The value sent does not satisfy the parameter rule."
]
}
}
}