KYB - Proof of Address
Submit a Proof of Address to raise the limits on a company subaccount. This step is independent of KYB Level 1: Level 1 verifies the company's identity, while Proof of Address (and, for fiat rails, Proof of Financial Capacity) unlocks higher operating limits.
Proof of Address is always submitted against a COMPANY subaccount. Pass its ID as ?subAccountId= on every call below.
KYB Level 1 must be approved before submitting Proof of Address. See KYB Level 1 (Web SDK) or KYB Level 1 (API).
The flow is the same two-phase pattern used everywhere else: upload the document, wait until it is ready, then submit the document ID for verification.
Step 1 - Upload the Proof of Address Document
Upload via POST /v2/documents?subAccountId={subAccountId} (same two-phase upload described in KYB Level 1 (API) - Step 2). Use the documentType that matches what the document proves:
| Document | documentType | Proves |
|---|---|---|
| Company proof of address | PROOF-OF-ADDRESS-COMPANY | The company's registered business address |
| UBO proof of residence | PROOF-OF-ADDRESS | An Ultimate Beneficial Owner's residence |
Both are single-sided PDF documents. Poll GET /v2/documents/{documentId}?subAccountId={subAccountId} (or listen for the document webhook) until ready: true before continuing.
A proof of address is typically valid for the last 3 months. If you are relying on documents collected during your own onboarding, they may be accepted up to 12 months old — confirm the accepted age with your account manager.
Step 2 - Submit the Proof of Address
Once the document is ready, submit its ID for verification.
HTTP POST Request
https://api.sandbox.avenia.io:10952/v2/account/address/proof-of-address/api?subAccountId={subAccountId}
Fields
| Field | Type | Required | Description |
|---|---|---|---|
uploadedPoAId | string | Yes | ID of the PROOF-OF-ADDRESS or PROOF-OF-ADDRESS-COMPANY document (must have ready: true). |
sandboxReject | boolean | No | Set to true to simulate a rejected Proof of Address in the sandbox environment. |
Sample JSON Body
{
"uploadedPoAId": "c4e9b27f-1a3d-4e8c-b561-7d2f0a9e4b38"
}
JSON Response
{
"id": "1e6b8c43-5f2a-4d9e-b782-4c1f0a7e3b65"
}
The returned id is the Proof of Address attempt ID.
Step 3 - Poll the Proof of Address Attempt
Polling is optional when webhooks are configured.
HTTP GET Request
https://api.sandbox.avenia.io:10952/v2/account/address/proof-of-address/attempts/{attemptId}?subAccountId={subAccountId}
Sample JSON Response
{
"attempt": {
"id": "1e6b8c43-5f2a-4d9e-b782-4c1f0a7e3b65",
"uploadedPoAId": "c4e9b27f-1a3d-4e8c-b561-7d2f0a9e4b38",
"status": "COMPLETED",
"result": "APPROVED",
"resultMessage": "",
"createdAt": "2026-03-19T22:09:56.631111Z",
"updatedAt": "2026-03-19T22:09:56.865286Z"
}
}
Wait until result is APPROVED. You can list all attempts with GET /v2/account/address/proof-of-address/attempts?subAccountId={subAccountId}.
Quick Reference
| Step | Method | Endpoint | Output |
|---|---|---|---|
| 1 | POST + PUT | /v2/documents?subAccountId={id} + S3 URL | Document ID |
| 2 | POST | /v2/account/address/proof-of-address/api?subAccountId={id} | PoA attempt ID |
| 3 | GET | /v2/account/address/proof-of-address/attempts/{attemptId}?subAccountId={id} | Poll until APPROVED |