Skip to main content

MultiHub API

All MultiHub methods are sent to one endpoint:
POST /public/api/multihub/v1

Request Envelope

{
  "method": "payment.in",
  "service_id": 14701,
  "params": {
    "payment": {}
  }
}
FieldTypeRequiredDescription
methodstringYesOne of the supported MultiHub methods
service_idintegerConditionalRequired for payment.in and payment.out; optional elsewhere
params.paymentobjectConditionalRequired for payment methods
The API also accepts method as { "const": "balance.get" } and numeric-string service_id values. Payment identifiers must be strings; numeric c_id and h_id values are rejected to avoid precision loss.

Application Rate Limits

Authenticated MultiHub applications have separate per-method protective rate-limit buckets for payment.in, payment.out, payment.status, and balance.get. Buckets are keyed by merchant and application, not by client IP address. The payment creation buckets are configured as high safety ceilings for runaway or abusive traffic, not as normal operating limits. When a bucket is exhausted, the endpoint returns HTTP 429 with the standard MultiHub error envelope and Retry-After-* rate-limit headers.

payment.in

Creates a deposit.

Required Fields

FieldTypeDescription
service_idintegerRoute assigned during onboarding
params.payment.amount.valueintegerAmount in minor units; fractional values are rejected
params.payment.amount.currencystringISO 4217 currency code; must match the service_id route
params.payment.identifiers.c_idstringMerchant reference, unique per payment
params.payment.payerobjectCustomer who sends funds

Optional Fields

FieldTypeDescription
descriptionstringMax 1024 characters
payer.emailstringCustomer email
payer.phonestringCustomer phone
payer.person.first_namestringCustomer first name
payer.person.last_namestringCustomer last name
payer.customer_account.idstringMerchant-side customer identifier
client.languagestringLanguage hint, max 10 characters
client.countrystringCountry hint, max 3 characters
redirect.on_successstringHTTP(S) URL returned in the response redirect object
redirect.on_failstringHTTP(S) URL returned in the response redirect object
webhook_urlstringAbsolute public HTTP(S) URL for per-payment webhook delivery

Example

{
  "method": "payment.in",
  "service_id": 14701,
  "params": {
    "payment": {
      "description": "Order #12345",
      "identifiers": { "c_id": "order-12345" },
      "amount": { "value": 10000, "currency": "INR" },
      "payer": {
        "email": "customer@example.com",
        "phone": "9876543210",
        "person": { "first_name": "John", "last_name": "Doe" },
        "customer_account": { "id": "cust-123" }
      },
      "client": { "language": "EN", "country": "IN" },
      "webhook_url": "https://merchant.example/webhooks/123hub"
    }
  }
}

payment.out

Creates a withdrawal/payout.

Required Fields

FieldTypeDescription
service_idintegerRoute assigned during onboarding
params.payment.amount.valueintegerAmount in minor units
params.payment.amount.currencystringISO 4217 currency code; must match the service_id route
params.payment.identifiers.c_idstringMerchant payout reference and idempotency key, unique per payment
params.payment.receiver.bank.account.idstringRecipient account identifier

Region-Specific Bank Fields

RegionAccount FieldAdditional Field
Indiareceiver.bank.account.idreceiver.bank.ifsc
Mexicoreceiver.bank.account.id with 18-digit CLABENone
Argentinareceiver.bank.account.id with CBU/CVUOptional receiver.bank.code
Turkeyreceiver.bank.account.id with IBANNone
receiver.bank.clabe is not part of the current request DTO. For Mexico, send the CLABE in receiver.bank.account.id.

Tracking

The create response returns your c_id, a 123hub h_id, and, when available, an opaque provider p_id. Use c_id or h_id with payment.status; payout webhooks also include these identifiers under data.result.payment.identifiers. Provider-specific callback fields such as order_id, transaction_id, session_token, or user_id are not part of the public MultiHub contract.

Example

{
  "method": "payment.out",
  "service_id": 14702,
  "params": {
    "payment": {
      "description": "Payout #67890",
      "identifiers": { "c_id": "payout-67890" },
      "amount": { "value": 50000, "currency": "INR" },
      "receiver": {
        "bank": {
          "account": { "id": "1234567890" },
          "ifsc": "SBIN0001234"
        },
        "email": "recipient@example.com",
        "phone": "9876543210",
        "person": { "first_name": "Jane", "last_name": "Doe" }
      }
    }
  }
}

payment.status

Returns the current payment state.
{
  "method": "payment.status",
  "params": {
    "payment": {
      "identifiers": { "c_id": "order-12345" }
    }
  }
}
At least one lookup identifier is required:
IdentifierSupportedNotes
c_idYesMerchant reference
h_idYesHub payment ID
p_idNoReturned in responses only

payment.notification

Queues a webhook re-delivery for a payment and returns the same payment result shape as payment.status. The delivered merchant webhook uses the same envelope as automatic lifecycle webhooks: data.success, data.result.payment, data.next: null, data.request_id, and data.processing_time. The outer webhook id can be fresh for each manual re-delivery; use data.result.payment.identifiers for reconciliation.
{
  "method": "payment.notification",
  "params": {
    "payment": {
      "identifiers": { "h_id": "pay_1774892151645_abcd" }
    }
  }
}
service_id is optional. The API prefers the stored service_id from payment metadata and falls back to the request value only when metadata is unavailable.

balance.get

Returns balances for the authenticated merchant.
{
  "method": "balance.get",
  "params": {}
}
Response:
{
  "success": true,
  "result": {
    "balance": {
      "id": 0,
      "amounts": [
        {
          "value": 150000,
          "value_freezing": 25000,
          "value_blocking": 0,
          "currency": "INR",
          "enabled": true
        }
      ],
      "enabled": true
    }
  },
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "processing_time": 15
}
All balance values are integers in minor units.

gateway.ping

Validates authentication and connectivity.
{
  "method": "gateway.ping",
  "params": {}
}
Response:
{
  "success": true,
  "result": { "message": "pong" },
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "processing_time": 5
}

Payment Response Object

FieldTypeDescription
payment.payerobjectPresent for deposits when customer data is known
payment.receiverobjectBank/customer destination details when known
payment.amount.valueintegerAmount in minor units
payment.amount.currencystringISO 4217 code
payment.descriptionstringDescription when available
payment.identifiers.c_idstringMerchant reference
payment.identifiers.h_idstringHub payment ID
payment.identifiers.p_idstringProvider reference when available
payment.identifiers.utrstringBank/provider tracking reference when available
payment.redirect.tostring or string[]Payment URL or payment-app deep links
payment.statusobjectCurrent status and optional history
payment.timestampsobjectcreated, updated, and terminal finished timestamps when available
payment.destinationstringin or out
payment.operationsarrayOperation records derived from the payment
payment.service_idintegerRoute ID when known
operationobjectShortcut to the primary operation

Status Values

StatusFinalSuccessInternal Source
createdNonullcreated, pending
processingNonullprocessing
successYestruecompleted
errorYesfalsefailed
canceledYesfalsecancelled
declinedYesfalseexpired
refundedYestruerefunded
partially_refundedYestruepartial_refund