Skip to main content
POA (Proof of Address) verifies a customer’s residential address using a utility bill, bank statement, or official document. Once approved, the customer upgrades from 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 document containing the file itself
  • Your usual Authorization: Bearer header
Do not set the Content-Type header yourself: your HTTP client generates it with the multipart boundary. Do not send the file as base64 in a JSON body.
The call returns 201 as soon as the document is received. The verification then runs in the background:

Requirements

  • Customer must be active and 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
The call is refused when a proof of address is already approved, or when one is already being verified.

Step 2: Get the result

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:
  1. 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.
  2. 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 your others 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.

POA status values

What does full unlock?

Automatic demotion

If a customer’s address fields are modified, its POA is reset: a full customer is automatically demoted back to verified, and a document being verified is discarded. Submit a new proof of address. Sending a field with its current value is not a modification.