Εμφάνιση
Διαχείριση webhook endpoints
Τα webhook endpoints είναι τα URLs του συστήματός σας στα οποία το CourierHub στέλνει ειδοποιήσεις (shipment.created, shipment.updated, shipment.deleted). Εδώ περιγράφονται οι κλήσεις για τη δημιουργία και τη διαχείρισή τους. Για το περιεχόμενο των ειδοποιήσεων, την επαλήθευση υπογραφής και τα retries δείτε τη σελίδα Webhooks.
Μπορείτε να τα διαχειριστείτε και από το περιβάλλον πελάτη: Ρυθμίσεις > Webhooks (απαιτεί το δικαίωμα webhooks του λογαριασμού).
WARNING
Θα πρέπει να συμπεριλάβετε το API Token σας σε κάθε αίτημα ως Bearer Token. Αντικαταστήστε το YOUR_TOKEN με το API Token του καταστήματος (chub_...). Δείτε το Overview.
| Method | URI | Περιγραφή |
|---|---|---|
| GET | /api/v2/webhook-endpoints | Λίστα endpoints (σελιδοποιημένη) |
| POST | /api/v2/webhook-endpoints | Δημιουργία endpoint (επιστρέφει το secret) |
| GET | /api/v2/webhook-endpoints/{id} | Στοιχεία endpoint |
| PATCH | /api/v2/webhook-endpoints/{id} | Ενημέρωση endpoint |
| DELETE | /api/v2/webhook-endpoints/{id} | Διαγραφή endpoint |
| POST | /api/v2/webhook-endpoints/{id}/rotate-secret | Νέο secret |
| GET | /api/v2/webhook-endpoints/{id}/deliveries | Ιστορικό αποστολών (σελιδοποιημένο) |
| POST | /api/v2/webhook-endpoints/{id}/test | Αποστολή δοκιμαστικού ping |
Headers για όλα: Authorization: Bearer YOUR_TOKEN. Στα POST και PATCH με body στέλνετε και Content-Type: application/json.
Κανόνες
- Έως 5 endpoints ανά πελάτη. Η δημιουργία έκτου επιστρέφει
422. - Το
urlπρέπει να είναιhttpsστη θύρα 443 (μην βάζετε άλλη θύρα) και να δείχνει σε δημόσια διεύθυνση. Δεν επιτρέπονται:http, URLs μεuser:password@, διευθύνσεις IP ιδιωτικών δικτύων / loopback (π.χ.localhost,10.x.x.x,192.168.x.x), hostnames χωρίς τελεία ή με αριθμητικό τέλος, και hosts που δεν επιλύονται σε διεύθυνση (DNS). Ο έλεγχος γίνεται στη δημιουργία και ξανά πριν από κάθε αποστολή. - Το
secret(whsec_...) εμφανίζεται μόνο μία φορά: στην απάντηση της δημιουργίας και τηςrotate-secret. Δεν μπορεί να ξαναδιαβαστεί. Αποθηκεύστε το αμέσως στο σύστημα που λαμβάνει τα webhooks. - Το
eventsείναι πίνακας με τιμές απόshipment.created,shipment.updated,shipment.deleted. Μεevents: null(ή χωρίςeventsστη δημιουργία) το endpoint λαμβάνει όλα τα γεγονότα. Ο πίνακας δεν μπορεί να είναι κενός ([]): για όλα τα γεγονότα στείλτεnull. Τοpingδεν συμπεριλαμβάνεται στη λίστα: στέλνεται μόνο κατά τη δοκιμή. - Τα endpoints που ανήκουν σε άλλον λογαριασμό επιστρέφουν
404(όχι403).
Το αντικείμενο endpoint
| Variable Name | Type | Description |
|---|---|---|
id | Integer | Το ID του endpoint. |
url | String | Το URL παραλαβής. |
events | Array ή null | Τα γεγονότα που λαμβάνει. null = όλα. |
is_active | Boolean | Αν είναι ενεργό. Τα ανενεργά endpoints δεν λαμβάνουν γεγονότα (αλλά δέχονται δοκιμή ping). |
description | String ή null | Ελεύθερη περιγραφή (έως 255 χαρακτήρες). |
secret | String | Το secret υπογραφής. Μόνο στις απαντήσεις δημιουργίας και rotate-secret. |
created_at, updated_at | String | ISO 8601, UTC με Z, δείτε το Overview. |
GET /webhook-endpoints
Επιστρέφει τα endpoints σας, ταξινομημένα κατά id, με cursor pagination (per_page, cursor). Το secret δεν περιλαμβάνεται.
Παράδειγμα επιτυχημένης αναζήτησης.
json
{
"data": [
{
"id": 1,
"url": "https://erp.example.gr/hooks/courierhub",
"events": null,
"is_active": true,
"description": "ERP",
"created_at": "2026-10-14T07:00:00Z",
"updated_at": "2026-10-14T07:00:00Z"
}
],
"links": {
"next": null,
"prev": null
},
"meta": {
"per_page": 50,
"next_cursor": null,
"prev_cursor": null
}
}bash
curl https://courierhub.gr/api/v2/webhook-endpoints \
-H "Authorization: Bearer chub_YOUR_API_TOKEN"POST /webhook-endpoints
Δημιουργεί ένα endpoint και επιστρέφει 201 Created με το secret.
Μεταβλητές αποστολής
| Variable Name | Type | Usage | Required |
|---|---|---|---|
url | String | Το URL παραλαβής. https, θύρα 443, δημόσιος host, έως 2048 χαρακτήρες. | * |
events | Array ή null | Τα γεγονότα: shipment.created, shipment.updated, shipment.deleted. Αν λείπει ή είναι null: όλα. Μη κενός πίνακας, χωρίς διπλότυπα. | |
is_active | Boolean | Αν είναι ενεργό. Προεπιλογή true. | |
description | String ή null | Περιγραφή, έως 255 χαρακτήρες. |
Παράδειγμα επιτυχημένης δημιουργίας (HTTP 201).
Το secret εμφανίζεται μόνο εδώ. Αποθηκεύστε το τώρα.
json
{
"data": {
"id": 1,
"url": "https://erp.example.gr/hooks/courierhub",
"events": null,
"is_active": true,
"description": "ERP",
"secret": "whsec_8nQ2vK5tR1yLwZ7pD4mC9sJ6hB3fG0aE2uXcT1oVbNk",
"created_at": "2026-10-14T07:00:00Z",
"updated_at": "2026-10-14T07:00:00Z"
}
}Παράδειγμα σφάλματος (http και μη έγκυρο γεγονός).
json
{
"message": "The given data was invalid.",
"code": "validation_failed",
"errors": {
"url": [
"The url must use https."
],
"events.0": [
"The selected events.0 is invalid."
]
}
}Παράδειγμα σφάλματος (έκτο endpoint).
json
{
"message": "The given data was invalid.",
"code": "validation_failed",
"errors": {
"url": [
"You can register at most 5 webhook endpoints."
]
}
}bash
curl -X POST https://courierhub.gr/api/v2/webhook-endpoints \
-H "Authorization: Bearer chub_YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://erp.example.gr/hooks/courierhub",
"events": ["shipment.created", "shipment.updated"],
"description": "ERP"
}'GET /webhook-endpoints/{id}
Επιστρέφει ένα endpoint (χωρίς secret). Αν δεν υπάρχει ή ανήκει σε άλλον λογαριασμό:
Παράδειγμα σφάλματος.
json
{
"message": "Resource not found.",
"code": "not_found"
}bash
curl https://courierhub.gr/api/v2/webhook-endpoints/1 \
-H "Authorization: Bearer chub_YOUR_API_TOKEN"PATCH /webhook-endpoints/{id}
Ενημερώνει μόνο τα πεδία που στέλνετε. Δέχεται τα ίδια πεδία με τη δημιουργία (url, events, is_active, description), όλα προαιρετικά. Με "events": null το endpoint γίνεται συνδρομητής σε όλα τα γεγονότα. Με "is_active": false το απενεργοποιείτε χωρίς να το διαγράψετε. Το secret δεν αλλάζει (και δεν επιστρέφεται).
Παράδειγμα επιτυχημένης ενημέρωσης.
json
{
"data": {
"id": 1,
"url": "https://erp.example.gr/hooks/courierhub",
"events": [
"shipment.created",
"shipment.updated"
],
"is_active": true,
"description": "ERP παραγωγής",
"created_at": "2026-10-14T07:00:00Z",
"updated_at": "2026-10-15T07:00:00Z"
}
}bash
curl -X PATCH https://courierhub.gr/api/v2/webhook-endpoints/1 \
-H "Authorization: Bearer chub_YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"events": ["shipment.created", "shipment.updated"], "description": "ERP παραγωγής"}'DELETE /webhook-endpoints/{id}
Διαγράφει το endpoint και το ιστορικό αποστολών του. Επιστρέφει 204 No Content χωρίς body. Οι αποστολές που εκκρεμούσαν δεν θα σταλούν.
bash
curl -X DELETE https://courierhub.gr/api/v2/webhook-endpoints/1 \
-H "Authorization: Bearer chub_YOUR_API_TOKEN"POST /webhook-endpoints/{id}/rotate-secret
Δημιουργεί νέο secret και το επιστρέφει (μία φορά).
Το παλιό secret παύει να ισχύει αμέσως
Δεν υπάρχει περίοδος χάριτος ούτε επικάλυψη. Από τη στιγμή της κλήσης όλες οι αποστολές, και οι επαναλήψεις (retries) αποστολών που είχαν δημιουργηθεί πριν, υπογράφονται με το νέο secret. Ενημερώστε το σύστημα που λαμβάνει τα webhooks αμέσως, αλλιώς οι επόμενες αποστολές θα απορρίπτονται από την επαλήθευση υπογραφής.
Παράδειγμα επιτυχημένης κλήσης.
json
{
"data": {
"id": 1,
"url": "https://erp.example.gr/hooks/courierhub",
"events": [
"shipment.created",
"shipment.updated"
],
"is_active": true,
"description": "ERP παραγωγής",
"secret": "whsec_Tz4Lp9Wq2KdXe7Ry1NcBv5MhGs8UaJf3OiQ6YtE0ZmA",
"created_at": "2026-10-14T07:00:00Z",
"updated_at": "2026-10-16T05:00:00Z"
}
}bash
curl -X POST https://courierhub.gr/api/v2/webhook-endpoints/1/rotate-secret \
-H "Authorization: Bearer chub_YOUR_API_TOKEN"POST /webhook-endpoints/{id}/test
Στέλνει αμέσως ένα γεγονός ping στο endpoint, υπογεγραμμένο όπως οι πραγματικές αποστολές, και επιστρέφει την απάντηση που έδωσε το σύστημά σας. Κάνει μία προσπάθεια (χωρίς retries), λειτουργεί και σε ανενεργά endpoints (δοκιμάστε ένα URL πριν το ενεργοποιήσετε) και καταγράφεται στο ιστορικό αποστολών με event_type ping. Δεν έχει body.
Το ίδιο κάνει το κουμπί Αποστολή δοκιμής στο περιβάλλον πελάτη. Δείτε Δοκιμή και ενεργοποίηση.
| Variable Name | Type | Description |
|---|---|---|
delivery_id | Integer | Το ID της αποστολής στο ιστορικό. |
event_id | String | Το UUID του γεγονότος (το ίδιο με την κεφαλίδα CourierHub-Delivery). |
success | Boolean | true αν το σύστημά σας απάντησε με 2xx. |
response_status | Integer ή null | Το HTTP status της απάντησης. null αν δεν υπήρξε απάντηση (σφάλμα σύνδεσης, timeout ή μη επιτρεπτό URL). |
response_time_ms | Integer | Ο χρόνος απάντησης σε milliseconds. |
response_body | String ή null | Το body της απάντησης (έως 2048 bytes) ή το σφάλμα σύνδεσης. |
Παράδειγμα επιτυχημένης δοκιμής.
json
{
"data": {
"delivery_id": 1,
"event_id": "8661d116-e936-4624-b877-3ad18c9e15cf",
"success": true,
"response_status": 200,
"response_time_ms": 28,
"response_body": "OK"
}
}Η κλήση επιστρέφει 200 ακόμα κι αν η δοκιμή αποτύχει: ελέγξτε το success.
bash
curl -X POST https://courierhub.gr/api/v2/webhook-endpoints/1/test \
-H "Authorization: Bearer chub_YOUR_API_TOKEN"GET /webhook-endpoints/{id}/deliveries
Το ιστορικό των αποστολών του endpoint, νεότερες πρώτα, με cursor pagination. Οι αποστολές διατηρούνται για 30 ημέρες.
| Variable Name | Type | Description |
|---|---|---|
id | Integer | Το ID της αποστολής. |
event_id | String | Το UUID του γεγονότος (CourierHub-Delivery). Ίδιο σε όλες τις προσπάθειες. |
event_type | String | shipment.created, shipment.updated, shipment.deleted ή ping. |
order_id | Integer ή null | Το εσωτερικό ID της παραγγελίας (null στο ping). |
shipment_status | String ή null | Η κατάσταση της αποστολής τη στιγμή του γεγονότος. |
status | String | pending (σε αναμονή ή θα επαναληφθεί), succeeded ή failed. |
attempts | Integer | Πόσες προσπάθειες έχουν γίνει. |
response_status | Integer ή null | Το HTTP status της τελευταίας απάντησης. |
response_body | String ή null | Το body της τελευταίας απάντησης (έως 2048 bytes) ή ο λόγος που δεν στάλθηκε. |
payload | Object | Το ακριβές περιεχόμενο που στάλθηκε, δείτε Webhooks. |
delivered_at | String ή null | Πότε παραδόθηκε επιτυχώς (ISO 8601, UTC). |
created_at | String | Πότε δημιουργήθηκε η αποστολή (ISO 8601, UTC). |
Παράδειγμα επιτυχημένης αναζήτησης.
json
{
"data": [
{
"id": 1,
"event_id": "8661d116-e936-4624-b877-3ad18c9e15cf",
"event_type": "ping",
"order_id": null,
"shipment_status": null,
"status": "succeeded",
"attempts": 1,
"response_status": 200,
"response_body": "OK",
"payload": {
"id": "8661d116-e936-4624-b877-3ad18c9e15cf",
"type": "ping",
"created_at": "2026-10-15T07:00:00Z",
"data": {
"endpoint_id": 1,
"message": "Test event from CourierHub."
}
},
"delivered_at": "2026-10-15T07:00:00Z",
"created_at": "2026-10-15T07:00:00Z"
}
],
"links": {
"next": null,
"prev": null
},
"meta": {
"per_page": 2,
"next_cursor": null,
"prev_cursor": null
}
}bash
curl "https://courierhub.gr/api/v2/webhook-endpoints/1/deliveries?per_page=2" \
-H "Authorization: Bearer chub_YOUR_API_TOKEN"