---
title: "Get redemption attribution matrix"
method: GET
path: "/v1/reports/redemption-attribution"
tags: ["Reporting"]
---

# Get redemption attribution matrix

`GET /v1/reports/redemption-attribution`

## Request

- Base URL: `https://api.scrip.dev`
- URL: `https://api.scrip.dev/v1/reports/redemption-attribution`
- Auth: HTTP bearer

Returns gross LOT-mode redemption value by asset, redemption channel, and original issuing program, so you can reconcile value between programs.
This report does not accept created_after or created_before.

## Query parameters

- `period_start` string, date-time, required
- `period_end` string, date-time, required
- `program_id` string, uuid
- `asset_id` string, uuid

## Response `200`

Redemption attribution matrix

- RedemptionAttributionResponse: Issuer-vs-channel redemption attribution matrix results, for LOT inventory-mode assets only.
  - `data` RedemptionAttributionRowResponse[]: Matrix cells, one for each asset, channel program and issuer program with redemption lot consumption in the window
    - `asset_id` string, uuid: Unique identifier for this asset
    - `asset_name` string: The name people see for the asset, such as `Points`.
    - `asset_symbol` string: Ticker or symbol for this asset (e.g., `POINTS`)
    - `channel_program_id` string, uuid, nullable: Program the participant redeemed through, the same attribution every other report uses. It is null when the redemption has no program.
    - `channel_program_name` string, nullable: Display name of the channel program (null when channel_program_id is null)
    - `issuer_program_id` string, uuid, nullable: Program whose original issuance lineage this redemption consumed. Null when issuer lineage is unavailable or the issuer journal carries no program.
    - `issuer_program_name` string, nullable: Display name of the issuer program (null when issuer_program_id is null)
    - `lot_count` integer: Number of distinct lots consumed in this cell
    - `redeemed` string: Gross lot value consumed in this cell during the window (>= 0); reversals are not netted
    - `scale` integer: Number of decimal places for this asset; every amount in this row is rendered with exactly this many decimals
  - `pagination` PaginationResponse: Cursor details for a list. `has_more` says whether another page exists, and `next_cursor` is the value to send to get it.
    - `has_more` boolean, required: Whether more results are available beyond this page
    - `next_cursor` string, nullable, required: Cursor to fetch the next page. Null on the last page
  - `period_end` string: Period end (inclusive, RFC 3339), echoed from the request
  - `period_start` string: Period start (inclusive, RFC 3339), echoed from the request

## Other responses

- `400`: Invalid query parameters or SIMPLE-mode asset_id (code: validation_error)
- `401`: The API key is missing or not valid. See [Authentication](https://docs.scrip.dev/authentication).
- `404`: Asset not found (code: asset_not_found)
- `429`: Too many requests. Wait the number of seconds in the `Retry-After` header, then retry. See [Limits and durations](https://docs.scrip.dev/limits#rate-limits).
- `500`: Something failed on Scrip's side. Retry the request, and quote `request_id` if it keeps failing. [Errors](https://docs.scrip.dev/errors) lists every code, and the [API introduction](https://docs.scrip.dev/api-reference/introduction) describes the error format.

---

[API](https://skmtc.dev/scrip/apis/scrip-api.md) · [All operations](https://skmtc.dev/scrip/apis/scrip-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scrip/apis/scrip-api/revisions/c52d35da8d97?raw)
