---
title: "Submit business information"
method: POST
path: "/v1/customers/{customerId}/kyb"
tags: ["Onboarding"]
---

# Submit business information

`POST /v1/customers/{customerId}/kyb`

## Request

- Base URL: `https://api.sandbox.alfredpay.io`
- URL: `https://api.sandbox.alfredpay.io/v1/customers/{customerId}/kyb`
- Auth: one of:
  - HTTP bearer
  - API key in header `api-key` and API key in header `api-secret`

Sends the entity and its related persons as one declaration. This covers everything except files.

One draft per customer. Posting again before you submit the verification replaces the draft rather than creating a second one. Once the verification is submitted, the draft is frozen.

The response carries a `relatedPersonId` for each person you sent. Person-level document uploads need those IDs, which is why this call comes before documents.

## Headers

- `Idempotency-Key` string, uuid, required

## Request body

- KybSubmissionRequest
  - `kybSubmission` object, required
    - `businessName` string, required
    - `taxId` string, required
    - `country` 'MEX' | 'ARG' | 'BRA' | 'COL' | 'CHL' | 'PER' | 'DOM' | 'USA' | 'CHN' | 'HKG' | 'BOL' | 'PRY', required: ISO 3166-1 alpha-3, the only form Alfred stores, filters on, reports or emits. Compatibility rule for integrations that can only send alpha-2: any inbound `country` value in alpha-2 (path, query or body) is normalized to alpha-3 at the boundary before validation, storage or routing. Unrecognized in either form → `422 validation_error`.
    - `state` string, required
    - `city` string, required
    - `address` string, required
    - `zipCode` string, required
    - `website` string, uri
    - `relatedPersons` RelatedPerson[], required
      - `firstName` string, required
      - `lastName` string, required
      - `email` string, email, required
      - `dateOfBirth` string, date, required
      - `nationalities` string[]
      - `cpf` string
      - `dni` string
      - `pep` boolean
      - `title` string: Job title. Required on every related person; preflight reports persons.{relatedPersonId}.title until it is sent.
      - `attestOwnershipStructure` boolean: The control person attests that the declared ownership structure is complete and accurate. Required as true on the person carrying CONTROLLING_PERSON; preflight reports persons.{relatedPersonId}.ownership_attestation until it is sent.
      - `identifiers` PersonIdentifier[]: Personal identity and tax identifiers. A US person needs an SSN here, and preflight reports persons.{relatedPersonId}.tax_id until it is sent.
        - `type` string, required: Lowercase identifier type, for example ssn.
        - `number` string, required
        - `issuingCountry` 'MEX' | 'ARG' | 'BRA' | 'COL' | 'CHL' | 'PER' | 'DOM' | 'USA' | 'CHN' | 'HKG' | 'BOL' | 'PRY', required: ISO 3166-1 alpha-3, the only form Alfred stores, filters on, reports or emits. Compatibility rule for integrations that can only send alpha-2: any inbound `country` value in alpha-2 (path, query or body) is normalized to alpha-3 at the boundary before validation, storage or routing. Unrecognized in either form → `422 validation_error`.
      - `ownershipPercentage` number, required: 0 for non-owners. A person at or above the country threshold (Colombia 5, Argentina 10, otherwise 25) must carry ULTIMATE_BENEFICIAL_OWNER; below it, SHAREHOLDER.
      - `roles` RelatedPersonRole[], required

## Response `201`

Draft created or replaced

- Submission
  - `submissionId` string
  - `customerId` string
  - `status` 'DRAFT' | 'FROZEN'
  - `relatedPersons` object[]
    - `relatedPersonId` string
    - `firstName` string
    - `lastName` string
  - `createdAt` string, date-time

## Other responses

- `400`: Malformed request, so a missing required field, a wrong type or a bad enum.
- `409`: The submission is frozen. A verification has already been submitted. Use `/reevaluate` after correcting data.
- `422`: Semantically invalid. The request is well-formed but violates a business rule. `param` names the field.

## Changes

- **2026-11-03** `20fef4fd2ab3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation/changes/v1/customers/:customerId/kyb/post.md)

---

[API](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation.md) - [All operations](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/alfredpay/apis/alfred-penny-api-client-documentation/revisions/20fef4fd2ab3?raw)
