Skip to main content
PATCH
/
api
/
v1
/
users
/
me
Update Me
curl --request PATCH \
  --url https://roughy-api-staging.fly.dev/api/v1/users/me \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "first_name": "Alex",
  "last_name": "Schmidt",
  "two_factor_enabled": true
}
'
{
  "created_at": "2026-04-15T08:23:11.452000Z",
  "email": "alex@example.com",
  "first_name": "Alex",
  "id": "019de7dd-d3cd-7d42-886e-ac55f552b3fb",
  "last_name": "Schmidt",
  "two_factor_enabled": false
}

Documentation Index

Fetch the complete documentation index at: https://docs.roughy.ai/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Either your Supabase session JWT (UI flows) or an API key minted via POST /api-keys (programmatic flows). Pass it as Authorization: Bearer <token>. The server inspects the token format and routes to JWT or API-key verification automatically.

Body

application/json

Partial profile update; absent fields stay as-is.

first_name / last_name accept null to clear the value (use model_fields_set server-side to distinguish "omitted" from "explicit null"). two_factor_enabled is a bool toggle. Length caps mirror the Postgres Text column reality plus a sensible UI cap; email is intentionally not editable here.

first_name
string | null
Maximum string length: 120
last_name
string | null
Maximum string length: 120
two_factor_enabled
boolean | null

Response

Successful Response

Public projection of the caller's own users row.

No auth_user_id (Supabase identity, not part of our public API), no stripe_customer_id (billing-internal), no is_admin (role flag, not a profile field). email and deleted_at stay so the UI can render the account state honestly.

id
string<uuid>
required
email
string
required
first_name
string | null
required
last_name
string | null
required
two_factor_enabled
boolean
required
deleted_at
string<date-time> | null
required
created_at
string<date-time>
required