---
title: "Redeem a one-time starter token for an API key carrying the read and act scopes. The founder copied the starter from /app/connect and pasted it into this session; the key is MINTED at redemption and returned exactly once, so store it immediately. The token dies in the same moment and starters expire after 15 minutes either way. No authentication (this is how a session obtains a key). Rate limited per IP."
method: POST
path: "/api/v1/starter/redeem"
---

# Redeem a one-time starter token for an API key carrying the read and act scopes. The founder copied the starter from /app/connect and pasted it into this session; the key is MINTED at redemption and returned exactly once, so store it immediately. The token dies in the same moment and starters expire after 15 minutes either way. No authentication (this is how a session obtains a key). Rate limited per IP.

`POST /api/v1/starter/redeem`

## Request

- Base URL: `https://afterlaunch.io`
- URL: `https://afterlaunch.io/api/v1/starter/redeem`
- Auth: none required

## Request body

- object
  - `token` string, required: The one-time claim token from the pasted starter text.

## Response `200`

Redeemed. Returns api_key (shown exactly once, read + act, 90-day expiry), enrollment_id and expires_at.

## Other responses

- `400`: A body that does not match the schema. The body is strict: unknown fields are rejected.
- `404`: No live starter matches this token, or the door is not open.
- `410`: The starter was already redeemed, or it expired. Ask the founder for a fresh one.
- `429`: Rate limited. Honour Retry-After.
- `500`: The redemption could not be completed. Nothing was handed over.
- `502`: The starter was valid but the key could not be created. Nothing was handed over.

---

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