Skip to main content

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_url on that key (recommended)
  • curl and jq
  • 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

Every request:

2. Customer KYC (required)

Every end-customer must complete the vault before you use customer_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.
Detailed curls: Customer KYC quickstart. Minimal individual checklist before submit:
  • Profile: name, email, DOB, gender, phone, id_number, id_type, address (line1, city, country)
  • Documents: identity, address (base64 upload)
After create, always check what’s left:
Submit when missing is empty:
Wait until status is approved:

3. Discover Kenya M-PESA network_id

Copy a providers[].id for Safaricom M-PESA into payment_method.network_id below.

4. Quote (OnRamp, customer_id)

Default sandbox asset: Base USDC.
Response anatomy: Quote and accept.
Replace network_id with a value from your catalog if the example UUID does not match.

5. Accept

If Signed accepts is on for this API key, empty {} is rejected — use Customer-signed accepts.

6. Webhooks

Configure webhook_url on your API key: See Webhooks.

Deprecated: inline customer on quote

Inline customer 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