---
title: "Record Signup Source"
method: POST
path: "/api/v1/users/signup-source"
tags: ["users"]
---

# Record Signup Source

`POST /api/v1/users/signup-source`

## Request

- Base URL: `https://api.trueight.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.trueight.com/api/v1/users/signup-source`
- Auth: HTTP bearer

Record WHY this account was created — the ?src= tag the visitor arrived
with (audit/OUTREACH.md). Write-once and time-boxed:

- the tag only lands while ``signup_source`` is NULL (conditional UPDATE,
  the same exactly-once shape as the lifecycle-email markers), and
- only within the attribution window after account creation, so an old
  account cannot be re-attributed by a later tagged visit.

Refusals are 200s with ``recorded: false`` — a rejected tag simply leaves
the user UNKNOWN, and the frontend must not retry forever on an error.

## Request body

- SignupSourceRequest
  - `source` string, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/trueight/apis/tru8-evidence-research-api.md) · [All operations](https://skmtc.dev/trueight/apis/tru8-evidence-research-api/llms.txt) · [OpenAPI document](https://skmtc.dev/trueight/apis/tru8-evidence-research-api/revisions/5684065fa01a?raw)
