API reference · Platform & integration
Webhooks GET List deliveries GET /webhook/delivery
Every delivery Bridge attempted to endpoints you own, newest first. Attempts are on the detail view rather than here, so this stays cheap.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Query parameters Name Default endpointReferenceOptional statusOptional limit50 organizationReferenceOptional
Example Response: GenericResponseListWebhookDeliveryResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/delivery?limit=50" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"eventReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"target": "ENDPOINT",
"targetUrl": "string",
"eventType": {
"name": "string"
},
"status": "PENDING",
"attemptCount": 0,
"nextAttemptAt": "2026-09-25T10:00:00Z",
"lastResponseStatus": 0,
"lastFailureKind": "HTTP_ERROR",
"lastError": "string",
"completedAt": "2026-09-25T10:00:00Z",
"replayOf": "string",
"createdAt": "2026-09-25T10:00:00Z",
"attempts": [
{
"attemptNumber": 0,
"attemptedAt": "2026-09-25T10:00:00Z",
"durationMs": 0,
"responseStatus": 0,
"responseSnippet": "string",
"failureKind": "HTTP_ERROR",
"errorMessage": "string",
"signedWithVersions": "1,2",
"requestBodyBytes": 0
}
]
}
],
"description": "Webhook deliveries retrieved"
} Responses Status When 200Webhook deliveries retrieved 403You cannot act for that organization 404Webhook endpoint not found
GET Read one delivery, with every attempt GET /webhook/delivery/{reference}
Each attempt carries your server's own status code, how long it took, and up to 2KB of the response body it returned. That is usually the whole diagnosis.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookDeliveryResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/delivery/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"eventReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"target": "ENDPOINT",
"targetUrl": "string",
"eventType": {
"name": "string"
},
"status": "PENDING",
"attemptCount": 0,
"nextAttemptAt": "2026-09-25T10:00:00Z",
"lastResponseStatus": 0,
"lastFailureKind": "HTTP_ERROR",
"lastError": "string",
"completedAt": "2026-09-25T10:00:00Z",
"replayOf": "string",
"createdAt": "2026-09-25T10:00:00Z",
"attempts": [
{
"attemptNumber": 0,
"attemptedAt": "2026-09-25T10:00:00Z",
"durationMs": 0,
"responseStatus": 0,
"responseSnippet": "string",
"failureKind": "HTTP_ERROR",
"errorMessage": "string",
"signedWithVersions": "1,2",
"requestBodyBytes": 0
}
]
},
"description": "Webhook delivery retrieved"
} Responses Status When 200Webhook delivery retrieved 403You cannot act for that organization 404Webhook delivery not found
POST Replay a delivery POST /webhook/delivery/{reference}/replay
Creates a NEW delivery and never modifies the original - the record of what was attempted and when is not editable. Permitted on a delivery that already succeeded, which is a common recovery move when your own consumer crashed after acknowledging. Replays are signed with your CURRENT secrets, not the ones in force originally.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookReplayResponse
curl Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/delivery/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/replay" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"deliveries": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"eventReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"target": "ENDPOINT",
"targetUrl": "string",
"eventType": {
"name": "string"
},
"status": "PENDING",
"attemptCount": 0,
"nextAttemptAt": "2026-09-25T10:00:00Z",
"lastResponseStatus": 0,
"lastFailureKind": "HTTP_ERROR",
"lastError": "string",
"completedAt": "2026-09-25T10:00:00Z",
"replayOf": "string",
"createdAt": "2026-09-25T10:00:00Z",
"attempts": [
{
"attemptNumber": 0,
"attemptedAt": "2026-09-25T10:00:00Z",
"durationMs": 0,
"responseStatus": 0,
"responseSnippet": "string",
"failureKind": "HTTP_ERROR",
"errorMessage": "string",
"signedWithVersions": "1,2",
"requestBodyBytes": 0
}
]
}
]
},
"description": "Webhook delivery replayed"
} Responses Status When 200Webhook delivery replayed 403You cannot act for that organization 404Webhook delivery not found 409That endpoint has been deleted or disabled and cannot receive a replay
GET List webhook endpoints GET /webhook/endpoint
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Query parameters Name Default statusOptional organizationReferenceOptional
Example Response: GenericResponseListWebhookEndpointResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/endpoint" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"url": "string",
"transport": "HTTP",
"label": {
"name": "string"
},
"description": "string",
"ownerType": "USER",
"ownerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "ACTIVE",
"statusReason": "string",
"statusChangedAt": "2026-09-25T10:00:00Z",
"deliveryMode": "UNORDERED",
"apiVersion": {
"name": "string"
},
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
],
"headers": [
{
"name": {
"name": "string"
},
"maskedValue": "led\u2026ync"
}
],
"consecutiveFailures": 0,
"lastSuccessAt": "2026-09-25T10:00:00Z",
"lastFailureAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
}
],
"description": "Webhook endpoints retrieved"
} Responses Status When 200Webhook endpoints retrieved 403You cannot act for that organization
POST Register a webhook endpoint POST /webhook/endpoint
Registers a destination and issues its first signing secret. **The secret is returned in this response and nowhere else, ever** - store it before you close the response. Every delivery to this endpoint is signed with it, and verifying that signature is the only thing that distinguishes a Bridge event from an unauthenticated POST from the internet.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live Content-Typeapplication/json
Query parameters Name Default organizationReferenceOptional
Example Request body: CreateWebhookEndpointRequest · Response: GenericResponseCreateWebhookEndpointResponse
curl Request Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/endpoint" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.merchant.example.com/bridge/events",
"transport": "HTTP",
"label": "Production ledger sync",
"description": "string",
"deliveryMode": "UNORDERED",
"eventTypes": [
{
"name": "string"
}
],
"headers": [
{
"name": "X-Merchant-Route",
"value": "string"
}
]
}' Copy {
"url": "https://api.merchant.example.com/bridge/events",
"transport": "HTTP",
"label": "Production ledger sync",
"description": "string",
"deliveryMode": "UNORDERED",
"eventTypes": [
{
"name": "string"
}
],
"headers": [
{
"name": "X-Merchant-Route",
"value": "string"
}
]
} Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"url": "string",
"transport": "HTTP",
"label": {
"name": "string"
},
"description": "string",
"ownerType": "USER",
"ownerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "ACTIVE",
"deliveryMode": "UNORDERED",
"apiVersion": {
"name": "string"
},
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
],
"headers": [
{
"name": {
"name": "string"
},
"maskedValue": "led\u2026ync"
}
],
"secret": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"version": 0,
"prefix": "string",
"status": "ACTIVE",
"value": "whsec_7f3a91c25d84e6b0a7c1f4e83b96d5021c7a4e9f6b2d8c3015a7e94f2b6d8c31",
"createdAt": "2026-09-25T10:00:00Z",
"retiring": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"version": 2,
"prefix": "whsec_7f",
"status": "ACTIVE",
"retiresAt": "2026-09-25T10:00:00Z",
"revokedAt": "2026-09-25T10:00:00Z",
"lastUsedAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
}
},
"createdAt": "2026-09-25T10:00:00Z"
},
"description": "Webhook endpoint registered"
} Responses Status When 200Webhook endpoint registered 400URL malformed or not reachable from Bridge; header name reserved; unknown event type; unsupported transport 403You cannot act for that organization 409You already have an endpoint at that URL; endpoint limit reached
DELETE Delete a webhook endpoint DELETE /webhook/endpoint/{reference}
Stops delivery permanently. The endpoint's history is retained so that what it was sent stays answerable, and its URL stays reserved to you.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseVoid
curl Response
Copy curl -X DELETE "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": "string",
"description": "Webhook endpoint deleted"
} Responses Status When 200Webhook endpoint deleted 403You cannot act for that organization 404Webhook endpoint not found
GET Read one webhook endpoint GET /webhook/endpoint/{reference}
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookEndpointResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"url": "string",
"transport": "HTTP",
"label": {
"name": "string"
},
"description": "string",
"ownerType": "USER",
"ownerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "ACTIVE",
"statusReason": "string",
"statusChangedAt": "2026-09-25T10:00:00Z",
"deliveryMode": "UNORDERED",
"apiVersion": {
"name": "string"
},
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
],
"headers": [
{
"name": {
"name": "string"
},
"maskedValue": "led\u2026ync"
}
],
"consecutiveFailures": 0,
"lastSuccessAt": "2026-09-25T10:00:00Z",
"lastFailureAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
},
"description": "Webhook endpoint retrieved"
} Responses Status When 200Webhook endpoint retrieved 403You cannot act for that organization 404Webhook endpoint not found
PUT Update a webhook endpoint PUT /webhook/endpoint/{reference}
A partial update: omitted fields are left alone, and a supplied header list replaces the whole set. **Changing the URL does not rotate the secret** - the two are separate decisions, and coupling them would mean a routine path change silently breaks your signature verification. It does re-check the destination and reset the failure counter.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live Content-Typeapplication/json
Path parameters Query parameters Name Default organizationReferenceOptional
Example Request body: UpdateWebhookEndpointRequest · Response: GenericResponseWebhookEndpointResponse
curl Request Response
Copy curl -X PUT "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"url": "string",
"label": {
"name": "string"
},
"description": "string",
"deliveryMode": "UNORDERED",
"headers": [
{
"name": "X-Merchant-Route",
"value": "string"
}
]
}' Copy {
"url": "string",
"label": {
"name": "string"
},
"description": "string",
"deliveryMode": "UNORDERED",
"headers": [
{
"name": "X-Merchant-Route",
"value": "string"
}
]
} Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"url": "string",
"transport": "HTTP",
"label": {
"name": "string"
},
"description": "string",
"ownerType": "USER",
"ownerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "ACTIVE",
"statusReason": "string",
"statusChangedAt": "2026-09-25T10:00:00Z",
"deliveryMode": "UNORDERED",
"apiVersion": {
"name": "string"
},
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
],
"headers": [
{
"name": {
"name": "string"
},
"maskedValue": "led\u2026ync"
}
],
"consecutiveFailures": 0,
"lastSuccessAt": "2026-09-25T10:00:00Z",
"lastFailureAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
},
"description": "Webhook endpoint updated"
} Responses Status When 200Webhook endpoint updated 400URL malformed or not reachable from Bridge 403You cannot act for that organization 404Webhook endpoint not found 409You already have an endpoint at that URL; this endpoint has been deleted
POST Pause a webhook endpoint POST /webhook/endpoint/{reference}/pause
Stops delivery without losing anything: events still fan out and the backlog accrues, so resuming replays what was missed rather than starting from empty. Use this during a deploy.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default reasonOptional organizationReferenceOptional
Example Response: GenericResponseWebhookEndpointResponse
curl Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/pause" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"url": "string",
"transport": "HTTP",
"label": {
"name": "string"
},
"description": "string",
"ownerType": "USER",
"ownerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "ACTIVE",
"statusReason": "string",
"statusChangedAt": "2026-09-25T10:00:00Z",
"deliveryMode": "UNORDERED",
"apiVersion": {
"name": "string"
},
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
],
"headers": [
{
"name": {
"name": "string"
},
"maskedValue": "led\u2026ync"
}
],
"consecutiveFailures": 0,
"lastSuccessAt": "2026-09-25T10:00:00Z",
"lastFailureAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
},
"description": "Webhook endpoint paused"
} Responses Status When 200Webhook endpoint paused 403You cannot act for that organization 404Webhook endpoint not found 409This endpoint cannot be paused
POST Resume a webhook endpoint POST /webhook/endpoint/{reference}/resume
Restarts delivery and replays the backlog, resetting the failure counter. An endpoint disabled by an operator cannot be resumed this way.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookEndpointResponse
curl Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/resume" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"url": "string",
"transport": "HTTP",
"label": {
"name": "string"
},
"description": "string",
"ownerType": "USER",
"ownerReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "ACTIVE",
"statusReason": "string",
"statusChangedAt": "2026-09-25T10:00:00Z",
"deliveryMode": "UNORDERED",
"apiVersion": {
"name": "string"
},
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
],
"headers": [
{
"name": {
"name": "string"
},
"maskedValue": "led\u2026ync"
}
],
"consecutiveFailures": 0,
"lastSuccessAt": "2026-09-25T10:00:00Z",
"lastFailureAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
},
"description": "Webhook endpoint resumed"
} Responses Status When 200Webhook endpoint resumed 403You cannot act for that organization 404Webhook endpoint not found 409This endpoint cannot be resumed
GET List an endpoint's signing secrets GET /webhook/endpoint/{reference}/secret
Metadata only - version, prefix, status and dates. The values are not retrievable.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseListWebhookSecretResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/secret" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"version": 2,
"prefix": "whsec_7f",
"status": "ACTIVE",
"retiresAt": "2026-09-25T10:00:00Z",
"revokedAt": "2026-09-25T10:00:00Z",
"lastUsedAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
}
],
"description": "Webhook signing secrets retrieved"
} Responses Status When 200Webhook signing secrets retrieved 403You cannot act for that organization 404Webhook endpoint not found
POST Rotate an endpoint's signing secret POST /webhook/endpoint/{reference}/secret
Issues a new secret and puts the existing one into a retirement window. **During the window every delivery carries a signature under each secret**, so you can deploy the new one at your own pace and roll back without dropping an event - your verification code should accept a match against any v1= value in the header. The new secret is returned here and nowhere else, ever.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live Content-Typeapplication/json
Path parameters Query parameters Name Default organizationReferenceOptional
Example Request body: RotateWebhookSecretRequest · Response: GenericResponseWebhookSecretRevealResponse
curl Request Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/secret" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"retireExistingAfterHours": 24
}' Copy {
"retireExistingAfterHours": 24
} Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"version": 0,
"prefix": "string",
"status": "ACTIVE",
"value": "whsec_7f3a91c25d84e6b0a7c1f4e83b96d5021c7a4e9f6b2d8c3015a7e94f2b6d8c31",
"createdAt": "2026-09-25T10:00:00Z",
"retiring": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"version": 2,
"prefix": "whsec_7f",
"status": "ACTIVE",
"retiresAt": "2026-09-25T10:00:00Z",
"revokedAt": "2026-09-25T10:00:00Z",
"lastUsedAt": "2026-09-25T10:00:00Z",
"createdAt": "2026-09-25T10:00:00Z"
}
},
"description": "Webhook signing secret rotated"
} Responses Status When 200Webhook signing secret rotated 403You cannot act for that organization 404Webhook endpoint not found 409A rotation is already in progress; this endpoint has been deleted
DELETE Retire a signing secret immediately DELETE /webhook/endpoint/{reference}/secret/{secretReference}
Ends the overlap early - for a secret you believe has leaked. Refused if it is the last one that can sign, because an endpoint that cannot sign cannot deliver.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Name referencesecretReference
Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseVoid
curl Response
Copy curl -X DELETE "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/secret/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": "string",
"description": "Webhook signing secret revoked"
} Responses Status When 200Webhook signing secret revoked 403You cannot act for that organization 404Webhook endpoint or signing secret not found 409That is the endpoint's last signing secret
GET List an endpoint's subscriptions GET /webhook/endpoint/{reference}/subscription
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookSubscriptionSetResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/subscription" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
]
},
"description": "Webhook subscriptions retrieved"
} Responses Status When 200Webhook subscriptions retrieved 403You cannot act for that organization 404Webhook endpoint not found
POST Add one subscription POST /webhook/endpoint/{reference}/subscription
Leaves the rest alone. Deliberately not idempotent - a duplicate usually means two places in your configuration disagree about what this endpoint is for.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live Content-Typeapplication/json
Path parameters Query parameters Name Default organizationReferenceOptional
Example Request body: AddWebhookSubscriptionRequest · Response: GenericResponseWebhookSubscriptionSetResponse
curl Request Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/subscription" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"eventType": {
"name": "string"
}
}' Copy {
"eventType": {
"name": "string"
}
} Copy {
"data": {
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
]
},
"description": "Webhook subscription added"
} Responses Status When 200Webhook subscription added 400Unknown event type; a pattern that matches nothing; event type retired 403You cannot act for that organization; that event type needs a permission you do not hold 404Webhook endpoint not found 409Already subscribed; subscription limit reached
PUT Replace an endpoint's subscriptions PUT /webhook/endpoint/{reference}/subscription
A genuine replace, which is the shape your infrastructure-as-code wants: types present become active, types absent are removed, and running it twice changes nothing the second time. Accepts exact names, resource.* patterns and *; the response expands each pattern to what it matches today, so you can see what you just subscribed to without reading a changelog.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live Content-Typeapplication/json
Path parameters Query parameters Name Default organizationReferenceOptional
Example Request body: WebhookSubscriptionRequest · Response: GenericResponseWebhookSubscriptionSetResponse
curl Request Response
Copy curl -X PUT "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/subscription" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"eventTypes": [
{
"name": "string"
}
]
}' Copy {
"eventTypes": [
{
"name": "string"
}
]
} Copy {
"data": {
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
]
},
"description": "Webhook subscriptions replaced"
} Responses Status When 200Webhook subscriptions replaced 400Unknown event type; a pattern that matches nothing; event type retired 403You cannot act for that organization; that event type needs a permission you do not hold 404Webhook endpoint not found 409Subscription limit reached
DELETE Remove one subscription DELETE /webhook/endpoint/{reference}/subscription/{eventType}
Removes exactly the entry named. Removing an event type does not remove a pattern that happens to match it, and vice versa - they are separate entries.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookSubscriptionSetResponse
curl Response
Copy curl -X DELETE "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/subscription/value" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"subscriptions": [
{
"eventType": {
"name": "string"
},
"pattern": true,
"currentlyMatches": [
{
"name": "string"
}
]
}
]
},
"description": "Webhook subscription removed"
} Responses Status When 200Webhook subscription removed 403You cannot act for that organization 404Webhook endpoint not found; not subscribed to that event type
POST Send a test event POST /webhook/endpoint/{reference}/test
A real delivery through the real pipeline with a real signature, so whatever your receiver does with it is exactly what it will do with a transfer.completed. Poll GET /webhook/delivery/{reference} for the result - including your own response body if it failed.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookDeliveryResponse
curl Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/endpoint/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/test" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"eventReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"target": "ENDPOINT",
"targetUrl": "string",
"eventType": {
"name": "string"
},
"status": "PENDING",
"attemptCount": 0,
"nextAttemptAt": "2026-09-25T10:00:00Z",
"lastResponseStatus": 0,
"lastFailureKind": "HTTP_ERROR",
"lastError": "string",
"completedAt": "2026-09-25T10:00:00Z",
"replayOf": "string",
"createdAt": "2026-09-25T10:00:00Z",
"attempts": [
{
"attemptNumber": 0,
"attemptedAt": "2026-09-25T10:00:00Z",
"durationMs": 0,
"responseStatus": 0,
"responseSnippet": "string",
"failureKind": "HTTP_ERROR",
"errorMessage": "string",
"signedWithVersions": "1,2",
"requestBodyBytes": 0
}
]
},
"description": "Test delivery queued"
} Responses Status When 200Test delivery queued 403You cannot act for that organization 404Webhook endpoint not found 409That endpoint cannot receive a test
GET List the webhook event types GET /webhook/event-type
Every event type this tenant can deliver, with what it means and what subscribing to it costs. Event type names never change once published: a superseded type is marked DEPRECATED with a retirement date and keeps firing until it passes.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Query parameters Name Default resourceOptional statusOptional
Example Response: GenericResponseListWebhookEventTypeResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/event-type" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": [
{
"eventType": "transfer.completed",
"resource": "transfer",
"module": "transactions",
"description": "string",
"apiVersion": 1.0,
"status": "ACTIVE",
"highVolume": true,
"restricted": true,
"volumeWarning": "string",
"retiresAt": "2026-09-25T10:00:00Z",
"samplePayload": "string"
}
],
"description": "Webhook event types retrieved"
} Responses Status When 200Webhook event types retrieved
GET Read one webhook event type GET /webhook/event-type/{eventType}
The catalogue entry for a single event type, by its exact published name.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Example Response: GenericResponseWebhookEventTypeResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/event-type/value" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"eventType": "transfer.completed",
"resource": "transfer",
"module": "transactions",
"description": "string",
"apiVersion": 1.0,
"status": "ACTIVE",
"highVolume": true,
"restricted": true,
"volumeWarning": "string",
"retiresAt": "2026-09-25T10:00:00Z",
"samplePayload": "string"
},
"description": "Webhook event type retrieved"
} Responses Status When 200Webhook event type retrieved 404Webhook event type not found
GET Read one recorded event GET /webhook/event/{reference}
Including the exact payload that was delivered. Rendered once when the event was recorded, so this is what happened rather than a re-derivation - re-deriving a transfer that has since been reversed would show you a lie.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookEventResponse
curl Response
Copy curl -X GET "https://api.bridgemoni.com/webhook/event/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"eventType": {
"name": "string"
},
"apiVersion": {
"name": "string"
},
"occurredAt": "2026-09-25T10:00:00Z",
"subjectType": {
"name": "string"
},
"subjectReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"status": "PENDING",
"deliveryCount": 0,
"payload": "string",
"createdAt": "2026-09-25T10:00:00Z"
},
"description": "Webhook event retrieved"
} Responses Status When 200Webhook event retrieved 403You cannot act for that organization 404Webhook event not found
POST Replay an event to every endpoint of yours that received it POST /webhook/event/{reference}/replay
The right shape when the fix was on our side rather than yours. Endpoints belonging to other parties to the same event are never re-delivered on your say-so.
Headers Name Notes AuthorizationBearer token X-TenantYour tenant X-Environmenttest or live
Path parameters Query parameters Name Default organizationReferenceOptional
Example Response: GenericResponseWebhookReplayResponse
curl Response
Copy curl -X POST "https://api.bridgemoni.com/webhook/event/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/replay" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" Copy {
"data": {
"deliveries": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"eventReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"endpointReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"target": "ENDPOINT",
"targetUrl": "string",
"eventType": {
"name": "string"
},
"status": "PENDING",
"attemptCount": 0,
"nextAttemptAt": "2026-09-25T10:00:00Z",
"lastResponseStatus": 0,
"lastFailureKind": "HTTP_ERROR",
"lastError": "string",
"completedAt": "2026-09-25T10:00:00Z",
"replayOf": "string",
"createdAt": "2026-09-25T10:00:00Z",
"attempts": [
{
"attemptNumber": 0,
"attemptedAt": "2026-09-25T10:00:00Z",
"durationMs": 0,
"responseStatus": 0,
"responseSnippet": "string",
"failureKind": "HTTP_ERROR",
"errorMessage": "string",
"signedWithVersions": "1,2",
"requestBodyBytes": 0
}
]
}
]
},
"description": "Webhook event replayed"
} Responses Status When 200Webhook event replayed 403You cannot act for that organization 404Webhook event not found