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

# Update Individual Details

> Updates the KYC application of an individual account. Provided fields are merged into the stored data, so you can save progress incrementally. Applications can no longer be edited once submitted or approved.

Updates the KYC application of an individual account. Fields inside `individualInfo` are merged into the stored application, so you can collect personal details, address and employment information across multiple calls.

## Required fields to submit

These must be present before the application can move from `draft` to `submitted`. Everything else on `individualInfo` is optional. Check what's still outstanding at any time with [Get Requirements](/api-reference/endpoint/accounts/requirements) — its `readyToSubmit` flag and `missingFields` array list exactly what's missing.

| Group                       | Required fields                                                                                                   |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `individualInfo`            | `firstName`, `lastName`, `phone`, `dateOfBirth`, `citizenship`, plus the identifier for their country (see below) |
| `individualInfo.address`    | `street`, `city`, `state`, `postalCode`, `country`                                                                |
| `individualInfo.employment` | `status`, `sourceOfWealth`, `annualIncome`                                                                        |
| Documents                   | `proof_of_address` — upload via [Upload Document](/api-reference/endpoint/accounts/upload-document)               |

Enum values:

* `employment.status` — `employed`, `self-employed`, `retired`, `unemployed`, `student`
* `employment.sourceOfWealth` — `salary`, `business_income`, `investments`, `inheritance`, `savings`, `other`
* `employment.annualIncome` — `<25k`, `25k-50k`, `50k-100k`, `100k-250k`, `250k-500k`, `500k+`

<Warning>
  Identity verification **blocks submission**. The applicant must complete their [KYC link](/api-reference/endpoint/accounts/individual-kyc-link) — or you must supply an already-verified identity via [Submit KYC Reliance](/api-reference/endpoint/accounts/kyc-reliance) — before [Submit Application](/api-reference/endpoint/accounts/submit) will succeed. Until then it returns `409 KYC_INCOMPLETE` and `readyToSubmit` stays `false`.
</Warning>

## Example Request

```bash theme={null}
curl -X PUT "https://api.rolla.xyz/api/v1/external/accounts/b6075be0-f1d0-451f-a468-3e94563101d2/individual" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "individualInfo": {
      "phone": "+2348012345678",
      "dateOfBirth": "1990-05-14",
      "citizenship": "NG",
      "nin": "12345678901",
      "bvn": "22212345678",
      "taxId": "22212345678",
      "idDocument": {
        "type": "passport",
        "number": "P123456789",
        "issueDate": "2020-01-01",
        "expirationDate": "2030-01-01"
      },
      "address": {
        "street": "12 Marina Rd",
        "line2": "Suite 4",
        "city": "Lagos",
        "state": "Lagos",
        "postalCode": "101241",
        "country": "NG"
      },
      "employment": {
        "status": "self-employed",
        "employerName": "Acme Trading Ltd",
        "sourceOfWealth": "business_income",
        "annualIncome": "50k-100k"
      }
    }
  }'
```

## Example Response

```json theme={null}
{
  "success": true,
  "message": "Application updated successfully",
  "data": {
    "application": {
      "id": "f436daf8-146b-4949-bf28-9b36440085a4",
      "status": "draft",
      "entity_type": "individual",
      "individual_info": {
        "firstName": "Jane",
        "lastName": "Doe",
        "phone": "+2348012345678",
        "citizenship": "NG"
      }
    },
    "documents": []
  }
}
```

## Country-Specific Identifiers

One of these is **required** before the application can be submitted. Which one depends on the applicant's `countryOfResidence`, falling back to `citizenship` when no separate residence is recorded.

| Country       | Required fields                      |
| ------------- | ------------------------------------ |
| Nigeria       | `nin` (11 digits), `bvn` (11 digits) |
| United States | `ssn` (9 digits)                     |
| Canada        | `sin` (9 digits)                     |
| Anywhere else | `nationalId`                         |

Digits are validated on write — a `nin` of the wrong length is rejected with `400`. Send `null` for the identifiers that don't apply.

<Info>
  **Countries are normalized to [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).** `citizenship`, `countryOfResidence` and `address.country` accept a code (`NG`), a country name (`Nigeria`) or a demonym (`Nigerian`), and are stored as the code. A value that can't be resolved is rejected with `400`.
