Zoth Payment API

digit9

Use these APIs to quote, create, authorize, track, and manage cross-border payment transactions, including cancellation, receipts, status updates, and supporting document uploads.

Flow

Transaction Lifecycle

Transactions follow a simple ordered flow. First create a quote to lock the rate and fee, then create the payment order with sender, receiver, and transaction details.

1. Create Quote

Get rate, fees, tax, and a quote_id valid for 30 minutes.

2. Create Transaction

Submit the payment order using the quote_id.

3. Confirm Transaction

Authorize the payment order for last-mile processing.

4. Enquire Transaction

Poll the transaction status until completion.

Connectivity

Host Details

All API requests are served from a single production host over HTTPS on port 443.

EnvironmentBase URLPort
Productionhttps://api.zothpay.demo443

The base URL shown is a demo placeholder and will be replaced with your assigned production endpoint.

Policy

Access & Privileges

  • Connections must be made over HTTPS with a minimum of TLS 1.2.
  • The connecting application must authenticate and obtain access tokens using the provided credentials.
  • Periodically plan and publish your expected traffic and quota.
  • Avoid unwanted or repetitive calls that may cause the account to be locked.

Security

Authentication

All requests must be sent over HTTPS and authenticated with a bearer token. Only the headers below are required from your integration.

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json
Base URL: https://api.zothpay.demo

4.1

Create Quote

Create and lock the exchange rate and fee for a payment transaction. The quote_id returned by this API is valid for 30 minutes. The price_guarantee field indicates whether the quote is INDICATIVE or FIRM.

POST/api/digit9/quote

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Request Fields

FieldTypeLengthRequiredDescription
sending_country_codeString2YesSend country; ISO 2 character country code.
sending_currency_codeString3YesSend currency; ISO 3 character currency code.
receiving_country_codeString2YesBeneficiary receive country; ISO 2 character country code.
receiving_currency_codeString3YesBeneficiary receive currency; ISO 3 character currency code.
sending_amountBigDecimal(15,4)ConditionalAmount in send currency. When sending_amount is passed, receiving_amount is optional.
receiving_amountBigDecimal(15,4)YesAmount in receive currency. If both amounts are sent, sending_amount takes priority.
receiving_modeString20YesDelivery mode: BANK, CASHPICKUP, MOBILECASH, or MOBILEWALLET.
typeString-YesTransaction type. Use SEND.
instrumentString-YesInstrument type, for example REMITTANCE or BILL PAYMENT.
correspondentString-ConditionalCorrespondent name. Mandatory for cash payout and MTO corridors, for example LR, RR, TF.
bank_idString60ConditionalBank ID. Mandatory for CASHPICKUP when required by corridor rules.
branch_idString60ConditionalBranch ID. Mandatory for CASHPICKUP when required by corridor rules.
service_typeString3YesC2C, C2B, or B2B. Default: C2C.

Sample Request

JSON
{
  "sending_country_code": "SG",
  "sending_currency_code": "USD",
  "service_type": "C2C",
  "receiving_country_code": "QA",
  "receiving_currency_code": "QAR",
  "receiving_amount": 1000,
  "receiving_mode": "BANK",
  "type": "SEND",
  "instrument": "REMITTANCE"
}

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "quote_id": "1279123122023835",
    "created_at": "2023-08-08T09:23:31.152+04:00",
    "created_at_gmt": "2023-08-08T05:23:31.152Z",
    "expires_at": "2023-08-08T09:53:31.152+04:00",
    "expires_at_gmt": "2023-08-08T05:53:31.152Z",
    "receiving_country_code": "PK",
    "receiving_currency_code": "PKR",
    "sending_country_code": "AE",
    "sending_currency_code": "AED",
    "sending_amount": 100,
    "receiving_amount": 7576.39,
    "total_payin_amount": 107.35,
    "fx_rates": [
      {
        "rate": 75.76388942,
        "base_currency_code": "AED",
        "counter_currency_code": "PKR",
        "type": "SELL"
      }
    ],
    "fee_details": [
      {
        "type": "COMMISSION",
        "model": "OUR",
        "currency_code": "AED",
        "amount": 7,
        "description": "Commission"
      },
      {
        "type": "TAX",
        "model": "OUR",
        "currency_code": "AED",
        "amount": 0.35,
        "description": "Tax"
      }
    ],
    "settlement_details": [
      {
        "charge_type": "COMMISSION",
        "value": 2.8,
        "currency_code": "AED"
      },
      {
        "charge_type": "TREASURYMARGIN",
        "value": 0.008,
        "currency_code": "AED"
      }
    ],
    "correspondent_rules": [
      {
        "field": "purpose_of_txn",
        "rule": "it is mandatory"
      },
      {
        "field": "receiver.bank_details.account_number",
        "rule": "it is mandatory"
      }
    ],
    "price_guarantee": "FIRM"
  }
}

