API v2

API eficio

Conectează ERP-ul, site-ul propriu sau orice sistem la contul tău eficio printr-o cheie API. Răspunsuri JSON, contextul firmei setat automat din cheie. Mai jos ai toate endpoint-urile, cu parametri și exemple.

Începe în 2 minute Generează o cheie

Autentificare

Fiecare apel are nevoie de cheia ta API (începe cu efc_). O generezi din aplicație: Cont → Setări → tab API. Tratează-o ca pe o parolă.

URL de bază
https://eficio.ro/api/v2
Antet de autentificare

Trimite cheia ca Authorization: Bearer sau, alternativ, ca X-Api-Key.

curl https://eficio.ro/api/v2/account \
  -H "Authorization: Bearer efc_cheia_ta"
Contextul firmei e dedus automat din cheie — nu trebuie să trimiți niciun „company_id". Vezi doar datele firmei tale.

Convenții

Toate răspunsurile sunt JSON (UTF-8). Un rezultat singular vine în plicul { "data": … }, iar o listă vine cu { "data": […], "meta": … }. Trimite corpurile POST/PATCH ca JSON cu antetul Content-Type: application/json.

Răspuns singular
{
  "data": { "id": 12, "name": "Tricou bumbac organic", "price": 99.90 }
}

Paginare

Listele acceptă per_page (1–100, implicit 50) și page. Obiectul meta îți spune unde te afli.

GET https://eficio.ro/api/v2/products?per_page=20&page=2

{
  "data": [ … ],
  "meta": { "current_page": 2, "per_page": 20, "total": 134, "last_page": 7 }
}

Erori

La eroare primești un cod HTTP corespunzător și un plic { "error": …, "message": … }. Câmpul error e un cod stabil pentru cod, iar message e text pentru oameni.

{ "error": "validation_error", "message": "Trimite cel puțin un câmp de actualizat." }
Cod HTTPerrorCând
401missing_tokenLipsește antetul cu cheia.
401invalid_tokenCheie invalidă sau revocată.
403no_userFirma nu are niciun utilizator asociat.
404not_foundResursa nu există.
422validation_errorDate invalide în corpul cererii.

Cont & statistici

GET /account

Profilul firmei tale: nume, CUI, adresă, plan și statusul abonamentului.

GET /stats

Numărători rapide: produse, comenzi pe status, clienți și valoarea comenzilor.

Produse

GET /products

Listă paginată a catalogului.

Parametri
CâmpTipDescriere
search string opț. Caută în nume, SKU, EAN, MPN.
status string opț. Filtru: active | draft | archived.
updated_after date opț. Doar produse modificate după această dată (ISO 8601).
per_page int opț. Elemente pe pagină, 1–100 (implicit 50).
page int opț. Numărul paginii.
POST /products

Creează un produs. „name" e singurul obligatoriu; SKU și slug se generează automat dacă lipsesc.

Parametri
CâmpTipDescriere
name string oblig. Denumirea produsului (max 191).
type string opț. simple | variable (implicit simple).
status string opț. active | draft | archived (implicit draft).
sku string opț. Cod intern unic în firmă.
ean string opț. Cod de bare EAN.
mpn string opț. Cod producător.
brand_id int opț. Brandul (trebuie să existe în firmă).
category_id int opț. Categoria (trebuie să existe în firmă).
price number opț. Preț de vânzare.
sale_price number opț. Preț redus.
cost_price number opț. Preț de achiziție.
vat_rate int opț. Cotă TVA, 0–100.
stock_quantity int opț. Stoc inițial.
track_stock bool opț. Urmărește stocul.
highlights array opț. Listă de bullet-uri (string-uri).
short_description string opț. Descriere scurtă.
long_description string opț. Descriere lungă.
weight_grams int opț. Greutate (g) — plus length_mm, width_mm, height_mm.
meta_title string opț. SEO — plus meta_description.
Exemplu corp
{
  "name": "Tricou bumbac organic",
  "sku": "TRI-BMB-01",
  "price": 99.90,
  "vat_rate": 21,
  "stock_quantity": 50,
  "status": "active"
}
GET /products/{id}

Un produs cu relațiile complete (brand, categorie, variante, imagini, etichete).

PATCH /products/{id}

