---
title: "Create a new API key"
method: POST
path: "/secrets/api/keys"
tags: ["Secrets"]
---

# Create a new API key

`POST /secrets/api/keys`

Use when issuing a new API key (e.g. for a service account or for the current user). Provide service_account_id to create for a service account.

## Request body

- CreateAPIKeyRequest
  - `expires_at` string, date-time
  - `name` string, required
  - `service_account_id` string
  - `type` 'private_key' | 'publishable_key' | 'integration', required

## Response `201`

Created

- CreateAPIKeyResponse
  - `api_key` string
  - `secret` SecretResponse
    - `created_at` string, date-time
    - `display_id` string
    - `expires_at` string, date-time
    - `id` string
    - `last_used_at` string, date-time
    - `name` string
    - `provider` 'flexprice' | 'stripe' | 's3' | 'hubspot' | 'razorpay' | 'chargebee' | 'quickbooks' | 'zoho_books' | 'nomod' | 'moyasar' | 'paddle'
    - `roles` string[] — RBAC roles
    - `status` 'published' | 'deleted' | 'archived'
    - `type` 'private_key' | 'publishable_key' | 'integration'
    - `updated_at` string, date-time
    - `user_type` 'user' | 'service_account'

## Other responses

- `400` — Invalid request
- `500` — Server error

## Changes

- **2026-05-18** `8ec2edea6b20` — 4 warning
  - removed the optional property `details` from the response with the `400` status
  - removed the optional property `details` from the response with the `500` status
  - added the new `too_many_requests` enum value to the `code` response property for the response status `400`
  - added the new `too_many_requests` enum value to the `code` response property for the response status `500`
- **2026-04-10** `5856ed2fbdd6` — 1 warning
  - added the new `zoho_books` enum value to the `secret/provider` response property for the response status `201`
- **2026-04-06** `95af41a12111` — 4 warning, 8 info
  - removed the optional property `error` from the response with the `400` status
  - removed the optional property `error` from the response with the `500` status
  - removed the optional property `success` from the response with the `400` status
  - removed the optional property `success` from the response with the `500` status
  - …8 more
- **2026-04-04** `9013edc21339` — 1 breaking
  - the `expires_at` request property type/format changed from `string`/`` to `string`/`date-time`
- **2026-03-20** `fdc2d8c76b76` — 1 warning
  - added the new `paddle` enum value to the `secret/provider` response property for the response status `201`

[Change history](https://skmtc.dev/flexprice/apis/flexprice-api/changes/secrets/api/keys/post.md)

---

[API](https://skmtc.dev/flexprice/apis/flexprice-api.md) · [All operations](https://skmtc.dev/flexprice/apis/flexprice-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/flexprice/flexprice-api/revisions/8ec2edea6b20/schema)