Response Fields

FieldTypeLengthRequiredDescription
statusString60YesStatus description.
status_codeInteger-YesStatus code.
data.quote_idString16YesUnique identification key for the quote.
data.created_at / data.created_at_gmtString-YesQuote creation timestamp in local time and GMT.
data.expires_at / data.expires_at_gmtString-YesQuote expiry timestamp in local time and GMT.
data.sending_country_code / data.sending_currency_codeString-YesSend country and currency codes.
data.receiving_country_code / data.receiving_currency_codeString-YesReceive country and currency codes.
data.sending_amountBigDecimal-YesSend amount.
data.receiving_amountBigDecimal-YesReceive amount.
data.total_payin_amountBigDecimal-YesTotal amount to be paid in.
data.price_guaranteeString10YesINDICATIVE or FIRM.
data.fx_rates[]List-YesExchange rate details: rate, base_currency_code, counter_currency_code, type, and optional cost_rate.
data.fee_details[]List-YesFee details: type, model, currency_code, amount, and optional description.
data.settlement_details[]List-YesSettlement details: charge_type, value, and currency_code.
data.correspondent_rules[]List-YesValidation rules that should be satisfied when creating the transaction.

4.2

Create Transaction

Create a payment order after validating sender, receiver, and transaction details. The request is validated against payload structure, quote validity, corridor mandates, available funds, and screening requirements.

POST/api/digit9/createtransaction

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Request Fields

