1 € = 5,2627 lei · ECB 15.09.2026 Autentificare Cont gratuit

API CargoRomania pentru integrări

REST JSON pentru TMS-uri, ERP-uri și dispozitive GPS: publici marfă și camioane automat, primești oferte, statusuri, ETA, documente și facturi. Bază: https://www.cargoromania.ro/api/v1.

Autentificare

Creează un token din Profil → API (sau POST /auth/token cu email + parolă). Trimite-l în antet: Authorization: Bearer <token>. Tokenurile pot avea scopes: cargo:read cargo:write offers transports tracking documents invoices alerts webhooks fleet (fără scopes = toate).

curl -X POST https://www.cargoromania.ro/api/v1/auth/token \
  -H 'Content-Type: application/json' \
  -d '{"email":"[email protected]","password":"…","label":"TMS"}'
# → {"ok":true,"token":"…","expires_in_days":365,"company":{…}}

Limite: 600 cereri / minut / token (răspuns 429 + Retry-After). Răspunsurile au forma {"ok":true,…} sau {"ok":false,"error":"…"}. Datele sunt în format ISO (YYYY-MM-DD), monedele EUR/RON, greutățile în kg.

Marfă

MetodăEndpointDescriereScope
GET/cargoListă publică de marfă (filtre: from, to, truck_type, date, page, limit)
GET/cargo/{id}Detalii marfă
POST/cargoPublică marfă (client)cargo:write
POST/cargo/{id}/stopsMulti-stop: înlocuiește opririle (listă ordonată load/unload)cargo:write
POST/cargo/{id}/cancelAnulează marfacargo:write
GET/cargo/{id}/pricingAI Pricing: preț recomandat, mediu, combustibil, taxe, cost transportator, marjăcargo:read
GET/cargo/{id}/matchesBEST MATCH: transportatori recomandați cu scor și motive (proprietar) / scorul tău (transportator)cargo:read
POST/ai/parseText liber → câmpuri structurate + transportatori potriviți
curl -X POST https://www.cargoromania.ro/api/v1/cargo -H 'Authorization: Bearer …' -H 'Content-Type: application/json' -d '{
  "from_city":"București","to_city":"Milano","to_country":"IT","load_date":"2026-09-18",
  "weight_kg":18000,"pallets":33,"truck_type":"prelata","cargo_type":"general",
  "pricing_mode":"fixed","price":1850,"currency":"EUR","description":"Marfă paletizată"
}'
# → {"ok":true,"cargo":{"id":123,"ref":"CR-100123","distance_km":1646,…}}
POST /cargo/123/stops
{"stops":[
  {"type":"load","city":"București","date":"2026-09-03","time_window":"08:00-12:00","pallets":20},
  {"type":"load","city":"Sibiu","pallets":13},
  {"type":"unload","city":"Budapesta","country":"HU","pallets":10},
  {"type":"unload","city":"Milano","country":"IT"}
]}

Oferte, licitație și negociere

MetodăEndpointDescriereScope
POST/cargo/{id}/offersTrimite ofertă (transportator): price, message, truck_id, available_fromoffers
GET/cargo/{id}/offersOfertele primite (client)offers
GET/offersOfertele mele (transportator)offers
POST/offers/{id}/acceptAcceptă oferta → creează cursaoffers
POST/offers/{id}/rejectRespinge (client) / retrage (transportator)offers
POST/offers/{id}/counterContraofertă (ambele părți): price, messageoffers
GET/offers/{id}/negotiationFirul de negociereoffers
POST/negotiations/{id}/acceptAcceptă o propunere → cursa se creează la acel prețoffers

Transporturi, comandă și documente

MetodăEndpointDescriereScope
GET/transportsCursele mele (?active=1 include poziția, km rămași, ETA)transports
GET/transports/{id}Detalii cursă + snapshot tracking + documentetransports
POST/transports/{id}/assignAlocă camion/șofer: truck_id, driver_idtransports
POST/transports/{id}/statusSchimbă statusul: truck_assigned, arrived_load, loading, in_transit, arrived_unload, delivered, pod_uploaded (transportator) · pod_validated, completed, cancelled (client)transports
GET/transports/{id}/order.pdfComanda de transport (PDF)transports
POST/transports/{id}/signSemnează electronic comanda (partea curentă)transports
GET/transports/{id}/documentsDocumentele curseidocuments
POST/transports/{id}/documentsÎncarcă document (multipart: file, type=cmr|pod|aviz|invoice|photo_loading|photo_unloading|other)documents
GET/documents/{id}Descarcă fișieruldocuments
POST/transports/{id}/pod/validateClientul validează POD → se poate facturatransports

GPS tracking

