Documentație APIAPI Documentation
Documentație APIAPI Documentation
Bine ai venit în documentația API SmartShip.ro. Prin API poți estima costuri de livrare la toți curierii, emite AWB-uri, urmări colete, anula expedieri, descărca etichete și consulta decontările de ramburs — direct din aplicația ta. Toate cererile și răspunsurile folosesc JSON.Welcome to the SmartShip.ro API documentation. The API lets you estimate delivery costs across all couriers, create AWBs, track parcels, cancel shipments, download labels and retrieve cash-on-delivery payouts — straight from your application. All requests and responses use JSON.
AutentificareAuthentication
Toate cererile se autentifică cu cheia ta API, trimisă în header-ul X-API-KEY. Găsești cheia în platformă: Contul meu → Setări → API. Tratează cheia ca pe o parolă — nu o publica în cod client-side (browser, aplicații mobile).All requests are authenticated with your API key, sent in the X-API-KEY header. You can find your key in the platform: My account → Settings → API. Treat the key like a password — never expose it in client-side code (browser, mobile apps).
curl -X GET "https://api.smartship.ro/geolocation/counties" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/geolocation/counties");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/geolocation/counties", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/geolocation/counties",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json()Curieri disponibiliAvailable couriers
Tabelul de mai jos e generat automat din platformă și reflectă curierii activi în acest moment, cu regulile fiecăruia. ID-ul din prima coloană se folosește la courier_id (emitere) și curier_preferat (estimare).The table below is generated automatically from the platform and reflects the currently active couriers and their rules. The ID in the first column is used for courier_id (AWB creation) and curier_preferat (cost estimation).
| ID | CurierCourier | Greutate maxMax weight | Max / coletMax / parcel | RambursCOD | PalețiPallets |
|---|---|---|---|---|---|
1 |
Cargus | 200 kg | 31 kg | DaYes | NuNo |
2 |
SameDay | 200 kg | 31 kg | DaYes | NuNo |
5 |
DragonStar | 2000 kg | 800 kg | DaYes | DaYes |
8 |
PTT Express | 800 kg | 31 kg | DaYes | NuNo |
12 |
SameDay EasyBox | 30 kg | 20 kg | DaYes | NuNo |
14 |
PTT Express | 800 kg | 800 kg | DaYes | DaYes |
16 |
SmartShip Delivery | 10000 kg | 10000 kg | DaYes | DaYes |
19 |
FedEx | 200 kg | 68 kg | NuNo | NuNo |
Obiecte comuneCommon objects
Endpoint-urile /cost și /awb/new folosesc aceleași trei obiecte: sender, recipient și content.The /cost and /awb/new endpoints share the same three objects: sender, recipient and content.
Obiectele sender / recipientThe sender / recipient objects
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
name | string | obligatoriurequired | Nume și prenume (sau denumirea firmei). Minim două cuvinte.First and last name (or company name). At least two words. |
address | string | obligatoriurequired | Adresa completă: stradă, număr, detalii.Full street address: street, number, details. |
email | string | opționaloptional | Adresa de email. Destinatarul primește notificări de tracking pe această adresă.Email address. The recipient receives tracking notifications at this address. |
city | integer | obligatoriurequired | ID-ul localității, obținut din /geolocation/cities. Nu se trimite denumirea, ci ID-ul numeric.The locality ID, obtained from /geolocation/cities. Send the numeric ID, not the name. |
phone | string | obligatoriurequired | Număr de telefon valid (10 cifre, format românesc).Valid phone number (10 digits, Romanian format). |
country | string | obligatoriurequired | Codul țării. Pentru livrări interne: RO.Country code. For domestic shipments: RO. |
sector | integer | opționaloptional | Obligatoriu doar pentru București: sectorul, valoare 1–6. Pentru restul localităților trimite 0.Required only for Bucharest: the district (sector), value 1–6. For all other localities send 0. |
Obiectul contentThe content object
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
package_content | string | obligatoriurequired | Descrierea conținutului coletului (apare pe AWB).Description of the parcel contents (printed on the AWB). |
parcels | integer | obligatoriurequired | Numărul de colete. Pentru colete cu dimensiuni diferite folosește parcels_multiple.Number of parcels. For parcels with different dimensions use parcels_multiple. |
weight | number | obligatoriurequired | Greutatea totală în kg. Se facturează maximul dintre greutatea fizică și cea volumetrică (L×l×h / 6000 per colet).Total weight in kg. Billing uses the greater of physical and volumetric weight (L×W×H / 6000 per parcel). |
cash_on_delivery | number | opționaloptional | Valoarea rambursului în RON. 0 = fără ramburs. Atenție: unii curieri (ex. FedEx) nu acceptă ramburs și nu vor apărea la estimare.Cash on delivery amount in RON. 0 = no COD. Note: some couriers (e.g. FedEx) do not support COD and will not be returned in estimates. |
length / width / height | integer | obligatoriurequired | Dimensiunile coletului în cm.Parcel dimensions in cm. |
insurance | number | opționaloptional | Valoarea declarată / asigurată în RON. 0 = fără asigurare.Declared / insured value in RON. 0 = no insurance. |
iban | string | opționaloptional | IBAN-ul pentru virarea rambursului. Obligatoriu când cash_on_delivery > 0. IBAN-ul este validat la fiecare cerere.IBAN for the COD payout. Required when cash_on_delivery > 0. The IBAN is validated on every request. |
open_package | integer | opționaloptional | 1 = destinatarul poate deschide coletul la livrare (unde curierul suportă opțiunea). Implicit 0. Nu se aplică la livrarea în locker (nu există curier prezent care să deschidă coletul): dacă trimiți open_package: 1 împreună cu locker_id, opțiunea este ignorată.1 = the recipient may open the parcel on delivery (where the courier supports it). Default 0. Not available for locker delivery (there is no courier present to open the parcel): if you send open_package: 1 together with locker_id, the option is ignored. |
order_id | string | opționaloptional | ID-ul comenzii din sistemul tău. Poți regăsi ulterior AWB-ul după el, prin /awb/order_id/{order_id}.Your internal order ID. You can later look up the AWB by it via /awb/order_id/{order_id}. |
curier_preferat | integer | opționaloptional | Doar la /cost: dacă e specificat, estimarea se face doar pentru acest curier (vezi tabelul de curieri). 0 sau lipsă = toți curierii.Only for /cost: when set, the estimate is returned only for this courier (see the couriers table). 0 or missing = all couriers. |
parcels_multiple | array | opționaloptional | Colete multiple cu dimensiuni diferite: listă de obiecte {"weight": 2, "length": 30, "width": 20, "height": 10}. Dacă e prezentă, are prioritate față de parcels/weight/dimensiunile simple.Multiple parcels with different dimensions: a list of {"weight": 2, "length": 30, "width": 20, "height": 10} objects. When present, it takes precedence over parcels/weight/the simple dimensions. |
dpd_shipment_note | string | opționaloptional | Doar pentru DPD: notă suplimentară tipărită pe etichetă. Maxim 200 de caractere.DPD only: extra note printed on the label. Max. 200 characters. |
locker_id | integer | opționaloptional | Pentru livrare la SameDay easybox (curier 12): ID-ul lockerului, din /geolocation/easybox. Fără locker_id, easybox nu apare la estimare și nu se poate emite. Când trimiți locker_id, /cost întoarce DOAR varianta la locker (ceilalți curieri livrează la adresă, deci nu sunt opțiuni pentru aceeași trimitere; regula are prioritate și față de curier_preferat). Ca să compari livrare acasă vs la locker, fă două apeluri: unul cu locker_id, unul fără. Dacă locker_id nu e valid, cererea eșuează cu 612 — nu se cotează livrare la adresă în locul lui. Coletul se livrează la locker, nu la adresa destinatarului (max 30 kg).Pe contract propriu (BYOC) easybox nu este un curier separat: emite cu courier_id: 2 (SameDay) și trimite locker_id — livrarea se face automat la locker, iar estimarea din /cost reflectă același tarif.For delivery to a SameDay easybox locker (courier 12): the locker ID, from /geolocation/easybox. Without locker_id, easybox is not returned in estimates and cannot be used for AWB creation. When you send locker_id, /cost returns ONLY the locker option (all other couriers deliver to an address, so they are not options for the same shipment; this rule also overrides curier_preferat). To compare home vs locker delivery, make two calls: one with locker_id, one without. If locker_id is not valid, the request fails with 612 — address delivery is not quoted as a fallback. The parcel is delivered to the locker, not to the recipient's address (max 30 kg).On your own contract (BYOC) easybox is not a separate courier: create the AWB with courier_id: 2 (SameDay) and send locker_id — delivery goes to the locker automatically, and the /cost estimate reflects the same tariff. |
swap | integer | opționaloptional | Doar la /awb/new: 1 = colet la schimb (curierul predă coletul și preia altul înapoi). Costul se dublează (tur + retur). Acceptat la PTT Express (14) și SmartShip Delivery (16); pe contract propriu (BYOC) doar la PTT Express (14). La curierii care nu îl acceptă cererea este respinsă cu eroarea 699. Implicit 0.Only for /awb/new: 1 = exchange parcel (the courier delivers the parcel and collects another one back). The cost is doubled (outbound + return). Accepted by PTT Express (14) and SmartShip Delivery (16); on your own contract (BYOC) only by PTT Express (14). Couriers that do not support it reject the request with error 699. Default 0. |
nocom | integer | opționaloptional | Doar la /awb/new: 1 = NU comanda automat curierul pentru ridicare (valabil la FanCourier, DragonStar și PTT Express, unde ridicarea se comandă automat la emitere). Util dacă ai deja o ridicare zilnică programată. Implicit 0.Only for /awb/new: 1 = do NOT automatically order the courier pickup (applies to FanCourier, DragonStar and PTT Express, where pickup is ordered automatically at creation). Useful if you already have a scheduled daily pickup. Default 0. |
Estimare cost livrareEstimate delivery cost
Returnează costul livrării la toți curierii disponibili pentru datele trimise, sortat crescător după preț. Prețurile includ discountul contului tău și sunt exprimate în RON, cu TVA inclus (câmpul cost). Pentru comoditate întoarcem și cost_fara_tva. Curierii care nu pot onora cererea (reguli de greutate, ramburs, rută) sunt omiși din răspuns.Returns the delivery cost for every courier available for the given data, sorted by price ascending. Prices include your account discount and are expressed in RON, VAT included (the cost field). For convenience we also return cost_fara_tva (net of VAT). Couriers that cannot fulfil the request (weight, COD or route rules) are omitted from the response.
Câmpuri suplimentareAdditional fields
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
show_byoc | integer | opționaloptional | 1 = include în răspuns și costurile pe contractele tale proprii de curierat (BYOC), dacă ai conturi conectate și abonament BYOC activ. Se trimite la nivelul principal al cererii, NU în content. Cu show_byoc: 1 același curier poate apărea de două ori — o dată pe contractul tău, o dată pe cel SmartShip; liniile BYOC se recunosc după own_contract: true. Implicit 0.1 = also include costs from your own courier contracts (BYOC), if you have connected accounts and an active BYOC subscription. Send it at the top level of the request, NOT inside content. With show_byoc: 1 the same courier may appear twice — once on your contract, once on the SmartShip one; BYOC lines are identified by own_contract: true. Default 0. |
Body-ul folosește obiectele comune sender, recipient și content.The body uses the common sender, recipient and content objects.
Coduri de eroareError codes
| 999 | Erori de validare. Câmpul erori conține lista problemelor (nume incomplet, telefon invalid, localitate lipsă etc.).Validation errors. The erori field lists the problems (incomplete name, invalid phone, missing locality, etc.). |
| 201 | IBAN invalid (când cash_on_delivery > 0).Invalid IBAN (when cash_on_delivery > 0). |
| 612 | curier_preferat = 12 (easybox) fără locker_id valid.curier_preferat = 12 (easybox) without a valid locker_id. |
| 301 | Cheie API invalidă.Invalid API key. |
curl -X POST "https://api.smartship.ro/cost" \
-H "X-API-KEY: CHEIA_TA_API" \
-H "Content-Type: application/json" \
-d '{
"show_byoc": 1,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"curier_preferat": 0
}
}'$payload = json_decode('{
"show_byoc": 1,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"curier_preferat": 0
}
}', true);
$ch = curl_init("https://api.smartship.ro/cost");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/cost", {
method: "POST",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
body: JSON.stringify({
"show_byoc": 1,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"curier_preferat": 0
}
}),
});
const data = await response.json();import requests
response = requests.post(
"https://api.smartship.ro/cost",
headers={"X-API-KEY": "CHEIA_TA_API"},
json={
"show_byoc": 1,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"curier_preferat": 0
}
},
)
data = response.json(){
"status": 200,
"costs": [
{
"courier_id": 1,
"courier_name": "Cargus",
"courier_logo": "https://smartship.ro/images/logo_curieri/cargus.png",
"cost": 16.13,
"cost_fara_tva": 13.33,
"delivery_date": "2026-07-10",
"pickup_date": "2026-07-09"
},
{
"courier_id": 19,
"courier_name": "FedEx",
"courier_logo": "https://smartship.ro/images/logo_curieri/fedex_logo.png",
"cost": 23.69,
"cost_fara_tva": 19.58,
"delivery_date": "2026-07-10",
"pickup_date": "2026-07-09"
},
{
"courier_id": 6,
"courier_name": "DPD",
"courier_logo": "https://smartship.ro/images/logo_curieri/dpd.png",
"cost": 16.61,
"cost_fara_tva": 13.73,
"cost_retur": 13.29,
"cost_retur_fara_tva": 10.98,
"own_contract": true,
"cucli_id": 35,
"delivery_date": "2026-07-10",
"pickup_date": "2026-07-09"
}
],
"total_weight_calculated": 2
}
Emitere AWBCreate AWB
Emite un AWB la curierul ales prin courier_id. Costul se calculează exact ca la /cost și se scade din creditul contului (sau intră pe factura la termen). Recomandare: apelează întâi /cost și lasă clientul/sistemul să aleagă curierul din răspuns.Creates an AWB with the courier chosen via courier_id. The cost is calculated exactly like /cost and deducted from your account credit (or added to your invoice if you pay on terms). Recommended flow: call /cost first and pick the courier from the response.
Contract propriu (BYOC): ca să emiți pe contractul tău de curierat, trimite use_own_contract: 1 în cerere. Necesită un cont de curier propriu conectat în platformă („Curieri Proprii") și un abonament BYOC activ; disponibil pentru curierii 1, 2, 3, 5, 6, 14, 34 și 35 (easybox: courier_id: 2 + locker_id). Răspunsul conține own_contract: true și costul real de la curier. Atenție: fără use_own_contract, AWB-ul se emite pe contractul SmartShip cu tariful standard — comutarea nu este automată.Own contract (BYOC): to create the AWB on your own courier contract, send use_own_contract: 1 in the request. Requires your own courier account connected in the platform ("Own Couriers") and an active BYOC subscription; available for couriers 1, 2, 3, 5, 6, 14, 34 and 35 (easybox: courier_id: 2 + locker_id). The response contains own_contract: true and the courier's real cost. Note: without use_own_contract, the AWB is created on the SmartShip contract at standard pricing — the switch is not automatic.
Câmpuri suplimentareAdditional fields
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
courier_id | integer | obligatoriurequired | ID-ul curierului cu care se emite AWB-ul — vezi tabelul de curieri de mai sus.The ID of the courier the AWB is created with — see the couriers table above. |
use_own_contract | integer | opționaloptional | 1 = emite AWB-ul pe contractul tău propriu de curierat (BYOC), nu pe cel SmartShip. Se trimite la nivelul principal al cererii, NU în content. Contractul se alege automat după courier_id + contul tău (nu trimiți cucli_id). Necesită abonament BYOC activ și credențialele curierului adăugate în „Curieri Proprii"; disponibil pentru curierii 1, 2, 3, 5, 6, 14, 34 și 35. Pentru easybox nu există un curier separat aici: folosește courier_id: 2 + locker_id. Dacă nu trimiți acest parametru, AWB-ul se emite pe contractul SmartShip, cu tariful standard — comutarea nu este automată. Implicit 0.1 = create the AWB on your own courier contract (BYOC) instead of the SmartShip one. Send it at the top level of the request, NOT inside content. The contract is selected automatically from courier_id + your account (do not send cucli_id). Requires an active BYOC subscription and the courier credentials added in "Own Couriers"; available for couriers 1, 2, 3, 5, 6, 14, 34 and 35. For easybox there is no separate courier here: use courier_id: 2 + locker_id. If you do not send this parameter, the AWB is created on the SmartShip contract at standard pricing — the switch is not automatic. Default 0. |
Body-ul folosește obiectele comune sender, recipient și content.The body uses the common sender, recipient and content objects.
Coduri de eroareError codes
| 601 | courier_id invalid — nu e în lista curierilor acceptați.Invalid courier_id — not in the accepted courier list. |
| 602 | Curierul nu este disponibil momentan.Courier not available at the moment. |
| 603 | Niciun curier disponibil pentru datele trimise.No courier available for the given data. |
| 605 | Credit insuficient. Răspunsul include creditul disponibil și costul necesar.Not enough credits. The response includes your available credit and the required cost. |
| 606 | Curierul ales nu acceptă ramburs (ex. FedEx).The chosen courier does not support cash on delivery (e.g. FedEx). |
| 806 | easybox: locker_id lipsă sau invalid.easybox: missing or invalid locker_id. |
| 6589 | easybox: lockerul ales nu este disponibil momentan.easybox: the chosen locker is currently unavailable. |
| 6590 | easybox: lockerul ales nu acceptă plată ramburs — alege alt locker sau elimină rambursul.easybox: the chosen locker does not support COD payment — choose another locker or remove cash on delivery. |
| 9855 | Costul nu a putut fi calculat pentru curierul ales (verifică datele / disponibilitatea rutei).The cost could not be calculated for the chosen courier (check the data / route availability). |
| 4004 | BYOC: ai trimis courier_id: 12 (easybox) cu use_own_contract: 1. Pe contract propriu easybox nu e un curier separat — emite cu courier_id: 2 (SameDay) și locker_id.BYOC: you sent courier_id: 12 (easybox) with use_own_contract: 1. On your own contract easybox is not a separate courier — use courier_id: 2 (SameDay) with locker_id. |
| 4050 | BYOC Komy (courier_id: 35): ai trimis cash_on_delivery mai mare decât 0. Komy nu acceptă expedieri cu ramburs — din acest motiv nu apare nici în răspunsul de la /cost atunci când ceri o estimare cu ramburs.BYOC Komy (courier_id: 35): you sent cash_on_delivery greater than 0. Komy does not accept cash-on-delivery shipments — this is also why it is not returned by /cost when you request a quote with COD. |
| 403 | BYOC (use_own_contract: 1): acces respins. Câmpul cod precizează motivul — NO_SUBSCRIPTION (fără abonament BYOC activ), GRACE_PERIOD (plată eșuată, acces suspendat), NOT_STARTED (abonamentul începe la o dată viitoare), EXPIRED (abonament expirat), LIMIT_REACHED (ai atins limita lunară de expedieri din plan).BYOC (use_own_contract: 1): access denied. The cod field states the reason — NO_SUBSCRIPTION (no active BYOC subscription), GRACE_PERIOD (failed payment, access suspended), NOT_STARTED (subscription starts at a future date), EXPIRED (subscription expired), LIMIT_REACHED (monthly shipment limit of your plan reached). |
| 999 | Erori de validare — vezi câmpul erori.Validation errors — see the erori field. |
| 301 | AWB-ul nu s-a emis. Câmpul err conține detaliile de la curier.The AWB was not created. The err field contains the courier's details. |
curl -X POST "https://api.smartship.ro/awb/new" \
-H "X-API-KEY: CHEIA_TA_API" \
-H "Content-Type: application/json" \
-d '{
"courier_id": 19,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"order_id": "CMD-1234"
}
}'$payload = json_decode('{
"courier_id": 19,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"order_id": "CMD-1234"
}
}', true);
$ch = curl_init("https://api.smartship.ro/awb/new");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/awb/new", {
method: "POST",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
body: JSON.stringify({
"courier_id": 19,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"order_id": "CMD-1234"
}
}),
});
const data = await response.json();import requests
response = requests.post(
"https://api.smartship.ro/awb/new",
headers={"X-API-KEY": "CHEIA_TA_API"},
json={
"courier_id": 19,
"recipient": {
"name": "Ion Vasile",
"address": "Str. Memorandumului 28",
"email": "client@email.com",
"city": 256212,
"phone": "0720123456",
"country": "RO",
"sector": 0
},
"sender": {
"name": "Magazinul Meu SRL",
"address": "Str. Polonă 68",
"email": "expeditor@magazin.ro",
"city": 255154,
"phone": "0720333222",
"country": "RO",
"sector": 1
},
"content": {
"package_content": "Piese auto",
"parcels": 1,
"weight": 2,
"cash_on_delivery": 0,
"length": 30,
"width": 20,
"height": 10,
"insurance": 0,
"iban": "",
"open_package": 0,
"order_id": "CMD-1234"
}
},
)
data = response.json(){
"status": 200,
"message": "AWB created.",
"awb": "874156063265",
"courier_id": 19,
"courier_name": "FedEx",
"courier_logo": "https://smartship.ro/images/logo_curieri/fedex_logo.png",
"cost": 23.69,
"cost_fara_tva": 19.58,
"pdf_link": "https://smartship.ro/api/CHEIA_TA_API/print/874156063265",
"tracking_url": "https://smartship.ro/t/aB3xK9mQw2"
}
Status și tracking AWBAWB status & tracking
Returnează statusul curent și istoricul de tracking pentru un AWB emis prin contul tău. Statusurile principale: 0 = emis (neridicat), 1 = în tranzit, 2 = livrat, 5/6 = retur, 10 = anulat.Returns the current status and tracking history for an AWB created through your account. Main statuses: 0 = created (not picked up), 1 = in transit, 2 = delivered, 5/6 = returned, 10 = cancelled.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
awb (path) | string | obligatoriurequired | Numărul AWB-ului.The AWB number. |
Coduri de eroareError codes
| 301 | AWB-ul nu există sau nu aparține contului tău.The AWB does not exist or does not belong to your account. |
curl -X GET "https://api.smartship.ro/awb/status/{awb}" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/awb/status/{awb}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/awb/status/{awb}", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/awb/status/{awb}",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"awb": "874156063265",
"tracking_link": "https://smartship.ro/t/aB3xK9mQw2",
"awb_status": 1,
"awb_status_desc": "In tranzit",
"carrier": "FedEx",
"tracking": [
{
"date": "2026-07-09 14:20:00",
"event_id": "1",
"description": "Colet ridicat de la expeditor",
"locality": "Bucuresti"
},
{
"date": "2026-07-10 08:15:00",
"event_id": "5",
"description": "In curs de livrare",
"locality": "Cluj-Napoca"
}
]
}
Status AWB după order_idAWB status by order_id
Identic cu /awb/status, dar caută AWB-ul după order_id-ul trimis la emitere — util când sistemul tău nu stochează numărul AWB.Same as /awb/status, but looks up the AWB by the order_id sent at creation — useful when your system does not store the AWB number.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
order_id (path) | string | obligatoriurequired | ID-ul comenzii trimis în content.order_id la emitere.The order ID sent in content.order_id at creation. |
curl -X GET "https://api.smartship.ro/awb/order_id/{order_id}" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/awb/order_id/{order_id}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/awb/order_id/{order_id}", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/awb/order_id/{order_id}",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json()Anulare AWBCancel AWB
Anulează un AWB emis prin contul tău. Anularea se face și la curier, iar costul este returnat automat în creditul contului. Un AWB ridicat deja de curier nu mai poate fi anulat.Cancels an AWB created through your account. The cancellation is propagated to the courier and the cost is automatically refunded to your account credit. An AWB already picked up by the courier can no longer be cancelled.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
awb (path) | string | obligatoriurequired | Numărul AWB-ului.The AWB number. |
Coduri de eroareError codes
| 301 | AWB-ul nu există sau nu aparține contului tău.The AWB does not exist or does not belong to your account. |
| 608 | Curierul a refuzat anularea (ex. coletul e deja ridicat). Vezi detaliile din răspuns.The courier rejected the cancellation (e.g. the parcel was already picked up). See the response details. |
| 205 | AWB-ul este deja anulat.The AWB is already cancelled. |
| 206 | Expedierea nu mai poate fi anulată (a fost deja ridicată/livrată).The shipment can no longer be cancelled (already picked up/delivered). |
| 220 | Anularea pentru acest curier nu este disponibilă prin API.Cancellation for this courier is not available via the API. |
curl -X GET "https://api.smartship.ro/awb/cancel/{awb}" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/awb/cancel/{awb}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/awb/cancel/{awb}", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/awb/cancel/{awb}",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"message": "AWB canceled.",
"awb": "874156063265"
}
Descărcare etichetă (PDF)Download label (PDF)
Returnează eticheta AWB-ului în format PDF, gata de printat. Răspunsul este fișierul PDF (nu JSON).Returns the AWB label as a print-ready PDF. The response is the PDF file itself (not JSON).
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
awb (path) | string | obligatoriurequired | Numărul AWB-ului.The AWB number. |
format (path) | string | opționaloptional | A4 (implicit) sau A6 (etichetă compactă, pentru imprimante de etichete).A4 (default) or A6 (compact label, for label printers). |
curl -X GET "https://api.smartship.ro/awb/print/{awb}/{format}" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/awb/print/{awb}/{format}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/awb/print/{awb}/{format}", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/awb/print/{awb}/{format}",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json()Listă județeList counties
Returnează lista județelor, cu ID-urile folosite la căutarea localităților.Returns the list of counties, with the IDs used for locality lookup.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
country (query) | string | opționaloptional | Codul țării. Implicit RO.Country code. Default RO. |
curl -X GET "https://api.smartship.ro/geolocation/counties" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/geolocation/counties");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/geolocation/counties", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/geolocation/counties",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"counties": [
{
"id": 1,
"county": "Alba"
},
{
"id": 2,
"county": "Arad"
}
]
}
Listă localitățiList cities
Returnează localitățile dintr-un județ. ID-ul localității este cel care se trimite în câmpul city la expeditor/destinatar. Recomandare: sincronizează lista o dată pe zi, nu la fiecare cerere.Returns the localities in a county. The locality ID is what you send in the city field for sender/recipient. Recommendation: sync the list once a day, not on every request.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
county (query) | integer | obligatoriurequired | ID-ul județului, din /geolocation/counties.The county ID, from /geolocation/counties. |
loc_sel (query) | string | opționaloptional | Opțional: numele unei localități; dacă e găsită, răspunsul include și city_selected cu ID-ul ei.Optional: a locality name; if found, the response also includes city_selected with its ID. |
curl -X GET "https://api.smartship.ro/geolocation/cities" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/geolocation/cities");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/geolocation/cities", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/geolocation/cities",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"county": {
"id": 13,
"name": "Cluj"
},
"city_selected": null,
"cities": [
{
"id": 256212,
"city": "Cluj-Napoca"
},
{
"id": 256213,
"city": "Apahida"
}
]
}
Listă lockere easyboxList easybox lockers
Returnează lista lockerelor easybox (Sameday) disponibile pentru livrare.Returns the list of easybox (Sameday) lockers available for delivery.
curl -X GET "https://api.smartship.ro/geolocation/easybox" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/geolocation/easybox");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/geolocation/easybox", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/geolocation/easybox",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json()Expeditori salvațiSaved senders
Returnează expeditorii salvați în contul tău (adresele de ridicare). Pentru un singur expeditor: /account/senders/{id} — răspunsul conține obiectul sender în loc de lista senders.Returns the senders saved in your account (pickup addresses). For a single sender: /account/senders/{id} — the response contains a sender object instead of the senders list.
curl -X GET "https://api.smartship.ro/account/senders" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/account/senders");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/account/senders", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/account/senders",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"senders": [
{
"id": 1042,
"nume": "Magazinul Meu SRL",
"telefon": "0720333222",
"email": "expeditor@magazin.ro",
"judet": "Bucuresti",
"localitate": "Bucuresti",
"adresa": "Str. Polonă 68",
"localitate_id": 255154,
"sector": 1
}
]
}
Sold și limită de creditBalance & credit limit
Returnează soldul curent al contului, limita de credit și suma disponibilă pentru emitere. Util înainte de /awb/new, ca să eviți eroarea 605 (credit insuficient).Returns your current account balance, credit limit and the amount available for shipping. Useful before /awb/new to avoid error 605 (not enough credits).
curl -X GET "https://api.smartship.ro/account/balance" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/account/balance");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/account/balance", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/account/balance",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"balance": -657.72,
"credit_limit": 10000,
"payment_on_terms": 1,
"available_for_shipping": 9342.28,
"currency": "RON"
}
Lista expedierilorList shipments
Returnează expedierile contului, paginat, cu filtre — pentru reconciliere și sincronizare în ERP. Statusuri: 0 = emis, 1 = în livrare, 2 = livrat, 5 = refuz primire, 6 = returnat, 10 = anulat.Returns your shipments, paginated, with filters — for ERP reconciliation and sync. Statuses: 0 = created, 1 = in transit, 2 = delivered, 5 = refused, 6 = returned, 10 = cancelled.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
page (query) | integer | opționaloptional | Pagina. Implicit 1.Page number. Default 1. |
per_page (query) | integer | opționaloptional | Rezultate per pagină. Implicit 50, maxim 100.Results per page. Default 50, max 100. |
status (query) | integer | opționaloptional | Filtrează după status (vezi lista de mai sus).Filter by status (see list above). |
date_from / date_to (query) | string | opționaloptional | Interval de date, format YYYY-MM-DD.Date range, YYYY-MM-DD format. |
order_id (query) | string | opționaloptional | Filtrează după ID-ul comenzii tale.Filter by your order ID. |
q (query) | string | opționaloptional | Căutare text (minim 2 caractere) în numărul AWB, numele destinatarului, localitatea destinatarului și ID-ul comenzii.Text search (minimum 2 characters) across AWB number, recipient name, recipient city and order ID. |
courier (query) | integer | opționaloptional | Filtrează după curier — ID-ul numeric returnat în câmpul courier_id.Filter by courier — the numeric ID returned in the courier_id field. |
curl -X GET "https://api.smartship.ro/awbs" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/awbs");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/awbs", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/awbs",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"total_awbs_count": 583,
"current_page": 1,
"per_page": 50,
"total_pages": 12,
"awbs": [
{
"awb": "874156063265",
"date": "2026-07-09 15:20:03",
"courier_id": 19,
"courier_name": "FedEx",
"status": 2,
"status_desc": "Livrat",
"cost": 19.76,
"cash_on_delivery": 0,
"insurance": 0,
"parcels": 1,
"weight": 1,
"recipient_name": "Ion Vasile",
"recipient_county": "Cluj",
"recipient_city": "Cluj-Napoca",
"order_id": "CMD-1234",
"tracking_url": "https://smartship.ro/t/aB3xK9mQw2"
}
]
}
Disponibilitate ridicare FedExFedEx pickup availability
Pentru AWB-urile FedEx: returnează zilele și intervalele orare în care poate fi programată ridicarea coletului de la expeditor. Folosește valorile returnate la POST /pickup/{awb}.For FedEx AWBs: returns the days and time intervals available for scheduling the parcel pickup from the sender. Use the returned values with POST /pickup/{awb}.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
awb (path) | string | obligatoriurequired | Numărul AWB-ului FedEx.The FedEx AWB number. |
curl -X GET "https://api.smartship.ro/pickup/availability/{awb}" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/pickup/availability/{awb}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/pickup/availability/{awb}", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/pickup/availability/{awb}",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"awb": "874156063265",
"options": [
{
"pickup_date": "2026-07-10",
"schedule_day": "SAME_DAY",
"available": true,
"cutoff_time": "16:30:00",
"default_ready_time": "15:00:00",
"ready_time_options": [
"09:00:00",
"12:00:00",
"15:00:00"
],
"latest_time_options": [
"12:00:00",
"15:00:00",
"18:00:00"
]
}
]
}
Programare ridicare FedExSchedule FedEx pickup
Programează ridicarea coletului FedEx de la adresa expeditorului, în ziua și intervalul ales (din /pickup/availability). Maxim o comandă de ridicare per AWB. Expeditorul primește confirmarea pe email.Schedules the FedEx parcel pickup from the sender address, on the chosen day and interval (from /pickup/availability). Max one pickup per AWB. The sender receives an email confirmation.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
awb (path) | string | obligatoriurequired | Numărul AWB-ului FedEx.The FedEx AWB number. |
Câmpuri suplimentareAdditional fields
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
pickup_date | string | obligatoriurequired | Ziua ridicării, format YYYY-MM-DD.Pickup day, YYYY-MM-DD format. |
ready_time | string | obligatoriurequired | Ora de la care coletul e pregătit, format HH:MM.Time from which the parcel is ready, HH:MM format. |
latest_time | string | obligatoriurequired | Ora până la care e disponibil, format HH:MM.Latest available time, HH:MM format. |
Coduri de eroareError codes
| 302 | AWB-ul nu este FedEx.The AWB is not a FedEx shipment. |
| 305 | Există deja o ridicare programată pe acest AWB.A pickup is already scheduled for this AWB. |
| 998 | FedEx nu a confirmat — verifică intervalul cu /pickup/availability.FedEx did not confirm — check the interval against /pickup/availability. |
curl -X POST "https://api.smartship.ro/pickup/{awb}" \
-H "X-API-KEY: CHEIA_TA_API" \
-H "Content-Type: application/json" \
-d '{
"pickup_date": "2026-07-10",
"ready_time": "12:00",
"latest_time": "18:00"
}'$payload = json_decode('{
"pickup_date": "2026-07-10",
"ready_time": "12:00",
"latest_time": "18:00"
}', true);
$ch = curl_init("https://api.smartship.ro/pickup/{awb}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/pickup/{awb}", {
method: "POST",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
body: JSON.stringify({
"pickup_date": "2026-07-10",
"ready_time": "12:00",
"latest_time": "18:00"
}),
});
const data = await response.json();import requests
response = requests.post(
"https://api.smartship.ro/pickup/{awb}",
headers={"X-API-KEY": "CHEIA_TA_API"},
json={
"pickup_date": "2026-07-10",
"ready_time": "12:00",
"latest_time": "18:00"
},
)
data = response.json(){
"status": 200,
"message": "Pickup scheduled.",
"awb": "874156063265",
"pickup_confirmation_code": "ABC123",
"location": "CLJA",
"pickup_date": "2026-07-10",
"ready_time": "12:00",
"latest_time": "18:00"
}
FacturiInvoices
Returnează facturile emise către contul tău, paginat, cu link PDF public — pentru reconciliere contabilă alături de /payouts.Returns the invoices issued to your account, paginated, with a public PDF link — for accounting reconciliation alongside /payouts.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
page (query) | integer | opționaloptional | Pagina. Implicit 1.Page number. Default 1. |
per_page (query) | integer | opționaloptional | Rezultate per pagină. Implicit 50, maxim 100.Results per page. Default 50, max 100. |
curl -X GET "https://api.smartship.ro/invoices" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/invoices");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/invoices", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/invoices",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"total_invoices_count": 22,
"current_page": 1,
"per_page": 50,
"total_pages": 1,
"invoices": [
{
"number": "SS1283958963",
"date": "2026-07-01",
"due_date": "2026-07-15",
"total": 1240.5,
"currency": "RON",
"pdf_link": "https://smartship.ro/factura/xxxxxxxx"
}
]
}
Listă deconturi rambursList COD payouts
Returnează deconturile de ramburs virate către contul tău, paginat. Fiecare decont are un număr, dată, valoare totală și IBAN-ul destinație.Returns the cash-on-delivery payouts transferred to your account, paginated. Each payout has a number, date, total value and destination IBAN.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
page (query) | integer | opționaloptional | Pagina. Implicit 1.Page number. Default 1. |
per_page (query) | integer | opționaloptional | Rezultate per pagină. Implicit 50, maxim 100.Results per page. Default 50, max 100. |
curl -X GET "https://api.smartship.ro/payouts" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/payouts");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/payouts", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/payouts",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"total_payouts_count": 128,
"current_page": 1,
"per_page": 50,
"total_pages": 3,
"payouts": [
{
"number": "PN472375",
"date": "2026-07-08",
"client": "Magazinul Meu SRL",
"valoare": 4820.5,
"iban": "RO49AAAA1B31007593840000",
"awb_count": 37
}
]
}
Detalii decontPayout details
Returnează detaliile unui decont: liniile componente, cu AWB-ul, destinatarul și suma fiecărei încasări incluse.Returns the details of a payout: its component lines with the AWB, recipient and amount of each collected COD included.
ParametriParameters
| CâmpField | Tip | DescriereDescription | |
|---|---|---|---|
number (path) | string | obligatoriurequired | Numărul decontului, din /payouts. Ex: PN472375.The payout number, from /payouts. E.g. PN472375. |
curl -X GET "https://api.smartship.ro/payouts/{number}" \
-H "X-API-KEY: CHEIA_TA_API"$ch = curl_init("https://api.smartship.ro/payouts/{number}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-KEY: CHEIA_TA_API",
"Content-Type: application/json",
],
]);
$response = json_decode(curl_exec($ch), true);const response = await fetch("https://api.smartship.ro/payouts/{number}", {
method: "GET",
headers: {
"X-API-KEY": "CHEIA_TA_API",
"Content-Type": "application/json",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.smartship.ro/payouts/{number}",
headers={"X-API-KEY": "CHEIA_TA_API"},
)
data = response.json(){
"status": 200,
"payout": {
"number": "PN472375",
"date": "2026-07-08",
"iban": "RO49AAAA1B31007593840000",
"value": 4820.5,
"lines": [
{
"date": "2026-07-07",
"number": "PN472375",
"value": 250,
"recipient": "Ion Vasile",
"awb": "874156063265"
}
]
}
}







