Skip to main content

KYB - COP (Fiat)

To operate COP fiat (Colombian Peso) on a company account, submit COP KYB. This is the company variant of the COP rail activation: it uses the same POST /v2/kyc/cop/api endpoint as individual COP KYC, and the backend routes the request to the business KYB flow when the account type is COMPANY (there is no separate route).

info

COP KYB is processed through Avenia's COP fiat rail. When the business review is approved, copUnlocked on GET /v2/account/metadata becomes true and the company can create COP payins / payouts via the Operations endpoints.


Prerequisites​

COP KYB reuses the data already collected during your company onboarding (KYB Level 1). Before submitting, the company account must already have:

ItemHow it is provided
Completed company KYB verificationCompany 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. If the business activity description captured there is missing or shorter than 100 characters, pass businessActivityDescription in this request body.
At least one UBO with hasControlRegistered in KYB Level 1. Each UBO also needs a full address and an identity document.
PROOF-OF-REVENUE document uploaded & readyUploaded via POST /v2/documents with documentType: PROOF-OF-REVENUE; pass its ID as proofOfRevenueDocId.
Company formation document uploadedUploaded 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 COP KYB​

HTTP POST Request​

https://api.sandbox.avenia.io:10952/v2/kyc/cop/api?subAccountId={subAccountId}

subAccountId is optional — include it as a query parameter to submit COP KYB for a subaccount; omit it for the main account.

Fields​

FieldTypeRequiredDescription
businessTypestringYesLegal structure. One of corporation, llc, partnership, sole_proprietorship, trust, non_profit_organization, foundation, dao, cooperative (case-insensitive).
businessIndustriesarrayYesNAICS industry codes (e.g. ["519290"]). Must contain at least one code; the first entry is used.
proofOfRevenueDocIdstringYesID of the PROOF-OF-REVENUE document (must have ready: true).
websitestringCond.Required only if the company website was not captured at KYB Level 1.
uboProofOfAddressDocsarrayCond.Per-UBO Proof of Address mapping — required for companies formed outside the US. Each entry is { "uboId": "...", "uploadedDocumentId": "..." }. US-formed companies can omit it.
dateOfIncorporationstringCond.YYYY-MM-DD. Required only if a date of incorporation is not already on file.
companyEmailstringCond.Business contact e-mail. Required only if no e-mail was captured for the company during KYB Level 1 (always the case for KYB Level 1 (API)).
businessActivityDescriptionstringCond.100–4000 characters describing what the company does. When sent, it is the text the compliance reviewer reads and it replaces the description stored at KYB Level 1 on the account. Required when the stored description is missing or shorter than 100 characters. Describe the products, services and customers, not just the sector.

Sample JSON Body​

{
"businessType": "llc",
"businessIndustries": ["519290"],
"proofOfRevenueDocId": "5f8d3c16-b2e7-4a9f-c834-1e6b0d5f2a91",
"companyEmail": "ops@acme-trading.com",
"businessActivityDescription": "Wholesale distribution of packaged food to supermarkets and restaurants in Brazil, with imports from Colombia and Mexico settled through cross-border payments.",
"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/cop/api" \
-H "Authorization: Bearer eyJhdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"businessType": "llc",
"businessIndustries": ["519290"],
"proofOfRevenueDocId": "5f8d3c16-b2e7-4a9f-c834-1e6b0d5f2a91",
"companyEmail": "ops@acme-trading.com",
"businessActivityDescription": "Wholesale distribution of packaged food to supermarkets and restaurants in Brazil, with imports from Colombia and Mexico settled through cross-border payments.",
"uboProofOfAddressDocs": [
{ "uboId": "9b5f722a-336a-4a60-82c5-a664657ba3e0", "uploadedDocumentId": "c4e9b27f-1a3d-4e8c-b561-7d2f0a9e4b38" }
]
}'

Poll the COP KYB Attempt​

GET https://api.sandbox.avenia.io:10952/v2/kyc/attempts/{attemptId}?subAccountId={subAccountId}
{
"attempt": {
"id": "7d2f5b18-3e9c-4a7f-d246-6b0e1f8d4c52",
"levelName": "cop-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, copUnlocked becomes true on GET /v2/account/metadata and the COP rail is active. If webhooks are enabled, the KYC event types fire the same way as for other KYC/KYB flows.