---
title: "Fetch async batch results"
method: GET
path: "/v1/reflex/asynchronous_batches/{batch_id}/results"
tags: ["reflex"]
---

# Fetch async batch results

`GET /v1/reflex/asynchronous_batches/{batch_id}/results`

Return the status block plus a `results` array — one entry per row, keyed by your `id`, as inline JSON. A row is `completed` (carries `predictions`), `failed` (carries an `error`), or still `pending` if you fetch before the batch finishes.

## Path parameters

- `batch_id` string, required — Batch whose rows you want back.

## Response `200`

Batch results.

- ReflexBatchResults — Async batch status plus a per-row `results` array.
  - `id` string, required — Identifier of the batch these results belong to.
  - `object` string, required — Object type, always `reflex.batch.results`.
  - `status` string, required — Status of the batch at the time you fetched the results.
  - `request_counts` object, required — Final tally of the batch once it has drained.
    - `total` integer, required — Rows in the batch.
    - `completed` integer, required — Rows that produced predictions.
    - `failed` integer, required — Rows that ended in an error.
  - `results` object[], required — One entry per uploaded row, keyed by your `id`, returned as inline JSON.
    - `id` string, required — The row id you uploaded.
    - `status` 'completed' | 'failed' | 'pending', required — Outcome for this row; `pending` if you fetch before the batch finishes.
    - `predictions` ReflexPrediction[] — One prediction per model named on the uploaded row.
      - `model` string, required — The Reflex that produced this result.
      - `mode` 'single_label' | 'multi_label', required — `single_label` scores are a softmax summing to 1 (at most one selected); `multi_label` scores are independent 0–1 (zero or more selected).
      - `classes` ReflexClass[] — Every class this Reflex scores, ordered by class index.
        - `class_id` integer, required — Stable index of the class.
        - `label` string, required — The class name.
        - `score` number, required — Confidence for this class, 0–1.
        - `selected` boolean, required — Whether the server picked this class (top scorer above its threshold). A Reflex can select nothing.
      - `error` string — Present instead of `classes` when this model failed.
    - `error` object — Failure detail, present only on a failed row.
      - `type` string, required — Machine-readable reason the row was rejected.
      - `message` string, required — What went wrong for this specific row.

## Other responses

- `400` — Malformed request — missing or invalid fields.
- `401` — Missing or invalid API key.
- `404` — The requested resource does not exist.
- `429` — Rate limited — retry after the interval in the Retry-After header.
- `500` — Internal error — safe to retry with backoff.

---

[API](https://skmtc.dev/morphllm/apis/morph-api.md) · [All operations](https://skmtc.dev/morphllm/apis/morph-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/morphllm/morph-api/revisions/b9a74274b2ab/schema)
