From a direct Belize Bank integration

If you already call register.do yourself, here is what each of those calls becomes — and what you get to stop doing.

The mapping

What you call todayWhat it becomes
register.doPOST /v1/payment_intents then POST /v1/checkout_sessions. Redirect to the session’s url instead of to formUrl.
registerPreAuth.doThe same, with capture_method: "manual".
deposit.doPOST /v1/payment_intents/:id/capture
reverse.doPOST /v1/payment_intents/:id/cancel for an uncaptured hold; a full refund otherwise. You no longer choose between reverse and refund.
refund.doPOST /v1/refunds
getOrderStatusExtended.doGET /v1/payment_intents/:id — though mostly you will not need it, because the webhook tells you.
paymentOrderBinding.doPOST /v1/payment_intents with payment_method and off_session: true.
getBindings.doGET /v1/customers/:id/payment_methods
dynamicCallbackUrlA webhook endpoint you register once, signed and retried.

Fields you already have

TheirsOurs
mdOrderpayment_intent.gateway.order_id
orderStatusthe payment’s status, plus gateway.order_status if you want the raw number
actionCodelast_payment_error.decline_code, and the raw value in gateway.action_code
approvalCodegateway.approval_code
maskedPangateway.masked_pan
bindingIda payment_method on a customer
orderNumberours, 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.

ts
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;             // 2

What 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.

Keep your own ledger. We record what the bank did and what we owe you; your books record what the payment was for. Those are different questions, and a payment platform should not be the only place your business records a sale.

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.