Actualizează câmpurile produsului (oricare de mai sus, fără „type"). Minim un câmp.

PATCH /products/{id}/price

Actualizează doar prețurile. Trimite cel puțin un câmp.

Parametri
CâmpTipDescriere
price number opț. Preț de vânzare.
sale_price number opț. Preț redus.
cost_price number opț. Preț de achiziție.
vat_rate int opț. Cotă TVA, 0–100.
PATCH /products/prices/bulk

Actualizează prețuri în masă, după id SAU sku. Răspuns: {updated, not_found}.

Exemplu corp
{
  "items": [
    { "id": 12, "price": 89.90 },
    { "sku": "TRI-BMB-01", "sale_price": 79.90 }
  ]
}
PATCH /products/{id}/stock

Setează stocul absolut („quantity") sau aplică o ajustare relativă („delta").

Parametri
CâmpTipDescriere
quantity int opț. Setează stocul la această valoare (≥0).
delta int opț. Ajustare relativă (poate fi negativă).
variant_id int opț. Pentru o variantă anume a produsului.
Exemplu corp
{ "delta": -3 }
PATCH /products/stock/bulk

Stoc în masă. Fiecare element: id|sku, opțional variant_id|variant_sku, plus quantity sau delta.

Exemplu corp
{
  "items": [
    { "sku": "TRI-BMB-01", "quantity": 40 },
    { "id": 18, "delta": 5 }
  ]
}
GET /products/stock/list

Listă cu stocurile tuturor produselor (filtru search, paginare).

Comenzi

GET /orders

Listă paginată de comenzi (paginare per_page/page, filtru search/status).

POST /orders

Creează o comandă. Clientul: „customer_id" existent SAU obiect „customer" (creat după email). Minim o linie în „items".

Parametri
CâmpTipDescriere
customer_id int opț. Client existent al firmei.
customer object opț. Client nou: name (oblig.), email, phone, company_name, cui, reg_com.
items array oblig. Liniile comenzii (vezi mai jos).
items[].product_id int opț. Produsul — obligatoriu dacă lipsește „sku".
items[].sku string opț. Alternativă la product_id.
items[].quantity int oblig. Cantitate (≥1).
items[].variant_id int opț. Obligatoriu dacă produsul are variante.
items[].unit_price number opț. Preț unitar (implicit din produs/variantă).
items[].tax_rate number opț. Cotă TVA pe linie, 0–100.
status string opț. new | confirmed | processing | shipped | cancelled | returned.
payment_status string opț. unpaid | paid | partial | refunded.
currency string opț. Cod ISO din 3 litere.
shipping_total number opț. Cost transport.
discount_total number opț. Discount total.
source_order_id string opț. ID-ul comenzii în sistemul tău extern.
Exemplu corp
{
  "customer": { "name": "Ion Popescu", "email": "ion@exemplu.ro", "phone": "0712345678" },
  "payment_status": "paid",
  "items": [
    { "sku": "TRI-BMB-01", "quantity": 2, "unit_price": 99.90 }
  ]
}
GET /orders/{id}

O comandă cu liniile, totalurile, clientul, AWB-ul și factura.

PATCH /orders/{id}

Actualizează comanda. Schimbarea de „status" trece prin fluxul intern (istoric + notificări). Minim un câmp.

Parametri
CâmpTipDescriere
status string opț. Tranziție de status (vezi valorile de mai sus).
payment_status string opț. Status plată.
payment_method string opț. Metodă de plată.
shipping_method string opț. Metodă de livrare.
note string opț. Notă atașată la schimbarea de status (max 500).
notes string opț. Notele comenzii.
labels array opț. Etichete (string-uri, max 60).
Exemplu corp
{ "status": "confirmed", "note": "Confirmată telefonic" }
POST /orders/{id}/awb

Generează AWB pentru comandă. Idempotent — dacă există deja AWB, îl returnează. Dacă nu ai curier conectat, se emite un AWB local de test.

Parametri
CâmpTipDescriere
courier string opț. fan | sameday | cargus | dpd | gls | dragonstar | urgent | posta | other (implicit fan).
weight number opț. Greutate colet (kg).
parcels int opț. Număr de colete (≥1).
cod_amount number opț. Ramburs (implicit: 0 dacă e plătită, altfel totalul).
Exemplu corp
{ "courier": "sameday", "weight": 1.2, "parcels": 1 }
POST /orders/{id}/invoice

Emite factura comenzii. Fără corp. Idempotent — dacă factura există deja, o returnează (status 200).

Clienți

GET /customers

Listă paginată de clienți (filtru search).

GET /customers/{id}

Un client cu datele complete.

PATCH /customers/{id}

Actualizează datele clientului.

Parametri
CâmpTipDescriere
name string opț. Nume (dacă e trimis, nu poate fi gol).
email string opț. Email.
phone string opț. Telefon.
company_name string opț. Denumire firmă.
cui string opț. CUI.
reg_com string opț. Nr. registrul comerțului.
notes string opț. Note (max 2000).

Etichete

GET /tags

Listă de etichete (filtru search).

POST /tags

Creează o etichetă.

Parametri
CâmpTipDescriere
name string oblig. Denumire (max 60).
color string opț. Culoare (hex sau nume, max 32).
PUT /tags/{id}

Redenumește / recolorează eticheta.

DELETE /tags/{id}

Șterge eticheta.

POST /tags/{id}/attach

Atașează eticheta la produse.

Parametri
CâmpTipDescriere
product_ids array oblig. Listă de id-uri de produse.
Exemplu corp
{ "product_ids": [12, 18, 25] }
POST /tags/{id}/detach

Detașează eticheta de la produse (același corp ca attach).

Categorii

GET /categories

Arborele de categorii al catalogului.

GET /categories/{id}

O categorie.

Retururi

GET /returns

Listă de cereri de retur.

GET /returns/{id}

O cerere de retur cu liniile ei.

Oferte marketplace

GET /offers

Listă de oferte pe marketplace-uri.

GET /offers/{id}

O ofertă.

Canale & conexiuni

GET /marketplaces/list

Marketplace-urile conectate (fără credențiale).

GET /couriers

Curierii configurați.

GET /billing-software

Software-urile de facturare conectate.

GET /websites/list

Magazinele online conectate.

GET /fulfillments/list

Depozitele / fulfillment-urile disponibile.

Date de referință

GET /general/currencies

Lista de valute.

GET /general/languages

Lista de limbi.

GET /general/countries

Lista de țări.