> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kirafin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a user

> Changes an existing user. **Only the fields you send are written** — everything else is left alone.

Use it to fill in what `missing_fields` still asks for.

A missing **file** works differently: sending other fields will not clear it. You have to send the file itself again in `identifying_information[].documents[]`.

Touching a field the user's category needs for verification starts the check again and the response says `requires_reverification: true`. A successful change emits a `user.updated` webhook (see [Webhooks](/webhooks/overview)).



## OpenAPI

````yaml /openapi/kira-api.2026-04-14.json put /v1/users/{user_id}
openapi: 3.1.0
info:
  title: Kira API
  version: '2026-04-14'
  description: >-
    REST API for users, KYC/KYB verification, virtual accounts, payouts,
    recipients, and webhooks. Every request requires an `x-api-key` header and a
    bearer access token (see Authentication). Pin your account to version
    `2026-04-14` before integrating.
  contact:
    name: Kira API Support
    email: support@kirafin.ai
servers:
  - url: https://api.balampay.com
    description: Production
  - url: https://api.balampay.com/sandbox
    description: Sandbox
security:
  - bearerAuth: []
    apiKeyAuth: []
tags:
  - name: Authentication
  - name: Versioning
  - name: Users
  - name: Virtual Accounts
  - name: Recipients
  - name: Quotations
  - name: Payouts
  - name: Reference
paths:
  /v1/users/{user_id}:
    put:
      tags:
        - Users
      summary: Update a user
      description: >-
        Changes an existing user. **Only the fields you send are written** —
        everything else is left alone.


        Use it to fill in what `missing_fields` still asks for.


        A missing **file** works differently: sending other fields will not
        clear it. You have to send the file itself again in
        `identifying_information[].documents[]`.


        Touching a field the user's category needs for verification starts the
        check again and the response says `requires_reverification: true`. A
        successful change emits a `user.updated` webhook (see
        [Webhooks](/webhooks/overview)).
      operationId: put_v1-users-user-id
      parameters:
        - in: path
          name: user_id
          required: true
          schema:
            type: string
            format: uuid
          description: The id of the user to change. It must be a UUID.
        - in: header
          name: X-Api-Version
          required: false
          description: >-
            Version applied to this request. It wins over your account's pinned
            version — see [Versioning](/using-the-api/versioning).
          schema:
            type: string
            example: '2026-04-14'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateUserRequest'
            examples:
              update-user-eligibility-fields:
                summary: Update User — eligibility fields
                value:
                  immigration_status: Non-Resident of U.S.
                  additional_info:
                    has_us_bank_account: 'No'
                    has_denied_bank_account: 'No'
                  current_employer: Acme
                  account_purpose: receive_payments
                  occupation: Engineer
      responses:
        '200':
          description: The change was applied. `updated_fields` says what was written.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserUpdateResult'
              example:
                id: e687484f-74ef-43a8-a68a-5bf78aa2e721
                type: business
                email: ops@example.com
                status: CREATED
                verification_status: unverified
                created_at: '2026-09-01T12:00:00.000Z'
                updated_at: '2026-09-01T12:05:00.000Z'
                verification_mode: automatic
                metadata:
                  order_id: A-17
                formation_country: USA
                business_legal_name: Northwind Trading LLC
                registered_address:
                  street_line_1: 1 Market Street
                  street_line_2: ''
                  city: San Francisco
                  subdivision: CA
                  postal_code: '94105'
                  country: USA
                requires_reverification: false
                verification_triggered: false
                updated_fields:
                  - metadata
                eligible_products:
                  - product_id: usa-virtual-accounts
                    product_code: usa-virtual-accounts
                    product_name: USA Virtual Accounts
                    eligible: false
                    missing_fields:
                      - identifying_information:file_board_minutes
                missing_fields:
                  usa-virtual-accounts:
                    - identifying_information:file_board_minutes
                  general:
                    - identifying_information:file_board_minutes
        '400':
          description: >-
            A field did not validate. `details` lists one entry per problem,
            each with the field's `path`, a `message`, and its own `code`. On an
            enum the message names every accepted value — an update takes the
            individual and business sets combined.


            A key this endpoint does not define is rejected here too. It is
            never silently ignored.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Always `Invalid request data`.
                  details:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                        code:
                          type: string
              example:
                error: Invalid request data
                details:
                  - path: account_purpose
                    message: >-
                      Invalid enum value. Expected 'receive_payments' |
                      'manage_professional_income' | … , received 'nope'
                    code: invalid_enum_value
        '401':
          description: >-
            Your credentials were not accepted. The message talks about routing,
            but it is the same body for every cause, so it is not a guide to
            which one:


            - The `Authorization` header is missing, expired or wrong. Get a new
            token from [Get access
            token](/api-reference/authentication/get-access-token).

            - The `x-api-key` header is missing or wrong.

            - One is present and the other is not.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: invalid_request
                message: >-
                  The request could not be matched to a valid route, or was
                  malformed. Verify the path and HTTP method against the API
                  reference. This is a routing or request error, not a
                  credentials or signature problem.
        '404':
          description: >-
            No user with that id exists under your account.


            A path or method that is not routed answers `404` instead, with
            `code: route_not_found` and a different message. `PATCH` is not
            routed on any user path.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: string
                    description: Always `not_found`.
                  message:
                    type: string
                    description: Names the id that was not found.
              example:
                code: not_found
                message: User with ID 11111111-2222-3333-4444-555555555555 not found
      security:
        - bearerAuth: []
          apiKeyAuth: []
      servers:
        - url: https://api.balampay.com/sandbox
          description: Sandbox
        - url: https://api.balampay.com
          description: Production
