---
title: "Update customer associate"
method: PATCH
path: "/platform/v2/customers/{customerId}/associates/{associateId}"
tags: ["Customers"]
---

# Update customer associate

`PATCH /platform/v2/customers/{customerId}/associates/{associateId}`

## Request

- Base URL: `https://api.sandbox.bvnk.com`
- URL: `https://api.sandbox.bvnk.com/platform/v2/customers/{customerId}/associates/{associateId}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/bvnk/apis/bvnk-api-endpoints/docs/platform/v2/customers/:customerId/associates/:associateId/patch.ts> (a function with typed inputs; its response is checked against the schema)

Applies a partial update to an associate. Omitted fields are left unchanged.

- `types`, if sent, replaces the associate's existing roles and must contain at least one role.
- `entity.type` must match the associate's type (`PERSON` or `BUSINESS_REGISTRATION`).
- `entity.reliance` is only accepted for customers onboarded with the `RELIANCE` (Partner-Managed) model.

The request is rejected with `400` if the associate's identity has already been verified and a verified field is changed, if the email address is already used by another associate of the customer, or if the customer was onboarded with Customers API v.1 (error code `bvnk:onboarding-accounts:4017`).

## Path parameters

- `customerId` string, uuid, required
- `associateId` string, uuid, required

## Request body

- V2UpdateAssociateRequest: Update-associate payload. All fields are optional; omitted fields are left unchanged.
  - `types` string[]: Associate roles. If provided, **replaces** the associate's existing roles. At least one role is required when the field is sent.
  - `entity` union: Update-time associate entity. `type` discriminates between `PERSON` and `BUSINESS_REGISTRATION` and must match the associate's existing type. All other fields are optional.
    - V2PersonUpdateEntity: Update a natural-person associate. Only `type` is required; omitted fields are left unchanged.
      - `type` 'PERSON', required
      - `firstName` string
      - `lastName` string
      - `email` string, email
      - `phoneNumber` string: Phone number in E.164.
      - `dateOfBirth` string, date
      - `nationality` string
      - `secondNationality` string
      - `birthCountryCode` string
      - `taxIdentificationNumber` string
      - `taxResidence` string
      - `position` string
      - `isPoliticallyExposedPerson` boolean
      - `percentageOfOwnership` string, number
      - `ownershipType` 'DIRECT' | 'INDIRECT'
      - `controlOptions` V2PersonControlOptions: Declared control rights of a natural-person associate.
        - `canAppointDirectors` boolean, required
        - `hasSignificantControl` boolean, required
        - `controlsManagement` boolean, required
        - `controlsCorporateBody` boolean, required
      - `address` V2PersonAddress: Postal address in nested form.
        - `addressLine1` string
        - `addressLine2` string
        - `city` string
        - `postalCode` string
        - `stateCode` string
        - `countryCode` string
      - `estimatedYearlyIncome` 'INCOME_0_TO_50K' | 'INCOME_50K_TO_100K' | 'INCOME_100K_TO_250K' | 'INCOME_250K_TO_500K' | 'INCOME_500K_TO_750K' | 'INCOME_750K_TO_1M' | 'INCOME_ABOVE_1M': Estimated yearly income band of the associate, in USD.
      - `reliance` V2PersonRelianceUpdateMetadata: Updated verification evidence from your own KYC process. **Only accepted for customers onboarded with the `RELIANCE` (Partner-Managed) model.**
        - `identityDocumentMetadata` object: Metadata about the identity document verified by the partner. **Required for EEA customers.**
          - `type` 'PASSPORT' | 'ID_CARD' | 'DRIVERS' | 'RESIDENCE_PERMIT' | 'OTHER', required: Identity document type.
          - `number` string, required: Document number.
          - `issueDate` string, date: Document issue date.
          - `expiryDate` string, date: Document expiry date. **Required unless `type` is `ID_CARD` or `OTHER`.**
          - `issuingCountryCode` string, required: Issuing country as an ISO 3166-1 alpha-2 code. Must not be a restricted country.
          - `kycTimestamp` string, date-time, required: When the partner completed the KYC check. Must be within the last 5 years and not in the future.
        - `biometricLiveness` object: Biometric liveness check performed by the partner. **Required for EEA customers.**
          - `livenessTimestamp` string, date-time, required: When the liveness check was completed.
        - `addressVerification` object: How the partner verified the customer's residential address.
          - `type` 'DOC' | 'NON_DOC', required: - `DOC`: Verified with a proof-of-address document - `NON_DOC`: Verified with a non-documentary check
    - V2BusinessRegistrationUpdateEntity: Update a business-registration associate. Only `type` is required; omitted fields are left unchanged.
      - `type` 'BUSINESS_REGISTRATION', required
      - `entityName` string
      - `registrationCountry` string
      - `registrationNumber` string
      - `percentageOfOwnership` string, number
      - `typeOfOwnership` 'DIRECT' | 'INDIRECT'

## Response `200`

Associate updated

- V2AssociateResponse: Associate resource.
  - `id` string, uuid
  - `types` string[]
  - `entity` union: Associate entity. `type` discriminates between `PERSON` and `BUSINESS_REGISTRATION`.
    - V2PersonAssociateEntity: Natural-person associate entity returned by the API.
      - `type` 'PERSON'
      - `firstName` string
      - `lastName` string
      - `middleName` string
      - `gender` string: Gender (free text).
      - `email` string
      - `phoneNumber` string
      - `dateOfBirth` string, date
      - `nationality` string
      - `secondNationality` string
      - `birthCountryCode` string
      - `taxIdentificationNumber` string
      - `taxResidence` string
      - `position` string
      - `isPoliticallyExposedPerson` boolean
      - `percentageOfOwnership` string, number
      - `ownershipType` 'DIRECT' | 'INDIRECT'
      - `estimatedYearlyIncome` 'INCOME_0_TO_50K' | 'INCOME_50K_TO_100K' | 'INCOME_100K_TO_250K' | 'INCOME_250K_TO_500K' | 'INCOME_500K_TO_750K' | 'INCOME_750K_TO_1M' | 'INCOME_ABOVE_1M'
      - `controlOptions` V2PersonControlOptions: Declared control rights of a natural-person associate.
        - `canAppointDirectors` boolean, required
        - `hasSignificantControl` boolean, required
        - `controlsManagement` boolean, required
        - `controlsCorporateBody` boolean, required
      - `address` V2PersonAddress: Postal address in nested form.
        - `addressLine1` string
        - `addressLine2` string
        - `city` string
        - `postalCode` string
        - `stateCode` string
        - `countryCode` string
      - `identificationDocuments` V2IdentificationDocument[]
        - `type` 'PASSPORT' | 'NATIONAL_ID' | 'DRIVING_LICENSE' | 'RESIDENCE_PERMIT' | 'UTILITY_BILL' | 'TAX_DOCUMENT' | 'SELFIE' | 'OTHER'
        - `country` string
        - `documentNumber` string
        - `firstName` string
        - `firstNameEn` string
        - `lastName` string
        - `lastNameEn` string
        - `middleName` string
        - `middleNameEn` string
        - `gender` string
        - `dateOfBirth` string, date
        - `address` V2PersonAddress: Postal address in nested form.
          - `addressLine1` string
          - `addressLine2` string
          - `city` string
          - `postalCode` string
          - `stateCode` string
          - `countryCode` string
        - `issueAuthority` string
        - `issuedDate` string, date
        - `validUntil` string, date
        - `termless` boolean
      - `proofOfAddresses` V2ProofOfAddress[]
        - `documentType` string
        - `address` V2PersonAddress: Postal address in nested form.
          - `addressLine1` string
          - `addressLine2` string
          - `city` string
          - `postalCode` string
          - `stateCode` string
          - `countryCode` string
      - `documents` V2AssociateDocument[]: Other documents.
        - `id` string, uuid
        - `externalId` string
        - `type` 'AGREEMENT' | 'ARBITRARY_DOC' | 'BANK_CARD' | 'CONTRACT' | 'COVID_VACCINATION_FORM' | 'DRIVERS' | 'DRIVERS_TRANSLATION' | 'ID_CARD' | 'ID_DOC_PHOTO' | 'INCOME_SOURCE' | 'INVESTOR_DOC' | 'PASSPORT' | 'PAYMENT_SOURCE' | 'PROFILE_IMAGE' | 'RESIDENCE_PERMIT' | 'SELFIE' | 'UTILITY_BILL' | 'UTILITY_BILL2' | 'VEHICLE_REGISTRATION_CERTIFICATE' | 'VIDEO_SELFIE' | 'OTHER'
        - `subType` 'FRONT_SIDE' | 'BACK_SIDE' | 'DIRECTORS_REGISTRY' | 'GOOD_STANDING_CERT' | 'INCORPORATION_ARTICLES' | 'INCORPORATION_CERT' | 'INCUMBENCY_CERT' | 'INFORMATION_STATEMENT' | 'POWER_OF_ATTORNEY' | 'PROOF_OF_ADDRESS' | 'SHAREHOLDER_REGISTRY' | 'STATE_REGISTRY' | 'TRUST_AGREEMENT' | 'OTHER'
        - `deactivated` boolean
      - `identityVerification` V2IdentityVerification: Hosted identity-verification session metadata.
        - `link` string
        - `status` 'PENDING' | 'COMPLETE' | 'RESUBMISSION_REQUESTED'
    - V2BusinessRegistrationAssociateEntity: Registered-business associate entity returned by the API.
      - `type` 'BUSINESS_REGISTRATION'
      - `name` string, required
      - `tradingName` string
      - `registrationNumber` string, required
      - `registrationCountry` string, required
      - `percentageOfOwnership` string, number
      - `typeOfOwnership` 'DIRECT' | 'INDIRECT'
  - `validation` V2ValidationStatus
    - `status` 'COMPLETE' | 'INCOMPLETE'
    - `issues` V2ValidationIssue[]
      - `field` string
      - `message` string
  - `createdAt` string, date-time
  - `updatedAt` string, date-time

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `404`: The customer or the associate was not found.

## Changes

- **2026-11-06** `c386d436bf2c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/bvnk/apis/bvnk-api-endpoints/changes/platform/v2/customers/:customerId/associates/:associateId/patch.md)

---

[API](https://skmtc.dev/bvnk/apis/bvnk-api-endpoints.md) - [All operations](https://skmtc.dev/bvnk/apis/bvnk-api-endpoints/llms.txt) - [OpenAPI document](https://skmtc.dev/bvnk/apis/bvnk-api-endpoints/revisions/c386d436bf2c?raw)
