What it does
Normally a payment_url opens the gateway where the customer first picks a method. With Method Direct Link, the merchant adds a method parameter to the create request and the returned payment_url opens that method directly — one step fewer for the customer, faster checkout.
- Webhook (IPN),
api/payment/verify, success/cancel redirects and Telegram notifications all behave exactly as before.
- The deep link is appended automatically by the gateway (e.g.
.../api/execute/XXXXXXXX?method=bkash) — nothing else to configure.
Activation
This is an admin-controlled feature. The platform admin grants or revokes it per merchant account (same pattern as the custom payment domain access). Until it is granted for your account, passing method makes the create request fail with an error instead of being silently ignored: Method Direct Link is not enabled for your account. Contact Admin/Support to enable it.
If you are a merchant and this page applies to you, confirm with support/admin that Method Direct Link is enabled on your account.
Create a payment with a fixed method
Add a method field to your normal create payment POST:
Live API End Point (For Create Payment URL):
POSThttps://secure-pay.nagorikpay.com/api/payment/create
| Field Name |
Description |
Required |
Example Values |
| method |
Payment method slug the customer should land on directly (must be enabled for the brand). |
No |
bkash, nagad, rocket … |
| type |
Account type to pay into. Only honored together with method, and only when that account type is enabled for the method — the customer then skips the account-type chooser too (works even when several account types are active). An invalid / inactive type is silently ignored. |
No |
personal, agent, merchant |
<?php
$ch = curl_init("https://secure-pay.nagorikpay.com/api/payment/create");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded'],
CURLOPT_POSTFIELDS => http_build_query([
'api_key' => 'YOUR_BRAND_API_KEY',
'amount' => 100,
'cus_name' => 'Customer Name',
'cus_email' => 'customer@gmail.com',
'success_url' => 'https://yourdomain.com/success.php',
'cancel_url' => 'https://yourdomain.com/cancel.php',
'webhook_url' => 'https://yourdomain.com/webhook.php',
'method' => 'bkash', // fixed method — skips the method-select page
'type' => 'agent', // optional — personal | agent | merchant (skips the account-type chooser)
]),
]);
$res = json_decode(curl_exec($ch), true);
// $res['payment_url'] => https://.../api/execute/XXXXXXXX?method=bkash&acc_tp=....
curl_close($ch);
Error responses
When a method or type you pass is not active, the create endpoint refuses with HTTP 400 and returns JSON (status: 0) instead of a payment_url:
| Condition |
Response message |
| Account has no Method Direct Link access (admin) |
Method Direct Link is not enabled for your account. Contact Admin/Support to enable it. |
| Method not enabled on the brand |
The payment method 'bkash' is not active for this brand. |
| Method enabled but its direct toggle is off |
Method Direct Link is turned off for 'bkash' in this brand's payment settings. Enable its toggle first. |
| Account type not active for the method |
The account type 'merchant' is not active for 'nagad'. Active type(s): personal, agent. |
type passed for a bank/QR method |
The 'type' parameter does not apply to 'bank' (bank/QR methods have no account type). |
Response example:
{"status":0,"message":"The account type 'merchant' is not active for 'nagad'. Active type(s): personal, agent."}
Method slugs
Use the same slug you already use for payment methods. The enabled slugs below come straight from the gateway:
| # |
method value |
| 1 |
nagorikpay |
| 2 |
bkash |
| 3 |
nagad |
| 4 |
rocket |
| 5 |
upay |
| 6 |
cellfin |
| 7 |
tap |
| 8 |
easypaisa |
| 9 |
Ipay |
| 10 |
binance |
| 11 |
banglaqr |
| 12 |
ibl |
| 13 |
abbank |
| 14 |
citybank |
| 15 |
sonali |
| 16 |
dbbl |
| 17 |
basic |
| 18 |
ebl |
| 19 |
bbrac |
| 20 |
basia |
| 21 |
agrani |
| 22 |
jamuna |
| 23 |
ific |
When the customer is sent straight to the method
- The account has Method Direct Link enabled (admin-granted).
- The
method is enabled for that brand's payment settings and its direct toggle is on.
- For mobile / international methods: the method has exactly one active account type (personal or agent). That type is picked automatically.
- For mobile / international methods: a valid
type was sent together with method — the customer is taken straight to that account type's pay page even when several account types are active.
- Bank transfer and QR methods go straight through — no account type is needed.
Passing a method / type that is not active is not silently ignored — the create request is refused (HTTP 400). See the Error responses table above.
Select page vs. errors
- No error — normal method-select page: the create request did not include
method.
- No error — method-select page (type chooser): a valid mobile/international
method was sent but it has several active account types and no type was sent — the customer picks the account type. Send type to skip it.
- Error (HTTP 400): the account has no Method Direct Link access, the method is not active, its direct toggle is off, the account type is not active, or
type was sent for a bank/QR method — see the Error responses table above.
A create request without method always works exactly like before.