KYB - MXN (Fiat)
To operate MXN fiat (Mexican Peso) on a company account, submit MXN KYB. This is the company variant of the MXN rail activation: it uses the same POST /v2/kyc/mxn/api endpoint as individual MXN KYC, and the backend routes the request to the business KYB flow when the account type is COMPANY (there is no separate route).
MXN KYB is processed through Avenia's MXN fiat rail. When the business review is approved, mxnUnlocked on GET /v2/account/metadata becomes true and the company can create MXN payins / payouts via the Operations endpoints.
Prerequisites
MXN KYB reuses the data already collected during your company onboarding (KYB Level 1). Before submitting, the company account must already have:
| Item | How it is provided |
|---|---|
| Completed company KYB verification | Company data collected via KYB Level 1 (Web SDK) or KYB Level 1 (API). If it is missing, the request is rejected with "complete KYB verification first". |
| Company information on file (including website) | Captured at KYB Level 1. If the website is missing there, pass website in this request body. |
At least one UBO with hasControl | Registered in KYB Level 1. Each UBO also needs a full address and an identity document. |
PROOF-OF-REVENUE document uploaded & ready | Uploaded via POST /v2/documents with documentType: PROOF-OF-REVENUE; pass its ID as proofOfRevenueDocId. |
| Company formation document uploaded | Uploaded during KYB Level 1 (e.g. articles of incorporation / contrato social). Pulled from your stored documents automatically — not sent in this request. |
Per-UBO PROOF-OF-ADDRESS (companies formed outside the US only) | Uploaded via POST /v2/documents, then mapped per UBO in uboProofOfAddressDocs (see below). |
Submit MXN KYB
HTTP POST Request
https://api.sandbox.avenia.io:10952/v2/kyc/mxn/api?subAccountId={subAccountId}
subAccountId is optional — include it as a query parameter to submit MXN KYB for a subaccount; omit it for the main account.
Fields
The body is required for the first business review. It is optional when the company's fiat-rail business review is already approved (see the passthrough note above).
| Field | Type | Required | Description |
|---|---|---|---|
businessType | string | Yes | Legal structure. One of corporation, llc, partnership, sole_proprietorship, trust, non_profit_organization, foundation, dao, cooperative (case-insensitive). |
businessIndustries | array | Yes | NAICS industry codes (e.g. ["519290"]). Must contain at least one code; the first entry is used. |
proofOfRevenueDocId | string | Yes | ID of the PROOF-OF-REVENUE document (must have ready: true). |
website | string | Cond. | Required only if the company website was not captured at KYB Level 1. |
uboProofOfAddressDocs | array | Cond. | Per-UBO Proof of Address mapping — required for companies formed outside the US. Each entry is { "uboId": "...", "uploadedDocumentId": "..." }. US-formed companies can omit it. |
dateOfIncorporation | string | Cond. | YYYY-MM-DD. Required only if a date of incorporation is not already on file. |
Sample JSON Body
{
"businessType": "llc",
"businessIndustries": ["519290"],
"proofOfRevenueDocId": "5f8d3c16-b2e7-4a9f-c834-1e6b0d5f2a91",
"uboProofOfAddressDocs": [
{
"uboId": "9b5f722a-336a-4a60-82c5-a664657ba3e0",
"uploadedDocumentId": "c4e9b27f-1a3d-4e8c-b561-7d2f0a9e4b38"
}
]
}
JSON Response
201 Created:
{
"attemptId": "7d2f5b18-3e9c-4a7f-d246-6b0e1f8d4c52"
}
cURL Example
curl -X POST "https://api.sandbox.avenia.io:10952/v2/kyc/mxn/api" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"businessType": "llc",
"businessIndustries": ["519290"],
"proofOfRevenueDocId": "5f8d3c16-b2e7-4a9f-c834-1e6b0d5f2a91",
"uboProofOfAddressDocs": [
{ "uboId": "9b5f722a-336a-4a60-82c5-a664657ba3e0", "uploadedDocumentId": "c4e9b27f-1a3d-4e8c-b561-7d2f0a9e4b38" }
]
}'
Poll the MXN KYB Attempt
GET https://api.sandbox.avenia.io:10952/v2/kyc/attempts/{attemptId}?subAccountId={subAccountId}
{
"attempt": {
"id": "7d2f5b18-3e9c-4a7f-d246-6b0e1f8d4c52",
"levelName": "mxn-kyb",
"status": "COMPLETED",
"result": "APPROVED",
"resultMessage": "",
"retryable": false,
"createdAt": "2026-03-20T13:21:36.670096Z",
"updatedAt": "2026-03-20T13:21:36.670096Z"
}
}
status moves through PENDING → PROCESSING → COMPLETED; the terminal outcome is in result (APPROVED or REJECTED). Once result is APPROVED, mxnUnlocked becomes true on GET /v2/account/metadata and the MXN rail is active. If webhooks are enabled, the KYC event types fire the same way as for other KYC/KYB flows.
What the company can do once MXN is unlocked
MXN is the narrowest of the LatAm rails, and the limits apply to the company account the same way they apply to an individual:
- Payin: the ticket returns a destination CLABE; the payer sends the exact amount to it. There is no source-account lock. See Bank Account Guide MXN.
- Payout: MXN pays out to a registered beneficiary only — there is no inline alternative. Register it first via Beneficiary Bank Accounts — MXN.
- Payment method: the API value is
BANK-TRANSFER.SPEIis the underlying Mexican network, not an API value, and is rejected with HTTP 400.
Related documentation
- KYB Level 1 (Web SDK)
- KYB Level 1 (API)
- KYB - COP · KYB - ARS
- KYC - MXN — the individual (personal-account) MXN flow on the same endpoint
- Operations — MXN to Crypto / Crypto to MXN — what the company can do once MXN is unlocked
- Beneficiary Bank Accounts — MXN