Documentație API
Informații generale
API-ul CompanyInfo.ro respectă arhitectura REST și pune la dispoziție informații despre companii în format JSON .
Sunt necesare următoarele:
- ▸ Comunicare HTTPS. Toate interogările API-ului trebuie să folosească HTTPS cu TLS ≥ 1.2, port 443.
-
▸
Acces rețea.
Firewall-urile și proxy-urile trebuie să permită traficul către
https://api.companyinfo.ro
pe portul 443.
Tot traficul către API (din backend-ul dvs. / SDK-urile noastre) trece prin CloudFlare . Dacă mențineți un firewall strict și aveți nevoie să adăugați în lista albă traficul către CompanyInfo, folosiți IP-urile oficiale ale CloudFlare.
Autentificarea
Pentru a folosi API-ul CompanyInfo.ro trebuie să aveți o cheie de autentificare. Aceasta se generează din contul dvs.
Cheia se va trimite în header-ul Authorization sub forma:
Authorization: Bearer {my_super_secret_key}
Dacă cheia de autentificare nu este trimisă / este invalidă, API-ul răspunde cu codul 401 Unauthorized și conținutul:
{
"message": "the authorization token is not valid"
}
Rate Limits
Traficul către API-ul CompanyInfo.ro este supus unui rate limiting și unui număr de credite lunare (dacă este cazul), conform abonamentului ales.
Dacă Rate Limits este depășit, API-ul răspunde cu codul 429 Too Many Requests și conținutul:
{
"message": "API rate limit exceeded, slow down your horses or upgrade to a better plan"
}
Este recomandat să monitorizați folosirea API-ului din aplicația dvs. și să aveți implementat un mecanism de Retry cu Backoff exponențial în cazul acestor erori. Dacă observați totuși că nevoia business-ului dvs. este mai mare, este recomandat să faceți upgrade abonamentului dvs.
Dacă numărul de credite incluse lunar în abonament este depășit, API-ul răspunde cu codul 429 Too Many Requests și conținutul:
{
"message": "monthly credits consumed, consider upgrading your plan"
}
Este recomandat să monitorizați folosirea API-ului din aplicația dvs. cu ajutorul header-ului de răspuns X-Companyinfo-Remaining-Credits si să declanșați o alertă / notificare când numărul de credite rămase este scăzut. Dacă observați totuși că nevoia business-ului dvs. este mai mare, este recomandat să faceți upgrade abonamentului dvs.
Obiectul Companie
-
id
number
required
ID-ul persoanei juridice.
-
name
string
required
Numele persoanei juridice.
-
tradeRegisterNo
string
optional
Numărul de înregistrare la O.N.R.C.
-
registrationDate
string
required
Data înregistrării.
-
active
boolean
required
Statusul indică dacă persoana juridică este activă la data curentă.
De exemplu, o persoană juridică care a fost radiată sau cu activitatea suspendată, va fi "inactivă". -
caen
string
optional
Codul CAEN (principal) al persoanei juridice.
-
phone
string
optional
Numărul telefon de contact.
-
vat
object
required
Informații despre statusul de plătitor TVA.
-
id
string
required
Identificator TVA. Este ID-ul persoanei juridice, eventual cu prefix „RO”, dacă este plătitoare de TVA la data din parametrul query.
-
cashAccountingEnabled
boolean
required
Indică dacă persoana juridică este plătitoare de TVA „la încasare”.
-
date
string
required
Data la care s-a interogat statusul de plătitor de TVA.
-
id
string
required
-
address
object
required
Adresa socială.
-
streetName
string
required
Numele străzii.
-
streetNo
string
optional
Numărul străzii.
-
block
string
optional
Numărul blocului.
-
apt
string
optional
Numărul apartamentului.
-
floor
string
optional
Numărul etajului.
-
city
string
required
Numele orașului / localității.
-
region
string
required
Numele județului.
-
zipcode
string
optional
Codul poștal (numeric, format din 6 cifre).
-
extraDetail
string
optional
Detaliu suplimentar — poate conține, de exemplu, numele clădirii.
-
streetName
string
required
Vizualizare companie
GET /v1/companies/{id}
Parametrii Path
id string required
ID-ul companiei (CUI / CIF).
Exemplu: „12345” / „RO12345” / „RO 12345”.
Parametrii Query
date string optional
Data pentru care se face interogarea în vederea obținerii identificatorului TVA.
Notă: o companie poate fi / deveni plătitoare / neplătitoare de TVA la o anumită dată. În funcție de această dată, identificatorul TVA poate conține (sau nu) prefixul „RO”.
Are formatul YYYY-MM-DD.
Valoarea implicită este data curentă.
Exemplu: „2025-12-31”.
curl --location 'https://api.companyinfo.ro/v1/companies/{id}' \
--header 'Authorization: Bearer {my_super_secret_key}'
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
const apiKey = "my_super_secret_key"
companyID := "123456"
apiURL := "https://api.companyinfo.ro/v1/companies/" + companyID
req, _ := http.NewRequest(http.MethodGet, apiURL, nil)
req.Header.Add("Authorization", "Bearer " + apiKey)
req.Header.Add("Accept", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println("Company Info:")
fmt.Println(string(body))
}
import requests
api_key = "my_super_secret_key"
company_id = "123456"
api_url = f"https://api.companyinfo.ro/v1/companies/{company_id}"
headers = {
"Authorization": f"Bearer {api_key}",
"Accept": "application/json"
}
response = requests.get(api_url, headers=headers)
if response.status_code == 200:
data = response.json()
print("Company Info:")
print(data)
else:
print(f"API Error ({response.status_code}): {response.text}")
const apiKey = "my_super_secret_key";
const companyId = "123456";
const apiUrl = `https://api.companyinfo.ro/v1/companies/${companyId}`;
fetch(apiUrl, {
method: "GET",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Accept": "application/json"
}
})
.then(response => {
if (!response.ok) {
throw new Error(`API Error (${response.status}): ${response.statusText}`);
}
return response.json();
})
.then(data => {
console.log("Company Info:", data);
})
.catch(error => {
console.error("An error ocurred:", error.message);
});
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CompanyInfoExample {
public static void main(String[] args) {
String apiKey = "my_super_secret_key";
String companyId = "123456";
String apiUrl = "https://api.companyinfo.ro/v1/companies/" + companyId;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(apiUrl))
.header("Authorization", "Bearer " + apiKey)
.header("Accept", "application/json")
.GET()
.build();
try {
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
int statusCode = response.statusCode();
if (statusCode == 200) {
System.out.println("Company Info:");
System.out.println(response.body());
} else {
System.out.println("API Error (" + statusCode + "):");
System.out.println(response.body());
}
} catch (Exception e) {
System.out.println("An error occurred:");
e.printStackTrace();
}
}
}
Răspuns
200 OK
API-ul răspunde cu datele companiei.
{
"company": object
}
400 Bad Request
API-ul răspunde cu un mesaj de eroare (dacă formatul datei din query param este invalid).
{
"message": "string"
}
404 Not Found
API-ul răspunde cu un mesaj de eroare (dacă compania nu este găsită).
{
"message": "string"
}
{
"company": {
"id": 123456,
"name": "FOO S.R.L.",
"tradeRegisterNo": "J2020010000400",
"active": true,
"caen": "9876",
"registrationDate": "2020-02-15",
"phone": "0211234567",
"vat": {
"id": "RO123456",
"cashAccountingEnabled": false,
"date": "2026-01-05"
},
"address": {
"streetName": "Str. Lorem Ipsum",
"streetNo": "10-12",
"block": "11A",
"apt": "20",
"floor": "2",
"city": "Sector 1",
"region": "Bucureşti",
"zipcode": "012345",
"extraDetail": "Sky Building"
}
}
}
{
"message": "invalid date"
}
{
"message": "company not found"
}
Listare companii
GET /v1/companies?id[]={id1}&id[]={id2}&id[]={id3}
Parametrii Query
id[] array of strings required
ID-ul companiilor interogate (CUI / CIF).
Exemplu: „12345” / „RO12345” / „RO 12345”.
Un minim de 1 de ID trebuie specificat.
Un maxim de 100 de ID-uri pot fi interogate.
date string optional
Data pentru care se face interogarea în vederea obținerii identificatorului TVA.
Notă: o companie poate fi / deveni plătitoare / neplătitoare de TVA la o anumită dată. În funcție de această dată, identificatorul TVA poate conține (sau nu) prefixul „RO”.
Are formatul YYYY-MM-DD.
Valoarea implicită este data curentă.
Exemplu: „2025-12-31”.
curl --location 'https://api.companyinfo.ro/v1/companies?id[]={id1}&id={id2}' \
--header 'Authorization: Bearer {my_super_secret_key}'
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
const apiKey = "my_super_secret_key"
companyID1 := "123456"
companyID2 := "987654"
apiURL := "https://api.companyinfo.ro/v1/companies?id[]=" + companyID1 + "&id[]=" + companyID2
req, _ := http.NewRequest(http.MethodGet, apiURL, nil)
req.Header.Add("Authorization", "Bearer " + apiKey)
req.Header.Add("Accept", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println("Companies Info:")
fmt.Println(string(body))
}
import requests
api_key = "my_super_secret_key"
company_id_1 = "123456"
company_id_2 = "987654"
api_url = f"https://api.companyinfo.ro/v1/companies?id[]={company_id_1}&id[]={company_id_2}"
headers = {
"Authorization": f"Bearer {api_key}",
"Accept": "application/json"
}
response = requests.get(api_url, headers=headers)
if response.status_code == 200:
data = response.json()
print("Companies Info:")
print(data)
else:
print(f"API Error ({response.status_code}): {response.text}")
const apiKey = "my_super_secret_key";
const companyId1 = "123456";
const companyId2 = "987654";
const apiUrl = `https://api.companyinfo.ro/v1/companies?id[]=${companyId1}&id[]=${companyId2}`;
fetch(apiUrl, {
method: "GET",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Accept": "application/json"
}
})
.then(response => {
if (!response.ok) {
throw new Error(`API Error (${response.status}): ${response.statusText}`);
}
return response.json();
})
.then(data => {
console.log("Companies Info:", data);
})
.catch(error => {
console.error("An error ocurred:", error.message);
});
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CompanyInfoExample {
public static void main(String[] args) {
String apiKey = "my_super_secret_key";
String companyId1 = "123456";
String companyId2 = "987654";
String apiUrl = "https://api.companyinfo.ro/v1/companies?id[]=" + companyId1 + "&id[]=" + companyId2;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(apiUrl))
.header("Authorization", "Bearer " + apiKey)
.header("Accept", "application/json")
.GET()
.build();
try {
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
int statusCode = response.statusCode();
if (statusCode == 200) {
System.out.println("Companies Info:");
System.out.println(response.body());
} else {
System.out.println("API Error (" + statusCode + "):");
System.out.println(response.body());
}
} catch (Exception e) {
System.out.println("An error occurred:");
e.printStackTrace();
}
}
}
Răspuns
200 OK
API-ul răspunde cu datele companiilor găsite.
Notă: doar companiile găsite sunt returnate, din acest motiv, de exemplu, dacă nicio companie nu este găsita, un array gol este returnat.
{
"companies": array of objects
}
400 Bad Request
API-ul răspunde cu un mesaj de eroare (dacă formatul datei din query param este invalid sau dacă nr. minim/maxim de ID-uri din query param nu este respectat).
{
"message": "string"
}
{
"companies": [
{
"id": 123456,
"name": "FOO S.R.L.",
"tradeRegisterNo": "J2020010000400",
"active": true,
"caen": "9876",
"registrationDate": "2020-02-15",
"phone": "0211234567",
"vat": {
"id": "RO123456",
"cashAccountingEnabled": false,
"date": "2026-01-05"
},
"address": {
"streetName": "Str. Lorem Ipsum",
"streetNo": "10-12",
"block": "11A",
"apt": "20",
"floor": "2",
"city": "Sector 1",
"region": "Bucureşti",
"zipcode": "012345",
"extraDetail": "Sky Building"
}
},
{
"id": 987654,
"name": "BAR S.R.L.",
"tradeRegisterNo": "J2021010000400",
"active": true,
"registrationDate": "2024-07-15",
"vat": {
"id": "987654",
"cashAccountingEnabled": false,
"date": "2026-01-05"
},
"address": {
"streetName": "Str. Lorem",
"streetNo": "5",
"city": "Sector 2",
"region": "Bucureşti"
}
}
]
}
{
"message": "invalid date"
}
Response Headers
API-ul CompanyInfo.ro răspunde cu următoarele header-e custom:
| Nume Header | Descriere |
|---|---|
| X-Companyinfo-Remaining-Credits |
Numărul de credite rămase pentru luna curentă conform abonamentului tău. În cazul în care te apropii de 0, poți declanșa o alertă în sistemul tău, de exemplu. Dacă consumi înainte de vreme creditele abonamentului tău, poți face oricând upgrade tipului de abonament din contul tău. |
| X-Companyinfo-Correlation-Id |
Un identificator unic pentru traseul cererii în sistemul nostru. Îl poți loga în cazul apariției unor probleme neașteptate, de exemplu. |