# Create or update customer bank account

POST /customers/{customer_id}/bank-accountCreate or update the bank account linked to this customer; available to biometrics session tokens so the kyc-app can collect disbursement bank data

Endpoint: POST /customers/{customer_id}/bank-account
Version: 2026-03-01
Security: oauth2

## Security:

  - `oauth2` (unknown)
    oauth2 scopes: kyc:upload

## Path parameters:

  - `customer_id` (string, required)
    Customer ID

## Request fields (application/json):

  - `bank_account` (object, required)
    Customer disbursement bank account data

  - `bank_account.bank_id` (string, required)
    Bank COMPE code; zero-padded to 3 digits when stored
    Example: 001

  - `bank_account.kind` (string, required)
    Account type: `checking`, `saving`, `payment`
    Enum: "checking", "saving", "payment"

  - `bank_account.branch` (string, required)
    Branch number without the check digit; zero-padded to 4 digits when stored
    Example: 0001

  - `bank_account.number` (string, required)
    Account number
    Example: 1234567

  - `bank_account.digit` (string, required)
    Account check digit (a single digit, or "X" for some banks)
    Example: 0

## Response 200:

  - `200` (unknown)
    Bank account saved

## Response 200 fields (application/json):

  - `bank_id` (string, required)
    Bank COMPE code; zero-padded to 3 digits when stored
    Example: 001

  - `kind` (string, required)
    Account type: `checking`, `saving`, `payment`
    Enum: "checking", "saving", "payment"

  - `branch` (string, required)
    Branch number without the check digit; zero-padded to 4 digits when stored
    Example: 0001

  - `number` (string, required)
    Account number
    Example: 1234567

  - `digit` (string, required)
    Account check digit (a single digit, or "X" for some banks)
    Example: 0

  - `id` (string, required)
    Unique bank account identifier
    Example: ba_550e8400e29b41d4a716446655440000

  - `bank_name` (string, required)
    Bank name

  - `updated_at` (integer, required)
    Unix epoch in seconds

## Response 401:

  - `401` (unknown)
    Authentication failed

## Response 401 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/authentication-failed"

  - `title` (string, required)
    Enum: "Authentication Failed"

  - `status` (integer, required)
    Enum: "401"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "missing_token", "invalid_token", "token_expired"

## Response 403:

  - `403` (unknown)
    The credential is not permitted to perform this action

## Response 403 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/forbidden"

  - `title` (string, required)
    Enum: "Forbidden"

  - `status` (integer, required)
    Enum: "403"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "forbidden"

## Response 422:

  - `422` (unknown)
    Validation failed

## Response 422 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/validation-failed"

  - `title` (string, required)
    Enum: "Validation Failed"

  - `status` (integer, required)
    Enum: "422"

  - `detail` (string, required)

  - `code` (string, required)
    Enum: "validation_failed", "no_user"

## Response 429:

  - `429` (unknown)
    Rate limit exceeded

## Response 429 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/rate-limit-exceeded"

  - `title` (string, required)
    Enum: "Rate Limit Exceeded"

  - `status` (integer, required)
    Enum: "429"

  - `detail` (string, required)

## Response 429 headers (application/problem+json):

  - `Retry-After` (integer)
    Seconds until the rate limit resets

## Response 500:

  - `500` (unknown)
    Internal server error

## Response 500 fields (application/problem+json):

  - `type` (string, required)
    Enum: "https://docs.dinie.com/errors/internal"

  - `title` (string, required)
    Enum: "Internal Error"

  - `status` (integer, required)
    Enum: "500"

  - `detail` (string, required)

## Response 401 examples:

  - `Authorization header is missing` (unknown)

  - `Bearer token is invalid or malformed` (unknown)

  - `Bearer token has expired` (unknown)

## Response 403 examples:

  - `The credential is not permitted to perform this action` (unknown)

## Response 422 examples:

  - `One or more bank account fields are invalid` (unknown)

  - `The customer has no confirmed user account` (unknown)

