Skip to main content
POST

Overview

Creates a withdrawal: a C2C member sends money from their own account to your customer’s account. When the member confirms the payout, the amount plus fees is debited from your merchant wallet. Before creating the order, C2C checks that your merchant wallet can fund it (see Funding check). If a member is available, they’re assigned immediately and the order starts in AwaitingMemberPayout. Otherwise the order is still accepted with status Awaiting and assigned automatically as soon as a member becomes available (see Awaiting withdrawals). See the Withdrawal flow for the full lifecycle. You can give the customer’s receiving account in two ways:
Deposits and withdrawals use the same endpoint. Set orderType to "Withdrawal".

Headers

string
required
mk_live_..., your merchant API key. Authorization: Bearer mk_live_... is also accepted.
string
required
Your unique key for this payout attempt, up to 100 characters. Critical for payouts: retrying with the same key never creates a second payout. See Idempotency.
string
required
application/json

Request body

string
required
Must be "Withdrawal".
number
required
Amount the customer receives, in currency. Must be greater than 0, have at most 4 decimal places and be less than 100,000,000,000,000.Example: 2000
string
required
The type of the customer’s receiving account. C2C assigns a member who can pay out to it: a payout is sent within one provider, so a JazzCash customer is paid by a member with a JazzCash account and an Easypaisa customer by a member with an Easypaisa account. The wallet type is fixed by the order: on the hosted page the customer enters an account of this type and cannot choose another.One of JazzCash, Easypaisa, TillID, BankAccount.JazzCashTillID, JazzCashQR and EasypaisaQR are deposit-only payment methods: a withdrawal on one of them is rejected with 400.
string
The customer’s receiving account: a mobile wallet number such as 03001234567, a Till ID or a bank account number. Up to 50 characters. Shown to the assigned member, who sends the payout to it. Once the order is created it cannot be changed.Optional. Leave it out to have the customer enter their account on the hosted page instead.
C2C doesn’t verify that the account exists or belongs to your customer. Validate it on your side before you submit. A payout sent to a wrong account can’t be reversed by C2C.
string
The name the customer’s account is held in. Up to 200 characters. Shown to the assigned member so they can check it against the name their wallet app shows before sending. Only accepted together with customerAccountNumber; sending it alone is rejected with 400.
string
default:"PKR"
ISO currency code: PKR, INR or BDT. Defaults to PKR.
string
Your own reference for this payout. Up to 200 characters. It is echoed in webhooks, and you can query the order by it.One live order per reference: if a payout that is in progress or completed already uses this merchantOrderRef, the request is rejected with 409. A reference whose earlier order failed can be reused. See merchantOrderRef rules.
string
Your identifier for the customer being paid. Up to 200 characters.
string
Absolute http(s) URL for this order’s webhooks, up to 500 characters. Defaults to the callback URL in Merchant Portal → Settings. It must resolve to a public internet address: loopback, private and link-local addresses are refused at delivery time, and redirects aren’t followed.
integer
default:"3"
0 to 10. If the assigned member doesn’t pay out within the payout window (60 minutes by default), C2C reassigns the withdrawal to another available member, up to this many times. After that, the order moves to ManualReview.
string
Free-form string stored with the order, up to 1000 characters. It isn’t returned in responses or webhooks.
string
Absolute http(s) URL. If the customer has the hosted page open when the payout completes, the page sends them here. See Returning the customer to your site.
string
Absolute http(s) URL. The hosted page sends the customer here when the withdrawal is rejected, cancelled or expires.
integer
default:"4"
Accepted (4 to 8), but it has no effect on a withdrawal. It is only used by the deposit payment page, for the account number and Till ID methods.
string
required
32-character lowercase hex MD5 of the other top-level fields (lowercased keys in ASCII order, key=value joined with &, null and empty values skipped) followed directly by your signing secret. See the Signature Generation Guide.amount, customerAccountNumber, customerAccountName and every other field you send are signed, so the payout can’t be changed in transit.Example: 5db94b5eaf95dba367d124c28cb019f0

Response

object

Error responses

Funding check

A withdrawal is accepted only if your available balance covers this payout’s amount + its fee. From the moment a withdrawal is accepted until it is confirmed or fails, its amount + fee is reserved: it is taken out of availableBalance and reported as reservedBalance by Query wallet balance, so one balance cannot fund two payouts.
The reserve of a withdrawal is released the moment the order finishes: Otherwise the request fails with 422 Insufficient merchant balance: …, and no order is created. When other withdrawals are in progress the message also says how much they reserve. Top up your wallet, or wait for in-progress payouts to finish, then retry. You can reuse the same Idempotency-Key, because rejected requests don’t consume it. Fees come from the fee rules C2C configures for your account. The fee is fixed when the order is accepted; later fee-rule changes apply to new orders only. The amount + fee is debited when the member confirms the payout, and returns to your available balance if the payout fails. Check balances with Query wallet balance.

Awaiting withdrawals

When no eligible member is available, the withdrawal is accepted with status Awaiting (stage Awaiting). It’s assigned automatically as soon as a member becomes available: a member comes online, a member frees capacity, or C2C’s once-a-minute background check finds one. It then continues as AwaitingMemberPayout.
  • While Awaiting, its amount + fee stays reserved against your balance: it counts as in progress for the funding check and for the Pending amount on your dashboard.
  • If no member becomes available within 120 minutes (a platform setting), the order ends CancelledTimeout and you receive an order.failed webhook (reason: No eligible member became available in time). Nothing is debited.

Collecting the account on the hosted page

When you create a withdrawal without customerAccountNumber:
  1. The order is accepted as Awaiting. Its amount + fee is reserved against your balance like any other withdrawal, but no member is assigned yet.
  2. Redirect the customer to paymentPageUrl. The page shows the amount and your name, and asks for the wallet account number and the account holder name. The wallet type is the walletType of the order; the amount cannot be changed.
  3. When the customer submits, C2C stores the account and assigns a member (AwaitingMemberPayout), or keeps the order Awaiting until a member is available (the 120-minute window starts then).
  4. The submitted account is final: it cannot be changed from the page afterwards. Submitting the same details twice has no further effect.
If the customer doesn’t submit their account before expiresAt (15 minutes), the order ends CancelledTimeout, the reservation is released and you receive an order.failed webhook (reason: The customer did not provide their withdrawal account in time). Create a new order to try again.

Payout lifecycle

Treat a withdrawal as paid only when its status is Completed. An order in ManualReview is being handled by C2C operations — for example the member reported that the payout could not be completed normally or that they cannot tell whether it went through. Don’t resubmit the payout with a new Idempotency-Key while it is unresolved, or the customer could be paid twice.

Next steps

Withdrawal flow

End-to-end payout process

Query order status

Track the payout

Wallet balance

Make sure you can fund payouts

Webhooks

Get notified on completion