Commission
Manage the commission slabs your merchants earn/pay on, per payment method and transaction volume band.
This page was rewritten against the live backend
The previous version documented /api/v1/vendor/commission with fields (aggregatorId, paymentMethod, chargeType, chargeValue, …) borrowed from a different commission system — the aggregator-only cascade config described in Commission Model, reachable at /commission/aggregator/vendor etc. and gated checkRole("aggregator"), not callable by a vendor credential at all. The vendor-callable commission routes are a separate, slab-based model with a different base path and different fields entirely. What follows is read directly from paymentSystem/src/modules/vendors/routes/commission.route.js (mounted at /vendor-commission).
Base Path
/vendor-commission/:vendorId/commission
Note this is not under /vendor/* like every other page in this section — it's its own top-level prefix (app.register(commission.route.js, { prefix: "/vendor-commission" }) in server.js).
List Slabs
GET /vendor-commission/:vendorId/commission
{
"statusCode": "00",
"message": "Commission slabs fetched",
"data": [
{
"id": "slab-uuid",
"vendorId": "v-uuid",
"aggregatorId": "agg-uuid",
"paymentMethod": "DMT",
"provider": "NSDL",
"txnType": "TRANSFER",
"minAmount": 0,
"maxAmount": 1000,
"commissionRate": 5,
"rateType": "FIXED",
"isDefault": true
}
]
}
Create Slab
POST /vendor-commission/:vendorId/commission
Content-Type: application/json
{
"paymentMethod": "DMT",
"provider": "NSDL",
"txnType": "TRANSFER",
"minAmount": 0,
"maxAmount": 1000,
"commissionRate": 5,
"rateType": "FIXED",
"isDefault": true
}
| Field | Required | Notes |
|---|---|---|
paymentMethod | Yes | e.g. DMT, AEPS |
provider | Yes | e.g. NSDL |
txnType | Yes | e.g. TRANSFER, VALIDATION, REGISTRATION |
minAmount, maxAmount | No | The volume band this slab applies to |
commissionRate | No | Amount (for FIXED) or rate (for PERCENTAGE) |
rateType | No | FIXED or PERCENTAGE |
isDefault | No | true to make this the default slab for the paymentMethod+provider+txnType combination — creating a new default automatically unsets any existing one for that combination |
vendorId isn't in the body — it's the :vendorId path param, and its aggregatorId is resolved server-side from the vendor record, not sent by you. Fails with 422 { "statusCode": "05" } if this vendor has no aggregator assigned.
{
"statusCode": "00",
"message": "Commission slab created successfully",
"data": {
"id": "slab-uuid",
"vendorId": "v-uuid",
"aggregatorId": "agg-uuid",
"paymentMethod": "DMT",
"provider": "NSDL",
"txnType": "TRANSFER",
"minAmount": 0,
"maxAmount": 1000,
"commissionRate": 5,
"rateType": "FIXED",
"isDefault": true
}
}
Duplicate slab (same vendor + method + provider + txnType + amount band): 409 { "statusCode": "09", "message": "A slab with this combination already exists — adjust min/max amount or txnType" }.
Update Slab
PUT /vendor-commission/:vendorId/commission/:slabId
Content-Type: application/json
{ "commissionRate": 4, "isDefault": false }
Send only the fields you want to change — anything omitted keeps its current value.
{
"statusCode": "00",
"message": "Commission slab updated successfully",
"data": { "id": "slab-uuid", "commissionRate": 4, "isDefault": false, "...": "remaining fields unchanged" }
}
Delete Slab
DELETE /vendor-commission/:vendorId/commission/:slabId
{ "statusCode": "00", "message": "Commission slab deleted successfully" }