PayElect Developer
Docs / Changelog

Changelog

API changes, release notes, and deprecation notices. Subscribe to updates: https://payelect.com/developer-portal/changelog

Versioning policy

Change typeHandling
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 — Exchange client_id + client_secret for a 10-minute access token.
  • POST /payment/create — Create a hosted-checkout payment session. Returns a payment_url to 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 /subaccounts POST /subaccounts GET /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.expired
  • refund.succeeded, refund.failed
  • payout.created, payout.succeeded, payout.failed
  • split.settled, subaccount_payout.created, subaccount_payout.succeeded, subaccount_payout.failed
  • dispute.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-Scenario header or _scenario body param: success, failure, declined, insufficient_funds, timeout, pending
  • Hardcoded payer: sandbox@payelect.com / username payelect, 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 splits array in POST /payment/create for marketplace distributions
  • Supports PERCENTAGE and FIXED split types
  • Up to 20 splits per payment
  • All splits are atomic — if any allocation fails, the entire payment is rolled back
  • split.settled webhook 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.created webhook 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.