Skip to main content

Going live

What GoHub sets up for you

Before you can call anything, we create:

  1. Your agent — your identity in the engine, and the channel your pricing hangs off.
  2. An API key — see Authentication.
  3. Entitlements — which verticals and suppliers you may sell. Inventory outside them is filtered out of search and rejected at booking with 403 not-entitled.
  4. A settlement modePREPAID or POSTPAID.

None of this is self-service. Talk to us to get provisioned.

Settlement modes

Check yours at GET /api/v1/agent/account:

{
"settlementMode": "PREPAID",
"currency": "MYR",
"balance": 1250.00,
"held": 77.00,
"available": 1173.00,
"creditLimit": 0.00
}

PREPAID — bookings are funded from this account. A booking whose payable exceeds available is rejected with 409 insufficient-funds before anything is booked. Funds are held while a booking is in flight and debited on confirmation.

POSTPAID — bookings post unbilled debits that feed your invoice. available is not a gate.

If you are PREPAID, poll this endpoint or watch for insufficient-funds and alert your own operations before customers start failing at checkout.

Integration checklist

Credentials

  • API key held server-side only — never in an app bundle or browser
  • Separate keys per environment; no key committed to source control

The flow

  • Discovery called late, close to payment, so quotes are fresh
  • expiresAt read from the offering — no hardcoded TTL
  • quoteId sent unquoted
  • One quote per item; nothing reused
  • Prices taken from the quote; never sent in the request

Idempotency — the part that matters most

  • One key per booking attempt, persisted before the call
  • Timeouts retried with the same key
  • 409 RECONCILING retried with the same key until 201 or 422
  • No path in your code books again with a fresh key after an unresolved attempt

Errors

  • Branching on reason and status, not message text
  • 409 split three ways: expired quote, RECONCILING, insufficient-funds
  • 403 not-entitled surfaced to your operations, not retried
  • items[].state == UNKNOWN never retried locally

Delivery

  • detail.type switched on to render the artifact
  • redemptionRef / qrCode / boardingCode reaching the customer
  • referenceNo stored against your own order, for support

Operations

  • GET /api/v1/bookings/{id} used for polling instead of re-booking
  • PREPAID: balance monitored
  • A runbook for "we think it booked but we never got a 201"

Environments

EnvironmentBase URL
Developmenthttps://api-booking-dev.gohubwallet.com.my

Production is provisioned per partner — ask us.

Dev is not a sandbox

The dev environment books against real supplier staging tenants, and some of them cannot be cancelled. Do not loop booking calls to test throughput.

Getting help

Email engineering@zoltpay.com with the order's referenceNo — that is the handle we can trace end to end.