curl --request GET \
--url https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}const options = {method: 'GET'};
fetch('https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}"
response = requests.get(url)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"event_id": "evt_5d50b401e3e47948235c374ae57b8807",
"event_type": "customer.created",
"entity_type": "customer",
"entity_id": "cust_9ae63038729d2d6b793423bdbc27c19a",
"created_at": "2026-03-09T10:00:00.000Z",
"payload": {
"id": "evt_5d50b401e3e47948235c374ae57b8807",
"type": "customer.created",
"created_at": "2026-03-09T10:00:00.000Z",
"organization_id": "acct_MxIFSNnNbZ1N4jaP",
"data": {
"customer_id": "cust_9ae63038729d2d6b793423bdbc27c19a",
"email": "ada@example.com",
"name": "Ada Okafor",
"phone_number": "+2348012345678",
"metadata": {
"signup_source": "web"
},
"billing_address": {
"line1": "14 Marina Road",
"line2": null,
"city": "Lagos",
"state": "Lagos",
"postal_code": "101241",
"country": "NG"
},
"created_at": "2026-03-09T10:00:00.000Z",
"updated_at": "2026-03-09T10:00:00.000Z"
}
},
"attempts": [
{
"attempt_id": "wha_8e42bc52310ceff8bed0ff7664efd4ed",
"attempt_no": 2,
"status": "succeeded",
"callback_url": "https://api.example.com/webhooks/bachs",
"http_status": 200,
"response_snippet": "{\"received\":true}",
"last_error": null,
"created_at": "2026-03-09T10:02:41.000Z",
"updated_at": "2026-03-09T10:02:41.000Z"
},
{
"attempt_id": "wha_5566022efc62628d4098bb7ea1598837",
"attempt_no": 1,
"status": "failed",
"callback_url": "https://api.example.com/webhooks/bachs",
"http_status": 503,
"response_snippet": "Service Unavailable",
"last_error": "Endpoint returned HTTP 503",
"created_at": "2026-03-09T10:00:02.000Z",
"updated_at": "2026-03-09T10:00:12.000Z"
}
]
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"detail": "API key does not have permission for this operation",
"error_code": "FORBIDDEN"
}{
"detail": "Resource not found",
"error_code": "NOT_FOUND"
}{
"detail": "Rate limit exceeded. Please retry after a few seconds.",
"error_code": "TOO_MANY_REQUESTS"
}Retrieve an endpoint event
Retrieve one event’s full payload and delivery attempts for a specific endpoint. Requires the webhooks:read scope.
curl --request GET \
--url https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}const options = {method: 'GET'};
fetch('https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}"
response = requests.get(url)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bachs.io/v1/webhooks/endpoints/{endpoint_id}/events/{event_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"event_id": "evt_5d50b401e3e47948235c374ae57b8807",
"event_type": "customer.created",
"entity_type": "customer",
"entity_id": "cust_9ae63038729d2d6b793423bdbc27c19a",
"created_at": "2026-03-09T10:00:00.000Z",
"payload": {
"id": "evt_5d50b401e3e47948235c374ae57b8807",
"type": "customer.created",
"created_at": "2026-03-09T10:00:00.000Z",
"organization_id": "acct_MxIFSNnNbZ1N4jaP",
"data": {
"customer_id": "cust_9ae63038729d2d6b793423bdbc27c19a",
"email": "ada@example.com",
"name": "Ada Okafor",
"phone_number": "+2348012345678",
"metadata": {
"signup_source": "web"
},
"billing_address": {
"line1": "14 Marina Road",
"line2": null,
"city": "Lagos",
"state": "Lagos",
"postal_code": "101241",
"country": "NG"
},
"created_at": "2026-03-09T10:00:00.000Z",
"updated_at": "2026-03-09T10:00:00.000Z"
}
},
"attempts": [
{
"attempt_id": "wha_8e42bc52310ceff8bed0ff7664efd4ed",
"attempt_no": 2,
"status": "succeeded",
"callback_url": "https://api.example.com/webhooks/bachs",
"http_status": 200,
"response_snippet": "{\"received\":true}",
"last_error": null,
"created_at": "2026-03-09T10:02:41.000Z",
"updated_at": "2026-03-09T10:02:41.000Z"
},
{
"attempt_id": "wha_5566022efc62628d4098bb7ea1598837",
"attempt_no": 1,
"status": "failed",
"callback_url": "https://api.example.com/webhooks/bachs",
"http_status": 503,
"response_snippet": "Service Unavailable",
"last_error": "Endpoint returned HTTP 503",
"created_at": "2026-03-09T10:00:02.000Z",
"updated_at": "2026-03-09T10:00:12.000Z"
}
]
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"detail": "API key does not have permission for this operation",
"error_code": "FORBIDDEN"
}{
"detail": "Resource not found",
"error_code": "NOT_FOUND"
}{
"detail": "Rate limit exceeded. Please retry after a few seconds.",
"error_code": "TOO_MANY_REQUESTS"
}Path Parameters
The webhook endpoint's ID.
The event's ID.
Response
The event with its payload and attempts.
A webhook event with its full payload and delivery attempts.
Identifies this event everywhere it appears, including as id inside the delivered payload, so you can use it as your deduplication key when you process a redelivery.
"evt_5d50b401e3e47948235c374ae57b8807"
What happened, in resource.action form, for example customer.created or payout.paid. Branch on this before reading payload.
"customer.created"
When the event was recorded, as an ISO 8601 timestamp in UTC. This is the moment the change happened, not the moment it was delivered.
"2026-03-09T10:00:00.000Z"
The exact JSON body sent to your endpoint, byte for byte. It wraps the resource in an envelope of id, type, created_at, organization_id, and data, and adds account when the event came from an account you own. Replay this against your handler to reproduce a delivery.
Every delivery attempt made for this event, newest attempt number first. Read the first entry to see the current state and the rest to see what your endpoint returned on earlier tries.
Show child attributes
Show child attributes
The kind of resource the event is about, for example customer, charge, payout, refund, or checkout. It is null when the event carries no identifiable resource.
"customer"
The identifier of the resource named by entity_type, matching the id you would use to fetch that resource from its own endpoint. It is null when the event carries no identifiable resource.
"cust_9ae63038729d2d6b793423bdbc27c19a"