FieldTypeLengthRequiredDescription
typeString-YesSEND.
source_of_incomeString-YesSender source of income.
purpose_of_txnString-YesPurpose of the transaction.
messageString200NoAny free text.
instrumentString60YesInstrument type: REMITTANCE or BILL PAYMENT.
service_typeString-ConditionalC2C, C2B, or B2B. Default: C2C.
senderObject-YesSender details.
sender.agent_customer_numberString60NoAgent stored customer ID.
sender.mobile_numberString20YesSender mobile number.
sender.emailString254NoSender email address.
sender.first_nameString60YesSender first name.
sender.last_nameString60YesSender last name.
sender.middle_nameString60NoSender middle name.
sender.date_of_birthDate-YesSender date of birth.
sender.country_of_birthString2NoSender country of birth.
sender.genderString1NoM or F.
sender.nationalityString2YesSender nationality; ISO 2 character country code.
sender.employerString300NoSender employer name.
sender.profession_codeString-NoSender profession code.
sender.visa_type_codeString-NoSender visa type code.
sender.sender_id[]List-YesSender identification documents.
sender.sender_id[].id_codeString-YesSender ID type code. For example, 4 for Emirates ID.
sender.sender_id[].idString30YesSender ID number.
sender.sender_id[].issued_country_codeString2YesID issued country code.
sender.sender_id[].issued_onDate-NoID issue date.
sender.sender_id[].valid_throughDate-YesID expiry date.
sender.sender_address[]List-YesSender address details.
sender.sender_address[].address_typeString-YesPRESENT.
sender.sender_address[].address_lineString-YesAddress line.
sender.sender_address[].post_codeString-NoPostal code.
sender.sender_address[].town_nameString-YesTown name.
sender.sender_address[].country_codeString2YesCountry code.
sender.country_of_incorporationString2ConditionalCountry of incorporation; ISO 2 character country code. Required for B2B service_type.
sender.nameString120ConditionalBusiness/company name. Required for B2B service_type.
sender.phone_numberString20ConditionalBusiness phone number. Required for B2B service_type.
sender.type_of_businessString20ConditionalType of business from master data. Required for B2B service_type.
sender.sender_ubos[]List-ConditionalUltimate Beneficial Owners. Required for B2B service_type.
sender.sender_ubos[].first_nameString60YesUBO first name.
sender.sender_ubos[].last_nameString60YesUBO last name.
sender.sender_ubos[].middle_nameString60NoUBO middle name.
sender.sender_ubos[].mobile_numberString20YesUBO mobile number.
sender.sender_ubos[].date_of_birthDate-YesUBO date of birth.
sender.sender_ubos[].nationalityString2YesUBO nationality; ISO 2 character country code.
sender.sender_ubos[].designation_idString-YesUBO designation ID.
sender.sender_ubos[].ubo_id[]List-YesUBO identification documents.
sender.sender_ubos[].ubo_id[].id_codeString-YesID type code.
sender.sender_ubos[].ubo_id[].idString30YesID number.
sender.sender_ubos[].ubo_id[].issued_onDate-NoID issue date.
sender.sender_ubos[].ubo_id[].valid_throughDate-YesID expiry date.
receiverObject-YesReceiver or beneficiary details.
receiver.mobile_numberString20YesReceiver mobile number.
receiver.first_name / receiver.last_nameString60ConditionalReceiver individual name fields.
receiver.nameString120ConditionalReceiver business/entity name. Mandatory for C2B and B2B.
receiver.nationality / receiver.relation_codeString-ConditionalReceiver nationality and relationship code with sender.
receiver.bank_detailsObject-ConditionalRequired for BANK receiving mode. Includes account_type_code, account_number or IBAN, iso_code, routing_code, sort_code, and optional bank/correspondent identifiers.
receiver.cashPickup_detailsObject-ConditionalRequired for CASHPICKUP receiving mode. Includes correspondent, correspondent_id, and correspondent_location_id.
receiver.mobileWallet_detailsObject-ConditionalRequired for MOBILEWALLET receiving mode. Includes correspondent, bank_id, branch_id, and wallet_id.
receiver.receiver_id[]List-ConditionalReceiver identification documents. Required for B2B service_type.
receiver.receiver_address[]List-ConditionalReceiver address details including address_type, address_line, town_name, country_subdivision, and country_code.
transactionObject-YesTransaction details.
transaction.quote_idString-YesQuote ID returned by Create Quote.
transaction.agent_transaction_ref_numberString-ConditionalYour unique transaction reference.
transaction.receiving_modeString20NoDelivery mode: BANK, CASHPICKUP, or MOBILEWALLET.
transaction.sending_country_codeString2YesSending country; ISO 2 character country code.
transaction.sending_currency_codeString3NoSending currency; ISO 3 character currency code.
transaction.receiving_country_code / receiving_currency_codeString-ConditionalReceiving country and currency codes.
transaction.sending_amount / receiving_amountBigDecimal-ConditionalTransaction amount. If both are passed, sending_amount takes priority.
transaction.payment_modeString2ConditionalMandatory when payment is collected by Lulu.
transaction.channel_quote_idString36NoChannel quote ID.
transaction.ordering_institutionObject-ConditionalOrdering institution details, including name and institution_address.
transaction.proofs[]List-ConditionalSupporting documents. Required for B2B service_type. Includes content_type, document_type, and documents.base64_front_data.

Sample Request - Bank Transfer

JSON
{
  "type": "SEND",
  "source_of_income": "SLRY",
  "purpose_of_txn": "SAVG",
  "instrument": "REMITTANCE",
  "message": "Agency transaction",
  "sender": {
    "agent_customer_number": "123456785fg41vdd",
    "mobile_number": "+971503248026",
    "email": "test@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "sender_id": [
      {
        "id_code": "4",
        "id": "784199554586091",
        "issued_on": "2023-12-10",
        "valid_through": "2026-11-05"
      }
    ],
    "date_of_birth": "1990-08-22",
    "country_of_birth": "IN",
    "sender_address": [
      {
        "address_type": "PRESENT",
        "address_line": "123 Main St",
        "post_code": "9054",
        "town_name": "Dubai",
        "country_code": "AE"
      }
    ],
    "nationality": "IN"
  },
  "receiver": {
    "mobile_number": "+919586741508",
    "first_name": "Jane",
    "last_name": "Smith",
    "date_of_birth": "1990-08-22",
    "gender": "F",
    "receiver_address": [
      {
        "address_type": "PRESENT",
        "address_line": "456 Park Ave",
        "town_name": "Karachi",
        "country_code": "PK"
      }
    ],
    "nationality": "PK",
    "relation_code": "32",
    "bank_details": {
      "account_type_code": "1",
      "account_number": "67095294579",
      "iso_code": "ALFHPKKA068"
    }
  },
  "transaction": {
    "quote_id": "{{quote_id}}",
    "sending_country_code": "AE",
    "ordering_institution": {
      "name": "abc",
      "institution_address": {
        "country_code": "SG",
        "address_line": "ZAYED TOWER",
        "address_type": "PRESENT",
        "town_name": "HAWALLI",
        "post_code": "123456"
      }
    }
  }
}

