# Complete an email claim (/docs/api-reference/api/v1/auth/claim/complete/post)

`POST https://mmb-blurware-alpha.vercel.app/api/v1/auth/claim/complete`

Complete an email claim

Verifies the emailed code. Claiming does not rotate the key; it removes the anonymous expiry and lifetime cap.

Operation ID: `completeClaim`

OpenAPI document: https://mmb-blurware-alpha.vercel.app/openapi.json

## Authentication

Public endpoint; no bearer token is required.

## Request

### Request body — application/json (required)

```json
{
  "type": "object",
  "properties": {
    "claimToken": {
      "type": "string",
      "minLength": 8
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "code": {
      "type": "string",
      "minLength": 4
    }
  },
  "required": [
    "claimToken",
    "email",
    "code"
  ]
}
```

## Responses

### `200` — Key claimed. Returns the key's usage summary.

**application/json**

```json
{
  "type": "object",
  "properties": {
    "tenantId": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "anonymous",
        "claimed",
        "upgraded"
      ]
    },
    "keyPrefix": {
      "type": "string",
      "description": "First characters of the API key, for display."
    },
    "requestsUsed": {
      "type": "number"
    },
    "requestLimit": {
      "type": "number",
      "description": "Lifetime request cap for anonymous keys; tier cap otherwise."
    },
    "dailyRequestsUsed": {
      "type": "number"
    },
    "dailyRequestLimit": {
      "type": "number"
    },
    "expiresAt": {
      "type": "number",
      "description": "Anonymous key expiry, Unix epoch milliseconds."
    },
    "email": {
      "type": "string",
      "description": "Present once the key is claimed."
    }
  },
  "required": [
    "tenantId",
    "status",
    "keyPrefix",
    "requestsUsed",
    "requestLimit",
    "dailyRequestsUsed"
  ]
}
```

### `400` — The body is invalid, or the token/code pair is wrong or expired.

**application/json**

```json
{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "error": {
          "type": "string",
          "enum": [
            "invalid_request"
          ],
          "description": "Stable machine-readable error code."
        },
        "message": {
          "type": "string",
          "description": "Human-readable summary."
        },
        "hint": {
          "type": "string",
          "description": "Endpoint path that resolves this error, when one exists."
        }
      },
      "required": [
        "error",
        "message"
      ]
    },
    {
      "type": "object",
      "properties": {
        "error": {
          "type": "string",
          "enum": [
            "invalid_claim"
          ],
          "description": "Stable machine-readable error code."
        },
        "message": {
          "type": "string",
          "description": "Human-readable summary."
        },
        "hint": {
          "type": "string",
          "description": "Endpoint path that resolves this error, when one exists."
        }
      },
      "required": [
        "error",
        "message"
      ]
    }
  ]
}
```

### `429` — Too many requests. Mirrors the Retry-After header.

**application/json**

```json
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string",
      "enum": [
        "rate_limited"
      ],
      "description": "Stable machine-readable error code."
    },
    "message": {
      "type": "string",
      "description": "Human-readable summary."
    },
    "hint": {
      "type": "string",
      "description": "Endpoint path that resolves this error, when one exists."
    }
  },
  "required": [
    "error",
    "message"
  ]
}
```

### `503` — The gateway is unreachable.

**application/json**

```json
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string",
      "enum": [
        "service_unavailable"
      ],
      "description": "Stable machine-readable error code."
    },
    "message": {
      "type": "string",
      "description": "Human-readable summary."
    },
    "hint": {
      "type": "string",
      "description": "Endpoint path that resolves this error, when one exists."
    }
  },
  "required": [
    "error",
    "message"
  ]
}
```