---
title: "Exchange email + password for a fresh API key"
method: POST
path: "/v1/auth/login"
tags: ["Auth"]
---

# Exchange email + password for a fresh API key

`POST /v1/auth/login`

Each call issues a **new** key; existing keys keep working. The raw key
is returned only in this response. Sandbox-tier users receive
`pd_test_*` keys; all other tiers receive `pd_live_*`.

## Request body

- object
  - `email` string, email, required
  - `password` string, password, required

## Response `200`

Key issued.

- AuthKeyResponse
  - `success` boolean
  - `message` string
  - `data` object
    - `api_key` string
    - `prefix` string
    - `user` User
      - `id` integer
      - `email` string, email
      - `name` string
      - `tier` 'free' | 'starter' | 'pro' | 'enterprise' | 'sandbox'

## Other responses

- `401` — Missing or invalid API key (`unauthenticated`).
- `422` — Invalid payload (`validation_failed` / `entry_limit_exceeded`).

---

[API](https://skmtc.net/proofdraw/apis/proofdraw-api.md) · [All operations](https://skmtc.net/proofdraw/apis/proofdraw-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/proofdraw/proofdraw-api/revisions/5d4ce7cb355d/schema)
