---
title: "List open items"
method: GET
path: "/v1/matching/contexts/{contextId}/open-items"
tags: ["Matching"]
---

# List open items

`GET /v1/matching/contexts/{contextId}/open-items`

Returns a cursor-paginated list of open-item residual ledger entries for a reconciliation context — the carried, partially-filled, and aged obligations the context carries forward across match runs. These are structurally distinct from never-matched (UNMATCHED) transactions. Optionally narrowed by lifecycle status. The listing is readable regardless of context status.

## Path parameters

- `contextId` string, uuid, required — Reconciliation context ID

## Query parameters

- `status` 'OPEN' | 'PARTIALLY_CLEARED' | 'CLEARED' | 'AGED' — Filter by open-item lifecycle status
- `limit` integer — Maximum number of records to return
- `cursor` string — Opaque pagination cursor
- `sort_by` 'ageDays' | 'runningBalance' | 'obligationDate' — Field to sort by. Defaults to id (stable insertion order). ageDays sorts by aging anchor (oldest residuals first when descending)
- `sort_order` 'asc' | 'desc' — Sort order

## Response `200`

OK

- ListOpenItemsResponse
  - `hasMore` boolean, required
  - `items` OpenItemResponse[], nullable, required — Page of open items
    - `ageDays` integer, required — Whole days the obligation has been open, measured from its aging anchor (the obligation business date, or first-seen time as a fallback)
    - `contextId` string, required — Reconciliation context ID this open item belongs to
    - `createdAt` string, required — Creation timestamp (RFC 3339)
    - `currency` string, required — ISO 4217 currency code of the open item
    - `expectedBalance` string, required — Original outstanding obligation when the item was first opened, as a decimal string
    - `firstSeenAt` string, required — When this open item was first materialized in the ledger (RFC 3339)
    - `id` string, required — Unique identifier for the open item
    - `identityKey` string, required — Deterministic cross-run identity projection (composite match keys + currency) the carry-forward netting resolves on
    - `lastActivityAt` string, required — Timestamp of the most recent leg or transition (RFC 3339)
    - `obligationDate` string — Business date of the originating obligation (the aging anchor, RFC 3339); absent when none was captured
    - `runId` string — Match run that applied the most recent settling leg. Absent for a freshly-opened residual that has not yet netted any leg
    - `runningBalance` string, required — Outstanding amount still to be netted, as a decimal string; nets down toward zero as settling legs arrive
    - `status` string, required — Lifecycle status: OPEN (fresh residual), PARTIALLY_CLEARED (a leg netted but a residual remains), CLEARED (netted within tolerance), or AGED (exceeded its aging threshold while still open)
    - `transactionId` string — Transaction the open item most recently netted on (the latest settling leg). Absent for a freshly-opened residual that has not yet netted any leg — drill into the transaction this resolves on
    - `updatedAt` string, required — Last update timestamp (RFC 3339)
  - `limit` integer, required
  - `nextCursor` string
  - `prevCursor` string

## Other responses

- `default` — Error

---

[API](https://skmtc.net/lerian/apis/identity-plugin.md) · [All operations](https://skmtc.net/lerian/apis/identity-plugin/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lerian/identity-plugin/versions/25daba385532/schema)
