Documentație API Webhooks
Primește notificări în timp real când apar evenimente în 3PL Client. Configurează URL-ul endpoint-ului și abonează-te la evenimentele necesare.
Prezentare generală
Webhook-urile trimit cereri HTTP POST către URL-ul configurat când apar evenimente specifice. Fiecare cerere include un payload JSON cu datele evenimentului.
Pentru a folosi webhook-uri, autentifică-te în aplicație, mergi la Administrare → Webhook-uri și creează un webhook nou cu URL-ul endpoint-ului și evenimentele selectate.
Format cerere
- Method: POST
- Content-Type: application/json
- Headers:
X-Webhook-Event– tipul evenimentului (ex: article.created)User-Agent– 3PL-WMS-Webhook/1.0X-Webhook-Signature– (opțional HMAC) pentru verificare payloadAuthorization– (opțional Bearer/Basic) conform configurației
Structură payload
Toate payload-urile includ următoarele chei de nivel superior:
{
"event": "article.created",
"timestamp": "2026-02-12T14:30:00+00:00",
"data": { ... }
}
Tipuri autentificare
| Tip | Descriere |
|---|---|
none |
Fără autentificare |
hmac |
Header X-Webhook-Signature cu HMAC-SHA256 al payload-ului JSON |
bearer |
Authorization: Bearer <token> |
basic |
Autorizare: Basic (nume utilizator:password) |
custom |
Header personalizat (nume și valoare) |
Evenimente disponibile
| Eveniment | Descriere |
|---|---|
article.created |
Articol creat |
article.updated |
Articol actualizat |
sales_order.created |
Comandă vânzare creată |
sales_order.updated |
Comandă vânzare actualizată |
sales_order.status_changed |
Status comandă vânzare schimbat |
purchase_order.created |
Comandă cumpărare creată |
purchase_order.updated |
Comandă cumpărare actualizată |
reception.created |
Recepție creată |
reception.updated |
Recepție actualizată |
reception.partial |
Recepție parțială |
return.created |
Retur creat |
return.updated |
Retur actualizat |
return.status_changed |
Status retur schimbat |
stock.updated |
Stoc actualizat |
stock.low |
Stoc scăzut |
Mai jos vedeți ce date se trimit pentru fiecare eveniment. Folosiți aceste informații pentru a integra endpoint-ul dvs.
Articol creat. Include toate detaliile produsului: cod, descriere, UM, dimensiuni, greutate, unități suplimentare (UM2, UM3), condiții de depozitare, autorizații și atribute primare.
Câmpuri
| Câmp | Tip | Descriere |
|---|---|---|
id |
int |
ID articol |
article_code |
string |
Cod articol |
description |
string |
Descriere |
um3pl |
string |
Unitate măsură 3PL |
um3pl_barcode |
string|null |
Cod EAN / barcode |
um3pl_length_cm |
float|null |
Lungime (cm) |
um3pl_width_cm |
float|null |
Lățime (cm) |
um3pl_height_cm |
float|null |
Înălțime (cm) |
um3pl_net_weight_kg |
float|null |
Greutate netă (kg) |
um3pl_gross_weight_kg |
float|null |
Greutate brută (kg) |
units |
array |
Unități suplimentare (UM2, UM3, factori conversie) |
storage_conditions |
object|null |
Condiții depozitare (temperatură, umiditate) |
authorizations |
array |
Autorizații produs |
primary_attributes |
array |
Atribute primare (lot, serie, expirare) |
client |
object |
Client |
Exemplu payload
{
"event": "article.created",
"timestamp": "2026-02-12T14:30:00+00:00",
"data": {
"id": 1,
"client_3pl_id": 1,
"article_code": "ART-DUMMY-001",
"description": "Produs exemplu (dummy)",
"um3pl": "BUC",
"um3pl_barcode": "5901234123457",
"um3pl_length_cm": 10.5,
"um3pl_width_cm": 8,
"um3pl_height_cm": 5,
"um3pl_net_weight_kg": 0.5,
"um3pl_gross_weight_kg": 0.59999999999999997779553950749686919152736663818359375,
"active": true,
"is_draft": false,
"draft_data": null,
"created_by": null,
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"client": {
"id": 1,
"legal_name": "Client SRL",
"commercial_name": "Client",
"internal_code": "C3PL-001"
},
"units": [
{
"id": 1,
"unit_type": "UM2",
"unit_name": "CUTIE",
"barcode": "5901234123458",
"length_cm": 30,
"width_cm": 20,
"height_cm": 15
},
{
"id": 2,
"unit_type": "UM3",
"unit_name": "PALET",
"barcode": null,
"length_cm": 120,
"width_cm": 80,
"height_cm": 150
}
],
"storage_conditions": {
"id": 1,
"min_temperature": -18,
"max_temperature": -15,
"min_humidity": null,
"max_humidity": null,
"location_type": "INTERIOR"
},
"authorizations": [
{
"id": 1,
"authorization_type_id": 1,
"authorization_name": "ANM",
"description": "Autorizație ANM",
"authorization_type": {
"id": 1,
"code": "STORAGE",
"name": "Depozitare"
}
}
],
"primary_attributes": [
{
"id": 1,
"code": "lot",
"name": "Lot",
"pivot": {
"value": true,
"attribute_data": null
}
}
]
}
}
Articol actualizat. Aceeași structură ca article.created — include toate detaliile: units, storage_conditions, authorizations, primary_attributes.
Câmpuri
| Câmp | Tip | Descriere |
|---|---|---|
id |
int |
ID articol |
article_code |
string |
Cod articol |
description |
string |
Descriere |
units |
array |
Unități suplimentare (UM2, UM3) |
storage_conditions |
object|null |
Condiții depozitare |
authorizations |
array |
Autorizații |
primary_attributes |
array |
Atribute primare |
client |
object |
Client |
Comandă de vânzare (SO) creată. Include datele complete ale comenzii, incluzând linii de comandă cu articole, partener (client final), depozit sursă și client.
Câmpuri
| Câmp | Tip | Descriere |
|---|---|---|
id |
int |
ID-ul unic al comenzii în sistem |
client_3pl_id |
int |
ID-ul clientului căruia îi aparține comanda |
partner_id |
int |
ID-ul partenerului (client final / cumpărător) |
partner_work_point_id |
int|null |
ID-ul punctului de livrare al partenerului (opțional) |
source_warehouse_id |
int |
ID-ul depozitului din care se va livra |
stock_type |
string |
Tip stoc: STOC_OK sau STOC_NOT_OK |
internal_code |
string |
Codul intern al comenzii (ex. SO-2026-001) |
transport_ecc |
bool |
Dacă transportul este prin partener (ex. EuroCopper) |
planned_date_time |
string|null |
Data și ora planificată pentru livrare (ISO 8601) |
max_delivery_date |
string|null |
Data maximă de livrare (Y-m-d) |
status |
string |
Status: CREAT, IN_LUCRU, INCARCAT, LIVRAT, INCHIS, ANULAT |
is_draft |
bool |
Dacă comanda este draft (nefinalizată) |
created_by |
int|null |
ID-ul utilizatorului care a creat comanda |
created_at |
string |
Data creării (ISO 8601) |
updated_at |
string |
Data ultimei actualizări (ISO 8601) |
items |
array |
Linii de comandă; fiecare cu article_id, cantități (um3pl, um2, um3), services și articolul complet |
partner |
object |
Partenerul: id, legal_name, commercial_name, internal_code |
partner_work_point |
object|null |
Punctul de livrare: id, name, partner_id |
source_warehouse |
object |
Depozitul sursă: id, name, code |
client |
object |
Clientul: id, legal_name, commercial_name, internal_code |
Exemplu payload
{
"event": "sales_order.created",
"timestamp": "2026-02-12T14:30:00+00:00",
"data": {
"id": 1,
"client_3pl_id": 1,
"partner_id": 5,
"partner_work_point_id": 12,
"source_warehouse_id": 2,
"stock_type": "STOC_OK",
"internal_code": "SO-2026-001",
"transport_ecc": false,
"planned_date_time": "2026-02-15 10:00:00",
"max_delivery_date": "2026-02-15",
"status": "CREAT",
"is_draft": false,
"created_by": 3,
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"items": [
{
"id": 101,
"sales_order_id": 1,
"article_id": 42,
"um3pl": "BUC",
"quantity_um3pl": 10,
"um2": "CUTIE",
"quantity_um2": 2,
"um3": null,
"quantity_um3": null,
"services": [
"CTC",
"etichetare"
],
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"article": {
"id": 42,
"client_3pl_id": 1,
"article_code": "ART-001",
"description": "Produs exemplu",
"um3pl": "BUC",
"um3pl_barcode": "5901234123457",
"active": true
}
},
{
"id": 102,
"sales_order_id": 1,
"article_id": 43,
"um3pl": "KG",
"quantity_um3pl": 25.5,
"um2": null,
"quantity_um2": null,
"um3": null,
"quantity_um3": null,
"services": null,
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"article": {
"id": 43,
"article_code": "ART-002",
"description": "Alt produs",
"um3pl": "KG"
}
}
],
"partner": {
"id": 5,
"legal_name": "SC EXEMPLU SRL",
"commercial_name": "Exemplu Comercial",
"internal_code": "P-E001"
},
"partner_work_point": {
"id": 12,
"name": "Depozit Nord",
"partner_id": 5
},
"source_warehouse": {
"id": 2,
"name": "Depozit Principal",
"code": "WH-01"
},
"client": {
"id": 1,
"legal_name": "Client SRL",
"commercial_name": "Client",
"internal_code": "C3PL-001"
}
}
}
Comandă de vânzare actualizată. Aceeași structură ca sales_order.created.
Statusul comenzii de vânzare s-a schimbat. Payload include: status (noul status), previous_status (statusul anterior).
Comandă de cumpărare (PO) creată. Include items, partener, client.
Exemplu payload
{
"data": {
"id": 1,
"internal_code": "PO-2026-001",
"items": [],
"partner": [],
"client": []
}
}
Comandă de cumpărare actualizată.
Recepție creată. Include items, PO asociat, depozit, partener.
Exemplu payload
{
"data": {
"id": 1,
"internal_code": "REC-2026-001",
"items": [],
"warehouse": [],
"purchase_order": []
}
}
Recepție actualizată.
Recepție parțială – nu toate cantitățile din PO au fost recepționate.
Retur creat. Include items, SO asociat, depozit, partener.
Exemplu payload
{
"data": {
"id": 1,
"internal_code": "RET-2026-001",
"items": [],
"sales_order": [],
"warehouse": []
}
}
Retur actualizat.
Statusul returului s-a schimbat. Payload include: status (noul status), previous_status (statusul anterior).
Stoc actualizat. Include articol, depozit, cantități total/disponibil/rezervat.
Exemplu payload
{
"data": {
"id": 1,
"article_id": 1,
"warehouse_id": 1,
"total_quantity": 100,
"available_quantity": 100,
"reserved_quantity": 0,
"article": [],
"warehouse": []
}
}
Stoc scăzut sub prag. Include articol, depozit, cantități și procent disponibil.
Exemplu payload
{
"data": {
"id": 1,
"article_id": 1,
"warehouse_id": 1,
"total_quantity": 10,
"available_quantity": 1,
"percentage": 10,
"article": [],
"warehouse": []
}
}
Articol creat. Include toate detaliile produsului: cod, descriere, UM, dimensiuni, greutate, unități suplimentare (UM2, UM3), condiții de depozitare, autorizații și atribute primare.
Câmpuri
| Câmp | Tip | Descriere |
|---|---|---|
id |
int |
ID articol |
article_code |
string |
Cod articol |
description |
string |
Descriere |
um3pl |
string |
Unitate măsură 3PL |
um3pl_barcode |
string|null |
Cod EAN / barcode |
um3pl_length_cm |
float|null |
Lungime (cm) |
um3pl_width_cm |
float|null |
Lățime (cm) |
um3pl_height_cm |
float|null |
Înălțime (cm) |
um3pl_net_weight_kg |
float|null |
Greutate netă (kg) |
um3pl_gross_weight_kg |
float|null |
Greutate brută (kg) |
units |
array |
Unități suplimentare (UM2, UM3, factori conversie) |
storage_conditions |
object|null |
Condiții depozitare (temperatură, umiditate) |
authorizations |
array |
Autorizații produs |
primary_attributes |
array |
Atribute primare (lot, serie, expirare) |
client |
object |
Client |
Exemplu payload
{
"event": "article.created",
"timestamp": "2026-02-12T14:30:00+00:00",
"data": {
"id": 1,
"client_3pl_id": 1,
"article_code": "ART-DUMMY-001",
"description": "Produs exemplu (dummy)",
"um3pl": "BUC",
"um3pl_barcode": "5901234123457",
"um3pl_length_cm": 10.5,
"um3pl_width_cm": 8,
"um3pl_height_cm": 5,
"um3pl_net_weight_kg": 0.5,
"um3pl_gross_weight_kg": 0.59999999999999997779553950749686919152736663818359375,
"active": true,
"is_draft": false,
"draft_data": null,
"created_by": null,
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"client": {
"id": 1,
"legal_name": "Client SRL",
"commercial_name": "Client",
"internal_code": "C3PL-001"
},
"units": [
{
"id": 1,
"unit_type": "UM2",
"unit_name": "CUTIE",
"barcode": "5901234123458",
"length_cm": 30,
"width_cm": 20,
"height_cm": 15
},
{
"id": 2,
"unit_type": "UM3",
"unit_name": "PALET",
"barcode": null,
"length_cm": 120,
"width_cm": 80,
"height_cm": 150
}
],
"storage_conditions": {
"id": 1,
"min_temperature": -18,
"max_temperature": -15,
"min_humidity": null,
"max_humidity": null,
"location_type": "INTERIOR"
},
"authorizations": [
{
"id": 1,
"authorization_type_id": 1,
"authorization_name": "ANM",
"description": "Autorizație ANM",
"authorization_type": {
"id": 1,
"code": "STORAGE",
"name": "Depozitare"
}
}
],
"primary_attributes": [
{
"id": 1,
"code": "lot",
"name": "Lot",
"pivot": {
"value": true,
"attribute_data": null
}
}
]
}
}
Articol actualizat. Aceeași structură ca article.created — include toate detaliile: units, storage_conditions, authorizations, primary_attributes.
Câmpuri
| Câmp | Tip | Descriere |
|---|---|---|
id |
int |
ID articol |
article_code |
string |
Cod articol |
description |
string |
Descriere |
units |
array |
Unități suplimentare (UM2, UM3) |
storage_conditions |
object|null |
Condiții depozitare |
authorizations |
array |
Autorizații |
primary_attributes |
array |
Atribute primare |
client |
object |
Client |
Comandă de vânzare (SO) creată. Include datele complete ale comenzii, incluzând linii de comandă cu articole, partener (client final), depozit sursă și client.
Câmpuri
| Câmp | Tip | Descriere |
|---|---|---|
id |
int |
ID-ul unic al comenzii în sistem |
client_3pl_id |
int |
ID-ul clientului căruia îi aparține comanda |
partner_id |
int |
ID-ul partenerului (client final / cumpărător) |
partner_work_point_id |
int|null |
ID-ul punctului de livrare al partenerului (opțional) |
source_warehouse_id |
int |
ID-ul depozitului din care se va livra |
stock_type |
string |
Tip stoc: STOC_OK sau STOC_NOT_OK |
internal_code |
string |
Codul intern al comenzii (ex. SO-2026-001) |
transport_ecc |
bool |
Dacă transportul este prin partener (ex. EuroCopper) |
planned_date_time |
string|null |
Data și ora planificată pentru livrare (ISO 8601) |
max_delivery_date |
string|null |
Data maximă de livrare (Y-m-d) |
status |
string |
Status: CREAT, IN_LUCRU, INCARCAT, LIVRAT, INCHIS, ANULAT |
is_draft |
bool |
Dacă comanda este draft (nefinalizată) |
created_by |
int|null |
ID-ul utilizatorului care a creat comanda |
created_at |
string |
Data creării (ISO 8601) |
updated_at |
string |
Data ultimei actualizări (ISO 8601) |
items |
array |
Linii de comandă; fiecare cu article_id, cantități (um3pl, um2, um3), services și articolul complet |
partner |
object |
Partenerul: id, legal_name, commercial_name, internal_code |
partner_work_point |
object|null |
Punctul de livrare: id, name, partner_id |
source_warehouse |
object |
Depozitul sursă: id, name, code |
client |
object |
Clientul: id, legal_name, commercial_name, internal_code |
Exemplu payload
{
"event": "sales_order.created",
"timestamp": "2026-02-12T14:30:00+00:00",
"data": {
"id": 1,
"client_3pl_id": 1,
"partner_id": 5,
"partner_work_point_id": 12,
"source_warehouse_id": 2,
"stock_type": "STOC_OK",
"internal_code": "SO-2026-001",
"transport_ecc": false,
"planned_date_time": "2026-02-15 10:00:00",
"max_delivery_date": "2026-02-15",
"status": "CREAT",
"is_draft": false,
"created_by": 3,
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"items": [
{
"id": 101,
"sales_order_id": 1,
"article_id": 42,
"um3pl": "BUC",
"quantity_um3pl": 10,
"um2": "CUTIE",
"quantity_um2": 2,
"um3": null,
"quantity_um3": null,
"services": [
"CTC",
"etichetare"
],
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"article": {
"id": 42,
"client_3pl_id": 1,
"article_code": "ART-001",
"description": "Produs exemplu",
"um3pl": "BUC",
"um3pl_barcode": "5901234123457",
"active": true
}
},
{
"id": 102,
"sales_order_id": 1,
"article_id": 43,
"um3pl": "KG",
"quantity_um3pl": 25.5,
"um2": null,
"quantity_um2": null,
"um3": null,
"quantity_um3": null,
"services": null,
"created_at": "2026-02-12T14:30:00.000000Z",
"updated_at": "2026-02-12T14:30:00.000000Z",
"article": {
"id": 43,
"article_code": "ART-002",
"description": "Alt produs",
"um3pl": "KG"
}
}
],
"partner": {
"id": 5,
"legal_name": "SC EXEMPLU SRL",
"commercial_name": "Exemplu Comercial",
"internal_code": "P-E001"
},
"partner_work_point": {
"id": 12,
"name": "Depozit Nord",
"partner_id": 5
},
"source_warehouse": {
"id": 2,
"name": "Depozit Principal",
"code": "WH-01"
},
"client": {
"id": 1,
"legal_name": "Client SRL",
"commercial_name": "Client",
"internal_code": "C3PL-001"
}
}
}
Comandă de vânzare actualizată. Aceeași structură ca sales_order.created.
Statusul comenzii de vânzare s-a schimbat. Payload include: status (noul status), previous_status (statusul anterior).
Comandă de cumpărare (PO) creată. Include items, partener, client.
Exemplu payload
{
"data": {
"id": 1,
"internal_code": "PO-2026-001",
"items": [],
"partner": [],
"client": []
}
}
Comandă de cumpărare actualizată.
Recepție creată. Include items, PO asociat, depozit, partener.
Exemplu payload
{
"data": {
"id": 1,
"internal_code": "REC-2026-001",
"items": [],
"warehouse": [],
"purchase_order": []
}
}
Recepție actualizată.
Recepție parțială – nu toate cantitățile din PO au fost recepționate.
Retur creat. Include items, SO asociat, depozit, partener.
Exemplu payload
{
"data": {
"id": 1,
"internal_code": "RET-2026-001",
"items": [],
"sales_order": [],
"warehouse": []
}
}
Retur actualizat.
Statusul returului s-a schimbat. Payload include: status (noul status), previous_status (statusul anterior).
Stoc actualizat. Include articol, depozit, cantități total/disponibil/rezervat.
Exemplu payload
{
"data": {
"id": 1,
"article_id": 1,
"warehouse_id": 1,
"total_quantity": 100,
"available_quantity": 100,
"reserved_quantity": 0,
"article": [],
"warehouse": []
}
}
Stoc scăzut sub prag. Include articol, depozit, cantități și procent disponibil.
Exemplu payload
{
"data": {
"id": 1,
"article_id": 1,
"warehouse_id": 1,
"total_quantity": 10,
"available_quantity": 1,
"percentage": 10,
"article": [],
"warehouse": []
}
}
Playground Webhooks
Generează payload-uri exemplu și testează endpoint-ul. Selectează un eveniment, generează payload-ul, apoi opțional trimite o cerere de test la URL-ul tău.
Testează endpoint-ul
Introdu URL-ul HTTPS al endpoint-ului pentru a primi un webhook de test. Limită: 5 cereri/minut.
Răspuns recomandat
Endpoint-ul tău ar trebui să răspundă cu HTTP 2xx (ex. 200 OK) pentru a confirma primirea. Răspunsurile non-2xx pot declanșa retransmiteri.
HTTP/1.1 200 OK
Content-Type: application/json
{"received": true}
Gata să configurezi webhook-uri?
Autentifică-te pentru a crea și gestiona webhook-urile tale.
Autentificare