> ## Documentation Index
>
> Fetch the complete documentation index at: https://lithi.ai/llms.txt
>
> Use this file to discover all available pages before exploring further.

# Read partial results

## Page through an existing batch

Use `GET /v1/batches/{id}/results` with the batch you submitted. The read requires current `jobs:read` access in the same account. It returns result descriptors, not the individual business rows inside each artifact.

The response data contains `items` and an optional `next_cursor`. Request `limit` from 1 through 100. The TypeScript method is `listBatchResults(id, limit, cursor)`; its `paginate` helper can traverse pages. These are result descriptors. The business rows remain inside each encrypted artifact and must be read and reconciled separately.

A cursor is an opaque continuation value. Pass it unchanged, URL-encoded by your client. Do not decode it, increment it or use it as an item identifier. Keep it with the account, batch and query that produced it.

## Checkpoint after processing the page

Persist each result's `job_id`, `encrypted_artifact_id`, `result_digest` and `evidence_digest`. Store the continuation cursor only after you durably record the page. Otherwise a crash can skip results you never saved.

Keep the prepared brief with the checkpoint: frozen instructions and rubric, input IDs, declared output schema and required evidence. A page is a returned observation; it does not establish coverage or semantic acceptance for the whole task.

Lithi records each descriptor and its artifact and evidence identities. Your agent owns the checkpoint, final coverage reconciliation and semantic decision about whether the partial view is useful for your work.

When a page repeats, recognize the same immutable result identity instead of importing it twice. A change in `delivery_state` can be a new delivery observation of the same result. A changed artifact or result digest for the same accepted identity needs investigation, not an overwrite.

The SDK pagination helper rejects a repeated continuation cursor. Your consumer still owns durable checkpoints, duplicate handling and a bounded page budget. Automatic iteration is not an exactly-once import guarantee.

## Separate descriptors, business rows and final coverage

Suppose a synthetic batch has three jobs. A traversal returns descriptors for jobs A and C, then ends without `next_cursor`. That tells you the descriptor traversal ended; it does not tell you that job B failed or that the batch finished. You still read the batch state and each artifact's business rows.

Read the batch state and reconcile the admitted job set. The public batch summary exposes `total_count`, `accepted_count` and `failed_count`; it does not expose every workflow-specific exception category.

For business rows, use the stable input identifier and any declared child identifier. Never join page position to input position. One job may contain many inputs, and one input may produce many outputs. A descriptor's `job_id` is not a business-row identity.

Before synthesizing a partial view, check the returned schema, coverage, uncertainty and abstentions
against the brief. Keep missing or unresolved items visible to the downstream agent.

## Recover an interrupted traversal

If a read times out, keep the last completed page checkpoint and retry that read within your retry budget. Do not create another batch because a response was lost.

If the cursor is rejected, do not guess a replacement. Confirm current account access and batch identity. A bounded fresh traversal can rebuild your view using the stored immutable result identities to suppress duplicates. Do not assume cursors remain valid indefinitely.

If the same cursor repeats, stop rather than loop forever. Record the batch, previous cursor's protected local reference and safe error code. Do not put credentials or artifact access URLs in diagnostics.

## Decide when downstream work may begin

Use an incomplete view only when the workflow and your downstream process allow it. Label the imported population as an incomplete view, preserve the item outcomes and validation decisions, and make the import idempotent against stable output identities. A paginated page does not create a universal `PARTIAL` item or page state; only the result contract can define a terminal state with that name.

For a complete export, require terminal job or batch state plus the complete artifact set specified by the output contract. Reconcile every expected descriptor and every expected business item. A terminal failure can still leave useful accepted output; do not discard it automatically.

Use [the bundle inspection guide](/docs/compute/results/files-and-verification) to reconcile the final artifact set before declaring the export complete.
