Testing webhooks in sandbox
Overview
Although we don’t send webhook events in the sandbox environment, you can still view the events that would have been sent. To do this, you can set up a webhook endpoint just as you would in production, and then query for events that would have been delivered.
Testing webhooks
1. Set Up Webhook Endpoint
To create a webhook endpoint, you can POST
to v0/webhooks
as you would in production with a payload like so:
{
"url": "https://example.com/api/webhooks/bridge_webhook_event_testing",
"event_epoch": "beginning_of_time"
}
ℹ️ Note: You should use a more accurate
event_epoch
as your event epoch in your integration.
In a successful response, you should receive a payload like the following:
{
"id": "wep_tir8iiYS3khF4TqEe7jpKje",
"url": "https://example.com/api/webhooks/bridge_webhook_event_testing",
"status": "disabled",
"public_key": "-----BEGIN PUBLIC KEY-----<KEY>-----END PUBLIC KEY-----\n",
"created_at": "2025-02-11T00:42:08.581Z",
"updated_at": "2025-02-11T00:42:08.806Z"
}
2. Activate the webhook endpoint
To activate the webhook endpoint, you can send a PUT
request to v0/webhooks/{webhook\_id}
just as you would in production. The webhook_id
is the same id
returned from the response of the POST
request from the previous step. To activate the endpoint, you set the status with a payload like so:
{
"status": "active"
}
In a successful response, you should see a payload like the following:
{
"id": "wep_tir8iiYS3khF4TqEe7jpKje",
"url": "https://example.com/api/webhooks/bridge_webhook_event_testing",
"status": "active",
"public_key": "-----BEGIN PUBLIC KEY-----<KEY>-----END PUBLIC KEY-----\n",
"created_at": "2025-02-11T00:42:08.581Z",
"updated_at": "2025-02-11T03:03:30.918Z"
}
3. View Webhook Events
To view events that would have been sent to the webhook endpoint, you can send a GET
request to https://api.sandbox.bridge.xyz/v0/webhooks/{webhook_id}/events
. The webhook_id
is the same as per the previous. No payload is required, but in sandbox you can pass in a category query parameter to specify which exact events you would like in the payload.
For example, to see card account specific events, you can GET https://api.sandbox.bridge.xyz/v0/webhooks/{webhook_id}/events?category=card_account
. The response will have a format like so:
{
"data": [
{
"api_version": "v0",
"event_id": "wh_tn3ZFia7M5541nzLVJDtj8P",
"event_sequence": 2,
"event_category": "card_account",
"event_type": "card_account.updated.status_transitioned",
"event_object_id": "f1843b06-1e80-430e-8e13-51999cf66fb8",
"event_object_status": "active",
"event_object": {
"id": "f1843b06-1e80-430e-8e13-51999cf66fb8",
"status": "active",
"freezes": [],
"balances": {
"hold": {
"amount": "100.0",
"currency": "usdc"
},
"available": {
"amount": "200.0",
"currency": "usdc"
}
},
"customer_id": "7e3de6c3-2848-4fe4-9651-b287f464257e",
"card_details": {
"bin": "1234",
"expiry": "03/30",
"last_4": "0000"
},
"card_image_url": "https://<image_url>",
"funding_instructions": {
"chain": "base",
"address": "0xdeadbeef2usdcbase5fe073f0-67ef-4d9b-906b-a859f22baf56",
"currency": "usdc"
}
},
"event_object_changes": {
"status": [
"frozen",
"active"
],
"freezes": [
[
{
"reason": "lost_or_stolen",
"ending_at": null,
"initiator": "developer",
"created_at": "2025-02-11T03:03:28Z",
"starting_at": null,
"reason_detail": null
}
],
[]
],
"card_image_url": [
"https://<image_url>",
]
},
"event_created_at": "2025-02-11T03:03:37.680Z"
}
]
}
Updated 4 days ago