Sample Request - Cash Pickup

JSON
{
  "type": "SEND",
  "source_of_income": "SLRY",
  "purpose_of_txn": "SAVG",
  "instrument": "REMITTANCE",
  "message": "Cash pickup transaction",
  "sender": {
    "agent_customer_number": "123456785fg41vdd",
    "mobile_number": "+971523236963",
    "first_name": "MANU",
    "last_name": "GARCIA",
    "date_of_birth": "1973-07-12",
    "gender": "M",
    "nationality": "PH",
    "profession_code": "550",
    "employer": "LULU",
    "sender_id": [
      {
        "id_code": "4",
        "id": "784199554586091",
        "issued_on": "2023-12-10",
        "valid_through": "2026-11-05"
      }
    ],
    "sender_address": [
      {
        "address_type": "PRESENT",
        "address_line": "123 Main St",
        "town_name": "Dubai",
        "country_code": "AE"
      }
    ]
  },
  "receiver": {
    "mobile_number": "+919586741508",
    "first_name": "Jane",
    "last_name": "Smith",
    "date_of_birth": "1990-08-22",
    "gender": "F",
    "nationality": "PK",
    "relation_code": "32",
    "cashPickup_details": {
      "correspondent": "RR",
      "correspondent_id": "INOPCP",
      "correspondent_location_id": "OP"
    },
    "receiver_address": [
      {
        "address_type": "PRESENT",
        "address_line": "456 Park Ave",
        "town_name": "Karachi",
        "country_code": "PK"
      }
    ]
  },
  "transaction": {
    "quote_id": "{{quote_id}}",
    "receiving_mode": "CASHPICKUP",
    "sending_country_code": "AE"
  }
}

Sample Request - Mobile Wallet

JSON
{
  "type": "SEND",
  "source_of_income": "SLRY",
  "purpose_of_txn": "SAVG",
  "instrument": "REMITTANCE",
  "message": "Mobile wallet transaction",
  "sender": {
    "agent_customer_number": "1238121217803583",
    "mobile_number": "+96565919591",
    "first_name": "DIGITNINE",
    "middle_name": "KUWAIT",
    "last_name": "ALBERT",
    "date_of_birth": "1975-10-21",
    "country_of_birth": "IN",
    "nationality": "IN",
    "sender_id": [
      {
        "id_code": "11",
        "id": "296070902001",
        "issued_on": "2016-02-07",
        "valid_through": "2025-09-23"
      }
    ],
    "sender_address": [
      {
        "address_type": "PRESENT",
        "address_line": "ZAYED TOWER",
        "town_name": "HAWALLI",
        "post_code": "123456",
        "country_code": "KW"
      }
    ]
  },
  "receiver": {
    "mobile_number": "1234567890",
    "first_name": "TEST",
    "last_name": "TEST",
    "nationality": "IN",
    "relation_code": "4",
    "mobileWallet_details": {
      "correspondent": "LR",
      "bank_id": "{{bank_id}}",
      "branch_id": "{{branch_id}}",
      "wallet_id": "{{wallet_id}}"
    },
    "receiver_address": [
      {
        "address_type": "PRESENT",
        "address_line": "addressssss",
        "town_name": "abc",
        "country_code": "IN"
      }
    ]
  },
  "transaction": {
    "quote_id": "{{quote_id}}",
    "receiving_mode": "MOBILEWALLET",
    "sending_country_code": "KW"
  }
}

Sample Request - B2B

