---
search:
  tags:
    - Merchant Scoped
    - GET
seo:
  description: >-
    Live mode: scoped merchant key with offers:read; the hold must belong to
    the… Reference for the GET /v1/redemptions/{id} endpoint in the agentsub
    Gateway API.
sidebar:
  label: Fetch a redemption (hold) record
  badge: GET
title: Fetch a redemption (hold) record
type: openapi-operation
---
Live mode: scoped merchant key with `offers:read`; the hold must belong to the merchant (`404 not_found` otherwise). Agent-token access to this path is blocked in live mode with `503 provider_configuration_required`.

`GET /v1/redemptions/{id}`

**Responses**

- `200` — The hold record
- `401` — \`unauthorized\` problem; live 401s advertise \`WWW-Authenticate: Bearer resource\_metadata=...\`
- `403` — Identity, ownership, scope or policy denied (\`human\_required\`, \`owner\_claim\_required\`, \`scope\_required\`, \`FROZEN\`, \`CAP\_EXCEEDED\`, \`SCOPE\_FORBIDDEN\`)
- `404` — \`not\_found\` problem
- `503` — Runtime or provider configuration unavailable (\`runtime\_configuration\_required\`, \`signing\_configuration\_required\`, \`runtime\_unavailable\`, \`workspace\_unavailable\`, \`provider\_configuration\_required\`)

Response example, 200:

```json
{
  "id": "string",
  "agentId": "string",
  "acceptorId": "string",
  "offerId": "string",
  "category": "string",
  "amountUc": "string",
  "state": "held",
  "expiresAt": 0,
  "createdAt": 0,
  "capturedUc": "string",
  "allocations": [
    {
      "lotId": "string",
      "amountUc": "string"
    }
  ]
}
```
