For the complete documentation index, see llms.txt. This page is also available as Markdown.

Webhooks

Shipbubble sends a payload to notify your application each time there is a status change on any of your labels (shipments).

The payload for each webhook event will include information about the related API response. Your provided endpoint should be set up to receive an HTTP POST request and must always return a 200 HTTP response within 15 seconds of the request; otherwise, it will be marked as failed.

In the case of a failed webhook, we’ll send a webhook every 5 minutes for the first 5 tries.

VERIFYING WEBHOOKS WITH SHIPBUBBLE SIGNATURE

To prevent your application from a replay attack, we recommend that you verify all webhook events by checking for our unique signature, x-ship-signature, in the request headers of our webhooks.

We hash each webhook message that we send to your URL using HMAC (Hash-based Message Authentication Code) with the SHA512 algorithm and API_KEY as the key of the hash

Events

Shipbubble sends webhook events to notify you of changes in your shipment process.

Here are some of the event types we send; we'll update the list as we release more actions in the future.

Event
Description

shipment.label.created

When a new shipping label is created.

shipment.status.changed

When the status of your shipment changes

shipment.cancelled

When your shipment is cancelled

shipment.cod.remitted

When payment for a cash-on-delivery order has been remitted to your account

shipment.sla.updated

When the delivery eta time is updated, a delay_reason is added the payload as well

shipment.waybill.updated

When a new waybill or tracking code is generated for a shipment

wallet.threshold.alert

When your wallet balance is equal to or below the threshold you've set. It will only go out if a threshold has been set in your dashboard

wallet.auto_topup.succeeded

When your wallet is topped up by any of our auto debit functions

wallet.auto_topup.failed

When we try to top up your wallet and there is a failure, a reason is also present in the payload

Last updated

Was this helpful?