due_diligence_review).Overview
In the document-based onboarding, WEpayments tells your integration exactly which documents the company must send — resolved from its segment and modality (national / cross-border). You receive that list through the onboarding webhook, upload the files, and the solicitation advances automatically to review once every required document is sent. After compliance approves the documents, the flow branches by modality (derived from the company address country — see Modality):- National — the legal representatives sign the contract, then the account is created.
- Cross-border — WEpayments opens the bank channel, then the account is created. No signature step.
Status Flow
reject decision sends the solicitation back to pending_documents, keeping the already‑approved documents untouched, so the client only needs to resend the rejected ones.Modality: national vs cross-border
The modality is derived from the company address country, not sent as an input:address.country=BR→ national (contract signature step).address.country≠BR→ cross-border (bank channel step, no signature).
documents list you receive already matches the company’s modality.
Document fields
Each requested document carries two independent state machines:upload_status is pending or review_status is rejected. Approved documents cannot be replaced.
Step-by-step
Register the onboarding webhook
pending_documents event, which is fired right after the solicitation is processed and carries the list of required documents. Every status change is delivered to your URL, which must answer 200 OK; otherwise delivery is retried up to 3 times, every 15 minutes.Create the solicitation with a segment
POST /v2/register/companies, including the segment object. Use List Segments to obtain a valid segment.id. The solicitation is created with status pending.Receive the required documents (pending_documents)
pending_documents and the webhook payload includes the documents array — the exact list the client must send.tag — it is the identifier you use to upload the matching file.Upload the documents (partial or complete)
POST /v2/register/companies/{uuid}/documents as multipart/form-data (tag + file). You may upload in several calls. Each successful upload sets that document’s upload_status to sent and triggers the onboarding webhook with the updated state.Accepted files: pdf, jpg, jpeg, png, up to 10 MB.Automatic transition to review
sent. When they are, the solicitation moves automatically to documents_under_review — optional documents do not block this transition. The webhook fired by that last upload already reflects the new status.Compliance reviews the documents
- All approved → the flow branches by modality: national moves to
waiting_signature; cross-border moves towaiting_bank_channel. - Any rejection → the solicitation goes back to
pending_documents; the rejected document returns toupload_status: pending/review_status: rejected(with areason), while approved documents are preserved. - Review closed → the solicitation becomes
canceled.
Sign the contract — national only (waiting_signature)
waiting_signature, fetch the signing links with GET /v2/register/companies/{uuid}/signature/link and route each signer to their sign_url (ZapSign). Once every signer has signed, WEpayments creates the account and the solicitation moves to active.You can download the signed contract at any time with GET /v2/register/companies/{uuid}/signature/file.404.Bank channel opening — cross-border only (waiting_bank_channel)
waiting_bank_channel, WEpayments opens the bank channel internally. There is nothing to do on the merchant side — just watch the webhook: the solicitation moves to bank_channel_created and then to active.Account activation (active)
active, the webhook delivers the account_id (MID — Merchant ID). The account is ready to transact.Tracking the documents
At any time you can callGET /v2/register/companies/{uuid}/documents to read the current state of every document and its immutable review_history (approvals and rejections, newest first). This is a read-only call — it never changes the solicitation status.
Best practices
Handle partial uploads
Handle partial uploads
documents_under_review when all required documents are sent. Optional documents never block the transition.React to rejections automatically
React to rejections automatically
pending_documents and the webhook carries the rejected document with its reason. Surface that reason to the client and allow a resend of the same tag.Branch your handling by status, not by assumption
Branch your handling by status, not by assumption
waiting_signature (national) or waiting_bank_channel (cross-border). Only the national branch requires action from you (routing signers to their sign_url); the cross-border branch is fully handled by WEpayments.Make your webhook idempotent
Make your webhook idempotent
id + status (and the per-document state) to reconcile, and always answer 200 OK. The documents array is only present in pending_documents, documents_under_review and canceled.
