Skip to content

Export review guide

Paginated API Export Completeness Review: Reconcile Cursors, Links, and Coverage

Review paginated API exports as a chain of request and response observations, preserving cursor identity, ordering, duplicates, gaps, and terminal evidence.

A page count is not a completeness proof. An export can repeat a cursor, skip an item, return an empty page with a next link, change its ordering, or cross a moving snapshot while every response looks successful. Capture the request, self link, next relation, cursor, stable record identity, and snapshot boundary for each page, then reconcile the chain before calling it complete. This guide is not an API client, a completeness guarantee, or a data acquisition service.

Updated

On this page

Define the export unit and snapshot boundary

The source dates shown in this guide identify documentation checks on 22 October 2026, not original publication dates. Follow each citation for the pagination conventions being discussed. Before requesting a page, write the export contract: endpoint or controlled source reference, resource type, stable identity field, requested ordering, filter, page size, cursor policy, terminal condition, and snapshot or cutoff evidence if the API supplies one.

This is different from a database watermark review. A cursor is a navigation value supplied by an API contract; it may encode position, a snapshot, or another server-defined state. Do not infer that a cursor is a timestamp, a durable checkpoint, or a guarantee that records cannot change while the export runs.

Define the export unit and snapshot boundary (table)
Contract itemRecord before the first pageQuestion
ResourceType, endpoint reference, filterWhat exactly is one export unit?
IdentityStable id field or explicit unknownHow will duplicates and gaps be compared?
OrderRequested and observed order fieldsCan pages be reconciled in one order?
CursorInitial value and encoding policyWhat value starts and advances the chain?
SnapshotServer or client boundary if presentCan the source change during export?
Terminal ruleMissing, null, or exhausted next linkWhat evidence ends the chain?

Record the exact self link or equivalent request identity for every page. JSON:API says a self link should contain query parameters needed to identify the resource, including pagination parameters when applicable JSON:API, (opens in a new tab). A request log with only a page ordinal cannot reproduce a cursor export.

Reconcile records, order, and terminal evidence

Use the stable identity field to compare adjacent pages and the full chain. Count duplicates, identify gaps only when the ordering contract permits that conclusion, and retain page-local positions for every finding. An empty page is not automatically terminal when a next relation remains. A repeated cursor is not automatically a duplicate record, but it is a chain issue that needs a bounded stop policy.

Reconcile records, order, and terminal evidence (table)
ObservationSafe interpretationNext action
Next is absent or null under the contractPossible terminal pageRetain the response and terminal rule
Next repeats an earlier cursorPotential cycleStop under the policy and hold completeness
Page ids overlapDuplicate observation across pagesPreserve page positions and investigate ordering
Expected order jumpsPossible gap or changed sourceCompare source contract and snapshot evidence
Empty page has nextNo records in this page, chain continuesFollow the next relation under limits
Filter or order changesPages are not one export chainSplit exports and reconcile separately
Response fails or times outChain has an unobserved segmentMark incomplete; do not fill silently
All pages reconcile to terminal evidenceSelected chain is internally consistentReport scope and remaining unknowns

Do not infer missing records from a count unless the endpoint contract supplies a trusted total and snapshot. A total can be stale, approximate, filtered, or unavailable. Report “no gap observed under this order and identity rule” instead of “complete” when the source provides no terminal or snapshot evidence.

Use a fixture and a page reconciliation worksheet

Test the method with synthetic pages containing contiguous ids, a duplicate across adjacent pages, a repeated cursor, an empty page with a next link, a changed filter, and a response with no terminal relation. Keep response bodies small and identifiers invented. The fixture is for the review method, not evidence about a production API.

Use a fixture and a page reconciliation worksheet (table)
Ledger fieldSynthetic valueReview question
Page ordinalLocal sequence numberWas every response retained in order?
Request identityPath, filter, order, cursor classIs it the same export chain?
Self identityResponse self link or equivalentCan this page be reproduced?
Next relationOpaque cursor or nullDid the chain advance or terminate?
Record idsStable synthetic idsAre duplicates or permitted gaps visible?
SnapshotBoundary label or unavailableCan source changes be distinguished?
DispositionComplete, incomplete, cycle, or holdWhat evidence supports the state?

Keep export reconciliation separate from downstream decisions

Pagination evidence can show how a selected chain advanced and where it stopped. It cannot establish ownership, permission to retain or share records, privacy clearance, semantic accuracy, or commercial demand. Keep those decisions in separate provenance, privacy, rights, and owner-approved records.

Pair this guide with the data provenance log for endpoint and snapshot notes and export guidance for producer-specific behavior. After the owner has a supported non-health scope, authority to describe the collection, and a controlled page ledger or synthetic fixture, the qualified appraisal request path may be a next preparation step. It does not call an API, certify completeness, create a quote, match a buyer, issue a legal opinion, or grant a license.

Takeaways

  • Define resource, identity, order, cursor, snapshot, and terminal rules before paging.
  • Retain self and next links or equivalent request identities for every page.
  • Reconcile duplicates, gaps, repeated cursors, empty pages, filter changes, and failures separately.
  • Use synthetic fixtures and stable identifiers before exposing response bodies.
  • Scope any completeness statement to the observed chain and its evidence boundary.

Sources

  1. JSON:API: JSON:API format - Pagination (opens in a new tab)
  2. RFC Editor: Web Linking (opens in a new tab)

Use the appraisal path after the page ledger is organized.

It does not call an API, certify completeness, create a quote, match a buyer, or grant a license.