API Reference
List Webhook Deliveries
Paginated history of every delivery attempt for a single webhook endpoint, newest first. Each row carries the full event payload plus delivery telemetry (HTTP status, latency, attempt counter, signature). Used by the dashboard's webhook log view and by SDKs that want to surface delivery health.
GET/org/webhooks/{endpoint_id}/deliveries
Authentication
Accepts a JWT bearer token (Authorization: Bearer eyJ…) or an API key (X-API-Key: ms_live_…). API-key callers should send X-Project-ID unless the key is project-locked. Cross-tenant operators must send X-Tenant-ID.
Path parameters
| Field | Type | Required | Description |
|---|---|---|---|
endpoint_id | integer | required | Webhook endpoint id. |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
page | integer | optional | One-indexed page number. Default 1. |
page_size | integer | optional | Range 1..100. Default 20. |
status_filter | string | optional | Restrict to a single delivery status (e.g. delivered, failed, dead_letter, retrying, pending). |
Response
Returns 200 OK with the following body.
| Field | Type | Required | Description |
|---|---|---|---|
deliveries | object[] | optional | Delivery rows ordered by created_at DESC. |
total | integer | optional | Total deliveries matching the filter. |
page | integer | optional | Echoed page index. |
page_size | integer | optional | Echoed page size. |
200.json
{"deliveries": [{"id": 9012,"endpoint_id": 42,"event_type": "memory.created","event_id": "evt_01HX...","status": "delivered","payload": {"id": "evt_01HX...","type": "memory.created","data": {"memory_id": 184213}},"payload_hash": "sha256:9b...","signature": "t=1714824660,v1=...","status_code": 200,"response_body": "{\"ok\":true}","error_message": null,"latency_ms": 142,"attempt_number": 1,"max_attempts": 6,"next_retry_at": null,"created_at": "2026-05-04T12:31:00Z","completed_at": "2026-05-04T12:31:00Z"}],"total": 1284,"page": 1,"page_size": 20}
Errors
| Status | Code | Description |
|---|---|---|
| 400 | validation_error | Body or query failed schema validation. The error includes the offending field name. |
| 401 | unauthenticated | Missing or invalid bearer token / API key. |
| 403 | forbidden | Authenticated principal lacks the required scope, role, or project access. |
| 404 | not_found | Target resource does not exist or is not visible to the calling tenant. |
| 429 | rate_limited | Per-IP or per-route limit exceeded. Respect the Retry-After header. |
| 500 | internal_error | Unhandled server error. Quote the request_id when contacting support. |
Examples
cURL
curl -X GET https://api.memorysync.io/org/webhooks/EXAMPLE_ID/deliveries \-H "Authorization: Bearer $MEMORYSYNC_KEY"
javascript
import { MemorySync } from 'memorysync'const client = new MemorySync({ apiKey: process.env.MEMORYSYNC_KEY })const result = await client.request({method: 'GET',path: '/org/webhooks/EXAMPLE_ID/deliveries',})console.log(result)
python
from memorysync import Clientclient = Client(api_key=os.environ["MEMORYSYNC_KEY"])result = client.request(method="GET",path="/org/webhooks/EXAMPLE_ID/deliveries",)print(result)
Behavior & notes
Requires owner, admin, or developer role and webhooks:read scope. response_body is truncated to 1000 characters. Companion routes: GET /org/webhooks/{endpoint_id}/deliveries/latest, GET /org/webhooks/deliveries/recent, POST /org/webhooks/deliveries/{delivery_id}/retry.