Proof of Financial Capacity

Submit Proof of Financial Capacity — a prerequisite to unlock USD (KYB USD) for a COMPANY subaccount.

Prerequisite for USD. Proof of Financial Capacity (PoFC) is required before a COMPANY subaccount can be enabled for USD operations. Its KYB must be APPROVED first.

Overview

Proof of Financial Capacity is a single compliance document that evidences the company's ability to operate the declared volumes. You upload the document, submit it, and poll the attempt until it is APPROVED.

What counts as Proof of Financial Capacity? A document that demonstrates the company's funds or income, such as a bank statement, an account balance statement, audited financial statements, or an accountant-issued income statement. Provide a single-sided PDF, typically dated within the last 3 months.

  • POST /api/kyc/document — register the PDF (documentType: "PROOF-OF-FINANCIAL-CAPACITY") and get a one-time upload URL.
  • POST /api/kyb/proof-of-financial-capacity — submit the uploaded document, get back an attemptId.
  • GET /api/kyb/proof-of-financial-capacity/{attemptId} — poll the attempt (PENDINGAPPROVED or REJECTED).

Flow

  1. Confirm the COMPANY subaccount's KYB is APPROVED.
  2. Register a PROOF-OF-FINANCIAL-CAPACITY document, PUT the PDF to the returned URL, and poll GET /api/kyc/document/{documentId} until ready: true.
  3. POST /api/kyb/proof-of-financial-capacity with the documentId — Hodle returns an attemptId.
  4. Poll the attemptId until status: APPROVED. USD operations unlock once approved.

Uploading the document

Proof of Financial Capacity reuses the document upload endpoints — only the documentType differs.

Register the document — POST /api/kyc/document

curl --request POST \
  --url https://api.hodle.com.br/api/kyc/document \
  --header "Authorization: Bearer $API_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "subAccountId": "c852df87-...", "documentType": "PROOF-OF-FINANCIAL-CAPACITY" }'

PUT the PDF to the returned uploadUrlFront, then poll readiness (see Uploading documents).

POST /api/kyb/proof-of-financial-capacity

Request

curl --request POST \
  --url https://api.hodle.com.br/api/kyb/proof-of-financial-capacity \
  --header "Authorization: Bearer $API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "subAccountId": "c852df87-ac61-4259-8242-6451658dfedb",
    "uploadedPoFCId": "doc_pofc_9a1..."
  }'
const res = await fetch(
  'https://api.hodle.com.br/api/kyb/proof-of-financial-capacity',
  {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.HODLE_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ subAccountId, uploadedPoFCId }),
  },
)
const data = await res.json()
import os, requests

res = requests.post(
    "https://api.hodle.com.br/api/kyb/proof-of-financial-capacity",
    headers={
        "Authorization": f"Bearer {os.environ['HODLE_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={"subAccountId": sub_account_id, "uploadedPoFCId": uploaded_pofc_id},
)
data = res.json()

Parameters

FieldTypeRequiredDescription
subAccountIdstringYesThe COMPANY subaccount's id.
uploadedPoFCIdstringYesdocumentId of the uploaded Proof of Financial Capacity PDF, with ready: true.
sandboxRejectbooleanNoSandbox only. true simulates a rejected attempt; ignored in production.

Response

202 Accepted
{
  "success": true,
  "data": {
    "attemptId": "att_pofc_1e6b...",
    "status": "PENDING",
    "createdAt": "2026-07-22T22:00:00.000Z"
  }
}

Errors

400 — KYB not approved
{ "success": false, "error": "KYB Level 1 must be approved before submitting Proof of Financial Capacity" }
404 — subaccount not found
{ "success": false, "error": "Subaccount not found for this platform" }

GET /api/kyb/proof-of-financial-capacity/{attemptId}

Poll the attempt until it resolves.

curl --request GET \
  --url https://api.hodle.com.br/api/kyb/proof-of-financial-capacity/att_pofc_1e6b... \
  --header "Authorization: Bearer $API_KEY"
const res = await fetch(
  `https://api.hodle.com.br/api/kyb/proof-of-financial-capacity/${attemptId}`,
  { headers: { Authorization: `Bearer ${process.env.HODLE_API_KEY}` } },
)
const data = await res.json()
import os, requests

res = requests.get(
    f"https://api.hodle.com.br/api/kyb/proof-of-financial-capacity/{attempt_id}",
    headers={"Authorization": f"Bearer {os.environ['HODLE_API_KEY']}"},
)
data = res.json()

Response

status: APPROVED
{
  "success": true,
  "data": {
    "attemptId": "att_pofc_1e6b...",
    "status": "APPROVED",
    "resultMessage": null,
    "createdAt": "2026-07-22T22:00:00.000Z",
    "updatedAt": "2026-07-22T22:01:43.000Z"
  }
}
status: REJECTED
{
  "success": true,
  "data": {
    "attemptId": "att_pofc_1e6b...",
    "status": "REJECTED",
    "resultMessage": "Statement does not cover the declared capacity",
    "createdAt": "2026-07-22T22:00:00.000Z",
    "updatedAt": "2026-07-22T22:01:43.000Z"
  }
}

Status values

StatusMeaning
PENDINGUnder review. Keep polling.
APPROVEDAccepted. USD operations unlock for the subaccount.
REJECTEDFailed. resultMessage describes why; upload a fresh document and resubmit.