POST /v1/auth/turnkey/relink
Re-run the Turnkey email link for the signed-in account, after an email was added and verified in Turnkey. `turnkey_session` is the kit session JWT (`Session.token`). Answers `{ ok: true, merged }` when the email is now on this account and `{ ok: false }` when it was kept separate, without saying why. Session only (not an API key). Rate-limited per caller and per account: a 429 carries `retry_after_seconds`.
Re-run the Turnkey email link for the signed-in account, after an email was added and verified in Turnkey. turnkey_session is the kit session JWT (Session.token). Answers { ok: true, merged } when the email is now on this account and { ok: false } when it was kept separate, without saying why. Session only (not an API key). Rate-limited per caller and per account: a 429 carries retry_after_seconds.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/auth/turnkey/relink" \ -H "Content-Type: application/json" \ -d '{ "turnkey_session": "string" }'{ "ok": true, "merged": true}{ "error": "string", "message": "string", "feature": "string", "field": "string", "plan": "string", "retry_after_sec": 0, "retry_after_seconds": 0, "reason": "string", "issues": [ null ], "trace_id": "string"}{ "error": "string", "message": "string", "feature": "string", "field": "string", "plan": "string", "retry_after_sec": 0, "retry_after_seconds": 0, "reason": "string", "issues": [ null ], "trace_id": "string"}{ "error": "string", "message": "string", "feature": "string", "field": "string", "plan": "string", "retry_after_sec": 0, "retry_after_seconds": 0, "reason": "string", "issues": [ null ], "trace_id": "string"}{ "error": "string", "message": "string", "feature": "string", "field": "string", "plan": "string", "retry_after_sec": 0, "retry_after_seconds": 0, "reason": "string", "issues": [ null ], "trace_id": "string"}{ "error": "string", "message": "string", "feature": "string", "field": "string", "plan": "string", "retry_after_sec": 0, "retry_after_seconds": 0, "reason": "string", "issues": [ null ], "trace_id": "string"}{ "error": "string", "message": "string", "feature": "string", "field": "string", "plan": "string", "retry_after_sec": 0, "retry_after_seconds": 1, "reason": "string", "issues": [ null ], "trace_id": "string"}{ "error": "string", "message": "string", "feature": "string", "field": "string", "plan": "string", "retry_after_sec": 0, "retry_after_seconds": 0, "reason": "string", "issues": [ null ], "trace_id": "string"}POST /v1/auth/terms/accept POST
Record that the signed-in account accepts the terms. `version` must be the current one (GET /v1/auth/me `terms.current`); another value is a 400 `terms_version_mismatch` carrying `current`. Accepting twice keeps the first timestamp. Nothing is blocked on acceptance.
POST /v1/auth/ws-token POST
Exchange the session cookie for a short-lived WSS JWT.