{"openapi":"3.1.0","info":{"title":"Tax Bracket API","version":"1.0.0","description":"Progressive (marginal) tax-bracket maths as an API. You supply the bracket schedule, so it works for any country, year or tax table and never goes stale, and it is entirely currency-agnostic. The tax endpoint takes an income and a schedule of threshold:rate pairs (with an optional standard deduction) and returns the total tax, the after-tax income, the effective and marginal rates, and a per-bracket breakdown showing exactly how much is taxed in each tier. The reverse endpoint solves the inverse problem — the gross income needed to take home a target net amount on the same schedule — by bisection. The brackets endpoint validates and normalizes a schedule into labelled tiers (adding a 0% tier from zero and marking the open-ended top bracket). Everything is computed locally and deterministically, so it is instant and private. It models only the schedule you provide — fold any allowances, credits or surtaxes into the brackets or the deduction yourself — and it is not tax advice. Ideal for payroll and HR tools, salary and offer calculators, fintech and budgeting apps, and any product that shows take-home pay. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This is progressive-tax maths on a schedule you supply; for gross-pay period conversion use a payroll API and for loans and interest use a finance-calculator API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/taxbracket-api","description":"oanor gateway"}],"tags":[{"name":"Tax"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/brackets":{"get":{"operationId":"get_v1_brackets","tags":["Tax"],"summary":"Validate / normalize a schedule","description":"","parameters":[{"name":"brackets","in":"query","required":true,"description":"threshold:rate% pairs","schema":{"type":"string"},"example":"0:10,11000:12,44725:22,95375:24,182100:32,231250:35,578125:37"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Normalized, sorted bracket schedule. 'to: null' is the top (open-ended) bracket. A 0% tier from 0 is added if missing.","count":7,"input":{"brackets":[{"from":0,"rate":10},{"from":11000,"rate":12},{"from":44725,"rate":22},{"from":95375,"rate":24},{"from":182100,"rate":32},{"from":231250,"rate":35},{"from":578125,"rate":37}]},"tiers":[{"to":11000,"from":0,"tier":1,"rate_percent":10},{"to":44725,"from":11000,"tier":2,"rate_percent":12},{"to":95375,"from":44725,"tier":3,"rate_percent":22},{"to":182100,"from":95375,"tier":4,"rate_percent":24},{"to":231250,"from":182100,"tier":5,"rate_percent":32},{"to":578125,"from":231250,"tier":6,"rate_percent":35},{"from":578125,"tier":7,"rate_percent":37}],"top_rate_percent":37},"meta":{"timestamp":"2026-06-03T17:41:56.463Z","request_id":"d414f734-075b-4214-b693-7fdd572dbc28"},"status":"ok","message":"Normalize brackets","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/reverse":{"get":{"operationId":"get_v1_reverse","tags":["Tax"],"summary":"Gross income for a target net","description":"","parameters":[{"name":"net","in":"query","required":true,"description":"Target take-home","schema":{"type":"string"},"example":"43692.5"},{"name":"brackets","in":"query","required":true,"description":"threshold:rate% pairs","schema":{"type":"string"},"example":"0:10,11000:12,44725:22,95375:24,182100:32,231250:35,578125:37"},{"name":"deduction","in":"query","required":false,"description":"Standard deduction","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"tax":6307.5,"note":"Gross income required to take home the target net, found by bisection on the provided schedule.","input":{"brackets":[{"from":0,"rate":10},{"from":11000,"rate":12},{"from":44725,"rate":22},{"from":95375,"rate":24},{"from":182100,"rate":32},{"from":231250,"rate":35},{"from":578125,"rate":37}],"deduction":0,"target_net":43692.5},"required_gross":50000,"after_tax_income":43692.5,"marginal_rate_percent":22,"effective_rate_percent":12.615},"meta":{"timestamp":"2026-06-03T17:41:56.567Z","request_id":"2cb06020-621b-4525-9f8a-e9e880a129e0"},"status":"ok","message":"Gross from net","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/tax":{"get":{"operationId":"get_v1_tax","tags":["Tax"],"summary":"Progressive tax on a schedule","description":"","parameters":[{"name":"income","in":"query","required":true,"description":"Gross income","schema":{"type":"string"},"example":"50000"},{"name":"brackets","in":"query","required":true,"description":"threshold:rate% pairs","schema":{"type":"string"},"example":"0:10,11000:12,44725:22,95375:24,182100:32,231250:35,578125:37"},{"name":"deduction","in":"query","required":false,"description":"Standard deduction","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"tax":6307.5,"note":"Marginal/progressive tax on the bracket schedule provided. Effective rate is tax ÷ gross income.","input":{"income":50000,"brackets":[{"from":0,"rate":10},{"from":11000,"rate":12},{"from":44725,"rate":22},{"from":95375,"rate":24},{"from":182100,"rate":32},{"from":231250,"rate":35},{"from":578125,"rate":37}],"deduction":0,"taxable_income":50000},"breakdown":[{"to":11000,"from":0,"rate_percent":10,"tax_in_bracket":1100,"taxable_in_bracket":11000},{"to":44725,"from":11000,"rate_percent":12,"tax_in_bracket":4047,"taxable_in_bracket":33725},{"to":95375,"from":44725,"rate_percent":22,"tax_in_bracket":1160.5,"taxable_in_bracket":5275}],"after_tax_income":43692.5,"marginal_rate_percent":22,"effective_rate_percent":12.615,"effective_rate_on_taxable_percent":12.615},"meta":{"timestamp":"2026-06-03T17:41:56.670Z","request_id":"6ccc71db-bab8-431a-bbc2-67e4dd30cd71"},"status":"ok","message":"Progressive tax","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"You supply the schedule — works for any country/year. Currency-agnostic. Not tax advice.","service":"taxbracket","endpoints":{"/v1/tax":"Total tax, effective & marginal rate, after-tax income and per-bracket breakdown for an income.","/v1/reverse":"The gross income needed to take home a target net, on the provided brackets.","/v1/brackets":"Validate and normalize a bracket schedule into labelled tiers."},"description":"Progressive tax-bracket maths for any schedule you provide: total tax, effective and marginal rates, breakdown, and reverse (gross from net).","bracket_format":"Comma list of threshold:rate% pairs, e.g. \"0:10,11000:12,44725:22,95375:24\". A standard deduction can be passed separately."},"meta":{"timestamp":"2026-06-03T17:41:56.781Z","request_id":"72e2d083-da90-4027-9c9e-97f7356d442c"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":10035,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1155,"monthly_call_quota":19650,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3145,"monthly_call_quota":246500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6945,"monthly_call_quota":1275000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/taxbracket-api"}