PayoutDelta · Developer API
API reference & playground
Two ways to consume the fee dataset: the versioned static JSON feed served straight from the GitPages export, and the live edge worker that answers request-time corridor audits from the same snapshot. Both are read-only, CORS-open and rate-limited to 60 requests per minute per IP — no key required.
Quick start
https://ahmadbilaldsa.github.io/payout-delta/api/fees.jsoncurl -s "https://ahmadbilaldsa.github.io/payout-delta/api/fees.json" \ | jq '.corridors[] | select(.slug == "usd-to-pkr")'
Response schema — base rates & provider spreads
{
"schemaVersion": 1,
"dataset": "payoutdelta-fees",
"updatedAt": "2026-09-22T12:40:57Z",
"platforms": [
{ "id": "upwork", "name": "Upwork", "feePercent": 10 }
],
"channels": [
{ "id": "swift", "name": "Direct SWIFT Wire", "fixedFeeUSD": 45, "fxSpread": 0.035 },
{ "id": "wise", "name": "Wise", "fixedFeeUSD": 2.99, "fxSpread": 0.0045 },
{ "id": "remitly", "name": "Remitly Economy", "fixedFeeUSD": 1.99, "fxSpread": 0.012 }
],
"corridors": [
{
"slug": "usd-to-pkr",
"from": "USD",
"to": "PKR",
"rate": 277.425913,
"country": "Pakistan",
"countryCode": "PK",
"currencyName": "Pakistani Rupee",
"currencySymbol": "Rs"
}
]
}https://api.payoutdelta.com/v1/rates?pair=USD-PKR&gross=1000&platform=upworkcurl -s "https://api.payoutdelta.com/v1/rates?pair=USD-PKR&gross=1000&platform=upwork" | jq '.verdict, .statutory'
Response schema — quotes, verdict & statutory citations
{
"datasetRevision": "2026-09-22T12:40:57Z",
"corridor": {
"slug": "usd-to-pkr",
"from": "USD",
"to": "PKR",
"rate": 277.425913,
"country": "Pakistan",
"countryCode": "PK",
"currencyName": "Pakistani Rupee",
"currencySymbol": "Rs"
},
"statutory": {
"authority": "SBP Foreign Exchange Manual Chapter 13 & Income Tax Ordinance Section 154A",
"clearingNetwork": "Raast / BEFTN",
"citations": [
"SBP Foreign Exchange Manual Ch. 13 · Section 154A ITO (PC 9111)",
"PRC Purpose Code 9111 · PSEB 0.25% final tax"
]
},
"platform": { "id": "upwork", "name": "Upwork", "feePercent": 10 },
"grossUSD": 1000,
"quotes": [
{
"channelId": "wise",
"channelName": "Wise",
"grossUSD": 1000,
"platformFeeUSD": 100,
"feeDeductedUSD": 2.99,
"effectiveRate": 276.177497,
"localAmount": 247733.76
},
{
"channelId": "swift",
"channelName": "Direct SWIFT Wire",
"grossUSD": 1000,
"platformFeeUSD": 100,
"feeDeductedUSD": 45,
"effectiveRate": 267.716006,
"localAmount": 228897.19
}
],
"verdict": {
"best": { "channelId": "wise", "channelName": "Wise", "localAmount": 247733.76 },
"worst": { "channelId": "swift", "channelName": "Direct SWIFT Wire", "localAmount": 228897.19 },
"savingsLocal": 18836.57,
"savingsUSD": 68.2
}
}Try it live
Endpoints
/v1/rates?corridor={slug}|pair={USD-PKR}&gross={gross}&platform={platform}Resolve the corridor by corridor slug or the shorthand pair code (e.g. pair=USD-PKR).
/v1/corridors/{slug}?gross={gross}&platform={platform}/v1/corridors/v1/dataset/healthContract
- Response shape:
quotessorted by best local amount first, with averdictsummarising the cheapest vs costliest channel. - Every audit carries a
statutorycitation object (authority, clearing network, regulation references). - Errors:
400bad request,404unknown route/corridor,405non-GET,429rate limit. - Every response carries the
datasetRevisionfrom the bundled snapshot.
Developer SLA & policy
60/min
Sliding-window rate limit
Per IP, tracked in a 60-second sliding window on the worker. Excess requests return 429 with a retryAfterSeconds field.
CORS *
Open cross-origin access
Access-Control-Allow-Origin: * — read from any dashboard, spreadsheet sync or CI job without a key or proxy.
0
Telemetry on your queries
The worker only counts requests for the rate limit — no analytics, no logging of query bodies, no personal data stored on any server.
The static feed at https://ahmadbilaldsa.github.io/payout-delta/api/fees.json is regenerated from data/fees.json on every build (npm run prebuild) — versioned, cache-friendly and readable anywhere CORS-free static files are allowed.