Skip to main content

List Bindings

List all delivery bindings that route events to destinations. Each binding maps an event type to a deliverable resolver, serializer format, and destination.

A binding connects the four parts of the delivery flow: a signal filter (which events to listen for), a deliverable type (what payload to build), a serializer format (how to encode it), and a destination (where to send it). The compatibility triangle is enforced on creation.

Bindings are the core routing configuration for delivery. When a domain event (e.g. document.extracted) fires, the poller matches it against all active bindings. Each matching binding produces a separate delivery attempt — so a single event can fan out to multiple destinations simultaneously.

GET/v1/delivery/bindings

Response

Response fields

dataarrayArray of binding objects.
data[].idstringBinding UUID.
data[].namestringBinding name.
data[].signal_filterobjectEvent filter with `event_type` and optional match criteria.
data[].deliverable_typestringPayload resolver type.
data[].destination_idstringTarget destination UUID.
data[].serializer_formatstringSerializer format (e.g. `json`, `csv`, `xlsx`).
data[].serializer_configobjectSerializer-specific configuration options.
data[].excluded_fieldsstring[] | nullField keys withheld from this destination's payload (pipeline.capture bindings); null when unset.
data[].field_mapobjectJSONPath field projection map.
data[].delivery_policyobjectRetry policy with `max_attempts` and `backoff_schedule`.
data[].is_activebooleanWhether the binding is enabled.
data[].last_statusstring | nullStatus of the most recent delivery attempt through this binding.
data[].created_atstringISO 8601 creation timestamp.
data[].updated_atstringISO 8601 last update timestamp.

Response

{
  "data": [
    {
      "id": "c3d4e5f6-a7b8-9012-cdef-234567890123",
      "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, 120000, 600000] },
      "is_active": true,
      "last_status": "succeeded",
      "created_at": "2024-09-10T09:00:00.000Z",
      "updated_at": "2024-09-10T09:00:00.000Z"
    }
  ]
}

Errors

Error responses

401unauthorizedMissing or invalid API key.
429rate_limitedToo many requests. Retry after the period indicated in the Retry-After header.

Migrating from /v1/exports

Bindings are the successor to the retired /v1/exports surface. Every verb on every path under /v1/exports/ now returns 410 Gone with a machine-parseable body pointing at the replacement: the former /v1/exports/mappings maps to /v1/delivery/bindings, and the former /v1/exports/destinations maps to /v1/delivery/destinations. The response carries a Sunset header (RFC 8594), Deprecation: true, and a Link header with rel="successor-version" so HTTP tooling can surface the migration programmatically. The 410 is returned even without credentials, so an SDK with a stale key still receives an actionable error instead of a misleading 401.

Retired surface

curl -si https://api.talonic.com/v1/exports/mappings | head -8

HTTP/1.1 410 Gone
Sunset: Wed, 23 Apr 2026 00:00:00 GMT
Deprecation: true
Link: </v1/delivery/bindings>; rel="successor-version"

{"error":"Gone","message":"Moved to /v1/delivery/bindings and /v1/delivery/destinations. See docs.","replacement":"/v1/delivery/bindings"}
Do not retry a 410 from /v1/exports/* — the surface is permanently retired, not rate-limited or temporarily down. Recreate each export mapping as a delivery binding and each export destination as a delivery destination, then point your integration at /v1/delivery/*.

Frequently asked questions

What happened to the /v1/exports endpoints?+
They are permanently retired: every verb on every `/v1/exports/*` path returns 410 Gone with `Sunset`, `Deprecation`, and `Link` headers naming `/v1/delivery/bindings` as the successor. Recreate export mappings as bindings and export destinations as delivery destinations.
What is the compatibility triangle?+
When creating a binding, the system verifies that the signal event type, deliverable resolver, and serializer format are mutually compatible. For example, a CSV serializer cannot serialize a graph deliverable.
Can multiple bindings target the same destination?+
Yes. A single destination can serve many bindings with different signal filters, deliverable types, and serializer formats. Each binding produces independent delivery attempts.
What happens when one event matches multiple bindings?+
The event fans out: each matching active binding produces its own independent delivery attempt. A single document.extraction.completed event can therefore reach a webhook, an S3 bucket, and a Google Drive folder simultaneously.