components:
  schemas:
    UpdateUserRequest:
      type: object
      properties:
        capabilities:
          type: object
          description: >-
            Which banks this user plans to use. This records intent only —
            authorizing an account for a bank is separate.
          properties:
            requested_banks:
              type: array
              items:
                type: string
                enum:
                  - austin_capital_trust
                  - jp_morgan
              description: Bank slugs this subclient intends to use.
        verification_mode:
          type: string
          enum:
            - automatic
            - verification_link
          description: >-
            How the user gets verified.


            See [User values](/reference/users/values#verification_mode) for the
            accepted values.
        first_name:
          type: string
          minLength: 1
          description: The person's given name.
        middle_name:
          type: string
          description: The person's middle name.
        last_name:
          type: string
          minLength: 1
          description: The person's family name.
        birth_date:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
          description: Date of birth, `YYYY-MM-DD`. Must be 18+.
        nationality:
          type: string
          minLength: 3
          maxLength: 3
          description: ISO **alpha-3** nationality.
        gender:
          type: string
          enum:
            - male
            - female
            - other
          description: The person's gender.
        immigration_status:
          type: string
          description: >-
            Exact string, e.g. `U.S. Citizen`, `Permanent U.S. Resident`,
            `Non-Resident of U.S.`
        business_legal_name:
          type: string
          minLength: 1
          description: The registered legal name of the business.
        company_name:
          type: string
          minLength: 1
          description: >-
            Backward-compatible alias for `business_legal_name`.


            Accepted here, but not returned in the user object — do not expect
            to read it back.
        doing_business_as:
          type: string
          description: >-
            The name the business trades under, when it differs from its legal
            name.
        business_type:
          type: string
          description: >-
            The legal structure of the business.


            See [User values](/reference/users/values#business_type) for the
            accepted values.


            Accepted here, but not returned in the user object — do not expect
            to read it back.
        business_industry:
          type: array
          items:
            type: string
          description: >-
            The industries the business works in, as NAICS subsector slugs —
            `telecommunications`, `real_estate`, `construction_of_buildings`.


            See [User values](/reference/users/values#business_industry) for the
            accepted values.


            Accepted here, but not returned in the user object — do not expect
            to read it back.
        business_description:
          type: string
          description: >-
            Accepted here, but not returned in the user object — do not expect
            to read it back.
        business_website:
          type: string
          format: uri
          description: The business's website.
        formation_date:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
          description: The date the business was formed, `YYYY-MM-DD`.
        formation_state:
          type: string
          description: The state or province the business was formed in.
        formation_country:
          type: string
          minLength: 3
          maxLength: 3
          description: The country the business was formed in, as an ISO **alpha-3** code.
        representative_first_name:
          type: string
          description: Given name of the person representing the business.
        representative_last_name:
          type: string
          description: Family name of the person representing the business.
        representative_title:
          type: string
          description: The representative's role in the business.
        representative_birth_date:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
          description: >-
            Representative date of birth, `YYYY-MM-DD`. On create this field is
            `representative_date_of_birth`.
        representative_ssn:
          type: string
          description: The representative's US Social Security number.
        email:
          type: string
          format: email
          description: The user's email address.
        phone:
          type: string
          description: E.164 format, e.g. `+14155551234`.
        document_type:
          type: string
          description: The person's primary identity document.
        document_number:
          type: string
          description: The number on that document.
        document_country:
          type: string
          minLength: 3
          maxLength: 3
          description: The country that issued it, as an ISO **alpha-3** code.
        address_street:
          type: string
          description: Street address.
        address_street_2:
          type: string
          description: Apartment, suite or unit.
        address_city:
          type: string
          description: City.
        address_state:
          type: string
          description: State or province. For the USA, the 2-letter state code.
        address_zip_code:
          type: string
          description: ZIP or postal code.
        address_country:
          type: string
          minLength: 3
          maxLength: 3
          description: ISO **alpha-3** country.
        residential_address:
          type: object
          description: >-
            Nested residential address (V1). You may instead use the flat
            `address_*` fields.
          properties:
            street_line_1:
              type: string
            street_line_2:
              type: string
            city:
              type: string
            subdivision:
              type: string
            postal_code:
              type: string
            country:
              type: string
              minLength: 3
              maxLength: 3
              description: >-
                Country as an ISO 3166-1 alpha-3 code, exactly 3 letters (e.g.
                `USA`, `MEX`, `BRA`). A 2-letter value (e.g. `US`) is rejected
                with "Must be a 3-letter country code". The same alpha-3 format
                applies to every other country field on this schema
                (`address_country`, `formation_country`, `document_country`, and
                the `associated_persons[]` address/document country fields).
        ssn:
          type: string
          description: US individuals only — do NOT send for non-US individuals.
        cpf:
          type: string
          description: Brazil individual tax ID.
        curp:
          type: string
          description: Mexico individual ID.
        rfc:
          type: string
          description: Mexico tax ID.
        ein:
          type: string
          description: US businesses only — do NOT send for non-US businesses.
        cnpj:
          type: string
          description: Brazil business tax ID.
        tax_id:
          type: string
          description: Generic international tax ID.
        tax_id_type:
          type: string
          description: Which kind of tax identifier `tax_id` carries.
        source_of_funds:
          type: string
          description: >-
            Where the money comes from.


            See [User values](/reference/users/values#source_of_funds) for the
            accepted values.


            Accepted here, but not returned in the user object — do not expect
            to read it back.
        account_purpose:
          type: string
          description: >-
            What the account will be used for.


            See [User values](/reference/users/values#account_purpose) for the
            accepted values.


            Accepted here, but not returned in the user object — do not expect
            to read it back.
        expected_monthly_payments:
          type: string
          description: >-
            Free-form. Prefer `expected_monthly_volume` +
            `expected_transaction_count`.
        expected_monthly_volume:
          type: string
          enum:
            - less_than_10000
            - 10000_to_49999
            - 50000_to_199999
            - 200000_to_999999
            - 1000000_or_more
            - less_than_50000
            - 50000_to_100000
            - 100000_to_500000
            - 500000_to_1000000
            - 1000000_to_5000000
            - 5000000_to_10000000
            - more_than_10000000
          description: >-
            How much is expected to move in a month.


            See [User values](/reference/users/values#expected_monthly_volume)
            for the accepted values.
        expected_transaction_count:
          type: string
          enum:
            - 1_to_10
            - 11_to_50
            - 51_to_200
            - more_than_200
            - less_than_10
            - 10_to_25
            - 26_to_50
            - 51_to_100
            - 101_to_500
            - more_than_500
          description: >-
            How many payments are expected in a month.


            See [User
            values](/reference/users/values#expected_transaction_count) for the
            accepted values.
        employment_status:
          type: string
          enum:
            - employed
            - self_employed
            - unemployed
            - retired
            - student
          description: >-
            What the person does for a living.


            See [User values](/reference/users/values#employment_status) for the
            accepted values.
        occupation:
          type: string
          description: The person's occupation code.
        current_employer:
          type: string
          description: Send only when `employment_status = employed`.
        income_source:
          type: string
          description: Where the person's income comes from.
        pep_status:
          type: boolean
          description: >-
            Whether this person is, or has been, a politically exposed person.


            `false` is a real answer — leaving the field out is not the same
            thing.
        high_risk_industries:
          type: string
          enum:
            - 'Yes'
            - 'No'
          description: >-
            A KYB attestation: whether the business operates in a high-risk
            industry.
        is_nbfi_vasp:
          type: string
          enum:
            - 'Yes'
            - 'No'
          description: >-
            A KYB attestation: whether the business is a non-bank financial
            institution or a virtual-asset service provider.
        business_legal_history:
          type: string
          enum:
            - 'Yes'
            - 'No'
          description: 'A KYB attestation: whether the business has relevant legal history.'
        transaction_countries:
          type: array
          items:
            type: string
          minItems: 1
          description: >-
            The countries the user expects to transact with, as ISO 3166-1
            codes.


            When it is absent the gap is reported in `missing_fields` — Kira
            never guesses a market you did not declare.
        tos_accepted_version:
          type: string
          description: Terms-of-service version the user accepted.
        corporation_taxed_as:
          type: string
          description: How the corporation is taxed.
        llc_taxed_as:
          type: string
          description: How the limited liability company is taxed.
        international_entity_type:
          type: string
          description: Free-text entity type for non-US businesses.
        government_document_type:
          type: string
          description: The kind of government document being supplied.
        additional_info:
          type: object
          properties:
            has_us_bank_account:
              type: string
              enum:
                - 'Yes'
                - 'No'
            has_denied_bank_account:
              type: string
              enum:
                - 'Yes'
                - 'No'
          additionalProperties:
            type: string
          description: >-
            Free-form string map. International users include
            `has_us_bank_account` / `has_denied_bank_account` as `Yes`/`No`
            (case-sensitive; lowercase is not accepted by ACT provisioning).
        identifying_information:
          type: array
          description: >-
            Tax IDs and government documents to add or replace. Each entry
            requires `type` and `issuing_country`.
          items:
            type: object
            required:
              - type
              - issuing_country
            properties:
              type:
                type: string
                description: >-
                  What kind of record this is — `passport`, `ein`,
                  `business_formation`.


                  The kind decides where its value goes: an identifier in
                  `number`, a file in `documents[]`.


                  See [User
                  values](/reference/users/values#identifying_information-types)
                  for the full list.
              issuing_country:
                type: string
                minLength: 3
                maxLength: 3
                description: ISO **alpha-3**. Required.
              number:
                type: string
              description:
                type: string
              expiration:
                type: string
                pattern: ^\d{4}-\d{2}-\d{2}$
                description: Expiry, `YYYY-MM-DD`.
              documents:
                type: array
                items:
                  type: object
                  properties:
                    type:
                      type: string
                      description: >-
                        What this file is within its record — `front`, `back`,
                        `selfie`, or one of the `file_*` supporting documents.


                        See [User
                        values](/reference/users/values#documents-types) for the
                        full list and what each one carries.
                    file:
                      type: string
                      description: >-
                        The file itself, in one of two forms.


                        - **Base64** — `data:<mime>;base64,<payload>`, for
                        `image/jpeg`, `image/png` or `application/pdf`. It is
                        stored while the request runs.

                        - **HTTPS URL** — a link Kira fetches afterwards.
                        `http://` is refused, and the host must be on your
                        allowed-domains list.


                        **Prefer the URL for anything large.** The whole request
                        body is capped at 10 MB and base64 adds about a third to
                        what you send; a fetched file does not count against
                        that cap and can be up to 30 MB.


                        While a URL is being fetched the stored document reads
                        `download_status: "pending"`. A permanent failure emits
                        a `user.document.download.failed` webhook (see
                        [Webhooks](/webhooks/overview)) and shows up in the
                        response's `warnings[]` — it never fails the call.
                      pattern: >-
                        ^(data:(image/jpeg|image/png|application/pdf);base64,.+|https://.+)$
                      examples:
                        - data:image/jpeg;base64,/9j/4AAQSkZJRg...
                        - https://api.aiprise.com/documents/passport-front.jpg
                    description:
                      type: string
                  required:
                    - type
                    - file
        associated_persons:
          type: array
          description: >-
            UBOs and authorized signers (businesses). Merged by `email`. Note
            the phone field here is `phone_number`.
          items:
            type: object
            properties:
              first_name:
                type: string
              middle_name:
                type: string
              last_name:
                type: string
              email:
                type: string
                format: email
              birth_date:
                type: string
                pattern: ^\d{4}-\d{2}-\d{2}$
              nationality:
                type: string
              country_of_birth:
                type: string
                description: >-
                  Country of birth of the associated person (ISO 3166-1
                  alpha-3). Must not be blank when supplied.
              occupation:
                type: string
                description: >-
                  Occupation of the associated person. Required by some sponsor
                  banks to activate the person; must not be blank when supplied.
              pep_status:
                type: boolean
                description: >-
                  Whether this person is, or has been, a politically exposed
                  person (PEP). Required by some sponsor banks, which ask it of
                  every beneficial owner and signer and refuse the person
                  without an answer. Send it for each associated person: Kira
                  does not answer it on your behalf, and `false` is a real
                  answer — omitting the field is not the same as declaring
                  `false`.
              gender:
                type: string
                enum:
                  - male
                  - female
                  - other
                description: >-
                  Gender of the associated person. Required by some sponsor
                  banks to verify the person.
              phone_number:
                type: string
              address_street:
                type: string
                maxLength: 70
              address_city:
                type: string
              address_state:
                type: string
              address_zip_code:
                type: string
              address_country:
                type: string
              has_ownership:
                type: boolean
                description: >-
                  Whether this associated person holds an equity stake in the
                  business. When true, also set `ownership_percentage` (0-100).
                  Same field as
                  `CreateUserRequest.associated_persons[].has_ownership`.
              ownership_percentage:
                type: number
                minimum: 0
                maximum: 100
                description: >-
                  This person's ownership stake in the business, as a
                  whole-number percentage from 0 to 100 (e.g. 25 means 25%). Not
                  a 0-1 fraction. 150 is rejected with "Number must be less than
                  or equal to 100".
              has_control:
                type: boolean
                description: >-
                  Whether this associated person exercises management control
                  over the business (e.g. an officer or director), independent
                  of equity. Distinct from `has_ownership` (equity stake, see
                  `ownership_percentage`) and `is_signer` (authorized signer).
                  Boolean; a person can be any combination of the three (all
                  three accepted `true` together on one person).
              is_signer:
                type: boolean
                description: >-
                  Whether this associated person is an authorized signer for the
                  business (can sign/act on its accounts), independent of equity
                  ownership (`has_ownership`) and management control
                  (`has_control`). Boolean.
              title:
                type: string
              document_type:
                type: string
              document_number:
                type: string
              document_country:
                type: string
                minLength: 3
                maxLength: 3
                description: >-
                  Issuing country of `document_type`/`document_number`, as an
                  ISO 3166-1 alpha-3 code, exactly 3 letters (e.g. `USA`,
                  `MEX`). A 2-letter value is rejected with "Must be a 3-letter
                  country code".
              ssn:
                type: string
              tax_id:
                type: string
        documents:
          type: array
          description: >-
            Legacy flat document array. Prefer
            `identifying_information[].documents[]`.
          items:
            type: object
            required:
              - type
              - file
            properties:
              type:
                type: string
                description: >-
                  Document role/type. Free-form on this legacy array (e.g.
                  `front`, `file_proof_of_address`). Prefer
                  `identifying_information[].documents[]`, which validates the
                  role against a fixed set.
              file:
                type: string
                description: >-
                  The file itself, in one of two forms.


                  - **Base64** — `data:<mime>;base64,<payload>`, for
                  `image/jpeg`, `image/png` or `application/pdf`. It is stored
                  while the request runs.

                  - **HTTPS URL** — a link Kira fetches afterwards. `http://` is
                  refused, and the host must be on your allowed-domains list.


                  **Prefer the URL for anything large.** The whole request body
                  is capped at 10 MB and base64 adds about a third to what you
                  send; a fetched file does not count against that cap and can
                  be up to 30 MB.


                  While a URL is being fetched the stored document reads
                  `download_status: "pending"`. A permanent failure emits a
                  `user.document.download.failed` webhook (see
                  [Webhooks](/webhooks/overview)) and shows up in the response's
                  `warnings[]` — it never fails the call.
                pattern: >-
                  ^(data:(image/jpeg|image/png|application/pdf);base64,.+|https://.+)$
                examples:
                  - data:image/jpeg;base64,/9j/4AAQSkZJRg...
                  - https://api.aiprise.com/documents/passport-front.jpg
              file_name:
                type: string
              description:
                type: string
        metadata:
          type: object
          additionalProperties:
            type: string
            maxLength: 500
          description: >-
            A patch, not a replacement: keys shallow-merge, an empty-string
            value deletes that key, `{}` clears all. ≤ 50 keys; key 1–40 chars,
            no `[` or `]`.
      additionalProperties: false
    UserUpdateResult:
      type: object
      description: The user after the change, plus what the change did.
      properties:
        id:
          type: string
          format: uuid
          description: User UUID.
        type:
          type: string
          description: >-
            Whether the user is a company or a person.


            Available options: `business`, `individual`.


            See [User values](/reference/users/values#type) for what each one
            means.
        email:
          type: string
          format: email
          description: Email address.
        status:
          type: string
          description: >-
            Where the user sits in its lifecycle.


            Available options: `CREATED`, `VERIFYING`, `REVIEW`, `VERIFIED`,
            `REJECTED`, plus the legacy `ACTIVE`, `INACTIVE` and `SUSPENDED`.


            See [User values](/reference/users/values#status) for what each one
            means.
        verification_status:
          type: string
          description: >-
            The result of the user's identity or business check.


            Available options: `unverified`, `started`, `in_review`, `verified`,
            `rejected`, `needs_action`.


            See [User values](/reference/users/values#verification_status) for
            what each one means.
        created_at:
          type: string
          format: date-time
          description: Creation timestamp (ISO 8601).
        updated_at:
          type: string
          format: date-time
          description: Last-update timestamp (ISO 8601).
        verification_mode:
          type: string
          description: '`automatic` or `verification_link`.'
        verification_link:
          type: string
          description: Hosted KYC URL — present only in `verification_link` mode.
        verification_link_error:
          type: string
          description: >-
            A plain-text note about something the request could not finish — the
            hosted verification link, or a move of this user to a different
            bank.


            The wording can change, so branch on
            `verification_link_error_severity`, never on this string.
        verification_link_error_severity:
          type: string
          enum:
            - deferred
            - failed
          description: >-
            Whether the note in `verification_link_error` asks anything of you.


            See [User
            values](/reference/users/values#verification_link_error_severity)
            for what each value means.
        metadata:
          type: object
          additionalProperties: {}
          description: >-
            The key-value pairs you stored on this user.


            If your account has default metadata configured, it is merged in
            when the user is created and your own keys win on a conflict.
        first_name:
          type: string
          description: Given name (individual users).
        last_name:
          type: string
          description: Family name (individual users).
        middle_name:
          type: string
          description: Middle name (individual users), when provided.
        phone:
          type: string
          description: Contact phone in E.164 form (e.g. `+525512345678`).
        birth_date:
          type: string
          description: Date of birth, `YYYY-MM-DD` (individual users).
        nationality:
          type: string
          description: >-
            The person's nationality, as an ISO **alpha-3** country code —
            `USA`, `MEX`.
        country_of_birth:
          type: string
          description: >-
            Where the person was born, as an ISO **alpha-3** country code.
            Absent when it was never set.
        gender:
          type: string
          description: '`male`, `female`, or `other`, when provided.'
        residential_address:
          type: object
          description: The person's address, as a nested object.
          properties:
            street_line_1:
              type: string
            street_line_2:
              type: string
            city:
              type: string
            subdivision:
              type: string
              description: >-
                The state or province. For users in the USA, the 2-letter state
                code (`FL`). It comes back exactly as you sent it.
            postal_code:
              type: string
            country:
              type: string
              description: >-
                Country as an ISO **alpha-3** code (`USA`). It comes back
                exactly as you sent it.
        formation_country:
          type: string
          description: Country the business was formed in, as an ISO **alpha-3** code.
        business_legal_name:
          type: string
          description: The registered legal name of the business.
        registered_address:
          type: object
          properties:
            street_line_1:
              type: string
            street_line_2:
              type: string
            city:
              type: string
            subdivision:
              type: string
              description: >-
                The state or province. For users in the USA, the 2-letter state
                code (`FL`). It comes back exactly as you sent it.
            postal_code:
              type: string
            country:
              type: string
              description: >-
                Country as an ISO **alpha-3** code (`USA`). It comes back
                exactly as you sent it.
          description: The registered, legal address of the business.
        requires_reverification:
          type: boolean
          description: >-
            Whether this change re-triggered the identity check. It turns `true`
            when you touch a field the user's category needs for verification.


            Users on a hosted form are never re-queued.
        verification_triggered:
          type: boolean
          description: Whether verification started as a result of this change.
        updated_fields:
          type: array
          description: >-
            The fields this call wrote, in the order you sent them. Use it to
            confirm the API read what you meant.
          items:
            type: string
        eligible_products:
          type: array
          description: >-
            What this user can already use, product by product.


            Each entry carries `eligible`, and when that is `false`, the reason
            why:


            - `missing_fields` — data is missing. Send it, and the product turns
            eligible once the user passes verification.

            - `unsupported_reason` — nothing you send will change the answer.


            A product stays `eligible: false` until the user reaches the status
            that product asks for, which is usually `VERIFIED`.
          items:
            type: object
            properties:
              product_id:
                type: string
                description: Product UUID.
              product_code:
                type: string
                description: >-
                  Product code, e.g. `usa-virtual-accounts`,
                  `usa-virtual-accounts-act`.
              product_name:
                type: string
                description: Human-readable product name.
              eligible:
                type: boolean
                description: Whether the user can open this product now.
              missing_fields:
                type: array
                items:
                  type: string
                description: Field tokens still required for this product.
              unsupported_reason:
                type: string
                description: >-
                  Why the product is closed to this user, when no data you send
                  can change it. It replaces `missing_fields` — read this one
                  first.


                  See [User values](/reference/users/values#unsupported_reason)
                  for what each value means.
        missing_fields:
          type: object
          description: >-
            The gaps that remain, grouped by product code, plus a `general` key
            holding every token once.


            A product with nothing outstanding is left out of the map, so it can
            come back with only `general`, or empty.
          additionalProperties:
            type: array
            items:
              type: string
        identifying_information:
          type:
            - array
            - 'null'
          description: >-
            The user's identity or registration records. `null` when none are
            stored, and absent on users whose verification runs through a hosted
            link.
          items:
            $ref: '#/components/schemas/IdentifyingInformation'
        associated_persons:
          type:
            - array
            - 'null'
          description: >-
            The people tied to a business. `null` for a person, and absent on
            users whose verification runs through a hosted link.
          items:
            $ref: '#/components/schemas/AssociatedPerson'
        warnings:
          type: array
          description: >-
            Non-fatal problems with the documents you sent. A document that
            fails to upload shows up here and does not fail the call. Absent
            when there are none.
          items:
            type: string
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        statusCode:
          type: number
        error:
          type: string
        timestamp:
          type: string
        path:
          type: string
        details: {}
      required:
        - message
    IdentifyingInformation:
      type: object
      description: One identity or registration record.
      properties:
        type:
          type: string
          description: >-
            What the record is — `passport`, `ssn`, `drivers_license`,
            `business_formation`, `ein_letter`, `proof_of_address`,
            `source_of_wealth`.
        number:
          type: string
          description: The document or registration number, when the record has one.
        expiration:
          type: string
          description: Expiry date, `YYYY-MM-DD`, on records that expire.
        issuing_country:
          type: string
          description: Country that issued it, as an ISO **alpha-3** code.
        documents:
          type: array
          description: The files uploaded for this record.
          items:
            type: object
            description: One uploaded file.
            properties:
              type:
                type: string
                description: >-
                  What the file shows — `front`, `back`, `selfie`, or a `file_*`
                  document type.
              file_name:
                type: string
                description: The stored file name. It is not a download URL.
              uploaded_at:
                type: string
                description: When the file was uploaded, ISO 8601.
              content_type:
                type: string
                description: The file's MIME type — `application/pdf`, `image/jpeg`.
    AssociatedPerson:
      type: object
      description: >-
        One person tied to a business — an owner, a signer, or someone in
        control.
      properties:
        person_id:
          type: string
          description: >-
            Kira's id for this person, when there is one. Match people by
            `email` rather than relying on it.
        first_name:
          type: string
        middle_name:
          type: string
        last_name:
          type: string
        email:
          type: string
        birth_date:
          type: string
          description: Date of birth, `YYYY-MM-DD`.
        gender:
          type: string
        nationality:
          type: string
          description: ISO **alpha-3** country code.
        country_of_birth:
          type: string
          description: ISO **alpha-3** country code.
        phone_number:
          type: string
          description: Phone in E.164 form.
        occupation:
          type: string
          description: Occupation code.
        title:
          type: string
          description: The person's role in the business — `CEO`.
        pep_status:
          type: boolean
          description: Whether the person is, or has been, a politically exposed person.
        is_signer:
          type: boolean
          description: Whether the person can sign for the business.
        has_control:
          type: boolean
          description: Whether the person controls the business.
        has_ownership:
          type: boolean
          description: Whether the person owns part of the business.
        ownership_percentage:
          type: number
          description: How much of the business the person owns, as a percentage.
        ssn:
          type: string
          description: US Social Security number, on US people.
        document_type:
          type: string
          description: The person's primary document — `passport`, `drivers_license`.
        document_number:
          type: string
        document_country:
          type: string
          description: ISO **alpha-3** country code.
        address_street:
          type: string
          description: >-
            Flat address field. Some people carry these instead of
            `residential_address`.
        address_city:
          type: string
        address_state:
          type: string
        address_zip_code:
          type: string
        address_country:
          type: string
          description: ISO **alpha-3** country code.
        residential_address:
          $ref: '#/components/schemas/Address'
        identifying_information:
          type: array
          description: The person's own identity records.
          items:
            $ref: '#/components/schemas/IdentifyingInformation'
    Address:
      type: object
      description: A postal address.
      properties:
        street_line_1:
          type: string
        street_line_2:
          type: string
        city:
          type: string
        subdivision:
          type: string
          description: >-
            The state or province. For users in the USA, the 2-letter state code
            (`FL`). It comes back exactly as you sent it.
        postal_code:
          type: string
        country:
          type: string
          description: >-
            Country as an ISO **alpha-3** code (`USA`). It comes back exactly as
            you sent it.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        The `data.access_token` value from [Get access
        token](/api-reference/authentication/get-access-token).
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key issued by Kira.

````