---
title: "Read a batch, with every item outcome"
method: GET
path: "/v1/transfers/batch/{id}"
tags: ["Partner API"]
---

# Read a batch, with every item outcome

`GET /v1/transfers/batch/{id}`

## Request

- Base URL: `https://sandbox.onlink.africa`
- URL: `https://sandbox.onlink.africa/v1/transfers/batch/{id}`
- Auth: API key in header `X-OnLink-Key`

## Path parameters

- `id` string, required

## Response `200`

The batch.

- PartnerBatchResponseDto
  - `id` string, required: The batch id.
  - `status` 'awaiting_confirmation' | 'confirmed' | 'processing' | 'completed' | 'failed' | 'expired', required: The batch status.
  - `itemCount` number, required: Total items submitted, valid or not.
  - `acceptedCount` number, required: Items that reached a successful terminal state.
  - `failedCount` number, required: Items refused at submit or failed by the executor.
  - `items` PartnerBatchItemResultDto[], required: Every item's outcome, in the order submitted.
    - `transferId` string: The transfer id, present when the item was accepted. Read it with GET /v1/transfers/:id for its full detail.
    - `idempotencyKey` string, required: Your own reference for this item — echoes the item's own idempotencyKey.
    - `accepted` boolean, required: Whether this item was accepted into the batch.
    - `failureCode` string: Present only when accepted is false — one of the single-transfer refusal codes (TRANSFER_NAME_MISMATCH, TRANSFER_EXCEEDS_DAILY_CAP, …).
  - `createdAt` string, date-time, required: ISO-8601 instant the batch was created.
  - `confirmedAt` string, date-time: ISO-8601 instant the batch was confirmed: when its confirmation code was verified, or, when confirmation is waived for your account, when the batch was created already confirmed.
  - `confirmation` ConfirmationDto
    - `id` string, required: The confirmation id. POST the code your confirmation contact receives (or your webhook, as `confirmation.code_issued`, when `channel` is `webhook`) back to `/v1/confirmations/:id` to authorise the transfer.
    - `channel` 'email' | 'sms' | 'webhook', required: How the confirmation code was delivered. `webhook` means it was pushed to your webhook endpoint as `confirmation.code_issued`.
    - `deliveredTo` string, required: Masked delivery address or number. Never the raw contact.
    - `expiresAt` string, date-time, required: ISO-8601 instant the confirmation code expires.
    - `resendAvailableAt` string, date-time, required: ISO-8601 instant a resend becomes available.
    - `webhookDelivery` ConfirmationWebhookDeliveryDto
      - `status` 'pending' | 'delivered' | 'failed', required: `pending` while we are still trying, `delivered` once your endpoint acknowledged the push, `failed` once every attempt has failed.
      - `attempts` integer, required: How many push attempts have been made so far.
      - `lastAttemptAt` string, date-time, nullable, required: ISO-8601 instant of the most recent push attempt, or null before the first.
    - `waiverNotApplied` 'key_without_ip_allowlist': Present only when OnLink has enabled confirmation waiving for your account but this request still needs a confirmation code, because the API key that made it has no IP allowlist. Ask OnLink to add an IP allowlist to that API key; payouts made with it are then created already confirmed. Present on the first response only: a repeat of the same request (an idempotent replay) returns the stored payout without it. Absent in every other case.

## Other responses

- `404`: BATCH_NOT_FOUND.

---

[API](https://skmtc.dev/onlink/apis/onlink-partner-api.md) - [All operations](https://skmtc.dev/onlink/apis/onlink-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/onlink/apis/onlink-partner-api/revisions/1d1c6a3671f2?raw)
