---
title: "Get one dispatch"
method: GET
path: "/v1/pipelines/{id}/dispatches/{dispatchId}"
tags: ["Pipelines"]
---

# Get one dispatch

`GET /v1/pipelines/{id}/dispatches/{dispatchId}`

## Request

- Base URL: `https://api.talonic.com`
- URL: `https://api.talonic.com/v1/pipelines/{id}/dispatches/{dispatchId}`
- Auth: HTTP bearer

One dispatch row with its frozen selection, projection and publish outcome. Requires read scope.

## Path parameters

- `id` string, uuid, required
- `dispatchId` string, uuid, required

## Response `200`

The dispatch row (without the `items[]` summary — that is on the list read).

- Dispatch: One trigger of one Spec Dispatch node on one pipeline. The row FREEZES the selection (which units) and the projection (which fields) so every attempt, chunk and re-dispatch resolves the same payload — a resolver loads the row by `dispatch_id` and never re-derives a delta.
  - `id` string, uuid, required
  - `customer_id` string, uuid, required
  - `pipeline_id` string, uuid, required
  - `stage_id` string, required: Spec stage id of the Dispatch node.
  - `spec_id` string, uuid, nullable
  - `spec_version_id` string, uuid, nullable: The published Spec version the node config was read from.
  - `grain` 'row' | 'pipeline' | 'assembly' | 'matcher' | 'data_product', required
  - `mode` 'manual' | 'on_run_completed', required
  - `idempotency_key` string, nullable
  - `replay_of` string, uuid, nullable: Set on a re-dispatch — the dispatch whose frozen selection this one inherited.
  - `status` 'pending' | 'published' | 'empty' | 'failed' | 'superseded' | 'skipped', required: `skipped` = the submitting POST /v1/run request's `dispatch` / `bindings` controls suppressed this node (no events; terminal, not re-dispatchable).
  - `error` string, nullable
  - `selection` object, required: The FROZEN selection. Two id spaces, never mixed.
    - `scope` 'all' | 'changed_since'
    - `row_source` 'document' | 'product'
    - `document_ids` string[]
    - `product_record_ids` string[]
    - `since` string, date-time: Exclusive lower bound of the delta window.
    - `until` string, date-time: Inclusive upper bound of the delta window.
  - `projection` object, required: The FROZEN projection — one column set per node, so tabular serializers stay stable.
    - `field_ids` string[]
    - `field_keys` string[]
    - `changed_fields_only` boolean
    - `include_shortlist_keys` boolean: matcher grain only — ship the rival KEYS of a shortlist.
  - `data_product_id` string, uuid, nullable: `data_product` grain only — the product frozen at trigger time.
  - `watermark_at` string, date-time, nullable: Max value-cell timestamp covered; set for changed_since scope only.
  - `record_count` integer, required
  - `event_count` integer, required
  - `triggered_by` string, uuid, nullable: User id for a manual trigger; null for `on_run_completed`.
  - `created_at` string, date-time, required
  - `items` object[]: Present on the list read — per-binding delivery-attempt counts for this dispatch, joined through the outbox events.
    - `binding_id` string, uuid
    - `status` string: Delivery item status (pending
    - `count` integer

## Other responses

- `404`: Dispatch not found for this pipeline and tenant (`RESOURCE_NOT_FOUND`).
- `429`: Daily rate limit exceeded.

---

[API](https://skmtc.dev/talonic/apis/talonic-api.md) · [All operations](https://skmtc.dev/talonic/apis/talonic-api/llms.txt) · [OpenAPI document](https://skmtc.dev/talonic/apis/talonic-api/revisions/678fe5f8c9c3?raw)