MetodăEndpointDescriereScope
POST/tracking/positionPoziție de la dispozitiv/telematică: token (al camionului), lat, lng, speed, heading — fără Bearer
POST/transports/{id}/positionPoziție pentru o cursă (transportator)tracking
GET/transports/{id}/trackingTraseu, poziție curentă, km rămași, ETA, etape, opriritracking
GET/mapHarta globală: camioane disponibile, curse goale, marfă, camioane în tranzittracking

Tokenul GPS al fiecărui camion se găsește în Camioane. Integrare telematică (Teltonika, Ruptela, orice tracker cu HTTP POST): trimite la fiecare 30–60 s.

curl -X POST https://www.cargoromania.ro/api/v1/tracking/position -H 'Content-Type: application/json' \
  -d '{"token":"<gps_token camion>","lat":45.7489,"lng":21.2087,"speed":78,"heading":270}'
# → {"ok":true,"transport":{"ref":"TR-100001","km_remaining":989,"eta_at":"2026-09-03 22:00:31"}}

Flotă, curse goale și backhaul

MetodăEndpointDescriereScope
GET/trucksCamioanele melefleet
POST/trucksAdaugă camion (plate, type, capacity_kg, pallets, current_city, available_from, route_to_city…)fleet
POST/trucks/{id}Actualizează camion (poziție, disponibilitate, rută preferată)fleet
GET/recommendedMarfă recomandată pentru flota mea (scor + motive)cargo:read
GET/empty-trucksCamioane disponibile publice (?mine=1 doar ale mele)
POST/empty-trucksAnunță o cursă goală: from_city, to_city/to_country, available_from, truck_type, capacity_kg, radius_kmfleet
GET/empty-trucks/{id}/matchesMarfa compatibilă cu cursa goalăcargo:read
GET/backhaul?transport={id}Curse retur directe + lanțuri de 2–3 segmente cu km goi minimicargo:read

Facturi și alerte

MetodăEndpointDescriereScope
POST/transports/{id}/invoiceEmite factura de transport (transportator → client) din POD validatinvoices
GET/invoicesFacturile mele (emise și primite)invoices
GET/invoices/{id}Detalii factură (linii, TVA, total, status)invoices
GET/invoices/{id}.pdfPDF facturăinvoices
POST/invoices/{id}/paidMarchează plătită (emitent): method, refinvoices
GET/alertsAlertele mele de marfăalerts
POST/alertsCreează alertă: name, params{from,to_country,truck_type,weight_min…}, channels[inapp,email,sms,whatsapp]alerts
POST/alerts/{id}/deleteȘterge alertaalerts
GET/notificationsNotificări + număr necitite
GET/realtime/poll?since={id}Polling incremental pentru notificări/mesaje noi

Import în masă

MetodăEndpointDescriereScope
POST/importsMultipart file=CSV/XLSX (+review=1 pentru ciorne) → job asincroncargo:write
GET/imports/{id}Starea importului și rezultatul pe rânduricargo:read
POST/imports/emailText liber (email, mesaj) → marfă ciornă; publish=1 publică directcargo:write

Webhooks

Primești evenimente în timp real la URL-ul tău HTTPS. Creezi din POST /webhooks (url, events) sau din Profil → API; secretul se afișează o singură dată.

EvenimentCând
cargo.publishedo marfă a fost publicată (a ta) / apare marfă potrivită (transportator)
offer.created · offer.accepted · negotiation.counteredofertare și negociere
transport.statusorice schimbare de status a cursei (include status, ETA, km rămași)
tracking.positionpoziție GPS nouă pe cursele tale (max 1/min)
document.uploadedCMR/POD/foto încărcate
invoice.issued · invoice.paidfacturare

Fiecare livrare are antetul X-Signature: sha256=<HMAC-SHA256(body, secret)> și X-Event. Verificare:

// PHP
$sig = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
if (!hash_equals($sig, $_SERVER['HTTP_X_SIGNATURE'] ?? '')) { http_response_code(401); exit; }

// Node
const sig = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');

Răspunde cu 2xx în maximum 10 s; altfel reîncercăm de 3 ori (1, 5, 30 min). După 20 de eșecuri consecutive webhook-ul se dezactivează.

Aplicația șoferului

MetodăEndpointDescriereScope
POST/driver/loginTelefon + PIN → token de șofer (fără Bearer)
GET/driver/tripCursa curentă, opriri, următoarele evenimente permisetransports
POST/driver/trip/{id}/eventevent: arrived_load | loaded | departed | arrived_unload | unloaded (+lat, lng)transports
POST/driver/positionPoziție din telefon: lat, lng, speed, headingtracking

Coduri de eroare

401 token lipsă/invalid · 402 limită de plan · 403 fără acces / scope lipsă · 404 inexistent · 409 duplicat · 422 validare · 429 rate limit · 501 funcție neactivată încă.

Întrebări sau integrări dedicate (ERP, telematică): contact.