---
title: "Updates the user info (Roles: user)"
method: POST
path: "/user/info"
tags: ["Authentication"]
---

# Updates the user info (Roles: user)

`POST /user/info`

## Request body

- UserInfoPayload
  - `name` string
  - `first_name` string
  - `last_name` string
  - `email` string
  - `number_generations` integer
  - `tax` Tax
    - `value` string
    - `type` string
  - `address` Address
    - `line1` string
    - `line2` string
    - `city` string
    - `postal_code` string
    - `state` string
    - `country` string
  - `questionnaire` Questionnaire
    - `date` integer
    - `questions` Question[]
      - `question` string
      - `answer` string
  - `preferred_content_type` string
  - `tutorials_closed` string[]
  - `missions_completed` string[]
  - `selected_project` string
  - `password` string
  - `genres` string[]
  - `platform` string
  - `whats_new_date` integer
  - `welcome_form` boolean
  - `cookie_consent` boolean
  - `marketing_consent` boolean
  - `marketing_consent_source` string
  - `fbc` string
  - `fbp` string
  - `fbclid` string
  - `rdt_cid` string
  - `referral_code` string

## Response `200`

Success

- User
  - `_id` string, required
  - `name` string
  - `first_name` string
  - `last_name` string
  - `teams` string[]
  - `email` string, required
  - `stripped_email` string
  - `password` string
  - `role` 'user', required
  - `stripe_id` string
  - `selected_project` string
  - `number_generations` integer
  - `registration_date` integer
  - `whats_new_date` integer
  - `trial_end` integer
  - `tax` Tax
    - `value` string
    - `type` string
  - `address` Address
    - `line1` string
    - `line2` string
    - `city` string
    - `postal_code` string
    - `state` string
    - `country` string
  - `tutorials_closed` string[]
  - `missions_completed` string[]
  - `credits` GenerationCreditsInfo
    - `current` number, float
    - `max` number, float
    - `reset_date` integer
    - `extra` number, float
    - `total` number, float
    - `paused` boolean
    - `has_tier_logic` boolean
    - `uses_team_credits` boolean
    - `credits_upfront` boolean
    - `grace_until` integer — If set, the user's subscription ended and their remaining credits stay spendable until this unix timestamp (30-day grace period)
    - `grace_reason` string — Stripe cancellation_details.reason at termination (e.g. cancellation_requested, payment_failed)
  - `auto_topup` AutoTopupSettings
    - `enabled` boolean
    - `threshold` number, float — When available credits (max + extra - current) drop below this, an automatic top-up is attempted
    - `credits` integer — Fixed credit amount to buy on each automatic top-up (TOPUP bracket pricing)
    - `armed` boolean — Hysteresis latch: true while the balance is above the threshold; consumed (set false) by the single attempt per below-threshold episode
  - `country` string
  - `genres` string[]
  - `platform` string
  - `welcome_form` boolean
  - `paywall` boolean
  - `video_generator` boolean
  - `subscription_stats` SubscriptionStats
    - `revenue_year` number, float
    - `revenue_12months` number, float
    - `revenue_total` number, float
    - `plan_name` string
    - `plan_interval` string
    - `is_customer` boolean
    - `became_customer_date` integer
  - `date_whats_new` integer
  - `api_key` string
  - `cookie_consent` boolean
  - `double_optin_sent` boolean
  - `credits_exhausted_at` integer
  - `credits_exhausted_synced_at` integer
  - `risk_hold` boolean
  - `marketing_consent` MarketingConsent
    - `granted` boolean
    - `date` integer
    - `source` string
  - `fbp` string
  - `fbc` string
  - `fbclid` string
  - `rdt_cid` string
  - `last_login_ip` string — IP address of last login
  - `purchase_ips` PurchaseIp[] — Capped history of client IPs captured at purchase actions (subscribe, checkout, card/payment confirmation, renewal). Used as chargeback evidence to tie a disputed transaction to the rightful cardholder.
    - `ip` string
    - `date` integer — Unix epoch seconds when this IP was captured at a purchase action
  - `preferred_content_type` string
  - `questionnaire` Questionnaire
    - `date` integer
    - `questions` Question[]
      - `question` string
      - `answer` string
  - `rate_limits_override` integer
  - `queue_concurrency_override` integer — Per-user override for the queue-runner's max concurrent running jobs. If unset, falls back to subscription.plan.metadata.queue_concurrency, then 1.
  - `referral_code` string
  - `referred_by` string — User ID of the referrer
  - `referral_credited` boolean — Whether referral bonus credits have been issued for this user
  - `subscriber_welcome_sent_at` integer
  - `discord_link_id` string — Opaque uuid shown on the user's Discord profile as their Ludo connection. Rotatable. Never the user id.
  - `discord_user_id` string — Discord snowflake of the linked account.
  - `discord_linked_at` string, date-time — When the Discord account was last linked.

## Other responses

- `400` — Error

---

[API](https://skmtc.net/ludo/apis/ludo-ai-api.md) · [All operations](https://skmtc.net/ludo/apis/ludo-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ludo/ludo-ai-api/revisions/3af866d68651/schema)
