Cards (acquiring + issuing)
Two card products on customer-owned accounts (pcus_*). Same banking gate as other customer money movement: products.deposit_account.status=ready.
Prerequisite: Customers quickstart.
Auth and environments
Gates
Source
account_id must belong to {customer_id}. Issuing additionally needs an active USD fiat account.
If banking routes are called before ready, expect 409 with data such as deposit_account_status and reason: banking_profile_incomplete.
Card charges (acquiring)
Charge an external card into a fiat account (USD / GBP / EUR depending on account support).
Issuing is USD-account-only. Customers who cannot open USD fiat (including Kenya individuals, and some other residence countries) cannot issue cards.
A successful charge does not always mean immediate
available balance. Settlement can take several days (often about six). Poll the charge and account balance (or wait for credit webhooks such as account.credited) rather than assuming instant funds.Happy path
1
Confirm banking ready
Poll
GET /partner/customers/{customer_id} until deposit_account.status=ready2
List accounts
Resolve fiat
account_id via GET …/accounts3
Create charge
POST …/card-charges with amount, reference, card, billing_address, customer4
Poll
GET …/card-charges/{charge_id} until terminal statusCreate charge
auth_model is 3ds_disabled (sandbox non-3DS test cards) or 3ds_required (then return_url and browser_info are required). Reuse the same reference for idempotent retries after network errors.
Get charge
Issued cards
Issue a disposable or virtual card linked to a USD fiat account. Spend draws from that account balance. Optionalamount is a placeholder for future load behaviour; omit it for normal issue.
Sandbox: issuing is often not fully exercisable while USD stays
pending or spend simulation is unavailable. Use live (or an Element Pay-enabled sandbox USD account) for end-to-end issuing QA. Kenya individuals cannot open USD fiat at all (see Gates), so do not plan issuing QA on KE individual customers.Happy path
1
Confirm banking ready
Same gate as acquiring
2
Resolve USD account
GET …/accounts → USD fiat account_id with usable status3
Issue
POST …/cards with type, reference, cardholder → card id (PAN/CVV only on create)4
Manage
List / get / transactions / freeze / unfreeze as needed
Issue card
type is virtual or disposable. Disposable cards also require expiration_month / expiration_year. Optional spending_controls apply to virtual cards only. Store PAN/CVV from the create response if you need them; later GET/list omit them.
List / get / transactions
Freeze / unfreeze
Business rules
- Error
message/datado not expose upstream provider names. - Acquiring supports configured fiat currencies (typically USD / GBP / EUR); billing country rules differ by charge currency (see table above). Issuing requires a USD account and is unavailable for some residence countries.
- PAN/CVV only on create charge / create card; never on GET or list.
- Reuse stable
referencevalues for idempotent creates after timeouts. - Same banking gate as book transfers and payouts.
Legacy routes
The same operations exist under/partner/entities/{entity_id}/accounts/.../card-charges and .../cards. Those paths are legacy. New integrations should use pcus_* customer paths only.