</Info>

## Fields used for USD account issuance

These optional fields on an individual account flow directly into [USD bank
account issuance](/api-reference/endpoint/accounts/issue-bank-account), so you
don't have to pass them per issuance:

| Field                     | Description                                                                                                                                                                                                      |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `idDocument`              | `{ type, number, issueDate, expirationDate }`. Dates are `YYYY-MM-DD`. A verified Sumsub document overrides this when present.                                                                                   |
| `idDocument.type`         | `passport`, `drivers_license`, or `national_id` (aliases `id_card` / `residence_permit` also map to national ID).                                                                                                |
| `address.line2`           | Secondary address line (apt/suite). Derived from city/state when omitted.                                                                                                                                        |
| `taxId` \| `nin` \| `bvn` | Used as the tax number for the USD provider. For an **individual**, use the person's national **ID or passport number** as the tax ID when no separate tax identifier exists (e.g. Chinese Mainland applicants). |

<Warning>
  Applications can no longer be edited once their status is `submitted` or `approved`.
</Warning>


## OpenAPI

````yaml PUT /accounts/{accountId}/individual
openapi: 3.1.0
info:
  title: Rolla Developer API
  description: >-
    API for programmatic transaction management on the Rolla platform. Monetary
    `amount` fields use the smallest unit of the referenced currency unless an
    endpoint says otherwise (e.g. NGN = kobo, USD = cents, where **100 cents =
    USD 1.00**).
  version: 1.0.0
servers:
  - url: https://api.rolla.xyz/api/v1/external
    description: Production server
security:
  - apiKeyAuth: []
