- Create an Entity for each recipient
- Onboard the Entity, including the account where it will be paid
- Create a Checkout Session with a
splitarray, then send the customer to itsredirect_url
Before you begin
Before you start, make sure you have:- A Fintoc account with Collects enabled
- Your Secret Key and Public Key
- Recipient business and bank account information for each Entity you need to onboard
Step 1: Create an Entity
An Entity represents the legal holder that receives a share of a payment, such as a seller, a partner, a professional, or a business unit.settlement_recipient capability starts in waiting_initialization. It cannot receive a split until capabilities.settlement_recipient.status reaches operational. Fintoc sets this status after it approves the onboarding. The top-level status reflects the Entity’s most advanced capability. Use the capability status to determine whether the Entity is available for Split Payments.
If the recipient already exists as an Entity in your organization, reuse its
id. Creating a second Entity with the same holder_id returns 409 entity_holder_id_already_exists_for_organization.GET /v2/entities, which accepts holder_id, status, and is_root filters, and GET /v2/entities/{id}.
Step 2: Onboard the Entity
During onboarding, the Entity declares who it is and the bank account where Fintoc pays split funds. Fintoc reviews the onboarding. After approval, the Entity’ssettlement_recipient capability becomes operational.
You complete onboarding through the API in Chile and Mexico.
Create the onboarding
Onboarding type
type is required when you create the onboarding. It declares what the Entity will do with Fintoc and determines how much information the onboarding asks for. You cannot change it after creation.
settlement_recipient: The Entity only receives money. Fintoc transfers its share of each split to the bank account in settlement_account. The Entity does not hold a balance at Fintoc, receive transfers from third parties, or send money out. Because the Entity only gets paid, the onboarding asks for the minimum needed to identify who is being paid. This is the value to use for Split Payments.
account_holder: the Entity operates an account at Fintoc. It can receive incoming transfers, send outgoing ones, and hold a balance. That capability carries a higher risk profile, so the onboarding requires the full set of information: transactional profile, ownership structure, and supporting documents.
The settlement account
Fintoc transfers each recipient’s share of every split todata.company_information.settlement_account. The settlement_account field is the only Split Payments addition to the onboarding. Required settlement_account fields depend on the recipient’s country_code.
Chile
Mexico
The
settlement_account field carries no holder fields. The account holder is the Entity being onboarded, so the tax ID is already known.
Onboarding fields
For Chilean company Entities,
business_activity, business_address, and phone are optional. You can omit them from the example above. Mexican company Entities must still send all three.
Submit the onboarding
Once the information is complete, submit it for review:Automatic settlement account validation. When you submit the onboarding, Fintoc validates
settlement_account by sending a micro-deposit (1 CLP for Chilean Entities or 0.01 MXN for Mexican Entities). The micro-deposit confirms that the account is active and that its holder matches the Entity’s holder_id. Fintoc runs this validation automatically for every settlement_recipient onboarding submission; you do not need to trigger it separately.
Two webhooks tell you the outcome:
entity.onboarding.approved: the Entity is ready to receive splits.entity.onboarding.rejected: the review failed.
Compliance review typically takes one to two business days. Design your flow so the recipient can be created and shown as pending while the review runs.
Changing the settlement account
Create a new onboarding for the same Entity with the new account. While the new onboarding is under review, the previous account stays in effect and the Entity keeps receiving splits. When Fintoc approves the new onboarding, the new account replaces the previous one. If Fintoc rejects the new onboarding, nothing changes.Step 3: Create a Checkout Session with split
Add a split array to the Checkout Session. Each entry names an Entity and its share.
Percentages are expressed in basis points.
10000 = 100%, 1000 = 10%, 1 = 0.01%. To assign 90%, send 9000.split array as you sent it, along with the redirect_url of the payment page. Send the customer there to complete the payment.
In webhook payloads (see Step 4), each split entry includes metadata (even when empty) and an explicit charge_processing_fee. Entries that do not absorb the fee return charge_processing_fee: false. At creation time, metadata remains optional and charge_processing_fee only needs to be sent on the entry that absorbs the fee.
Step 4: Handle post-payment events
checkout_session.finished and payment_intent.succeeded include a split_applied array with the amount resolved for each recipient.
split_applied appears twice on checkout_session.finished: once on the checkout_session itself and once inside data.payment_resource.payment_intent. Both arrays carry the exact same content, so you can read either one. The nested copy is the same array delivered by payment_intent.succeeded, which fires alongside checkout_session.finished.
Events to handle:
How and when recipients are paid
Payouts follow your organization’s settlement schedule. In each cycle, Fintoc groups every share owed to the same Entity into one transfer to its settlement account. For example, a recipient that appears in 200 payments during a cycle receives a single transfer. Retrieve a payout withGET /v1/payouts/{id}, list them with GET /v1/payouts, and get the payments it covers with GET /v1/payouts/{id}/resources.
Rules and validations
Fintoc validates thesplit array when you create a Checkout Session. The request fails with 400 Bad Request and invalid_request_error if the split array violates any rule.
Per entry
entity_idmust reference anEntitywhosecapabilities.settlement_recipient.statusisoperational.- The
Entityobject’scountry_codemust match the payment currency. - For
flat,amountmust be greater than0and less than or equal to the Checkout Sessionamount. - For
percentage:0 < amount <= 10000.
- Between 1 and 10 entries.
- No duplicate
entity_idvalues. - Every entry must use the same
type. - The sum of all
split[].amountvalues, after converting percentages, must equal the Checkout Sessionamountexactly. - For
percentage, the values must add up to exactly10000bps.
floor(amount_total * amount / 10000). Fintoc assigns the accumulated rounding difference to the entry with charge_processing_fee: true.