BTC$68,420▲ 0.82% / ETH$3,841▼ 0.31% / LTC$94.05▲ 1.14% / SOL$221.60▲ 3.02% / USDT·TRC20$1.0000 / USDC·ERC20$0.9999 / XMR$168.42▼ 0.18% / TON$6.02▲ 0.47% / XRP$2.41▼ 0.09% / GAS·ETH18 gwei / Indicative prices · illustrative ticker / No-KYC · non-pooled · 0.4% flat / BTC$68,420▲ 0.82% / ETH$3,841▼ 0.31% / LTC$94.05▲ 1.14% / SOL$221.60▲ 3.02% / USDT·TRC20$1.0000 / USDC·ERC20$0.9999 / XMR$168.42▼ 0.18% / TON$6.02▲ 0.47% / XRP$2.41▼ 0.09% / GAS·ETH18 gwei / Indicative prices · illustrative ticker / No-KYC · non-pooled · 0.4% flat
OrbChain
UTC 18:47:02 Get started →
Migrate · from OxaPay ▓ ~30-MINUTE TARGET Shape-compatible REST

OxaPay out.
OrbChain in.

Our REST endpoints are shape-compatible with OxaPay's to within a few field names. Typical migration of the invoice + webhook surface takes under 30 minutes. Here's the concrete mapping.

Same shape · different keys
§ Part I / V · Endpoint mapping

Same verbs.
Different paths.

HTTP shape unchanged
Rename the path, ship
TopicOxaPayOrbChainDelta
INVCreate invoicePOST api.oxapay.com/merchants/requestRENAME
INV↳POST orbchain.io/v1/payment/invoiceORB
STAStatic addressPOST api.oxapay.com/merchants/request/staticaddressRENAME
STA↳POST orbchain.io/v1/payment/static-addressORB
WLWhite labelN/A (page 404s on OxaPay)NEW
WL↳POST orbchain.io/v1/payment/white-labelORB
POPayoutPOST api.oxapay.com/merchants/payoutRENAME
PO↳POST orbchain.io/v1/payoutORB
QRYPayment statusGET api.oxapay.com/merchants/inquiry?trackId=XRESHAPE
QRY↳GET orbchain.io/v1/payment/:track_idORB
§ Part II / V · Field mapping

Body shape.

Most fields rename 1:1
One splits (`currency` → +`accepted_coins`)
TopicOxaPay fieldOrbChain fieldNotes
AMTamountamountSAME
CURcurrency (fiat OR coin)currency (fiat only) + accepted_coins (list) OR pay_currency (single)SPLIT
ORDorderIdorder_idSNAKE
EMAILemailcustomer_emailRENAME
CBcallbackUrlcallback_urlSNAKE
RETreturnUrlreturn_urlSNAKE
DSCdescriptiondescriptionSAME
LIFElifeTime (minutes)expires_in (seconds)UNIT ×60
SETpayCurrency (settlement hint)settlement_coin (merchant setting)MOVE
§ Part III / V · Side-by-side

One cURL.
Two gateways.

Same call, both sides
Drop-in migration
POST invoice · before + afterdiff · 200 OK
// OxaPay — before
curl https://api.oxapay.com/merchants/request \
  -H "Content-Type: application/json" \
  -d '{
    "merchant":     "sandbox",
    "amount":       50,
    "currency":     "USD",
    "orderId":      "order_7f92a1",
    "callbackUrl":  "https://shop.example/webhooks/oxa",
    "lifeTime":     60
  }'

// OrbChain — after
curl https://orbchain.io/v1/payment/invoice \
  -H "merchant_api_key: mk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "amount":          50,
    "currency":        "USD",
    "accepted_coins":  ["BTC_LN", "USDT_TRC20"],
    "order_id":        "order_7f92a1",
    "callback_url":    "https://shop.example/webhooks/orb",
    "expires_in":      3600
  }'
§ Part IV / V · Webhook migration

HMAC-SHA256 →
HMAC-SHA512.

Same algorithm shape
Swap the digest
node HMAC verifier · before + after20 lines → 18
// OxaPay — HMAC-SHA256 over JSON body, header `HMAC`
const crypto = require("crypto");
function verifyOxa(body, header, secret) {
  const expected = crypto.createHmac("sha256", secret)
    .update(body).digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected, "hex"),
    Buffer.from(header, "hex")
  );
}

// OrbChain — HMAC-SHA512 over JSON body, header `HMAC`
function verifyOrb(body, header, secret) {
  const expected = crypto.createHmac("sha512", secret)  // only diff
    .update(body).digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected, "hex"),
    Buffer.from(header, "hex")
  );
}

// Bonus: dedupe with OrbChain's deterministic event_id
if (seenEventIds.has(payload.event_id)) return res.sendStatus(200);
§ Part V / V · Checklist

30-minute plan.

Copy, paste, go
Ship in an afternoon
#TaskTimeState
01Signup + API keysCreate OrbChain account. Grab merchant_api_key and set a webhook_secret.~5min
02Rewire invoice callChange URL, rename 4 fields, add accepted_coins.~8min
03Swap HMAC digestChange "sha256" to "sha512" in your webhook verifier.~2min
04Update expiry unitMultiply your existing lifeTime value by 60 — OrbChain uses seconds, OxaPay uses minutes.~1min
05Test in stagingUse OrbChain's sandbox merchant to run a full roundtrip — invoice → payment → webhook → receipt verify.~10min
06Flip DNS / flagToggle your feature flag from OxaPay to OrbChain. Keep OxaPay running read-only for reconciliation of in-flight invoices.~2min

Thirty minutes.
Zero downtime.

Keep OxaPay open for reconciliation; flip new invoices to OrbChain with a feature flag.