---
title: "Create sandbox API key"
method: POST
path: "/v1/api-keys/create-sandbox"
tags: ["API key"]
---

# Create sandbox API key

`POST /v1/api-keys/create-sandbox`

Create a sandbox API key (`sk_test_...`) for local development, CI, and integration tests. Sandbox keys never charge credits. The plaintext secret is returned once and cannot be retrieved later. Live keys cannot be created from the API — create those at https://app.fiber.ai. First-time users without any key yet: sign up at https://fiber.ai or via POST /v1/account/send-otp + verify-otp.

<span>⚡ <strong>Rate limit:</strong> 30 requests per 1 minute</span>

<span>💰 <strong>Cost:</strong> FREE! No credits are charged for this API.&nbsp;<span title="Pricing shown is default pricing. Actual pricing may vary.">ⓘ</span></span>

## Request body

- object
  - `apiKey` string, required — Your Fiber API key
  - `name` string, required — Human-readable label to identify this key later (e.g. 'CI runner', 'local dev').

## Response `200`

Default Response

- object
  - `output` object, required
    - `id` string, required — id of your api key. This or prefix can be used to identify the key.
    - `name` string, required — Name of your api key.
    - `prefix` string, required — Non secret prefix of your api key. Used for identification.
    - `expiresAt` string, date-time, nullable, required — When the key expires. Null implies key never expires.
    - `maxCredits` number, nullable, required — The lifetime credit ceiling for this key. Null implies key has no per-key credit limit.
    - `creditsUsed` number, required — Credits consumed by this key so far over its lifetime.
    - `createdAt` string, date-time, required — When the key was created, as an ISO 8601 timestamp.
    - `isRevoked` boolean, required — Whether the key has been revoked. Revoked keys can no longer authenticate. Only ever true in listings that include revoked keys.
    - `apiKey` string, required — The plaintext sandbox API key (starts with sk_test_). Shown once — store it securely, it cannot be retrieved later.
  - `chargeInfo` union, required
    - object — Credits were charged immediately for this operation
      - `method` 'charged-now', required
      - `creditsCharged` number, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — Credits will be charged after the operation completes
      - `method` 'charging-later', required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — Credits that were charged for an asynchronous operation
      - `method` 'charged-for-async-process', required
      - `creditsCharged` number, required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — No credits were charged for this operation
      - `method` 'free', required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
    - object — Credits were refunded for this operation
      - `method` 'credits-refunded', required
      - `creditsRefunded` number, required
      - `message` string, required
      - `lowCreditAlert` object, nullable — Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required — URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required — Human-readable credits warning.
        - `availableCredits` number, required — Number of credits remaining in the current billing period.
  - `warnings` object[], nullable — Warnings about extraneous fields in request
    - `field` string, required — Full path to extraneous field (e.g., 'searchParams.ExtraField')
    - `message` string, required — Warning message
  - `advice` string[], nullable — Tips, recommendations, and suggestions for using this API effectively.

## Other responses

- `400` — Default Response
- `401` — Default Response
- `402` — Default Response
- `403` — Default Response
- `404` — Default Response
- `422` — Default Response
- `429` — Default Response
- `500` — Default Response
- `503` — Default Response

## Changes

- **2026-09-01** `f8a78c729da9` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/fiber/apis/fiber-ai-api/changes/v1/api-keys/create-sandbox/post.md)

---

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