From a direct Belize Bank integration
register.do yourself, here is what each of those calls becomes — and what you get to stop doing.The mapping
| What you call today | What it becomes |
|---|---|
register.do | POST /v1/payment_intents then POST /v1/checkout_sessions. Redirect to the session’s url instead of to formUrl. |
registerPreAuth.do | The same, with capture_method: "manual". |
deposit.do | POST /v1/payment_intents/:id/capture |
reverse.do | POST /v1/payment_intents/:id/cancel for an uncaptured hold; a full refund otherwise. You no longer choose between reverse and refund. |
refund.do | POST /v1/refunds |
getOrderStatusExtended.do | GET /v1/payment_intents/:id — though mostly you will not need it, because the webhook tells you. |
paymentOrderBinding.do | POST /v1/payment_intents with payment_method and off_session: true. |
getBindings.do | GET /v1/customers/:id/payment_methods |
dynamicCallbackUrl | A webhook endpoint you register once, signed and retried. |
Fields you already have
| Theirs | Ours |
|---|---|
mdOrder | payment_intent.gateway.order_id |
orderStatus | the payment’s status, plus gateway.order_status if you want the raw number |
actionCode | last_payment_error.decline_code, and the raw value in gateway.action_code |
approvalCode | gateway.approval_code |
maskedPan | gateway.masked_pan |
bindingId | a payment_method on a customer |
orderNumber | ours, and yours goes in metadata |
Amounts work the same way
Minor units, as you are used to. The difference is that if you price in US dollars, you now send the US dollar amount and we record what the card was charged in Belize dollars alongside it, with the rate. You no longer convert before calling.
const intent = await sp.paymentIntents.create({
amount: 6000, // USD 60.00 — not converted by you
currency: "usd",
description: "SCU-B0161 — Blue Hole Two-Tank",
metadata: { shop_id: "scuba-sensation", booking_id: "SCU-B0161" },
});
// after it is paid:
intent.settlement_amount; // 12000 — BZD, what the card was charged
intent.fx_rate; // 2What you get to delete
The gateway credentials and the code that holds them. The callback endpoint, its hostname, and the forgery checks around it. The reconciliation sweep for payments the callback never arrived for. The retry logic around getOrderStatusExtended. The currency conversion. The logic that decides between a reversal and a refund.
All of that still happens — it is simply on our side of the line now, and it is the same set of problems whether one merchant solves them or all of them do.
Moving over without a flag day
Nothing requires a cutover. Run both: send new payments here while old ones finish where they are. A payment taken directly stays refundable directly, and one taken here is refundable here — there is no state to migrate, because a payment belongs to whoever took it.