---
title: "List purchases"
method: GET
path: "/purchases"
tags: ["purchases"]
---

# List purchases

`GET /purchases`

List purchases visible to the authenticated tenant, ordered by
`purchased_at` descending. Use cursor pagination via `since` and `limit`.

## Query parameters

- `member_id` string
- `plan_id` string
- `ndc` string
- `prescriber_spi` string
- `event_type` 'claim' | 'reversal' | 'adjustment' | 'hra_initial_load' | 'hra_rollover' | 'hra_incentive'
- `status` 'accepted' | 'rejected' | 'pended' | 'reversed'
- `since` string
- `until` string, date-time
- `limit` integer

## Headers

- `Authorization` string, required

## Response `200`

A page of purchases.

- PurchaseList
  - `data` Purchase[], required
    - `purchase_id` string, uuid, required — Andel-issued unique identifier.
    - `member_id` string, required — Plan or PBM member identifier.
    - `plan_id` string, required — Plan that the member belongs to. Each member belongs to exactly one plan. Tokens are scoped to a set of allowed plan IDs; purchases for plans outside that set are not returned.
    - `purchased_at` string, date-time, required — ISO 8601 UTC timestamp from the pharmacy point-of-sale.
    - `ndc` string — 11-digit National Drug Code.
    - `prescriber_spi` string — Surescripts Prescriber ID.
    - `member_purchase_amount` number, double — (Proposed - provenance pending) Total amount the member paid at point-of-sale, USD.
    - `oop_amount` number, double — (Proposed - provenance pending) Member out-of-pocket portion, USD.
    - `plan_contribution` number, double — (Proposed - provenance pending) Plan's portion of the purchase (the plan contribution), USD.
    - `quantity` integer — Units dispensed.
    - `currency` string, required — ISO 4217 currency code.
    - `date_of_service` string, date, required — The actual fill date used for eligibility validation. Distinct from `purchased_at`, which is the point-of-sale timestamp.
    - `days_supply` integer — Days of therapy the dispensed quantity covers.
    - `provider_type` 'ncpdp' | 'npi' | 'dea' | 'copay_assist' — Qualifier describing which provider identifier is carried in the provider slot.
    - `pharmacy_npi` string — Dispensing pharmacy identifier, when provided.
    - `network_ind` 'in_network' | 'out_of_network' | 'both' | 'inn_house' — Whether the fill adjudicated in- or out-of-network.
    - `event_type` 'claim' | 'reversal' | 'adjustment' | 'hra_initial_load' | 'hra_rollover' | 'hra_incentive', required — The kind of accumulator event. `claim` is a normal fill; `reversal` restores accumulators for a returned or voided fill; `adjustment` is a flat or paired correction.
    - `original_purchase_id` string, uuid, nullable — For reversals or adjustments, the `purchase_id` of the purchase being corrected. Null for new purchases.
    - `status` 'accepted' | 'rejected' | 'pended' | 'reversed' — Processing status of the purchase.
    - `deductible_applied` number, double — (Proposed - provenance pending) Amount of this purchase applied to the member's deductible, USD.
    - `subscriber_id` string — The member's subscriber identifier at the PBM's eligibility system. Distinct from `member_id`.
    - `first_name` string — Member first name.
    - `last_name` string — Member last name.
    - `date_of_birth` string, date — Member date of birth.
    - `gender` 'unknown' | 'male' | 'female' | 'non_binary' — Member gender as carried to the PBM.
    - `relationship` 'subscriber' | 'spouse' | 'dependent' | 'student' | 'disabled_dependent' | 'adult_dependent' | 'domestic_partner' — Member's relationship to the subscriber.
    - `accumulators` Accumulator[] — (Proposed - provenance pending) Per-accumulator deltas this purchase applies (deductible, out-of-pocket, HRA, caps). A single fill can apply against up to six accumulators at once.
      - `type_of_benefit_account` 'hra' | 'deductible' | 'oop' | 'cap' | 'lifetime_cap' | 'drug_cap' | 'benefit_deductible' | 'benefit_oop' | 'base_deductible' | 'base_oop' | 'tmoop', required — Which benefit accumulator this delta applies to.
      - `participation_type` 'in_network' | 'out_of_network' | 'combined' | 'inn_house' — Network level this accumulator tracks (may differ per accumulator).
      - `amount` number, double, required — (Proposed - provenance pending) Dollars applied to this accumulator on this purchase, USD.
      - `cr_db_indicator` 'debit' | 'credit' | 'replace' | 'bypass', required — `debit` consumes the accumulator, `credit` restores it (a reversal), `replace` overwrites the running total, `bypass` ignores this accumulator for this transaction.
      - `accumulated_amount` number, double — (Proposed - provenance pending) Running total applied to date, USD. Required by ESI for `replace`.
      - `remaining_amount` number, double — (Proposed - provenance pending) Amount left before the accumulator cap is met, USD.
      - `met_this_transaction` boolean — True when this purchase drove `remaining_amount` to zero (e.g., deductible met on this fill).
    - `origin_code` 'E' | 'R' — ESI origin code for HRA balance events (`hra_initial_load`, `hra_rollover`, `hra_incentive`); `E` is a non-shared pharmacy dollars load. Omitted for pharmacy fills.
    - `plan_year` integer — Plan year the balance applies to. Used for HRA balance events.
    - `esi` EsiIdentity — ESI wire-protocol identifiers, populated when a purchase is exchanged via the ESI CDH format. All fields optional.
      - `sender_id` string — ESI-assigned trading-partner sender identifier.
      - `receiver_id` string — Receiver identifier; `MHS` when sending to ESI.
      - `signature` string — 26-character composite transaction key (date + milliseconds + sequence + source-app code).
      - `claim_id` string — ESI claim identifier.
      - `claim_xref_id` string — Original-transaction reference on a reversal or adjustment. Mirrors `original_purchase_id`.
      - `transmission_type` 'DQ' | 'DR' — Data Request (sent) vs Data Response (acknowledged).
      - `request_code` '01' | '02' | '04' — Claim / Reversal / Adjustment request code.
      - `response_code` string — ESI Data Response code; `00` is accepted, otherwise an error code.
      - `reason_code` string — Granular reason detail beyond the response code.
  - `next_cursor` string, nullable, required — Pass as `since` to fetch the next page. Null when no more pages.

## Other responses

- `400` — Invalid request.
- `401` — Missing or invalid token.
- `403` — Token lacks the required scope, or is not authorized for the requested `plan_id`.
- `429` — Too many requests. Backoff and retry.
- `500` — Unexpected server error.

---

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