JSON
{
  "type": "SEND",
  "source_of_income": "SLRY",
  "purpose_of_txn": "SAVG",
  "instrument": "REMITTANCE",
  "message": "Agency transaction",
  "service_type": "B2B",
  "sender": {
    "agent_customer_number": "123812967893581",
    "country_of_incorporation": "IN",
    "name": "Lulu forex PvtLimited",
    "type_of_business": "1",
    "phone_number": "1234567892",
    "sender_address": [
      {
        "country_code": "SG",
        "country_subdivision": "SG",
        "address_line": "ZAYED TOWER",
        "town_name": "HAWALLI",
        "post_code": "33333",
        "pobox": "555555"
      }
    ],
    "sender_id": [
      {
        "valid_through": "2028-12-12",
        "issued_on": "2016-02-07",
        "id": "3459485113",
        "id_code": "3",
        "issued_country_code": "SG"
      }
    ],
    "sender_ubos": [
      {
        "last_name": "kuamr",
        "mobile_number": "+7037233471",
        "middle_name": "",
        "date_of_birth": "1976-10-21",
        "first_name": "ajay",
        "designation_id": "5",
        "nationality": "IN",
        "ubo_id": [
          {
            "valid_through": "2031-12-09",
            "issued_on": "2011-12-03",
            "id": "X82377455501",
            "id_code": "2"
          }
        ]
      }
    ]
  },
  "receiver": {
    "name": "pdd financial holdings enterprise pvt.ltd",
    "relation_code": "1",
    "mobile_number": "+78676565462",
    "nationality": "US",
    "receiver_address": [
      {
        "address_type": "PRESENT",
        "address_line": "TCR",
        "town_name": "THRISSUR",
        "country_code": "US"
      }
    ],
    "receiver_id": [
      {
        "id_code": "2",
        "id": "784199554586091",
        "issued_on": "2023-12-10",
        "valid_through": "2029-12-10"
      }
    ],
    "bank_details": {
      "account_type_code": "1",
      "iso_code": "EWBAKUS66XX",
      "account_number": "9934572443993487"
    }
  },
  "transaction": {
    "quote_id": "{{quote_id}}",
    "sending_country_code": "SG",
    "agent_transaction_ref_number": "{{quote_id}}",
    "proofs": [
      {
        "content_type": "image/png",
        "document_type": "IDISSUER",
        "documents": {
          "base64_front_data": "<<base64_encoded_data>>"
        }
      }
    ]
  }
}

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "state": "ACCEPTED",
    "sub_state": "ORDER_ACCEPTED",
    "transaction_ref_number": "7028126115519815",
    "transaction_date": "2026-06-04T12:57:32.215Z",
    "transaction_gmt_date": "2026-06-04T12:57:32.215Z",
    "expires_at": "2026-06-04T13:27:32.215Z",
    "expires_at_gmt": "2026-06-04T13:27:32.215Z",
    "agent_transaction_ref_number": "TPSG347345678979584",
    "agent_ref_number": "7028126115519815",
    "delivery_ref_number": "7028126115519815",
    "receiving_country_code": "BD",
    "receiving_currency_code": "BDT",
    "sending_country_code": "SG",
    "sending_currency_code": "USD",
    "sending_amount": 163.0,
    "receiving_amount": 20000.0,
    "total_payin_amount": 163.0,
    "correspondent_id": "79795",
    "correspondent_location_id": "68145131",
    "account_category": "UNDEFINED",
    "transfer_mode": "NEFT",
    "fx_rates": [
      {
        "rate": 122.7,
        "type": "SELL",
        "base_currency_code": "USD",
        "counter_currency_code": "BDT"
      },
      {
        "rate": 0.00814996,
        "type": "SELL",
        "base_currency_code": "BDT",
        "counter_currency_code": "USD"
      }
    ],
    "fee_details": [
      {
        "type": "COMMISSION",
        "model": "OUR",
        "amount": 0,
        "description": "Commission",
        "currency_code": "USD"
      },
      {
        "type": "TAX",
        "model": "OUR",
        "amount": 0,
        "description": "Tax",
        "currency_code": "USD"
      }
    ],
    "settlement_details": [
      {
        "value": 0,
        "charge_type": "COMMISSION",
        "currency_code": "USD"
      },
      {
        "value": 0,
        "charge_type": "INPUTTAX",
        "currency_code": "USD"
      },
      {
        "value": 0,
        "charge_type": "TREASURYMARGIN",
        "currency_code": "USD"
      }
    ],
    "price_guarantee": "FIRM"
  }
}

Response Fields