paths:
  /accounts/{accountId}/individual:
    put:
      summary: Update Individual Details
      description: >-
        Updates the KYC application of an individual account. Provided fields
        are merged into the stored data, so you can save progress incrementally.
        Applications can no longer be edited once submitted or approved.
      operationId: updateAccountIndividual
      parameters:
        - name: accountId
          in: path
          required: true
          description: >-
            Identifier of an account owned by the same user as your API key's
            business
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - individualInfo
              properties:
                individualInfo:
                  $ref: '#/components/schemas/IndividualInfo'
      responses:
        '200':
          description: Application updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Application updated successfully
                  data:
                    type: object
                    properties:
                      application:
                        $ref: '#/components/schemas/KybApplication'
                      documents:
                        type: array
                        items:
                          $ref: '#/components/schemas/KybDocument'
        '400':
          description: >-
            Validation error, non-individual account, or application already
            submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Account not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    IndividualInfo:
      type: object
      description: >-
        Personal, address and employment details for an individual account. All
        fields are optional per request; provided fields are merged into the
        stored application.
      properties:
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
          example: '+2348012345678'
        dateOfBirth:
          type: string
          example: '1990-05-14'
        citizenship:
          type: string
          example: NG
        countryOfResidence:
          type: string
        taxId:
          type: string
        nin:
          type: string
          description: Nigerian National Identification Number (11 digits)
        bvn:
          type: string
          description: Bank Verification Number (11 digits, Nigeria)
        ssn:
          type: string
          description: US Social Security Number
        sin:
          type: string
          description: Canadian Social Insurance Number
        nationalId:
          type: string
          description: National ID for other countries
        idDocument:
          type: object
          description: >-
            Identity document, consumed by USD account issuance. A verified
            Sumsub document overrides it when present.
          properties:
            type:
              type: string
              enum:
                - passport
                - drivers_license
                - national_id
            number:
              type: string
              example: P123456789
            issueDate:
              type: string
              example: '2020-01-01'
            expirationDate:
              type: string
              example: '2030-01-01'
        address:
          $ref: '#/components/schemas/IndividualAddress'
        employment:
          type: object
          properties:
            status:
              type: string
              enum:
                - employed
                - self-employed
                - retired
                - unemployed
                - student
            employerName:
              type: string
            sourceOfWealth:
              type: string
              enum:
                - salary
                - business_income
                - investments
                - inheritance
                - savings
                - other
            sourceOfWealthDescription:
              type: string
            annualIncome:
              type: string
              enum:
                - <25k
                - 25k-50k
                - 50k-100k
                - 100k-250k
                - 250k-500k
                - 500k+
    KybApplication:
      type: object
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - draft
            - submitted
            - approved
            - rejected
            - changes_requested
        current_step:
          type: integer
        is_complete:
          type: boolean
        business_info:
          $ref: '#/components/schemas/BusinessInfo'
        business_address:
          $ref: '#/components/schemas/BusinessAddress'
        contact_info:
          $ref: '#/components/schemas/ContactInfo'
        related_persons:
          type: array
          items:
            $ref: '#/components/schemas/RelatedPerson'
        banking_info:
          $ref: '#/components/schemas/BankingInfo'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    KybDocument:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Document identifier
        applicationId:
          type: string
          description: Associated KYB application ID
        documentType:
          type: string
          description: Type of document
          enum:
            - certificate_of_incorporation
            - articles_of_association
            - proof_of_address
            - director_register
            - shareholder_register
        fileName:
          type: string
          description: Uploaded file name
        fileUrl:
          type: string
          format: uri
          description: Document download URL
        relatedPersonKey:
          type: string
          description: Associated related person
        created_at:
          type: string
          format: date-time
          description: Upload timestamp
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
    IndividualAddress:
      type: object
      properties:
        street:
          type: string
          example: 12 Marina Rd
        line2:
          type: string
          description: >-
            Secondary address line (apt/suite). Used by USD account issuance;
            derived from city/state when omitted.
          example: Suite 4
        city:
          type: string
          example: Lagos
        state:
          type: string
          example: Lagos
        postalCode:
          type: string
          example: '101241'
        country:
          type: string
          example: NG
    BusinessInfo:
      type: object
      properties:
        legalName:
          type: string
          example: Acme Corp Ltd
        tradingName:
          type: string
        businessType:
          type: string
          example: Limited Company
        incorporationDate:
          type: string
          example: '2020-01-15'
        incorporationCountry:
          type: string
          example: NG
        registrationNumber:
          type: string
          example: RC-1234567
        taxId:
          type: string
          example: 12345678-0001
        website:
          type: string
          format: uri
        description:
          type: string
        monthlyVolume:
          type: string
        annualRevenue:
          type: string
        primaryFundingSource:
          type: string
    BusinessAddress:
      type: object
      properties:
        street:
          type: string
          example: 123 Main Street
        city:
          type: string
          example: Lagos
        state:
          type: string
          example: Lagos
        postalCode:
          type: string
          example: '100001'
        country:
          type: string
          example: NG
    ContactInfo:
      type: object
      properties:
        email:
          type: string
          format: email
          example: contact@acmecorp.com
        phone:
          type: string
          example: '+2341234567890'
    RelatedPerson:
      type: object
      properties:
        id:
          type: string
        firstName:
          type: string
          example: John
        lastName:
          type: string
          example: Doe
        roles:
          type: array
          items:
            type: string
            enum:
              - Beneficial Owner
              - Director
        email:
          type: string
          format: email
        phone:
          type: string
        dateOfBirth:
          type: string
          example: '1990-01-15'
        ownershipPercentage:
          type: number
          minimum: 0
          maximum: 100
        currentAddress:
          $ref: '#/components/schemas/BusinessAddress'
        sourceOfWealthExplanation:
          type: string
        taxId:
          type: string
          description: >-
            The person's government identifier, in the format their country of
            residence issues — Mainland China: 18-character resident ID; Hong
            Kong: HKID; United States: SSN or ITIN; elsewhere: national ID or
            tax number as issued. Nigerian residents send `nin` instead.
            Required before the application can be submitted, and can be patched
            onto an existing person. The format is validated by the USD provider
            when the account is issued.
          example: '440301199209153216'
        bvn:
          type: string
          description: Bank Verification Number (11 digits). Nigerian residents only.
        nin:
          type: string
          description: >-
            National Identification Number (11 digits). Nigerian residents only;
            accepted in place of `taxId`.
    BankingInfo:
      type: object
      properties:
        bankName:
          type: string
        accountNumber:
          type: string
        routingNumber:
          type: string
        accountType:
          type: string
          enum:
            - checking
            - savings
        currency:
          type: string
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your Rolla API key

````