API konta2026-11Podgląd
Endpointy webhooków
Adresy URL, pod które wysyłamy zdarzenia metodą POST. Zdarzenia, ich treść, podpisywanie i ponowienia są opisane w Webhookach.
Endpointy
- POST/v1/webhook_endpointsUtworzenie endpointu
- GET/v1/webhook_endpointsLista endpointów
- GET/v1/webhook_endpoints/{id}Pobranie endpointu
- PATCH/v1/webhook_endpoints/{id}Aktualizacja endpointu
- DELETE/v1/webhook_endpoints/{id}Usunięcie endpointu
- POST/v1/webhook_endpoints/{id}/rotate_secretRotacja sekretu
- POST/v1/webhook_endpoints/{id}/testWysłanie zdarzenia testowego
- GET/v1/webhook_endpoints/{id}/deliveriesLista dostarczeń
- POST/v1/webhook_endpoints/{id}/deliveries/{delivery}/retryPonowne wysłanie dostarczenia
Obiekt Webhook endpoint
idstring- Zaczyna się od we_.
urlstring- Twój adres URL https, który odpowiada 2xx.
descriptionstring|null- Dla ciebie.
events[]array- Typy zdarzeń do wysyłania albo
*dla wszystkich, łącznie z typami dodanymi później: order.created, order.paid, order.bought, order.checked, order.shipped, product.cost_changed, product.out_of_stock, qc.issue. statusstring- enabled lub disabled (przez ciebie albo przez nas po pięciu dniach, w których każde dostarczenie się nie udało; najpierw wysyłamy ci e-mail).
api_versionstring- Wersja, w której zapisywana jest treść zdarzeń; wersja klucza w chwili utworzenia.
secretstring- Sekret podpisu. Tylko w odpowiedziach na utworzenie i rotację.
{
"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"
}Utworzenie endpointu
POST/v1/webhook_endpoints
Zwraca sekret podpisu jeden raz: zapisz go od razu. Do 16 endpointów na konto.
Zakreswebhooks:write
Body
urlstringwymagane- Tylko https.
events[]arraywymagane- Typy zdarzeń lub ["*"].
descriptionstring- Opcjonalne.
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 400 | bad-body | URL nie jest https albo typ zdarzenia jest nieznany. |
| 409 | invalid-state | Konto ma już 16 endpointów. |
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"
}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
}Pobranie endpointu
GET/v1/webhook_endpoints/{id}
Jeden endpoint, bez sekretu.
Zakreswebhooks:write
Parametry ścieżki
idstringwymagane- ID endpointu.
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 404 | not-found | Na tym koncie nie ma takiego endpointu. |
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"
}Aktualizacja endpointu
PATCH/v1/webhook_endpoints/{id}
Zmień jego URL lub zdarzenia albo go wyłącz i włącz. Włączenie wysyła to, co ominęło go w ostatnich 3 dniach.
Zakreswebhooks:write
Parametry ścieżki
idstringwymagane- ID endpointu.
Body
urlstring- Tylko https.
events[]array- Typy zdarzeń lub ["*"].
descriptionstring- Opcjonalne.
statusstring- Opcjonalne. enabled lub disabled.
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 404 | not-found | Na tym koncie nie ma takiego endpointu. |
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"
}Usunięcie endpointu
DELETE/v1/webhook_endpoints/{id}
Od razu zatrzymuje każde dostarczenie do niego, w tym ponowienia.
Zakreswebhooks:write
Parametry ścieżki
idstringwymagane- ID endpointu.
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 404 | not-found | Na tym koncie nie ma takiego endpointu. |
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 }Rotacja sekretu
POST/v1/webhook_endpoints/{id}/rotate_secret
Zwraca nowy sekret. Przez 24 godziny podpisujemy oboma, więc nagłówek webhook-signature zawiera dwa podpisy i weryfikuje dowolny z nich: wdróż nowy, potem pozwól staremu wygasnąć.
Zakreswebhooks:write
Parametry ścieżki
idstringwymagane- ID endpointu.
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 404 | not-found | Na tym koncie nie ma takiego endpointu. |
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"
}Wysłanie zdarzenia testowego
POST/v1/webhook_endpoints/{id}/test
Wysyła przykład jednego typu zdarzenia, podpisany jak każde inne, z test: true. Zwraca, jak odpowiedział twój endpoint.
Zakreswebhooks:write
Parametry ścieżki
idstringwymagane- ID endpointu.
Body
typestringwymagane- Typ zdarzenia.
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 404 | not-found | Na tym koncie nie ma takiego endpointu. |
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
}Lista dostarczeń
GET/v1/webhook_endpoints/{id}/deliveries
Każda próba z ostatnich 30 dni, od najnowszej: co wysłaliśmy, jak odpowiedziałeś i kiedy ponowimy.
Zakreswebhooks:write
Parametry ścieżki
idstringwymagane- ID endpointu.
Parametry zapytania
statusstring- Opcjonalne. succeeded, retrying lub failed.
eventstring- Opcjonalne. ID zdarzenia.
limit, cursor- Pagination
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 404 | not-found | Na tym koncie nie ma takiego endpointu. |
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
}Ponowne wysłanie dostarczenia
POST/v1/webhook_endpoints/{id}/deliveries/{delivery}/retry
Wysyła zdarzenie teraz, z tym samym webhook-id, niezależnie od jego stanu. Zaplanowane już ponowienia trwają dalej.
Zakreswebhooks:write
Parametry ścieżki
idstringwymagane- ID endpointu.
deliverystringwymagane- ID dostarczenia.
Błędy
| Status | Typ | Kiedy |
|---|---|---|
| 404 | not-found | Na tym koncie nie ma takiego endpointu. |
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"
}