---
title: "Create a free-tier API key with an email (no auth required)"
method: POST
path: "/v1/keys/create"
tags: ["Keys & Billing"]
---

# Create a free-tier API key with an email (no auth required)

`POST /v1/keys/create`

## Request

- Base URL: `https://api.insumermodel.com`
- URL: `https://api.insumermodel.com/v1/keys/create`
- Auth: none required

Instant free-tier signup: send an email address and an app name, get a working `insr_live_` key in the response. Free tier = 10 free verifications plus 100 requests a day. The key string is returned exactly once, in this response; it is never emailed (a management link is emailed instead). One free key per email; keys are also rate-limited per client address. For paid tiers use POST /v1/keys/checkout (card) or POST /v1/keys/purchase (crypto); for wallet-native keys with no email use POST /v1/keys/buy. Every key minted here (and on every other creation path) signs under the v2 scheme: attest responses carry `kid: insumer-attest-v2`, trust responses `insumer-trust-v2`, and `/v1/attest` thresholds must be decimal strings (a JSON number is rejected with 400). Pre-cutover v1 keys keep their original behavior. **Response envelope note**: standalone endpoint — returns a flat `{success, key, ...}` object, NOT the `{ok, data, meta}` envelope.

## Request body

- object
  - `email` string, email, required: Owner email. One free key per email.
  - `appName` string, required: Name for this key (your app or agent name).
  - `tier` 'free', required: Must be 'free'. Paid tiers use /v1/keys/checkout or /v1/keys/purchase.

## Response `200`

Key created (shown once — save it now)

- object
  - `success` boolean
  - `key` string
  - `name` string
  - `tier` string
  - `dailyLimit` integer
  - `apiKeyCredits` integer

## Other responses

- `400`: Missing or invalid email, appName, or tier. Like all error responses on this standalone endpoint, the body is a flat object with a single "error" string, not the standard envelope.
- `405`: Method not allowed (only POST supported)
- `409`: A free key already exists for this email (flat error body)
- `429`: Too many key requests from this client — try again tomorrow (flat error body)
- `500`: Unexpected server error. Safe to retry; no credits are charged on a 500. Router endpoints return the standard error envelope; standalone endpoints (the ones whose 200 is a flat object) return a flat {"error": "..."} object.

---

[API](https://skmtc.dev/insumermodel/apis/insumerapi.md) · [All operations](https://skmtc.dev/insumermodel/apis/insumerapi/llms.txt) · [OpenAPI document](https://skmtc.dev/insumermodel/apis/insumerapi/revisions/91f56fe9e3d8?raw)
