| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Update Merchant Fees (V2)
Updates the complete fee schedule for an existing V2 merchant application. The request body wraps the merchant profile ID and a fees object that may include any combination of fee categories: fees program override, Amex fees, Visa/MC/Discover fees, authorization and monthly fees, POS fees, standard fees, card brand flags, debit/PIN/EBT fees, gateway product fees, and miscellaneous fees. Only the fee categories included in the request are updated; omitted categories retain their current values.
Endpoint
POST /api/v2/merchant/fees
Authentication
Basic HTTP Authentication required.
Encode username:password in Base64 and pass in the Authorization header:
Authorization: Basic {base64(username:password)}
When to use
Call this endpoint after creating a merchant (POST /api/v2/merchant/create) to configure or adjust the merchant's pricing before final submission. Use GET /api/v2/merchant/fees first to retrieve the current fee structure, make your changes, and POST back the updated values. This endpoint can also be called after submission if fee adjustments are required prior to approval.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (int32) | Yes | Merchant profile ID (1–999999) — the record whose fees are being updated |
| fees | TsysFeesV2FeesProgram | No | Fee configuration object; all sub-fields are optional |
| fees.feesProgram | string (enum) | No | Override the fees program: Traditional, CashDiscount, Surcharge, ServiceFee, DualPricing |
| fees.cashDiscountRate | number (double) | No | Cash discount rate percentage |
| fees.minimumDiscountAmount | number (double) | No | Minimum discount amount in dollars (0–500) |
| fees.minimumDiscountStartDate | string (date-time) | No | Date the minimum discount takes effect |
| fees.minimumDiscountType | string (enum) | No | Daily or Monthly |
| fees.earlyTerminationFeeAmount | number (double) | No | ETF amount in dollars (0–999999) |
| fees.earlyTerminationFeeContractMonths | integer (int32) | No | Contract length in months for ETF (0–60) |
| fees.amex | AmexFees | No | Amex fee rates (interchangePlus, tieredDiscounts, noSurcharge, amexInterchangePlusPlus) |
| fees.visaMasterCardDiscover | VisaMasterCardDiscoverFees | No | Visa/MC/Discover rates |
| fees.authorizationMonthlyAndSpecialProgram | AuthorizationMonthlyAndSpecialProgramFees | No | Authorization, batch, chargeback, statement, PCI, and other fees |
| fees.pos | POSFees | No | POS package and license fees |
| fees.standard | StandardFees | No | Standard fees (dialPay, onlinePortal, nextDayFunding, etc.) |
| fees.cardBrand | CardBrandFees | No | Card brand fee enable flags |
| fees.debitPinAndEBT | DebitPinAndEBTFees | No | PIN debit and EBT fee rates |
| fees.gatewayProducts | GatewayProductsFees | No | Gateway and wireless fee rates |
| fees.miscFees | array of TsysMiscFee | No | Custom miscellaneous fees |
| fees.miscFeesVolume | array of TsysMiscFee | No | Volume-based miscellaneous fees |
Each TsysFee sub-object (used throughout the fee structure):
| Field | Type | Required | Description |
|---|---|---|---|
| perItem | number (double) | Yes | Per-transaction dollar amount |
| percent | number (double) | Yes | Percentage rate |
Each TsysMiscFee entry:
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Name of the miscellaneous fee |
| frequency | string (enum) | Yes | Annual, SemiAnnual, Quarterly, Monthly, OneTime |
| perItem | number (double) | Yes | Per-occurrence dollar amount |
| percent | number (double) | Yes | Percentage rate |
| startDate | string (date-time) | No | Effective start date |
| stopDate | string (date-time) | No | Fee expiration date |
{
"id": 30912,
"fees": {
"feesProgram": "Traditional",
"earlyTerminationFeeAmount": 295.0,
"earlyTerminationFeeContractMonths": 36,
"minimumDiscountAmount": 25.0,
"minimumDiscountType": "Monthly",
"authorizationMonthlyAndSpecialProgram": {
"vsmcdiscAuth": { "perItem": 0.08, "percent": 0.0 },
"chargeback": { "perItem": 25.00, "percent": 0.0 },
"statement": { "perItem": 10.00, "percent": 0.0 },
"pciAnnual": { "perItem": 99.00, "percent": 0.0 },
"pciNonCompliance": { "perItem": 19.95, "percent": 0.0 }
},
"visaMasterCardDiscover": {
"interchangePlus": {
"vsQualCrDiscount": { "perItem": 0.10, "percent": 0.25 },
"mcQualCrDiscount": { "perItem": 0.10, "percent": 0.25 }
}
},
"miscFees": [
{
"name": "Annual Card Brand Fee",
"frequency": "Annual",
"perItem": 79.00,
"percent": 0.0,
"startDate": "2025-01-01T00:00:00Z"
}
]
}
}Response
200 OK
| Field | Type | Description |
|---|---|---|
| data.id | integer | Merchant profile ID that was updated |
| data.fees | object | Updated fee configuration as stored |
| requestId | integer | Echo of the internal request ID |
| success | boolean | true if the fees were updated successfully |
| error | string | Error message if success is false |
| validationErrors | array | Field-level validation errors with field and error properties |
{
"data": {
"id": 30912,
"fees": {
"feesProgram": "Traditional",
"earlyTerminationFeeAmount": 295.0,
"earlyTerminationFeeContractMonths": 36
}
},
"requestId": 55902,
"success": true,
"error": null,
"validationErrors": []
}Error Codes
| Code | When it happens |
|---|---|
| 400 | id is missing or outside the 1–999999 range, or fee values fail validation (e.g., minimumDiscountAmount > 500, earlyTerminationFeeContractMonths > 60) |
| 401 | Invalid or missing Basic Auth credentials |
| 403 | User does not have permission to update this merchant's fees |
| 404 | Merchant profile with the given id not found |
| 500 | Internal server error |
Common Mistakes
- Using HTTP GET instead of POST — this path uses POST for both reads (GET /api/v2/merchant/fees) and writes (POST /api/v2/merchant/fees), distinguished only by method.
- Sending
minimumDiscountAmountgreater than 500 — the schema enforces a maximum of 500. - Sending
earlyTerminationFeeContractMonthsgreater than 60 — the schema enforces a maximum of 60 months. - Expecting partial
TsysFeeobjects to work — eachTsysFeerequires bothperItemandpercenteven if one is 0. - Omitting the
idfield — it is required and the only way to identify which merchant's fees to update.
Related Endpoints
GET /api/v2/merchant/fees— Retrieve the current fee schedule before updatingPOST /api/v2/merchant/create— Create the merchant whose fees are managed herePOST /api/v2/merchant/submit— Submit the complete application including the updated fees
Example
curl -X POST https://hq.staging.netevia.dev/api/v2/merchant/fees \
-H "Authorization: Basic $(echo -n 'username:password' | base64)" \
-H "Content-Type: application/json" \
-d '{
"id": 30912,
"fees": {
"feesProgram": "Traditional",
"earlyTerminationFeeAmount": 295.0,
"earlyTerminationFeeContractMonths": 36,
"authorizationMonthlyAndSpecialProgram": {
"vsmcdiscAuth": { "perItem": 0.08, "percent": 0.0 },
"statement": { "perItem": 10.00, "percent": 0.0 }
}
}
}'