---
title: "Register an agent: a sandbox API key with no body required"
method: POST
path: "/api/register"
tags: ["Onboarding"]
---

# Register an agent: a sandbox API key with no body required

`POST /api/register`

## Request

- Base URL: `https://www.adadiamonds.com`
- URL: `https://www.adadiamonds.com/api/register`
- Auth: none required

Zero-friction registration. POST with an empty body, plain text, a form, or the same JSON as `/api/v1/keys` and get a working key back at once: no account, no email, no approval. `name` defaults to `self-serve agent key` and `env` to `sandbox`; send `env: "production"` for a production key with the same public read scopes. A body shaped like RFC 7591 client metadata (`redirect_uris`, `client_name`) is treated as OAuth dynamic client registration instead. Also served at `/register`, `/signup`, and `/api/agents/register`.

## Request body

- ApiKeyRequest
  - `name` string, required: A short label for this key.
  - `env` 'sandbox' | 'production'
  - `scopes` string[]
  - `contact_email` string, email

## Response `201`

The key. Store it now; it is not retrievable.

- ApiKey
  - `object` 'api_key', required
  - `api_key` string, required: Shown once. Store it.
  - `key_id` string, required
  - `name` string
  - `scopes` string[], required
  - `env` 'sandbox' | 'production', required
  - `usage` string
  - `documentation_url` string, uri

## Other responses

- `403`: The credential is valid but lacks the required scope, or the scope cannot be self-issued.
- `429`: Over the rate limit. Wait `Retry-After` seconds; a credential raises the limit.

---

[API](https://skmtc.dev/adadiamonds/apis/ada-diamonds-agent-api.md) · [All operations](https://skmtc.dev/adadiamonds/apis/ada-diamonds-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adadiamonds/apis/ada-diamonds-agent-api/revisions/2b2ed3201815?raw)
