verified to full.
The POA API has two endpoints: one to submit the document, one to read the result.
POA can only be submitted for customers whose KYC is approved (
verified level).Flow
Step 1: Submit the document
You collect the document in your own application (file upload form, mobile camera, etc.), then your server forwards the file to KemyCard. The request is a standard file upload:- Method and URL:
POST /v1/poa/{customerCode}/document - Body:
multipart/form-data(not JSON) - One field named
documentcontaining the file itself - Your usual
Authorization: Bearerheader
201 as soon as the document is received. The verification then runs in the background:
Requirements
- Customer must be
activeand its KYC approved - Accepted documents: utility bill, bank statement, government letter
- Accepted formats: PDF, JPG, PNG — 10 MB maximum
- Document must be less than 3 months old
- Name and address on the document must match the name and address you declared for the customer
Step 2: Get the result
Via webhook (recommended)
Via the status endpoint
When a document is rejected
A rejection is not final: fix the cause and submit a new document. Nothing is billed for a rejected document.Name not fully shown on the document. Proofs of address often carry only part of the customer’s name (initials, a single first name, a maiden or married name, no middle name). Such a document can be rejected even though it genuinely belongs to your customer.If your customer has no document showing their full name:
- Open a support ticket from your secure KemyCard account, with the
customer_code. This is the priority channel: we review the case and regularize it from the ticket. - To follow up only, email [email protected] and quote your ticket number. An email without a ticket number is not handled as a request.
Pricing
A verification is billed 1.80 USD, only when it is approved. The amount is debited from yourothers ops balance and triggers a balance.debited webhook with reason: poa_verification.
Submitting a document is free, but your others balance must cover the price of one verification, otherwise the call returns INSUFFICIENT_BALANCE.