FieldTypeLengthRequiredDescription
statusString60YesStatus description.
status_codeInteger-YesStatus code.
data.state / data.sub_stateString-YesTransaction state and sub-state, for example ACCEPTED / ORDER_ACCEPTED.
data.transaction_ref_numberString16YesUnique transaction reference number.
data.transaction_date / data.transaction_gmt_dateString-YesTransaction date and time in local time and GMT.
data.expires_at / data.expires_at_gmtString-YesPayment expiry date and time in local time and GMT.
data.agent_transaction_ref_numberString60YesAgent transaction reference number.
data.agent_ref_number / data.delivery_ref_numberString-YesAgent and delivery reference numbers. Delivery reference becomes UTR once received from the processing bank.
data.sending_* / data.receiving_*String | BigDecimal-YesCountry, currency, and amount details for both send and receive legs.
data.total_payin_amountBigDecimal-YesTotal payin amount.
data.correspondent_id / data.correspondent_location_idString-YesCorrespondent identifiers used for processing.
data.account_categoryString-NoAccount category.
data.transfer_modeString-YesTransfer mode, for example NEFT.
data.fx_rates[]List-YesExchange rate details.
data.fee_details[]List-YesFee details.
data.settlement_details[]List-YesSettlement details.
data.price_guaranteeString10YesINDICATIVE or FIRM.

4.3

Confirm Transaction

Authorize the payment order from the sending institute to the processing institute. The payment is passed through AML screening, then forwarded to correspondent partners, and the transaction value is deducted from the agent's balance.

POST/api/digit9/confirmtransaction

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Request Fields

FieldTypeLengthRequiredDescription
transaction_ref_numberString16YesTransaction reference number from the Create Transaction API.

Sample Request

JSON
{
  "transaction_ref_number": "1276122106256978"
}

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "state": "IN_PROGRESS",
    "sub_state": "PAYMENT_SETTLED",
    "transaction_ref_number": "1276122106256978"
  }
}

Response Fields

FieldTypeLengthRequiredDescription
stateString60YesTransaction state.
sub_stateString120YesTransaction sub-state.
transaction_ref_numberString16YesTransaction reference number.

4.4

Enquire Transaction

Return the current status of a transaction. Use this API to poll for transaction progress at periodic intervals. The state and sub_state fields describe the current processing stage.

GET/api/digit9/enquire-transaction?transaction_ref_number=<<ref>>

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Query Parameters

FieldTypeLengthRequiredDescription
transaction_ref_numberString16MandatoryTransaction reference number that uniquely identifies the transaction.

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "state": "IN_PROGRESS",
    "sub_state": "AML_PENDING",
    "transaction_gmt_date": "2022-03-23T09:18:42.73Z",
    "transaction_date": "2022-03-23T13:18:42.73+04:00",
    "type": "SEND",
    "instrument": "REMITTANCE",
    "source_of_income": "SLRY",
    "purpose_of_txn": "SAVG",
    "message": "Agency transaction",
    "sender": {
      "mobile_number": "+971523236963",
      "first_name": "JOHN",
      "last_name": "DOE",
      "nationality": "PH"
    },
    "receiver": {
      "mobile_number": "+919586741508",
      "first_name": "Jane",
      "last_name": "Smith"
    },
    "transaction": {
      "quote_id": "1279122310938710",
      "receiving_amount": 7576.39,
      "receiving_currency_code": "PKR",
      "receiving_mode": "BANK",
      "sending_amount": 100,
      "sending_currency_code": "AED"
    }
  }
}

4.5

Cancel Transaction

Cancel a transaction after validating the transaction number and status. Cancellation is subject to the transaction's current state.

POST/api/digit9/canceltransaction

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Request Fields

FieldTypeLengthRequiredDescription
transaction_ref_numberString16YesTransaction reference number that uniquely identifies the transaction.
cancel_reasonString60YesCancellation reason code. Fetch the valid ENUM values from the Get Codes API using key cancel_reason_codes_list.
remarksString40YesAdditional message or remarks.

Sample Request

JSON
{
  "transaction_ref_number": "1276122106615570",
  "cancel_reason": "R6",
  "remarks": "Account of the payment is incorrect"
}

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "state": "IN_PROGRESS",
    "sub_state": "CANCELLATION_REQUEST_CREATED",
    "transaction_ref_number": "1276122106615570"
  }
}

Response Fields

FieldTypeLengthRequiredDescription
stateString60YesTransaction state.
sub_stateString120YesTransaction sub-state.
transaction_ref_numberString16YesTransaction reference number.
Cancellation reason codes: Fetch the full list dynamically from the Get Codes API at /api/digit9/codes?code=CANCEL_REASON_CODES. The response returns a cancel_reason_codes array of objects with code and name fields (for example, code: "R7", name: "Incorrect Recipient").

