Skip to main content
account_holder is the onboarding type for opening a Mexican Entity as an account holder. After Fintoc approves the review, the Entity can own Account objects. This page documents the schema you send in data when you create an account_holder onboarding and the document slots the onboarding opens. For the end-to-end flow, from creating the Entity to submitting for review, follow Onboard an entity by API. This page covers only what is specific to the account_holder type.
Availabilityaccount_holder supports Mexican Entity objects. Creating an account_holder onboarding for an Entity in another country returns 422 Unprocessable Entity with the code country_not_supported.

The request shape

Send type and data at the top level of the create request:
The data object holds four keys, all required. The sections below document each one. The API reference describes data as a free-form object, because its shape depends on type; this page is the schema for account_holder. legal_representatives and shareholders report errors independently, so one response can carry errors from both blocks. company_information and transactional_profile are the exception. Fintoc validates them in that order and stops at the first block that fails. A request with errors in both blocks reports only company_information.

company_information

The company’s identity and settlement details. Every field is required:
CLABE validation differs by modesettlement_account must have 18 digits. Fintoc accepts the value when the first three digits match a supported Mexican institution and the CLABE control digit checks out. Fintoc also accepts its own CLABEs and skips the control digit for them. In test mode, this applies to sandbox bank codes. In live mode, this applies to Fintoc’s own bank code. A CLABE at a supported Mexican institution behaves the same in both modes. A sandbox CLABE that works in test returns an error in live. An invalid value returns 400 Bad Request with the code invalid_clabe and param set to company_information.settlement_account.
The people authorized to act for the company. Declare at least one. Fintoc enforces no maximum, and every field is required for every entry: An empty array returns 400 Bad Request with the code legal_representatives_required. Errors on this block accumulate across entries, and param carries the index of the failing entry, such as legal_representatives.0.email.

transactional_profile

The volume and the source of the money the Entity expects to move. Every field is required: resource_origins accepts these values: The response echoes transactional_profile with declaration_accepted set to true, which Fintoc adds when it creates the onboarding. Do not send declaration_accepted; the API ignores it.

shareholders

The company’s ownership tree. Declare at least one shareholder; an empty array returns 400 Bad Request with the code shareholders_required. Every node in the tree, at the root and at any depth, takes these fields: Two rules constrain the tree:
  • Each level sums to between 76 and 100. The root percentages must sum to at least 76 and at most 100. Each children array must meet the same range. A level below 76 returns the code participation_below_threshold. A level above 100 returns the code shareholder_participation_exceeded.
  • Only a legal_entity nests. A natural_person carrying children returns the code only_legal_entity_can_nest. A legal_entity with no children is valid, and Fintoc runs no sum check on a level that does not exist. Fintoc sets no limit on nesting depth.
Unlike legal_representatives, this block reports one error at a time. Fix the reported node and resend.

Document slots

Creating the onboarding opens every slot the type requires, each one reporting missing until you upload a file. Every slot is required before you can submit. The maximum file size is 20 MB for every slot. For company slots and shareholder documents, Fintoc reads the content type from the file bytes. The content type your upload declares does not matter. The two legal representative slots check both values. Send the part’s Content-Type as one of the accepted types for that slot, because Fintoc rejects the upload before it inspects the bytes. The onboarding opens five company slots, listed in the top-level documents array: Each legal representative gets its own documents array with two slots: Each shareholder gets a single document object rather than an array, because a shareholder holds exactly one document. Fintoc picks the slot from the shareholder’s type, so the upload path carries no slot_key: A company with one legal representative and three shareholders therefore opens ten slots: five company slots, two for the representative, and one per shareholder.

A complete example

This payload declares one legal representative and two root shareholders. One root shareholder nests a third shareholder. Every value is test data that belongs to no real company or person. The settlement_account is a documented test CLABE. Fintoc accepts it because its bank code and control digit are valid. An all-zeros CLABE returns 400 Bad Request, because 000 is not a supported bank code.

What’s next