dLocal marketplace onboarding — step 2 (Mexico & Brazil)
Audience: Business stakeholders, ops, design/engineering partners
Purpose: Why we are improving KYC document collection — with rejection data by country
Jira: REVPAY-6371
Product request (cycle): DocPlanner/dp-payments-ai#275
1. What this initiative is about (short)
Doctors and clinics in Mexico and Brazil who want marketplace payouts via dLocal must pass a KYC-style flow. Step 2 is where they upload proof of identity and (where applicable) tax or company registration documents.
The REVPAY-6371 cycle (scoped in dp-payments-ai PR #275) improves that step so that:
- Document collection follows a clear matrix (individual vs company, MX vs BR), including an identity “picker” where more than one document type is acceptable (e.g. national ID or driving licence with front/back as required).
- Single-step uploads where only one document type applies (e.g. tax or incorporation), without a redundant type chooser.
- The UI is driven by what dLocal still marks as pending for the account, so the customer always sees what is actually outstanding.
- Users can capture documents in the browser with the device camera (take photo → preview → retake or confirm), reducing reliance on screenshots or poor-quality gallery photos.
- Rollout preference: ship Mexico and Brazil together in one logical release unless engineering flags a safety reason to stage.
documents_screen_photo (screen captures). Giving a first-class camera path and clearer document choice directly targets that failure mode.
2. Rejection reasons — data overview (ops dashboard)
Figures below come from the internal report “Not Approved Reason” for ACCOUNTS REJECTED / BANK REJECTED, filtered by country (same metric family ops uses when discussing marketplace account quality).
Mexico — top rejection codes
Total rows in extract: 335 rejections (sum of listed codes).
| Error code | # | % of MX total |
|---|---|---|
documents_screen_photo | 155 | 46.3% |
REJECTED_TAX_ID_NOT_MATCH | 41 | 12.2% |
documents_invalid | 27 | 8.1% |
| Bank account rejected by dLocal | 20 | 6.0% |
documents_missmatch | 18 | 5.4% |
documents_expired | 18 | 5.4% |
documents_same_image | 18 | 5.4% |
documents_missing_fields | 18 | 5.4% |
legal_representative_not_found_in_company | 11 | 3.3% |
documents_grayscale_image | 5 | 1.5% |
document_not_readable | 3 | 0.9% |
documents_cropped | 1 | 0.3% |
Brazil — same metric, for contrast
Total rows in extract: 522 rejections. documents_screen_photo is material but not dominant the way it is in Mexico.
| Error code | # | % of BR total |
|---|---|---|
documents_unexpected_data | 100 | 19.2% |
documents_invalid | 92 | 17.6% |
documents_expired | 70 | 13.4% |
documents_screen_photo | 56 | 10.7% |
documents_same_image | 47 | 9.0% |
REJECTED_ACCOUNT_NOT_FOUND | 34 | 6.5% |
documents_missing_fields | 30 | 5.7% |
documents_missmatch | 21 | 4.0% |
documents_grayscale_image | 20 | 3.8% |
invalid_bank_branch | 18 | 3.4% |
| …remaining codes each < 2% (invalid account number, blurry text, bank name, etc.) | ||
3. Takeaway
- In Mexico, almost half of sampled rejections are
documents_screen_photo— the strongest single signal that how users capture and submit ID matters as much as which document we ask for. - In Brazil, screenshot-style rejects are still top-four (~11%) but compete with data validity and expiry issues; the product still benefits from camera capture and clearer identity choice, while ops may prioritise different follow-ups per code.
Disclaimer: This repository is a personal / Docplanner workflow space. It is not affiliated with dLocal (the company). Dashboard numbers are a point-in-time export from internal tooling; refresh the underlying report for live totals. Formal scope and acceptance criteria: dp-payments-ai#275 and Jira REVPAY-6371.