Changelog
Notable changes to the SOAMTAR API are listed here. SemVer versioning on the URL prefix.
[1.7.0] - 2026-10-22
Added
- Refunds API:
POST /v1/refunds(full or partial; omitamountfor the full remaining amount),GET /v1/refunds/{id}andGET /v1/refunds. The amount is credited back to the payer's Orange Money number and debited from your balance; the credit is asynchronous (processing, thensuccessorfailed). Requires thecan_refundscope. See Refunds. - Refund webhooks:
refund.success,refund.failed, and on the paymentpayment.refunded/payment.partially_refunded(withdata.refund). One set of events per refund. callback_urldelivered: the optional per-payment / per-payout HTTPScallback_urlnow receives every event of that transaction, with the same payload,X-Soamtar-Signature(secret of your oldest active webhook endpoint in the same environment) and retries. See Webhooks.- Optional request signing:
Soamtar-Timestamp+Soamtar-Signature: v1=…headers on non-GET requests, available as an option in every SDK. See Authentication.
Changed
- Webhook event catalog: only events SOAMTAR actually sends can be subscribed to (
payment.*,payout.*,refund.*,payout_request.*). The test button andPOST /v1/webhooks/testboth sendwebhook.test, delivered regardless of subscriptions. - SDKs 1.1.0: common conventions across languages —
SOAMTAR_SECRET_KEYandSOAMTAR_API_URLenvironment variables,payments/payouts/refunds/webhooks/balanceresources with the same method names. Old names remain as deprecated aliases. E-commerce plugins support native refunds. See SDKs.
[1.6.0] - 2026-10-20
Changed (impact on existing integrations)
- Sierra Leone only: SOAMTAR now operates exclusively in Sierra Leone (country
SL). - Orange Money Sierra Leone, single channel: provider
orange_money_sl(Orange Money Business API) for collections and payouts. - Leone currency (
SLE): amounts with at most two decimals (e.g.150.00); a more precise amount is rejected, never rounded. The API also acceptsUSDandEUR. - Phone numbers: E.164 format,
+232followed by 8 digits. - Refunds: available through
POST /v1/refundssince 1.7.0. - The channels and countries previously offered are removed.
[1.2.0] - 2026-04-25
Added (SDK ecosystem)
- Official SDKs and plugins covering backend, mobile, web and CMS.
- Backend SDKs (7): PHP/Laravel, Node.js, Python, Ruby, Java/Spring Boot, Go, .NET/C#.
- Mobile & gaming SDKs (5): Android (Kotlin), iOS (Swift), React Native, Flutter, Unity (C#).
- Web frontend SDK (1): SOAMTAR.js for native integrations and secure pop-ups.
- CMS & e-commerce plugins (6): WordPress/WooCommerce, Magento 2, PrestaShop, Drupal, Odoo, WHMCS.
- No-code guide: instructions for Wix (Velo), Shopify and Webflow.
Security (SDK hardening)
- Public key lock: all frontend/mobile SDKs reject secret keys (
sk_...) to prevent accidental exposure. - Timing-attack resistance: constant-time comparisons in all server SDKs.
- Webhook anti-DoS: 1 MB payload limit and built-in timestamp (anti-replay) checks.
- Minimal dependencies: most SDKs are built without third-party libraries to reduce supply-chain risk.
Security (backend hardening)
- API key hashing: secret keys are no longer stored in clear text.
- Tenant isolation: stronger access control on resources at the SQL level.
- Advanced rate limiting: per-IP and per-merchant protection on sensitive routes (OTP).
[1.1.0]
Added
- Stricter webhook endpoint URL validation: non-HTTPS URLs, loopback hosts (
localhost,127.x), private IPs and internal TLDs are rejected at creation. - Automatic masking of sensitive values in API logs: if a merchant passes
?payer_phone=...or?api_key=...in a query string by mistake, the value is replaced with[REDACTED]before it is stored.
Changed (compatible)
- Public references extended to 16 random characters after the prefix, e.g.
TXN-A1B2C3D4E5F6G7H8. If your code hard-codes the length, allow at least 20 characters. Older references remain valid. - Channel webhook events: only events actually emitted by the payment channel are propagated. Abandonment and expiry are still emitted by SOAMTAR as
payment.cancelled/payment.expired.
Security
- Timestamped signatures can be required per channel (internal flag, managed by SOAMTAR).
- Stronger concurrency safety on multi-row writes (marketplace splits in particular): two parallel requests on the same parent transaction are serialised.
X-XSS-Protectionheader removed (deprecated); XSS protection relies on the Content-Security-Policy.- Quota on the creation of new
Idempotency-Keyvalues per merchant account, to protect the platform from a compromised key generating a UUID per request. Replays of existing keys are not affected.
[1.0.0]
First public API version.
Added
- Payments:
POST /v1/paymentswith idempotency, hosted checkout withoutprovider. - Pull verification:
POST /v1/payments/{id}/verify. - Timestamped HMAC-SHA256 signed webhooks, exponential retries, zero-downtime secret rotation.
- Marketplace splits:
POSTandGET /v1/payments/{id}/splitswith invariants (total, active beneficiary, immutability). - Customers created automatically at initiation.
- FX freeze: rate frozen at initiation when currencies differ.
- Automatic reconciliation to catch lost webhooks.
- Automatic expiry of unfinished transactions.
Security
- TLS 1.2 minimum.
- Merchant webhook URLs must use HTTPS.
- Anti-replay on inbound and outbound signatures.
- Records retained as required by the applicable regulations.
[Unreleased]
Planned
- Mobile money tokenisation for recurring subscriptions
Versioning policy
- Patch (1.0.x): bug fixes and optimisations, no API change.
- Minor (1.x.0): new endpoints, new optional fields. Compatible.
- Major (x.0.0): breaking changes, announced several months ahead, with the previous version supported during a transition period.
No existing field is ever removed or renamed without a major version. New optional fields can appear in any minor version.
Subscribing to announcements
- Dashboard → Settings → Notifications → API changes
- Summary email for merchants in production