Open Banking Gateway
Sandbox only

Mobile wallet · Bangladesh

Nagad Customer API

Nagad personal wallet (Bangladesh) — PIN + SMS OTP login with an optional *167# device-change step, balance, paged transaction history & detail, recipient validation, fee preview, P2P send-money, and credential provisioning/refresh maintenance.

12 endpointsFree sandbox

Sandbox · Request

curl · POST /login/request-otp
curl -X POST 'https://www.openbankinggateway.com/api/sandbox/nagad-customer/login/request-otp' \
  -H 'Content-Type: application/json' \
  --data '{
  "account": "01900000002",
  "pinCode": "1234"
}'

Illustrative sandbox example. No provider is contacted, no SMS is sent, no funds move, and no credits are charged.

API reference

Know what you can call.

Methods, paths, and parameter rules come from the same catalog that powers the console. Open an endpoint to see its request fields.

Wallet authentication

POST
/login/request-otp

Send the SMS OTP or signal the *167# device-change step

Sandbox only

/api/sandbox/nagad-customer/login/request-otp

POST login/request-otp · Parameter
ParameterTypeRules & handling
accountRequiredstring

JSON body

Use a wallet you are authorized to access. Live identities must be linked to your site account through wallet login.

  • Format: ^01\d{9}$
pinCodeRequiredstring

JSON body

Sensitive · never put in URLs

  • Format: ^\d{4,6}$
POST
/login/verify-ussd-otp

Submit the *167# device-change USSD code

Sandbox only

/api/sandbox/nagad-customer/login/verify-ussd-otp

POST login/verify-ussd-otp · Parameter
ParameterTypeRules & handling
accountRequiredstring

JSON body

Use a wallet you are authorized to access. Live identities must be linked to your site account through wallet login.

  • Format: ^01\d{9}$
ussdOtpRequiredstring

JSON body

Sensitive · never put in URLs

  • Format: ^\d{4,8}$
POST
/login/verify-otp

Verify the OTP and issue a session token

Sandbox only

/api/sandbox/nagad-customer/login/verify-otp

POST login/verify-otp · Parameter
ParameterTypeRules & handling
accountRequiredstring

JSON body

Use a wallet you are authorized to access. Live identities must be linked to your site account through wallet login.

  • Format: ^01\d{9}$
otpRequiredstring

JSON body

Sensitive · never put in URLs

  • Format: ^\d{4,8}$
uidOptionalstring

JSON body

  • Format: ^[A-Za-z0-9_-]{1,64}$

Account & activity

GET
/balance

Wallet balance

Sandbox only

/api/sandbox/nagad-customer/balance

GET balance · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
GET
/transaction-history

Paged transaction history

Sandbox only

/api/sandbox/nagad-customer/transaction-history

GET transaction-history · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
pageOptionalinteger

Query parameter

  • Range: 0 … 1000
GET
/transaction-detail

Single transaction detail

Sandbox only

/api/sandbox/nagad-customer/transaction-detail

GET transaction-detail · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
txnIdRequiredstring

Query parameter

  • Format: ^[A-Za-z0-9]{4,32}$
approvalDateRequiredstring

Query parameter

  • Format: ^\d{8}$

Transfers

GET
/validate-account

Check that a recipient is a registered wallet

Sandbox only

/api/sandbox/nagad-customer/validate-account

GET validate-account · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
destMobileRequiredstring

Query parameter

  • Format: ^01\d{9}$
GET
/fee-commission

Preview fee, commission and net amount for a transfer

Sandbox only

/api/sandbox/nagad-customer/fee-commission

GET fee-commission · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
destMobileRequiredstring

Query parameter

  • Format: ^01\d{9}$
amountRequireddecimal

Query parameter

  • Range: 1 … ∞
  • Decimal places: 2
txTypeOptionalstring

Query parameter

  • Format: ^[A-Z_]{2,32}$
POST
/p2p

P2P send-money to another Nagad wallet

Sandbox only

/api/sandbox/nagad-customer/p2p

Sandbox simulation only. No real money moves; live transfers are not enabled for this integration.

POST p2p · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
destAccountNoRequiredstring

JSON body

  • Format: ^01\d{9}$
amountRequireddecimal

JSON body

  • Range: 1 … ∞
  • Decimal places: 2
userRefMessageOptionalstring

JSON body

  • Length: 0 … 64

Session maintenance

POST
/refresh-card-data

Provision or refresh P2P payment credentials

Sandbox only

/api/sandbox/nagad-customer/refresh-card-data

POST refresh-card-data · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
POST
/replenish-card

Refresh the transaction credential quota

Sandbox only

/api/sandbox/nagad-customer/replenish-card

POST replenish-card · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$
POST
/reinitialize-wallet

Re-provision an existing session for P2P

Sandbox only

/api/sandbox/nagad-customer/reinitialize-wallet

POST reinitialize-wallet · Parameter
ParameterTypeRules & handling
tokenRequiredstring

Send in X-OBG-Token

Session token from the login step. Prefer the X-OBG-Token header so it stays out of URLs.

Sensitive · never put in URLs

  • Format: ^[A-Za-z0-9._~+/=-]{8,512}$

Endpoint identifiers and provider-specific descriptions are kept in English to match the API contract.

Try in sandbox

A request you can inspect.

The console starts in sandbox mode. Use only the public test values there. Switching to Live changes the destination and may use real accounts and funds.

Sandbox

Keep exploration, account access, and billing separate.

From first request to live connection.

  1. Explore without signing in

    Choose an API and use its sandbox with the documented test values. Fixtures do not move money or contact a bank.

  2. Create your gateway account

    Sign in with Google for 1,000 welcome credits and create an API key. This signs you into the website, not a wallet.

  3. Connect when you are ready

    For a supported live API, complete the wallet login separately. Successful live requests cost one credit; failed requests cost none.

1,000 welcome credits · no card

Small start. Clear cost.

$10 buys 10,000 credits. A successful live request uses one credit; failures and sandbox calls use none. Buying credits does not unlock sandbox-only integrations.

Buy 10,000 credits

Integration guide

Bring it into your code.

Sandbox examples use public fixture values. Live examples use placeholders: keep credentials on your server and never commit them.

Sandbox

curl · POST
curl -X POST 'https://www.openbankinggateway.com/api/sandbox/nagad-customer/login/request-otp' \
  -H 'Content-Type: application/json' \
  --data '{
  "account": "01900000002",
  "pinCode": "1234"
}'

Sandbox only

Live access not enabled

Contact us to enable access

Live calls for Nagad Customer are enabled per customer. Sandbox mode stays free and needs no sign-in.

Clear boundaries, before your first request.

A few things worth knowing.

Does the sandbox use real accounts?

No. Sandbox responses are fixtures and use public test credentials. They do not contact a financial provider, send an OTP, or move funds.

Can every API make live requests?

No. Only integrations marked as live have a real upstream. All others are sandbox-only and return LIVE_ACCESS_NOT_ENABLED in live mode. Contact us to discuss access.

When is a credit charged?

One credit is charged for a successful live call. Failed calls and sandbox calls are free. Check X-Credits-Charged rather than HTTP status alone. If X-OBG-Settlement: unknown is present, billing is unresolved: X-Credits-Charged: 0 does not prove that no debit occurred. Check usage and reconcile before retrying.

Does Google sign-in connect my wallet?

No. Google sign-in manages your site account, credits, and API keys. Wallet login is a separate, explicit flow for a supported integration and an account you are authorized to use.

Keep exploring.