---
title: "POST /v1/workspaces/{workspaceId}/api-keys"
method: POST
path: "/v1/workspaces/{workspaceId}/api-keys"
---

# POST /v1/workspaces/{workspaceId}/api-keys

`POST /v1/workspaces/{workspaceId}/api-keys`

## Request

- Base URL: `https://api.bangermail.com`
- URL: `https://api.bangermail.com/v1/workspaces/{workspaceId}/api-keys`
- Auth: HTTP bearer

## Request body

- CreateWorkspaceApiKeyRequest
  - `name` string, required
  - `scopes` ApiKeyScope[], required
  - `expires_at` string, date-time

## Response `201`

API key created. The token is returned only once.

- object
  - `data` object, required
    - `id` string, uuid, required
    - `name` string, required
    - `prefix` string, required
    - `scopes` ApiKeyScope[], required
    - `expires_at` string, date-time
    - `last_used_at` string, date-time
    - `created_at` string, date-time, required
    - `token` string, required
    - `smtp` SmtpSubmissionSettings: How an app that only sends over SMTP (Supabase Auth, Auth0, WordPress, framework mailers) sends through Banger. The password is an API key with mail:send; Banger relays each message as written and answers only once every check has passed. Present only for a key that can send mail, in an environment whose submission host answers.
      - `host` string, required
      - `port` integer, required: Implicit TLS, recommended.
      - `starttls_port` integer, required: STARTTLS before AUTH.
      - `alternate_ports` object, required: The same two listeners, for networks that block 465 and 587.
        - `tls` integer, required
        - `starttls` integer, required
      - `username` string, required: Any username works; the key alone identifies the workspace and product.

---

[API](https://skmtc.dev/bangermail/apis/banger-api.md) · [All operations](https://skmtc.dev/bangermail/apis/banger-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bangermail/apis/banger-api/revisions/0705eb6ef2bc?raw)
