Skip to main content
POST

Overview

Submits the signature produced in Request Challenge to mint a new API key. On success, the raw API key is returned exactly once — store it somewhere safe. GRAIL only retains a hash.
The returned api_key is shown only once. It cannot be retrieved later — if lost, revoke it and mint a new one.
The signature must be a base64-encoded Ed25519 signature of the challenge message (the full string returned by Step 1). Do not send base58 — that produces 400 invalid_signature. See the Authentication & Setup guide for a signer snippet.
This endpoint is rate-limited to 10 requests per minute per IP. Exceeding the limit returns 429 rate_limited.

Request Body

string
required
The challenge_id returned from POST /v1/auth/challenge.
string
required
Base64-encoded Ed25519 signature of the challenge message, signed by the partner wallet’s private key.
string
required
Human-readable label for this key (e.g., "production integration", "staging tests"). Shown in the key list.

Response

string
The raw API key. Format: grail_partner_<64-hex>. Pass this in the x-api-key header on all subsequent requests. Shown only once.
string
UUID of the key record. Use this to revoke the key later.
string
Always "PARTNER" for keys minted via this endpoint.
string
Echo of the key_name you supplied.
string
The partner wallet that signed the challenge.
string
ISO-8601 timestamp of key creation.

Errors