Users
Get a user
Returns the full user resource. Timing: eligible_products[] and missing_fields are empty/null on a freshly CREATED user — they populate only once verification has run. Read them AFTER the user leaves CREATED (or after your Kira contact flips it), not immediately after POST. Gate your flow on status (verification_status is advisory and can contradict it).
GET
Get a user
Authorizations
Access token from POST /auth (the data.access_token value).
API key issued by Kira. Required on every request, including /auth.
Headers
Example:
"2026-04-14"
Path Parameters
User UUID.
Response
Success.
Available options:
individual, business Available options:
unverified, started, in_review, verified, rejected, needs_action Available options:
male, female, other Previous
Update a userFill **scalar eligibility fields** after KYC so a product flips `eligible: true`. Run this once you've read `GET /v1/users/{id}` and seen tokens in `missing_fields` (e.g. `account_purpose`, `immigration_status`, `additional_info:has_us_bank_account`).
**Use `PUT`, NOT `PATCH`.** `PUT /v1/users/{id}` → `200` (smoke-confirmed); `PATCH /v1/users/{id}` → `403` (not a route). The `PATCH` 403 body is a misleading gateway-level auth error ("Invalid key=value pair … in Authorization header") — it means "PATCH is not supported, use PUT"; it does NOT mean your `Authorization` header is wrong.
**Field rules:**
- `account_purpose` must be one of: `receive_payments | manage_professional_income | make_payments | manage_personal_funds | investment_trading | charitable_donations | investment_purposes | operating_a_company | payments_to_friends_or_family_abroad | personal_or_living_expenses | purchase_goods_and_services | protect_wealth | receive_salary | receive_payment_for_freelancing` (any other value → `400 invalid_enum_value`).
- `immigration_status` ∈ { `"U.S. Citizen"`, `"Permanent U.S. Resident"`, `"Lawful Permanent Resident of U.S."`, `"Non-Permanent U.S. Resident"`, `"Non-Resident of U.S."` } — exact strings.
- `additional_info.has_us_bank_account` / `has_denied_bank_account` = `"yes"` / `"no"` **strings** (omitting them silently declares "no").
- `current_employer` only when `employment_status = "employed"`.
- **Do NOT send `ssn`** for non-US individuals; **do NOT send `ein`** for non-US businesses (use `international_entity_type`).
**Scope:** a scalar `PUT` clears scalar gaps but **NOT document gaps** — documents are file uploads (re-submit `identifying_information[].documents[]` to clear those). After the PUT, re-read `GET /v1/users/{id}` and confirm `eligible_products[]` / `missing_fields` updated.
Next
Get a user