> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get proposal

> Read one proposal, including the frozen discovery snapshot

`GET /api/v2/storefront/proposals/{id}`

Returns a single proposal by its numeric row `id`, including the `snapshot` — the frozen `products[]` and `proposals[]` the buyer receives when they redeem the code. Use this to confirm exactly what offer is bound to a code before sharing it, or to inspect view and redemption state.

## Request

```bash theme={null}
curl "https://api.interchange.io/api/v2/storefront/proposals/318" \
  -H "Authorization: Bearer $SCOPE3_API_KEY"
```

## Parameters

| Param | Type    | Required | Notes                            |
| ----- | ------- | -------- | -------------------------------- |
| `id`  | integer | Yes      | Proposal row ID (path parameter) |

## Response

```json theme={null}
{
  "id": 318,
  "proposalCode": "PRP-XK4A29",
  "operatorId": "acme",
  "label": "Acme Q3 RFP — CTV",
  "notes": "Offline RFP follow-up; honors the upfront rate.",
  "status": "active",
  "expiresAt": "2026-09-30T23:59:59Z",
  "proposalId": "proposal_abc123",
  "discoverySessionId": "disc_a1b2c3",
  "snapshot": {
    "products": [
      { "productId": "prod_123", "name": "Premium CTV — Sports" }
    ],
    "proposals": [
      { "proposalId": "proposal_abc123" }
    ]
  },
  "createdAt": "2026-06-07T15:00:00Z",
  "createdBy": "seller@acme-media.example.com",
  "firstViewedAt": "2026-06-08T09:12:00Z",
  "lastViewedAt": "2026-06-08T09:14:00Z",
  "redeemedAt": null,
  "redeemedInMediaBuyId": null
}
```

`snapshot.products` and `snapshot.proposals` are the frozen offer. `firstViewedAt` and `lastViewedAt` track buyer views; `redeemedAt` and `redeemedInMediaBuyId` are populated once the buyer applies the code to a media buy.

## Errors

* `404 NOT_FOUND` — no proposal with that `id` is visible to the authenticated seller.

See [Errors](/v2/reference/errors) for the full error contract.

## Related

<CardGroup cols={2}>
  <Card title="Proposal tasks" href="/v2/storefront/proposals/tasks" icon="list-check">
    All proposal operations
  </Card>

  <Card title="List proposals" href="/v2/storefront/proposals/tasks/list-proposals" icon="list">
    Find the proposal ID
  </Card>

  <Card title="Update proposal" href="/v2/storefront/proposals/tasks/update-proposal" icon="pen">
    Edit label, notes, or expiry
  </Card>

  <Card title="Revoke proposal" href="/v2/storefront/proposals/tasks/revoke-proposal" icon="ban">
    Withdraw a code before redemption
  </Card>
</CardGroup>
