API Account2026-11Anteprima
Endpoint webhook
Gli URL a cui inviamo gli eventi in POST. Eventi, payload, firma e nuovi tentativi sono in Webhook.
Endpoint
- POST/v1/webhook_endpointsCrea un endpoint
- GET/v1/webhook_endpointsElenca gli endpoint
- GET/v1/webhook_endpoints/{id}Recupera un endpoint
- PATCH/v1/webhook_endpoints/{id}Aggiorna un endpoint
- DELETE/v1/webhook_endpoints/{id}Elimina un endpoint
- POST/v1/webhook_endpoints/{id}/rotate_secretRuota il segreto
- POST/v1/webhook_endpoints/{id}/testInvia un evento di test
- GET/v1/webhook_endpoints/{id}/deliveriesElenca le consegne
- POST/v1/webhook_endpoints/{id}/deliveries/{delivery}/retryInvia di nuovo una consegna
L’oggetto Webhook endpoint
idstring- Inizia con we_.
urlstring- Un tuo URL https che risponde 2xx.
descriptionstring|null- Per te.
events[]array- I tipi di evento da inviare, o
*per tutti, inclusi quelli aggiunti in futuro: order.created, order.paid, order.bought, order.checked, order.shipped, product.cost_changed, product.out_of_stock, qc.issue. statusstring- enabled, o disabled (da te, o da noi dopo cinque giorni in cui ogni consegna è fallita; prima ti inviamo un’email).
api_versionstring- La versione in cui sono scritti i payload degli eventi; quella della chiave alla creazione.
secretstring- Il segreto di firma. Solo nelle risposte a creazione e rotazione.
{
"id": "we_3d8s",
"url": "https://acme-goods.com/hooks/ninjabuy",
"description": "Order sync",
"events": ["order.shipped", "product.out_of_stock", "qc.issue"],
"status": "enabled",
"api_version": "2026-11",
"created_at": "2026-11-01T08:00:00Z"
}Crea un endpoint
POST/v1/webhook_endpoints
Restituisce il segreto di firma una sola volta: salvalo subito. Fino a 16 endpoint per account.
Scopewebhooks:write
Corpo
urlstringobbligatorio- Solo https.
events[]arrayobbligatorio- Tipi di evento, o ["*"].
descriptionstring- Facoltativo.
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 400 | bad-body | L’URL non è https, o un tipo di evento è sconosciuto. |
| 409 | invalid-state | L’account ha già 16 endpoint. |
curl -X POST "https://www.ninjabuy.com/api/v1/webhook_endpoints" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"url": "https://acme-goods.com/hooks/ninjabuy",
"events": ["order.shipped", "product.out_of_stock", "qc.issue"],
"description": "Order sync"
}'HTTP/2 201 Created
{
"id": "we_3d8s",
"url": "https://acme-goods.com/hooks/ninjabuy",
"description": "Order sync",
"events": ["order.shipped", "product.out_of_stock", "qc.issue"],
"status": "enabled",
"api_version": "2026-11",
"created_at": "2026-11-01T08:00:00Z",
"secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
}Elenca gli endpoint
GET/v1/webhook_endpoints
Ogni endpoint dell’account, senza segreti.
Scopewebhooks:write
curl "https://www.ninjabuy.com/api/v1/webhook_endpoints" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{
"data": [
{
"id": "we_3d8s",
"url": "https://acme-goods.com/hooks/ninjabuy",
"description": "Order sync",
"events": ["order.shipped", "product.out_of_stock", "qc.issue"],
"status": "enabled",
"api_version": "2026-11",
"created_at": "2026-11-01T08:00:00Z"
}
],
"has_more": false,
"cursor": null
}Recupera un endpoint
GET/v1/webhook_endpoints/{id}
Un endpoint, senza il suo segreto.
Scopewebhooks:write
Parametri di percorso
idstringobbligatorio- L’ID dell’endpoint.
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 404 | not-found | Nessun endpoint simile su questo account. |
curl "https://www.ninjabuy.com/api/v1/webhook_endpoints/we_3d8s" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{
"id": "we_3d8s",
"url": "https://acme-goods.com/hooks/ninjabuy",
"description": "Order sync",
"events": ["order.shipped", "product.out_of_stock", "qc.issue"],
"status": "enabled",
"api_version": "2026-11",
"created_at": "2026-11-01T08:00:00Z"
}Aggiorna un endpoint
PATCH/v1/webhook_endpoints/{id}
Cambia il suo URL o gli eventi, o disattivalo e riattivalo. La riattivazione invia ciò che ha perso negli ultimi 3 giorni.
Scopewebhooks:write
Parametri di percorso
idstringobbligatorio- L’ID dell’endpoint.
Corpo
urlstring- Solo https.
events[]array- Tipi di evento, o ["*"].
descriptionstring- Facoltativo.
statusstring- Facoltativo. enabled o disabled.
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 404 | not-found | Nessun endpoint simile su questo account. |
curl -X PATCH "https://www.ninjabuy.com/api/v1/webhook_endpoints/we_3d8s" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Content-Type: application/json" \
-d '{ "events": ["*"] }'HTTP/2 200 OK
{
"id": "we_3d8s",
"url": "https://acme-goods.com/hooks/ninjabuy",
"description": "Order sync",
"events": ["*"],
"status": "enabled",
"api_version": "2026-11",
"created_at": "2026-11-01T08:00:00Z"
}Elimina un endpoint
DELETE/v1/webhook_endpoints/{id}
Ferma subito ogni consegna verso di esso, nuovi tentativi inclusi.
Scopewebhooks:write
Parametri di percorso
idstringobbligatorio- L’ID dell’endpoint.
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 404 | not-found | Nessun endpoint simile su questo account. |
curl -X DELETE "https://www.ninjabuy.com/api/v1/webhook_endpoints/we_3d8s" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{ "id": "we_3d8s", "deleted": true }Ruota il segreto
POST/v1/webhook_endpoints/{id}/rotate_secret
Restituisce un nuovo segreto. Per 24 ore firmiamo con entrambi, quindi l’intestazione webhook-signature contiene due firme e ognuna è valida: distribuisci il nuovo, poi lascia scadere il vecchio.
Scopewebhooks:write
Parametri di percorso
idstringobbligatorio- L’ID dell’endpoint.
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 404 | not-found | Nessun endpoint simile su questo account. |
curl -X POST "https://www.ninjabuy.com/api/v1/webhook_endpoints/we_3d8s/rotate_secret" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Idempotency-Key: $(uuidgen)"HTTP/2 200 OK
{
"id": "we_3d8s",
"secret": "whsec_C2FVsBQIhrscChlQIMV+b5sSYspob7oD",
"previous_expires_at": "2026-11-05T09:30:00Z"
}Invia un evento di test
POST/v1/webhook_endpoints/{id}/test
Invia un esempio di un tipo di evento, firmato come gli altri, con test: true. Restituisce come ha risposto il tuo endpoint.
Scopewebhooks:write
Parametri di percorso
idstringobbligatorio- L’ID dell’endpoint.
Corpo
typestringobbligatorio- Un tipo di evento.
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 404 | not-found | Nessun endpoint simile su questo account. |
curl -X POST "https://www.ninjabuy.com/api/v1/webhook_endpoints/we_3d8s/test" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{ "type": "qc.issue" }'HTTP/2 200 OK
{
"delivery": "dlv_0k2p",
"event": "evt_test_6c3h",
"response_status": 200,
"duration_ms": 182
}Elenca le consegne
GET/v1/webhook_endpoints/{id}/deliveries
Ogni tentativo degli ultimi 30 giorni, dal più recente: cosa abbiamo inviato, come hai risposto e quando riproviamo.
Scopewebhooks:write
Parametri di percorso
idstringobbligatorio- L’ID dell’endpoint.
Parametri di query
statusstring- Facoltativo. succeeded, retrying o failed.
eventstring- Facoltativo. Un ID di evento.
limit, cursor- Pagination
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 404 | not-found | Nessun endpoint simile su questo account. |
curl "https://www.ninjabuy.com/api/v1/webhook_endpoints/we_3d8s/deliveries?status=retrying" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{
"data": [
{
"id": "dlv_0k3a",
"event": "evt_4m2x",
"type": "order.shipped",
"status": "retrying",
"attempts": 3,
"last_response_status": 502,
"next_attempt_at": "2026-11-03T08:35:00Z"
}
],
"has_more": false,
"cursor": null
}Invia di nuovo una consegna
POST/v1/webhook_endpoints/{id}/deliveries/{delivery}/retry
Invia l’evento ora, con lo stesso webhook-id, qualunque sia il suo stato. I nuovi tentativi già programmati continuano.
Scopewebhooks:write
Parametri di percorso
idstringobbligatorio- L’ID dell’endpoint.
deliverystringobbligatorio- Un ID di consegna.
Errori
| Stato | Tipo | Quando |
|---|---|---|
| 404 | not-found | Nessun endpoint simile su questo account. |
curl -X POST "https://www.ninjabuy.com/api/v1/webhook_endpoints/we_3d8s/deliveries/dlv_0k3a/retry" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Idempotency-Key: $(uuidgen)"HTTP/2 202 Accepted
{
"delivery": "dlv_0k3a",
"status": "retrying",
"next_attempt_at": "2026-11-03T08:01:10Z"
}