Changelog
API changes, release notes, and deprecation notices. Subscribe to updates: https://payelect.com/developer-portal/changelog
Versioning policy
| Change type | Handling |
|---|---|
| Breaking changes | Increments the API version (e.g. /v1/ → /v2/). Minimum 90 days notice before the old version is retired. The prior version is maintained for at least 12 months after the new version ships. |
| Non-breaking additions | New optional request fields, new response fields, new webhook event types — added without a version bump. Your integration must tolerate unknown JSON keys. |
| Fixes and documentation | Bug fixes that do not change observable contract behaviour are applied immediately with no notice. |
What constitutes a breaking change:
- Removing or renaming an existing endpoint
- Removing or renaming an existing request or response field
- Changing the type or format of an existing field (e.g. integer → string)
- Changing an existing HTTP status code for a given condition
- Removing an existing error code
- Making a previously optional request field required
Releases
v1.0.0
2026-07-12 — Initial release
New endpoints
-
POST
/authentication/token— Exchangeclient_id+client_secretfor a 10-minute access token. -
POST
/payment/create— Create a hosted-checkout payment session. Returns apayment_urlto redirect the customer to. -
GET
/payment/status/{trx_id}— Poll the status of a payment order. -
GET
/payments/gateways— List enabled payment providers for a given country, currency, and amount. -
POST
/payment/{trx_id}/refund— Initiate a full or partial refund on a completed payment. -
GET
/refund/{refund_uid}— Retrieve refund status. -
POST
/payout— Push funds to a mobile money wallet, bank account, or PayElect wallet. -
GET
/payout/{payout_uid}— Retrieve payout status. -
GET
/subaccountsPOST/subaccountsGET/subaccounts/{uid}PUT/subaccounts/{uid}DELETE/subaccounts/{uid}— Full CRUD for marketplace subaccounts.
Webhook events
payment.created,payment.pending,payment.succeeded,payment.failed,payment.cancelled,payment.expiredrefund.succeeded,refund.failedpayout.created,payout.succeeded,payout.failedsplit.settled,subaccount_payout.created,subaccount_payout.succeeded,subaccount_payout.faileddispute.created(reserved — not yet wired to triggers)
All webhook payloads are signed with HMAC-SHA256 using your webhook_secret. See the Webhooks guide.
Payment providers
- CinetPay — 17 African markets, used as fallback when a direct provider is unavailable
- Orange Money — Guinea and Senegal
- Wave — Guinea and Senegal
- MTN Mobile Money — 17 countries
- Stripe — Card payments (Mastercard, Visa)
- PayElect Wallet — Internal balance transfer
Provider selection uses an automatic cascade: if the customer's chosen provider is unavailable, PayElect attempts the next best option. No additional integration work is required.
Compliance and security
- OFAC screening runs server-side on sender and recipient for every remittance before wallet debit
- KYB verification required to activate live credentials (sandbox is unrestricted)
- HMAC-SHA256 webhook signatures with replay-attack protection (5-minute window)
- Idempotency keys supported on payment create, refund, and payout endpoints
- All financial amounts stored and returned as
DECIMAL(28,8)strings to prevent float precision errors
Sandbox features
- Scenario simulation via
X-Sandbox-Scenarioheader or_scenariobody param:success,failure,declined,insufficient_funds,timeout,pending - Hardcoded payer:
sandbox@payelect.com/ usernamepayelect, balance 100,000 in any currency - Hardcoded email OTP:
123456 - Sandbox fires real webhooks to your configured sandbox endpoint
- POST /simulate/scenario for stateful scenario control across multiple requests
Split payments
- Include a
splitsarray in POST /payment/create for marketplace distributions - Supports
PERCENTAGEandFIXEDsplit types - Up to 20 splits per payment
- All splits are atomic — if any allocation fails, the entire payment is rolled back
split.settledwebhook delivers per-recipient breakdowns
Multi-provider routing
- GET /payments/gateways returns the zone-filtered, enabled provider list for a given country + currency + amount
- Automatic cascade on provider failure with idempotency-safe retry guards
- Orange Money, Wave, and MTN MoMo route through CinetPay as a shared clearing layer when direct provider is unavailable
Upcoming
v1.1.0
Planned Q3 2026
- Bill payment aggregator — POST /bill/pay with Paymentus / doxo backend
dispute.createdwebhook fully wired (currently reserved)- Webhook event replay from merchant portal UI
- USD payout via ACH (same-day ACH for premium tier)
Planned items may change. Subscribe to https://payelect.com/developer-portal/changelog for confirmed release notes.