Quickstart
End-to-end: KYC every customer → approved → KE OnRamp quote → accept. Banking (IBAN / ledger) is optional and comes later — see Accounts.Prerequisites
- Sandbox API key (
is_test_…) from Element Pay webhook_urlon that key (recommended)curlandjq- Non-custodial partners who need the customer wallet to authorize accept: enable Signed accepts in Console and follow Customer-signed accepts (this quickstart uses empty-body accept)
1. Environment
2. Customer KYC (required)
Every end-customer must complete the vault before you usecustomer_id on quote.
1
Requirements
See required profile fields and document categories.
2
Create
POST /partner/customers — save pcus_*.3
Documents
Upload identity and address (individual).
4
Submit
POST …/submit — fix any missing[] until 200.5
Approved
Sandbox usually auto-approves; live waits for EP review. Poll or webhook
customer.approved.- Profile: name, email, DOB, gender, phone,
id_number,id_type,address(line1,city,country) - Documents:
identity,address(base64 upload)
missing is empty:
status is approved:
3. Discover Kenya M-PESA network_id
providers[].id for Safaricom M-PESA into payment_method.network_id below.
4. Quote (OnRamp, customer_id)
Default sandbox asset: Base USDC.
5. Accept
{} is rejected — use Customer-signed accepts.
6. Webhooks
Configurewebhook_url on your API key:
See Webhooks.
Deprecated: inline customer on quote
Inlinecustomer on quote is deprecated. Still supported while you migrate existing integrations. New work: vault KYC → customer_id only.
Sandbox inline examples: Quote and accept — deprecated · Test payloads.
Next
- Customer KYC — business KYB, revoke, ref lookup
- Quote and accept — OffRamp, errors, response fields
- Customer-signed accepts — optional EIP-712 accept (non-custodial)
- Sandbox success & failure — sandbox phone/account triggers
- Banking / accounts — optional, after
deposit_account.status=ready