> ## 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.

# List proposals

> List the storefront's proposals, filterable by status and operator

`GET /api/v2/storefront/proposals`

Returns the proposals the seller has created, as compact summary rows. Filter by lifecycle `status` or by buyer `operatorId`, and page with `limit` and `offset`. Summary rows omit the frozen `snapshot` — call [Get proposal](/v2/storefront/proposals/tasks/get-proposal) when you need the saved products and proposals.

## Request

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.interchange.io/api/v2/storefront/proposals?status=active&limit=20" \
    -H "Authorization: Bearer $SCOPE3_API_KEY"
  ```

  ```bash Filter by operator theme={null}
  curl "https://api.interchange.io/api/v2/storefront/proposals?operatorId=acme&limit=20&offset=0" \
    -H "Authorization: Bearer $SCOPE3_API_KEY"
  ```
</CodeGroup>

## Parameters

| Param        | Type    | Required | Notes                                                                     |
| ------------ | ------- | -------- | ------------------------------------------------------------------------- |
| `status`     | enum    | No       | Filter by lifecycle status: `active`, `redeemed`, `expired`, or `revoked` |
| `operatorId` | string  | No       | Filter by buyer operator (1..255 chars)                                   |
| `limit`      | integer | No       | Page size (default 20, max 100)                                           |
| `offset`     | integer | No       | Rows to skip (default 0)                                                  |

## 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",
    "createdAt": "2026-06-07T15:00:00Z",
    "createdBy": "seller@acme-media.example.com",
    "firstViewedAt": null,
    "lastViewedAt": null,
    "redeemedAt": null,
    "redeemedInMediaBuyId": null
  }
]
```

The endpoint returns a JSON array of summary rows (offset-paginated via `limit`/`offset`). Each row omits the `snapshot` field; fetch one proposal by `id` to read the frozen offer. See [Pagination](/v2/reference/pagination) for the full meta block.

## Errors

* `400 VALIDATION_ERROR` — invalid `status` value or out-of-range `limit`/`offset`.

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="Get proposal" href="/v2/storefront/proposals/tasks/get-proposal" icon="magnifying-glass">
    Read one proposal with its snapshot
  </Card>

  <Card title="Create proposal" href="/v2/storefront/proposals/tasks/create-proposal" icon="plus">
    Freeze a discovery offer and mint a code
  </Card>

  <Card title="Proposals overview" href="/v2/storefront/proposals/overview" icon="file-signature">
    Lifecycle and concepts
  </Card>
</CardGroup>
