{"openapi":"3.1.0","info":{"title":"South Africa PAYE Calculator 2026/27 API","version":"0.1.0","description":"South Africa PAYE Calculator 2026/27 gives an agent payroll-tax arithmetic that matches the SARS table instead of a guess. compute_paye_annual applies the seven SARS brackets for the 2027 tax year (1 March 2026 to 28 February 2027) with a bracket-by-bracket breakdown and the primary, secondary (65 and older) and tertiary (75 and older) rebates. compute_paye_monthly annualises a steady monthly...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://za-paye-calc.connectorbay.com/mcp.\n\nDisclaimer: General information only, not legal, tax, accounting or payment advice. South Africa PAYE Calculator 2026/27 is an independent tool: it is not affiliated with, endorsed by or operated by any government body, central bank, standards body or scheme operator. Rates, thresholds and rules change; check the cited official source and confirm with a qualified professional before you rely on a result.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/za-paye-calc/docs"},"termsOfService":"https://connectorbay.com/za-paye-calc/terms"},"servers":[{"url":"https://za-paye-calc.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/za-paye-calc/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/compute_paye_annual":{"post":{"operationId":"compute_paye_annual","summary":"Annual income tax on taxable income by the SARS 2026/27 table with a bracket-by-bracket breakdown, the primary, secondar","description":"Annual income tax on taxable income by the SARS 2026/27 table with a bracket-by-bracket breakdown, the primary, secondary and tertiary rebates and the effective rate. Use for \"What is the annual income tax on R450,000 of taxable income for a 40 year old in the 2026/27 tax year?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"annual_taxable_income":{"description":"Annual taxable income in rand as a plain decimal string such as 450000.00 (no spaces, commas or R sign).","title":"Annual Taxable Income","type":"string"},"age":{"default":30,"description":"Age in whole years used for the rebates: 65 or older adds the secondary rebate, 75 or older the tertiary (the SARS table wording). Default 30.","maximum":120,"minimum":0,"title":"Age","type":"integer"}},"required":["annual_taxable_income"],"title":"compute_paye_annualArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/compute_paye_monthly":{"post":{"operationId":"compute_paye_monthly","summary":"Monthly PAYE by annualisation: monthly pay times 12, SARS 2026/27 table less the age rebates, divided by 12. Use for \"Wh","description":"Monthly PAYE by annualisation: monthly pay times 12, SARS 2026/27 table less the age rebates, divided by 12. Use for \"What monthly PAYE does the 2026/27 SARS table give on a steady R35,000 a month for a 35 year old?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"monthly_taxable_remuneration":{"description":"Monthly taxable remuneration in rand as a plain decimal string such as 35000.00, the same every month (no bonus, no deductions applied).","title":"Monthly Taxable Remuneration","type":"string"},"age":{"default":30,"description":"Age in whole years used for the rebates: 65 or older adds the secondary rebate, 75 or older the tertiary (the SARS table wording). Default 30.","maximum":120,"minimum":0,"title":"Age","type":"integer"}},"required":["monthly_taxable_remuneration"],"title":"compute_paye_monthlyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/net_to_gross":{"post":{"operationId":"net_to_gross","summary":"Find the smallest monthly taxable remuneration whose pay after PAYE is at least the target, and show the PAYE and net. U","description":"Find the smallest monthly taxable remuneration whose pay after PAYE is at least the target, and show the PAYE and net. Use for \"What monthly gross gives R30,000 after PAYE for a 35 year old in 2026/27?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"target_net_monthly":{"description":"Wanted monthly pay after PAYE in rand as a plain decimal string such as 30000.00.","title":"Target Net Monthly","type":"string"},"age":{"default":30,"description":"Age in whole years used for the rebates: 65 or older adds the secondary rebate, 75 or older the tertiary (the SARS table wording). Default 30.","maximum":120,"minimum":0,"title":"Age","type":"integer"}},"required":["target_net_monthly"],"title":"net_to_grossArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/tax_threshold_check":{"post":{"operationId":"tax_threshold_check","summary":"Return the tax-free threshold for an age (under 65, 65 and older, 75 and older) and, optionally, whether an income is ab","description":"Return the tax-free threshold for an age (under 65, 65 and older, 75 and older) and, optionally, whether an income is above it. Use for \"What is the income tax threshold for a 67 year old in 2026/27 and is R150,000 above it?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"age":{"default":30,"description":"Age in whole years used for the rebates: 65 or older adds the secondary rebate, 75 or older the tertiary (the SARS table wording). Default 30.","maximum":120,"minimum":0,"title":"Age","type":"integer"},"annual_taxable_income":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional annual taxable income in rand; when given, it is compared with the threshold for the age.","title":"Annual Taxable Income"}},"title":"tax_threshold_checkArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/employer_sdl":{"post":{"operationId":"employer_sdl","summary":"Employer Skills Development Levy: liable when more than R500,000 is expected over 12 months, then 1% of salaries paid. U","description":"Employer Skills Development Levy: liable when more than R500,000 is expected over 12 months, then 1% of salaries paid. Use for \"My payroll will be about R620,000 this year: what SDL do I pay on R50,000 of salaries this month?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"expected_annual_leviable_payroll":{"description":"Total salaries expected over the next 12 months in rand (wages, overtime, leave pay, bonuses, fees, commissions, lump sums), as a plain decimal string.","title":"Expected Annual Leviable Payroll","type":"string"},"monthly_leviable_remuneration":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional leviable remuneration paid this month in rand; the 1% amount for the month is returned when liable.","title":"Monthly Leviable Remuneration"}},"required":["expected_annual_leviable_payroll"],"title":"employer_sdlArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/emp201_amount_summary":{"post":{"operationId":"emp201_amount_summary","summary":"Add the month's PAYE, SDL and UIF amounts you supply into one total for an employer payment. Use for \"PAYE is R5,200, SD","description":"Add the month's PAYE, SDL and UIF amounts you supply into one total for an employer payment. Use for \"PAYE is R5,200, SDL R500 and UIF R177.12 this month: what is the total?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"paye_amount":{"description":"PAYE for the month in rand as a plain decimal string.","title":"Paye Amount","type":"string"},"sdl_amount":{"description":"SDL for the month in rand as a plain decimal string (0 if not liable).","title":"Sdl Amount","type":"string"},"uif_amount":{"description":"Total UIF (employee plus employer) for the month in rand as a plain decimal string; supplied by you, not calculated here.","title":"Uif Amount","type":"string"}},"required":["paye_amount","sdl_amount","uif_amount"],"title":"emp201_amount_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/paye_tables":{"post":{"operationId":"paye_tables","summary":"Return the SARS 2026/27 rates of tax, rebates and age thresholds with the exact row text, source URL, retrieval date and","description":"Return the SARS 2026/27 rates of tax, rebates and age thresholds with the exact row text, source URL, retrieval date and verification label. Use for \"What are the SARS 2026/27 income tax brackets, rebates and thresholds and where can I cite them?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"paye_tablesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}