---
title: "Fingerprint Signup"
method: POST
path: "/auth/signup"
tags: ["General APIs with JWT"]
---

# Fingerprint Signup

`POST /auth/signup`

Create an account with no email or password and mint the fingerprint that logs into it.

Fully headless signup, meant for agents and scripts: no email, no password, no verification
step, nothing that needs a human. Send an empty body: `username` is only a display name, it
is not part of the login, and asking for a taken one fails with 409.

When the response carries a non-null `api_key`, it works immediately as the `X-API-Key`
header. Key minting is best-effort, so signup still succeeds when `api_key` is null. Renting
also requires a balance sufficient to cover the minimum rental window; signup credit is conditional.

Despite the name, the `fingerprint` is not WebAuthn, a passkey or biometrics — it is a random
32-character string. It is returned exactly once, it is the login for the lium.io dashboard,
and it is the only way back into an account that has no email, so the caller must store it.

## Request body

- FingerprintSignupRequest
  - `referral_code` string, nullable
  - `custom_referral_code` string, nullable
  - `signup_attribution` SignupAttributionDto — Bounded campaign data accepted only during account creation.
    - `utm_source` string, required
    - `utm_medium` string, required
    - `utm_campaign` string, required
    - `utm_id` string, nullable
    - `utm_content` string, nullable
    - `utm_term` string, nullable
    - `landing_path` string, required
  - `username` string, nullable

## Response `200`

Successful Response

- FingerprintSignupResponseDto
  - `user_id` string, uuid, required
  - `username` string, required
  - `fingerprint` string, required — Account credential: a random 32-character string, not a passkey or biometrics. Shown once — it is the dashboard login and the only way to recover the account, so store it.
  - `api_key` string, nullable — API key for the new account. When present, it is usable right away as the `X-API-Key` header. Null if minting it failed.
  - `signup_credit_granted` boolean — Whether the one-time signup credit landed. It is granted only when `ENABLE_FREE_CREDIT` is enabled and no other account has claimed it from the client IP.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/lium/apis/lium-backend-api.md) · [All operations](https://skmtc.dev/lium/apis/lium-backend-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lium/lium-backend-api/revisions/57db0a9348db/schema)
