---
title: "Verify"
method: GET
path: "/api/v1/auth/verify"
tags: ["grandline-auth"]
---

# Verify

`GET /api/v1/auth/verify`

## Request

- Base URL: `https://grandline.luzomi.com`
- URL: `https://grandline.luzomi.com/api/v1/auth/verify`
- Auth: none declared

Single-use verify endpoint.

- Hash the incoming token (we never store cleartext).
- Look up in Redis first (sub-ms), Postgres second.
- On hit + unexpired: create the user, issue a default API key,
  delete the signup_attempt row + Redis key, and render the
  one-shot HTML page with the cleartext key.
- Repeat signups for the same email are tolerated (idempotent in
  G-016); the user row already exists, just attach another default
  key. (Avoids the "I lost my key, can't sign back in" footgun.)

## Query parameters

- `token` string, required: Magic-link token from the verification email

## Response `200`

Successful Response

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/luzomi/apis/grandline-api.md) · [All operations](https://skmtc.dev/luzomi/apis/grandline-api/llms.txt) · [OpenAPI document](https://skmtc.dev/luzomi/apis/grandline-api/revisions/4ce06aea012b?raw)
