---
title: "Create a scoped API key (max 10/account). Raw key shown once — store securely. Scope: 'team', 'workspace', or 'resource'"
method: POST
path: "/api/v1/api-keys"
tags: ["api-keys"]
---

# Create a scoped API key (max 10/account). Raw key shown once — store securely. Scope: 'team', 'workspace', or 'resource'

`POST /api/v1/api-keys`

## Request

- Base URL: `https://crispy.sh`
- URL: `https://crispy.sh/api/v1/api-keys`
- Auth: HTTP bearer

## Request body

- object
  - `name` string: Human-readable label for the key (optional).
  - `scope` 'team' | 'workspace' | 'resource': Key scope. Defaults to 'team'.
  - `permissions` string[]: Permissions list e.g. ['campaigns:read','inbox:read']. Null/omitted = full access.
  - `expires_in_days` number: Days until the key expires. Omit for no expiry.

## Response `200`

Success

## Other responses

- `401`: Missing or expired API key
- `403`: Insufficient key scope or permission denied
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/crispy/apis/crispy-rest-api.md) · [All operations](https://skmtc.dev/crispy/apis/crispy-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crispy/apis/crispy-rest-api/revisions/6bed0974d9ce?raw)
