Build reliable service flows with one concise API guide.
Create recharge, Drive, bill, and MFS requests with examples that match the current SohojxPay API.
Start here
One key. Predictable JSON.
Send your service API key in a request header. Create operations require the matching Recharge, Bills, or MFS permission and an approved KYC profile.
https://sohojxpay.comx-service-api-key: usk_live_demo_not_a_real_keyKeep the key private
Use service API keys only from your backend. Never place a live key in browser or mobile application code.
Manage API keysMobile recharge
Recharge
Create prepaid, postpaid, or Skitto recharge requests and follow their current status.
Submit a recharge and hold the calculated service amount from the API-key owner’s balance.
/api/v1/recharge/requestService API keyRecharge permissionOperator codes
GPGrameenphoneRBRobiATAirtelBLBanglalinkTTTeletalkSKSkittoRecharge types
prepaidPrepaid SIMpostpaidPostpaid SIMskittoSkitto SIMParameters
| Field | Location | Type | Required | Accepted / example | Description |
|---|---|---|---|---|---|
| number | body | string | Yes | 01712345678 | 11-digit Bangladesh mobile number beginning with 01. |
| type | body | string | Yes | prepaid, postpaid, skitto | The SIM account type. |
| operator | body | string | Yes | GP, RB, AT, BL, TT, SK | Two-letter mobile operator code. |
| tran_id | body | string | Yes | RCH-DEMO-10001 | Unique customer reference, 5–50 characters. |
| amount | body | number | Yes | 100 | Positive recharge amount in BDT. Sent as a string. |
| package_id | body | string | No | — | Optional regular-offer package identifier. |
| package_name | body | string | No | — | Optional package label, maximum 100 characters. |
Safe playground
Try a simulated request
Runs entirely in your browser. No API call or transaction is created.
{
"number": "01712345678",
"type": "prepaid",
"operator": "GP",
"tran_id": "RCH-DEMO-10001",
"amount": "100"
}{
"success": true,
"status": "PENDING",
"message": "Recharge request queued successfully",
"data": {
"transaction_id": "8c2133a5-54e2-4b7d-9bd1-22c8af7fa101",
"tran_id": "RCH-DEMO-10001",
"number": "01712345678",
"operator": "GP",
"type": "prepaid",
"amount": "100",
"final_amount": "98.00",
"commission": 2,
"charge": 0,
"status": "PENDING",
"recharge_processor": "system",
"queued_at": "2026-01-15T10:30:00.000Z",
"processor_check_count": 0,
"processor_last_error": null,
"balance_held": true
}
}Code examples
const response = await fetch('https://sohojxpay.com/api/v1/recharge/request', {
method: 'POST',
headers: {
"Content-Type": "application/json",
"x-service-api-key": "usk_live_demo_not_a_real_key"
},
body: JSON.stringify({
"number": "01712345678",
"type": "prepaid",
"operator": "GP",
"tran_id": "RCH-DEMO-10001",
"amount": "100"
}),
});
const data = await response.json();
if (!response.ok) throw new Error(data.message || 'Request failed');
console.log(data);Special packages
Drive packages
Browse active Drive packages, submit a purchase request, and check its processing status.
List active Drive packages. Operator and package-type filters are optional.
/api/user/offers?offer_type=drive&operator=GP&package_type=mbPublicOperator codes
GPGrameenphoneRBRobiATAirtelBLBanglalinkTTTeletalkSKSkittoPackage types
mbInternetminuteMinutescomboCombosmsSMSParameters
| Field | Location | Type | Required | Accepted / example | Description |
|---|---|---|---|---|---|
| operator | query | string | No | GP, RB, AT, BL, TT, SK | Optional operator filter. |
| package_type | query | string | No | mb, minute, combo, sms | Optional package category. |
Safe playground
Try a simulated request
Runs entirely in your browser. No API call or transaction is created.
{
"url": "https://sohojxpay.com/api/user/offers?offer_type=drive&operator=GP&package_type=mb"
}{
"success": true,
"data": {
"offerType": "drive",
"offers": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"operator": "GP",
"packageType": "mb",
"name": "1 GB Internet — 7 Days",
"description": "1 GB internet package valid for 7 days",
"regularPrice": 129,
"price": 99,
"validity": "7 days",
"dataAmount": "1GB",
"minutes": null,
"sms": null,
"offerLocationId": null,
"offerLocation": null,
"source": "database"
}
],
"pagination": {
"page": 1,
"perPage": 50,
"total": 1,
"totalPages": 1
}
}
}Code examples
const response = await fetch('https://sohojxpay.com/api/user/offers?offer_type=drive&operator=GP&package_type=mb', {
method: 'GET',
headers: {
"Content-Type": "application/json"
},
});
const data = await response.json();
if (!response.ok) throw new Error(data.message || 'Request failed');
console.log(data);Utility payments
Bills
Create electricity, gas, or water bill requests and check them with your transaction ID.
Submit a bill payment and hold the calculated service amount from the customer balance.
/api/v1/billsService API keyBills permissionBill types
electricityElectricity billgasGas billwaterWater billBiller codes
descoDESCOnescoNESCOdpdcDPDCbrebBREBwzpdclWZPDCLtitas_gas_meteredTitas Gas (Metered)titas_gas_non_meteredTitas Gas (Non-metered)karnaphuli_gasKarnaphuli Gasjalalabad_gasJalalabad Gassundarban_gasSundarban GasdwasaDWASAcwasaCWASArwasaRWASAMeter types
prepaidPrepaid electricity meterpostpaidPostpaid electricity meterParameters
| Field | Location | Type | Required | Accepted / example | Description |
|---|---|---|---|---|---|
| bill_type | body | string | Yes | electricity, gas, water | Utility category. |
| biller_code | body | string | Yes | desco, nesco, dpdc, breb, wzpdcl, titas_gas_metered, titas_gas_non_metered, karnaphuli_gas, jalalabad_gas, sundarban_gas, dwasa, cwasa, rwasa | Provider code matching the selected bill type. |
| meter_type | body | string | Electricity only | prepaid, postpaid | Required for electricity bills. |
| account_number | body | string | Yes | 12345678901 | Customer account or meter number, at least 3 characters. |
| contact_number | body | string | Required for electricity | 01712345678 | 11-digit contact number for electricity bills. |
| bill_number | body | string | No | — | Optional bill reference, maximum 50 characters. |
| amount | body | number | Yes | 500 | Positive bill amount in BDT. Sent as a string. |
| note | body | string | No | — | Optional note, maximum 255 characters. |
| tran_id | body | string | Yes | BILL-DEMO-10001 | Unique customer reference, 5–50 characters. |
Safe playground
Try a simulated request
Runs entirely in your browser. No API call or transaction is created.
{
"bill_type": "electricity",
"biller_code": "desco",
"meter_type": "prepaid",
"account_number": "12345678901",
"contact_number": "01712345678",
"amount": "500",
"tran_id": "BILL-DEMO-10001"
}{
"success": true,
"status": "PENDING",
"message": "Bill payment initiated successfully",
"data": {
"id": "74a14863-0443-40f0-bdf7-b446301b68f1",
"tranId": "BILL-DEMO-10001",
"billType": "electricity",
"billerCode": "desco",
"billerName": "Dhaka Electric Supply Company",
"accountNumber": "12345678901",
"amount": "500",
"location": null,
"final_amount": "500",
"commission": 0,
"charge": 0,
"ussdCode": null,
"status": "PENDING",
"queuedAt": "2026-01-15T10:30:00.000Z",
"createdAt": "2026-01-15T10:30:00.000Z"
}
}Code examples
const response = await fetch('https://sohojxpay.com/api/v1/bills', {
method: 'POST',
headers: {
"Content-Type": "application/json",
"x-service-api-key": "usk_live_demo_not_a_real_key"
},
body: JSON.stringify({
"bill_type": "electricity",
"biller_code": "desco",
"meter_type": "prepaid",
"account_number": "12345678901",
"contact_number": "01712345678",
"amount": "500",
"tran_id": "BILL-DEMO-10001"
}),
});
const data = await response.json();
if (!response.ok) throw new Error(data.message || 'Request failed');
console.log(data);Mobile financial services
MFS
Create bKash, Nagad, Rocket, or Upay transactions and check their processing status.
Submit an MFS transaction and hold the calculated service amount from the balance.
/api/v1/mfsService API keyMFS permissionProvider codes
bkashbKashnagadNagadrocketRocketupayUpayTransaction types
sendmoneySend moneycashoutCash outcashinCash inParameters
| Field | Location | Type | Required | Accepted / example | Description |
|---|---|---|---|---|---|
| mfs_name | body | string | Yes | bkash, nagad, rocket, upay | MFS provider code. |
| mfs_type | body | string | Yes | sendmoney, cashout, cashin | Requested MFS operation. |
| receiver_no | body | string | Yes | 01712345678 | 11-digit Bangladesh mobile number beginning with 01. |
| amount | body | number | Yes | 500 | Positive transaction amount in BDT. Sent as a string. |
| tran_id | body | string | No | MFS-DEMO-10001 | Optional unique reference, 5–50 characters. The server generates one when omitted. |
Safe playground
Try a simulated request
Runs entirely in your browser. No API call or transaction is created.
{
"mfs_name": "bkash",
"mfs_type": "sendmoney",
"receiver_no": "01712345678",
"amount": "500",
"tran_id": "MFS-DEMO-10001"
}{
"success": true,
"status": "PENDING",
"message": "MFS request created successfully.",
"data": {
"id": "0ad650aa-ad67-4de5-a88f-ef4a2afe9114",
"tranId": "MFS-DEMO-10001",
"mfsName": "bkash",
"mfsType": "sendmoney",
"receiverNo": "01712345678",
"amount": "500",
"location": null,
"final_amount": "500",
"commission": 0,
"charge": 0,
"ussdCode": null,
"status": "PENDING",
"queuedAt": "2026-01-15T10:30:00.000Z",
"createdAt": "2026-01-15T10:30:00.000Z"
}
}Code examples
const response = await fetch('https://sohojxpay.com/api/v1/mfs', {
method: 'POST',
headers: {
"Content-Type": "application/json",
"x-service-api-key": "usk_live_demo_not_a_real_key"
},
body: JSON.stringify({
"mfs_name": "bkash",
"mfs_type": "sendmoney",
"receiver_no": "01712345678",
"amount": "500",
"tran_id": "MFS-DEMO-10001"
}),
});
const data = await response.json();
if (!response.ok) throw new Error(data.message || 'Request failed');
console.log(data);HTTP response status codes
Use the HTTP status together with the response message to decide what your integration should do next.
400Invalid or missing request data
401Missing or invalid API key
403API key lacks permission
404Requested record was not found
423KYC approval is required
429Too many requests
500Unexpected server error