Cancellation / Rejection Error Codes

Error CodeHTTP StatusMessageScenarioRetry / Reject
40004404Partner not foundPartner configuration not found for the agentRetry
40004404Transaction not foundInvalid or non-existent transaction reference numberRetry
40100406The transaction is not confirmed yetWhen payment is not settled yetRetry
40100406Cannot Cancel transaction when AML PendingWhen AML is pendingRetry
40100406Cancel Reason is invalidInvalid cancel reason code passedReject
40110406Transaction already in the cancellation processing stateCancellation already in progressReject
40110406The transaction is already processedTransaction is Credited, Reconciled, or Cancellation completedReject
8076401406Cancellation is not acceptable since already processedTransaction already processed by correspondentReject
8076402406Cancellation is not acceptable since already in progressCancellation request already submitted to correspondentReject
8076403406Transaction is not acceptable since payment not yet settledPayment not yet settled with correspondentRetry
8076404406Cancel reason is not acceptableCorrespondent rejected the cancel reason codeReject
8076405406Cancellation is not acceptableCorrespondent declined the cancellation requestReject
8076406406Cancellation is not acceptable since already cancelledTransaction has already been cancelledReject

Rejection / Cancellation Remark Codes

These remark codes are returned in the Enquire Transaction response under the remarks field when a transaction is rejected or cancelled.

Remark CodeRemark
ERR001Account Not Valid
ERR002Rejected - AML Compliance
ERR003Regulatory/Compliance Violation
ERR004Customer Profile Expired
ERR005Sender Limit Exceeded
ERR006Beneficiary Limit Exceeded
ERR007Cancelled as per Customer Request
ERR008Partner Bank - IBFT Failure
ERR009Name Mismatch - Account Holder vs. Beneficiary
ERR010System/Technical Error
ERR011Transaction Timeout
ERR012Invalid Banking Details - IFSC/Branch/SWIFT Code Error
ERR013OR Remarks Test
ERR014Invalid account details/name/phone
ERR015Regulatory/Compliance Violation
ERR016Customer Profile Expired
ERR017Cancelled as per Customer Request
ERR018Partner Bank - IBFT Failure
ERR019System/Technical Error
ERR020Invalid Banking Details/IFSC/Branch/SWIFT Code Error
ERR021Name Mismatch - Account Holder vs. Beneficiary
ERR022Mobile Wallet account invalid
ERR023Quote Expired
ERR024Sender Limit Deficit/Exceeded
ERR025Beneficiary Limit Deficit/Exceeded
ERR026Rejected as per partner bank
ERR027Validation Failed
ERR028Invalid payment Type
ERR029Blocked / Restricted Country
ERR030Max retry limit reached
ERR031Wrong service selected
ERR032Partner side Transaction Timeout

4.6

Transaction Receipt

Return the invoice report of the transaction as base64-encoded data.

GET/api/digit9/transaction-receipt?transaction_ref_number=<<ref>>

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Query Parameters

FieldTypeLengthRequiredDescription
transaction_ref_numberString16MandatoryTransaction reference number that uniquely identifies the transaction.

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "data": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
  }
}

Response Fields

FieldTypeLengthRequiredDescription
statusString60YesStatus description.
status_codeInteger-YesStatus code.
data.dataString-YesBase64-encoded transaction receipt / invoice report.

4.7

Transaction Status Update

Update the status of a transaction whose fulfillment happens in the partner network. Allowed status values are TRANSMITTED, CREDITED, AVAILABLE_PAID, and CANCELLATION_COMPLETED.

PUT/api/digit9/status-update

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Request Fields

FieldTypeLengthRequiredDescription
transaction_ref_numberString16YesTransaction reference number that uniquely identifies the transaction.
statusString60YesTransaction status to set. Allowed values: TRANSMITTED, CREDITED, AVAILABLE_PAID, CANCELLATION_COMPLETED.

Sample Request

JSON
{
  "transaction_ref_number": "1276122106256978",
  "status": "CREDITED"
}

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "status": "ACKNOWLEDGED"
  }
}

Response Fields

FieldTypeLengthRequiredDescription
statusString-YesStatus description.
status_codeInteger-YesStatus code.
data.statusString-YesAcknowledgement value. Always returns ACKNOWLEDGED on success.

4.8

Documents Upload

Upload supporting documents (for example source of funds proof or ID documents) for a transaction. Documents are sent as base64-encoded data.

