---
title: "Mint an sp_ API key"
method: POST
path: "/keys"
---

# Mint an sp_ API key

`POST /keys`

## Request

- Base URL: `https://ship.page`
- URL: `https://ship.page/keys`
- Auth: HTTP bearer

Requires a Firebase ID token (sign in at ship.page). The key is shown once — store it.

## Response `201`

Key minted.

- object
  - `accountId` string, required
  - `apiKey` string, required: sp_… key, shown once.
  - `keyId` string, required: SHA-256 of the key.
  - `note` string, required

## Other responses

- `401`: Missing or invalid credential.
- `429`: Rate limited. Back off per the Retry-After header (60s).

## Changes

- **2026-10-20** `99aad34506e8`: 28 warning
  - added the new `already_live` enum value to the `code` response property for the response status `401`
  - added the new `already_live` enum value to the `code` response property for the response status `429`
  - added the new `blocked` enum value to the `code` response property for the response status `401`
  - added the new `blocked` enum value to the `code` response property for the response status `429`
  - …24 more

[Operation history](https://skmtc.dev/ship/apis/ship-page/changes/keys/post.md)

---

[API](https://skmtc.dev/ship/apis/ship-page.md) · [All operations](https://skmtc.dev/ship/apis/ship-page/llms.txt) · [OpenAPI document](https://skmtc.dev/ship/apis/ship-page/revisions/99aad34506e8?raw)
