Changelog

Changelog

API changes worth knowing about. Newest first.

We follow semver at the API level. Breaking changes only ship behind a new major version (/v2), never on the current one.


Unreleased

  • Full OpenAPI 3.1 spec at https://api.soxara.com/openapi.yaml — coming next

v1 (current)

  • No-code payroll connectors — not part of the API-key surface: a webhook URL + signing secret from the business dashboard (Settings → Developers → Payroll connectors) that a no-code automation (Zapier, Make, a Google Apps Script, n8n) can trigger directly, no API key or developer required. See Run payroll with no code.

  • Payouts — POST /v1/api/payouts disburses to a MoMo/Orange payee the business owner already PIN-approved from the dashboard (Settings → Developers → Payout payees, each with its own per-payout and daily cap). New payouts:create/payouts:read scopes. See the reference.

  • Return the payer to your site — POST /v1/api/payment-links accepts an optional redirect_url. Hosted checkout sends the payer there after the payment finishes, with soxara_payment_id, soxara_link and soxara_status appended. Confirm the order from the webhook, not from the redirect. See the reference.

  • Recurring billing — payment mandates + charges. Card (hosted card-save) and wallet (in-app PIN) rails: POST /v1/api/mandates, POST /v1/api/charges, DELETE /v1/api/mandates/{id}. See the reference.

  • Transaction history + metrics — GET /v1/api/payments (paged list) and GET /v1/api/payments/summary (per-currency roll-up). GET /v1/api/payments/{id} now resolves recurring charges too, not just link payments.

  • Self-serve webhook registration on the key surface — POST /v1/api/webhook-endpoints (previously dashboard-only).

  • Sandbox simulate — POST /v1/api/payment-links/{id}/simulate settles a test payment through the real webhook fan-out, no real money.

  • sxm_live_* / sxm_test_* API key prefixes. One base URL; the key sets the environment.

  • Idempotency-Key header on all mutations.

  • Standard { success, data } / { success: false, error } envelope; snake_case bodies.

  • Webhook signature: Soxara-Signature: t=<unix>,v1=<hmac-sha256> — Stripe wire format.

  • Webhook events today: payment.completed, payment.failed, payroll_run.completed, payroll_run.partial, payroll_run.failed, catalog.published, inventory.low_stock.

  • Sub-merchants — POST /v1/api/sub-merchants/start + /complete, GET /v1/api/sub-merchants. Route a payment link to a sub-merchant with sub_merchant_id. See the reference.

  • Payroll API — POST /v1/api/payroll/runs, GET /v1/api/payroll/runs/{id}. Always lands pending_approval; execution is PIN-gated by the business owner. See the reference.

  • Gift card / fleet card redemption — POST /v1/gift-cards/redeem, POST /v1/fleet-cards/redeem. Not under /v1/api/* — see the reference for why.


Have you noticed a behavior change in the API that isn’t documented here? Tell us — we’d rather hear from you than have you debug it.