Changelog
We follow calendar versioning. Every notable change that affects partners is logged here. Subscribe to [email protected] for release emails.
2026-07-04
Changed — attachment URLs are now short-lived signed links
attachment_urlvalues returned for chat messages, dispute evidence, and escrow attachments now carry a signed capability token (?exp=…&sig=…). Render or download the URL as returned — do not strip the query string, cache it long-term, or reconstruct the bare URL. The token is valid for roughly 12–24h; re-fetch the parent resource to obtain a fresh link. Files remain private to the escrow's parties and admins.- Uploads still return a bare, storable URL from
POST /api/upload/:type; the signing happens only on read responses. Submit the bare URL back asattachment_url/evidence_urlsexactly as before.
Changed — partner deep links must be signed
POST /api/escrows/from-linknow requires a valid HMAC signature whenever partner parameters (seller, item, etc.) are present. An unsigned partner link is rejected with400 SIGNATURE_REQUIRED. Malformed URL-encoding now returns400instead of a500.
Fixed — payment webhook retries are never silently dropped
- A webhook delivery that fails mid-processing on a transient error is now reprocessed on the gateway's retry instead of being treated as a duplicate. Previously such a retry could be acknowledged (
200) without the payment being applied. Genuinely duplicate (already-processed) deliveries are still acknowledged idempotently. A lateexpired/failedcallback arriving after a successfulpaidno longer overwrites the paid state.
2026-06-30
Fixed — idempotent retries after a failed request
- A request that fails (any non-2xx response, including a transient 5xx) is no longer cached against its
Idempotency-Key. Previously the failure was frozen as the key's answer and replayed for the key's 24h lifetime; now retrying with the same key re-executes the operation. Successful (2xx) responses are still cached and replayed as before.
2026-06-27
Added — shipping tracking for physical goods
- Sellers can attach a courier + AWB (resi) when marking an escrow shipped:
POST /api/escrows/:id/sendnow accepts an optional{ courier, tracking_number }body. - New party-only endpoints:
GET /api/escrows/:id/tracking(courier metadata, live journey snapshot, and the courier dropdown list) andPOST /api/escrows/:id/tracking/refresh(forces a fresh upstream check, rate-limited to one call per escrow every 5 minutes). GET /api/escrows/:idnow includes atrackingobject (courier, AWB, last-known status, and an official-courier deep link) once a resi is attached.- The live status timeline is best-effort enrichment: the courier + AWB are always persisted and an official-courier deep link is always available, so a flaky upstream never blocks the page.
2026-06-16
Added
- Universal inbound Webhook/IPN endpoints (
POST /api/webhooks/inbound,/ipn,/payment,/universal) with dynamic provider auto-detection. - Integrated
Paymentopayment gateway adapter supporting cryptocurrency payments. - Support for admin-configured payment gateway surcharges (
fee_percentandfee_fixed), calculated securely on the server and surfaced inGET /api/gateways/available-methodsandPOST /api/escrows/:id/pay. - New payment response fields:
escrow_amount(base value) andsurcharge(gateway fee) in payment responses.
2026-05-18
Added
POST /api/escrows/from-link— full HMAC-signed partner link flowGET /api/escrows/:id/preview— public preview endpointGET /api/escrows/:id/payment-status— polling fallback to webhooksIdempotency-Keyheader on all mutation endpoints- Webhook signature verification on every outbound event
- Sandbox environment at
sandbox-api.rekberpay.comwith mock-pay support
Changed
- Default fee config tightened: 3% with 5,000 IDR floor (was 2.5% / 3,000)
- Withdrawal fee now flat 5,000 IDR up to 25,000 IDR cap
Documentation
- Initial public docs at docs.rekberpay.com
Stability promise
We commit to no breaking changes within signature version v=1. Any breaking change will:
- Bump the version (
v=2) and ship alongsidev=1 - Be announced 90 days before
v=1is deprecated - Be 180 days before
v=1is removed
Additive changes (new fields, new events, new endpoints) are not breaking and will be released without a version bump.