POST/api/digit9/transaction-documents

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Request Fields

FieldTypeLengthRequiredDescription
transaction_ref_numberString16YesTransaction reference number that uniquely identifies the transaction.
proof[]List-YesArray of document proof objects.
proof[].content_typeString-YesMIME type of the document, for example image/png, image/jpeg, application/pdf.
proof[].document_typeString-YesType of document, for example SOURCE or IDISSUER.
proof[].documents.base64_front_dataString-YesBase64-encoded front side of the document.
proof[].documents.base64_back_dataString-NoBase64-encoded back side of the document.

Sample Request

JSON
{
  "transaction_ref_number": "1279124119281448",
  "proof": [
    {
      "content_type": "image/png",
      "document_type": "SOURCE",
      "documents": {
        "base64_front_data": "<<base64_encoded_data>>",
        "base64_back_data": "<<base64_encoded_data>>"
      }
    }
  ]
}

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "message": "Documents uploaded successfully"
  }
}

Master Data

Get Codes

Return master data for ID types, relationships, professions, purposes, payment modes, instruments, receiving modes, fee types, address types, income range types, correspondents, cancellation reasons, and account types. Returns all types if no code is supplied.

GET/api/digit9/codes
Example: /api/digit9/codes?code=PURPOSE_OF_TRANSACTIONS&service_type=C2C

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Query Parameters

FieldTypeLengthRequiredDescription
codeString-NoMaster data code key to filter the response, for example PURPOSE_OF_TRANSACTIONS. Returns all types if omitted.
service_typeString-NoService type filter: C2C, C2B, or B2B.

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": {
    "purposes_of_transactions": [
      { "code": "FAMA", "name": "Family Maintenance" },
      { "code": "MDCS", "name": "Medical expenses" },
      { "code": "LOAR", "name": "REPAYMENT OF LOAN" },
      { "code": "SAVG", "name": "Savings" }
    ]
  }
}

Master Data

Get Service Corridor

Fetch service details, corridor details, currency details, and agent details for a given receiving mode and country. Use this to validate which corridors and currencies are supported before quoting.

GET/api/digit9/service-corridor
Example: /api/digit9/service-corridor?receiving_mode=BANK&receiving_country_code=PH

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Query Parameters

FieldTypeLengthRequiredDescription
receiving_modeString-NoDelivery mode filter: BANK, CASHPICKUP, MOBILEWALLET.
receiving_country_codeString2NoReceiving country; ISO 2 character country code.

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": [
    {
      "instrument": "REMITTANCE",
      "transaction_type": "SEND",
      "receiving_mode": "BANK",
      "sending_country": "UNITED ARAB EMIRATES",
      "sending_country_code": "AE",
      "receiving_country": "Philippines",
      "receiving_country_code": "PH",
      "limit_currency": "Philippine Peso",
      "limit_currency_code": "PHP",
      "limit_min_amount": 1,
      "limit_per_transaction": 4600000,
      "send_min_amount": 50,
      "send_max_amount": 300000,
      "corridor_currencies": [
        {
          "correspondent": "LR",
          "anywhere": 0,
          "sending_currency": "UAE Dirham",
          "sending_currency_code": "AED",
          "receiving_currency": "Philippine Peso",
          "receiving_currency_code": "PHP",
          "correspondent_name": "LuluRemittance"
        }
      ]
    }
  ]
}

Master Data

Get Rates

Return indicative exchange rates between sending and receiving countries and currencies.

GET/api/digit9/rates
Example: /api/digit9/rates?sending_country_code=AE&sending_currency_code=AED&receiving_country_code=IN&receiving_currency_code=INR

Required Headers

FieldTypeLengthRequiredDescription
AuthorizationString-MandatoryBearer {accessToken}
Content-TypeString-Mandatoryapplication/json

Query Parameters

FieldTypeLengthRequiredDescription
sending_country_codeString2YesSending country; ISO 2 character country code.
sending_currency_codeString3YesSending currency; ISO 3 character currency code.
receiving_country_codeString2YesReceiving country; ISO 2 character country code.
receiving_currency_codeString3YesReceiving currency; ISO 3 character currency code.

Sample Response

JSON
{
  "status": "success",
  "status_code": 200,
  "data": [
    {
      "rate": 22.75,
      "base_currency_code": "AED",
      "counter_currency_code": "INR",
      "type": "SELL"
    }
  ]
}