---
title: "List plan grants (platform admin only; hashed codes never returned)"
method: GET
path: "/v1/admin/plan-grants"
tags: ["admin"]
---

# List plan grants (platform admin only; hashed codes never returned)

`GET /v1/admin/plan-grants`

## Request

- Base URL: `https://postbag.dev`
- URL: `https://postbag.dev/v1/admin/plan-grants`
- Auth: HTTP bearer

Platform-admin only: allowed when the caller's email (the session user's email, or — for an API key — the owner member's email of the key's organization) is in the server's PLATFORM_ADMIN_EMAILS env var (comma-separated, empty by default). Any other caller gets 404 not_found, not 403, so a self-hosted operator who never sets PLATFORM_ADMIN_EMAILS never sees this endpoint exist.

## Response `200`

ok

- PlanGrant[]
  - `id` string, required
  - `plan` 'free' | 'pro' | 'team' | 'selfhost', required
  - `note` string, nullable, required
  - `expires_at` string, nullable, required
  - `plan_duration_days` integer, nullable, required
  - `max_redemptions` integer, required
  - `redeemed_count` integer, required
  - `created_by_user_id` string, required
  - `created_at` string, required
  - `revoked_at` string, nullable, required

## Other responses

- `400`: Error
- `401`: Error
- `403`: Error
- `404`: Not found
- `409`: Error
- `422`: Error

---

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