{"openapi":"3.1.0","info":{"title":"Payroll & Salary API","version":"1.0.0","description":"Gross-pay maths as an API — the everyday salary and wage calculations, computed locally and deterministically and entirely currency-agnostic. The convert endpoint turns a pay figure given at any cadence — annual, monthly, bi-weekly, weekly, daily or hourly — into all the others, using configurable hours per week, weeks per year and days per week. The overtime endpoint computes regular, overtime (time-and-a-half by default) and double-time pay from the hours worked, with adjustable thresholds and multipliers, and reports the effective hourly rate. The raise endpoint applies a percentage or fixed raise, or works out the percentage from a new salary. The prorate endpoint pro-rates a salary by a worked fraction, or by days worked over days in the period — for joiners, leavers and part-periods. Everything is gross pay only: it deliberately excludes tax, deductions and benefits, which are jurisdiction-specific, so the maths stays exact and never goes stale. Computed locally, instant and private. Live, nothing stored. 4 endpoints. Ideal for HR and payroll tools, job boards and offer calculators, freelance and contractor rate tools, and budgeting apps. This is gross-pay maths; for loan, interest and investment maths use a finance-calculator API, and for net/take-home pay apply your local tax rules separately.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/payroll-api","description":"oanor gateway"}],"tags":[{"name":"Payroll"},{"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/convert":{"get":{"operationId":"get_v1_convert","tags":["Payroll"],"summary":"Convert pay between periods","description":"","parameters":[{"name":"annual","in":"query","required":false,"description":"Annual pay","schema":{"type":"string"},"example":"52000"},{"name":"monthly","in":"query","required":false,"description":"Or monthly","schema":{"type":"string"}},{"name":"weekly","in":"query","required":false,"description":"Or weekly","schema":{"type":"string"}},{"name":"daily","in":"query","required":false,"description":"Or daily","schema":{"type":"string"}},{"name":"hourly","in":"query","required":false,"description":"Or hourly","schema":{"type":"string"}},{"name":"hours_per_week","in":"query","required":false,"description":"default 40","schema":{"type":"string"},"example":"40"},{"name":"weeks_per_year","in":"query","required":false,"description":"default 52","schema":{"type":"string"},"example":"52"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Gross pay only — excludes tax, deductions and benefits.","daily":200,"annual":52000,"hourly":25,"weekly":1000,"monthly":4333.33,"biweekly":2000,"assumptions":{"days_per_week":5,"hours_per_week":40,"hours_per_year":2080,"weeks_per_year":52}},"meta":{"timestamp":"2026-06-03T17:41:59.747Z","request_id":"35f7ae6d-2646-4a8d-8447-d23608691e67"},"status":"ok","message":"Convert pay periods","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/overtime":{"get":{"operationId":"get_v1_overtime","tags":["Payroll"],"summary":"Overtime / double-time pay","description":"","parameters":[{"name":"hourly","in":"query","required":true,"description":"Base hourly rate","schema":{"type":"string"},"example":"25"},{"name":"hours","in":"query","required":true,"description":"Hours worked","schema":{"type":"string"},"example":"45"},{"name":"threshold","in":"query","required":false,"description":"OT threshold (default 40)","schema":{"type":"string"},"example":"40"},{"name":"multiplier","in":"query","required":false,"description":"OT multiplier (default 1.5)","schema":{"type":"string"},"example":"1.5"},{"name":"double_threshold","in":"query","required":false,"description":"Double-time threshold","schema":{"type":"string"}},{"name":"double_multiplier","in":"query","required":false,"description":"default 2","schema":{"type":"string"},"example":"2"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Gross pay only. Default overtime is time-and-a-half above 40 hours; adjust threshold/multiplier as your rules require.","input":{"hours":45,"hourly":25,"threshold":40,"multiplier":1.5},"gross_pay":1187.5,"regular_pay":1000,"overtime_pay":187.5,"regular_hours":40,"overtime_hours":5,"double_time_pay":0,"effective_hourly":26.39,"double_time_hours":0},"meta":{"timestamp":"2026-06-03T17:41:59.849Z","request_id":"86d57673-827c-4304-84d9-9c6f2e58a4a7"},"status":"ok","message":"Overtime pay","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/prorate":{"get":{"operationId":"get_v1_prorate","tags":["Payroll"],"summary":"Pro-rate a salary","description":"","parameters":[{"name":"amount","in":"query","required":true,"description":"Full-period pay","schema":{"type":"string"},"example":"52000"},{"name":"fraction","in":"query","required":false,"description":"Worked fraction 0-1","schema":{"type":"string"}},{"name":"days_worked","in":"query","required":false,"description":"Days worked","schema":{"type":"string"},"example":"90"},{"name":"days_total","in":"query","required":false,"description":"Days in period","schema":{"type":"string"},"example":"365"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Multiply the full-period pay by the worked fraction (e.g. days worked ÷ days in period).","input":{"amount":52000,"fraction":0.246575},"prorated_amount":12821.92,"remaining_amount":39178.08},"meta":{"timestamp":"2026-06-03T17:41:59.950Z","request_id":"f6d6e83e-d5ba-4b33-9414-fd111a89bd7d"},"status":"ok","message":"Pro-rate a salary","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/raise":{"get":{"operationId":"get_v1_raise","tags":["Payroll"],"summary":"Pay raise calculator","description":"","parameters":[{"name":"current","in":"query","required":true,"description":"Current pay","schema":{"type":"string"},"example":"52000"},{"name":"percent","in":"query","required":false,"description":"Raise %","schema":{"type":"string"},"example":"5"},{"name":"amount","in":"query","required":false,"description":"Or fixed increase","schema":{"type":"string"}},{"name":"new_salary","in":"query","required":false,"description":"Or new pay","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Apply the same to gross pay at any period (annual, monthly, hourly).","input":{"current":52000},"new_salary":54600,"increase_amount":2600,"increase_percent":5},"meta":{"timestamp":"2026-06-03T17:42:00.019Z","request_id":"d2452992-17ee-4b2a-9a61-747558b802a1"},"status":"ok","message":"Raise calculator","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":"Gross pay only — excludes tax, deductions and benefits (these are jurisdiction-specific).","service":"payroll","endpoints":{"/v1/raise":"Apply a percentage or fixed raise, or derive the percent from a new salary.","/v1/convert":"Convert pay between annual, monthly, bi-weekly, weekly, daily and hourly.","/v1/prorate":"Pro-rate a salary by a worked fraction or days worked ÷ days in period.","/v1/overtime":"Compute regular, overtime and double-time pay from hours worked."},"description":"Gross-pay maths: salary/hourly conversion, overtime, raises and pro-rata. Currency-agnostic and tax-free."},"meta":{"timestamp":"2026-06-03T17:42:00.102Z","request_id":"cfd18161-c95f-430d-9bed-6401c3d4467a"},"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":9335,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":1085,"monthly_call_quota":18950,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":3075,"monthly_call_quota":239500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6875,"monthly_call_quota":1240000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/payroll-api"}