---
title: "Mint a starter voucher (web page only)"
method: POST
path: "/vouchers/v1/mints"
tags: ["Vouchers"]
---

# Mint a starter voucher (web page only)

`POST /vouchers/v1/mints`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/vouchers/v1/mints`
- Auth: none required

**Not an agent operation.** This exists so a page on run402.com can hand a human a promo code to paste into an agent's prompt. Agents call `POST /vouchers/v1/redemptions` with a code they were given; they have no reason to mint one.

Unauthenticated and rate-limited per IP. The amount, expiry, and issuing account are server-side constants — nothing in the request body can change what a voucher is worth.

`context` is an opaque JSON object stored verbatim and never interpreted by the platform, in the spirit of a `metadata` field. It lets whoever operates the page correlate a minted code back to where it came from; the gateway neither reads nor reports any field inside it.

Returns `503` when no account is configured for anonymous minting, so a caller can fail open to a codeless prompt rather than showing an error.

## Request body

- object
  - `context` object: Opaque caller-defined metadata, at most 4 KB serialized.

## Response `201`

Voucher minted

- object
  - `code` string
  - `amount_usd_micros` integer
  - `expires_at` string, date-time

## Other responses

- `400`: VALIDATION_FAILED — `context` is not an object, or exceeds 4 KB serialized
- `429`: RATE_LIMITED — too many mint requests from this IP
- `503`: PUBLIC_MINT_NOT_ENABLED — no account is configured for anonymous minting; fail open to a codeless prompt

---

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