Skip to main content

Create Binding

Create a delivery binding that routes domain signals through a deliverable resolver and serializer to a destination. Includes field mapping and retry policy configuration.

Create a binding that wires a domain event to a destination. The compatibility triangle is validated on creation: the signal event type must be compatible with the deliverable resolver, the serializer must support the deliverable shape, and the connector must support the serializer format.

The typical workflow is: query the catalog endpoints top-down (signals, then deliverables, then serializers, then connectors), pick compatible values, and create the binding. A single event can fan out to multiple bindings — create separate bindings for each destination or output format you need.

The response returns the binding with is_active: true and last_status: null. The field_map controls payload projection: use static to inject fixed values, drop to remove fields, and key-value pairs to rename fields. The delivery_policy defaults to 7 attempts with exponential backoff over ~10 hours if omitted.

After creation, the binding is immediately live — the next matching signal will trigger delivery. Use POST /v1/delivery/bindings/:id/preview (internal) to dry-run the resolve-project-serialize pipeline. Monitor delivery health via the history and DLQ endpoints.

Use the catalog endpoints (/v1/delivery/catalog/*) to discover valid combinations before creating a binding. The catalog lists all available signals, deliverables, serializers, and connectors with their compatibility constraints.
POST/v1/delivery/bindings

Response

Response fields (201 Created)

idstringBinding UUID.
namestringBinding name.
signal_filterobjectEvent filter with `event_type` and optional match criteria.
deliverable_typestringPayload resolver type.
destination_idstringTarget destination UUID.
serializer_formatstringSerializer format.
serializer_configobjectSerializer-specific configuration.
field_mapobjectJSONPath field projection map.
delivery_policyobjectRetry policy.
is_activebooleanAlways true on creation.
last_statusnullAlways null on creation.
created_atstringISO 8601 creation timestamp.
updated_atstringISO 8601 last update timestamp.

Response (201 Created)

{
  "id": "d4e5f6a7-b8c9-0123-defa-345678901234",
  "name": "Notify on extraction complete",
  "signal_filter": { "event_type": "document.extraction.completed" },
  "deliverable_type": "document_capture",
  "destination_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "serializer_format": "json",
  "serializer_config": {},
  "field_map": { "vendor": "$.vendor_name", "total": "$.amount" },
  "delivery_policy": { "max_attempts": 5, "backoff_schedule": [1000, 5000, 30000] },
  "is_active": true,
  "last_status": null,
  "created_at": "2024-09-10T09:00:00.000Z",
  "updated_at": "2024-09-10T09:00:00.000Z"
}

Errors

Error responses

400validation_errorThe compatibility triangle validation failed: signal event type, deliverable type, and serializer format are not all mutually compatible.
401unauthorizedMissing or invalid API key.
429rate_limitedToo many requests. Retry after the period indicated in the Retry-After header.