{"openapi":"3.1.0","info":{"title":"Taxzi public SA tax calculator","version":"1.0.0","description":"South African individual income-tax estimates for AI agents and developers. Public calculator routes need no authentication and do not store inputs. Connected statement tools use OAuth 2.1 with PKCE. Figures reuse Taxzi's year tables and are not annualised.","contact":{"email":"david.sampson@superstack.co.za","url":"https://taxzi.co.za/contact"},"license":{"name":"Use is free. Estimates are not tax advice.","url":"https://taxzi.co.za/terms"}},"servers":[{"url":"https://taxzi.co.za"}],"tags":[{"name":"sa-tax","description":"Individual income tax for South Africa"},{"name":"mcp-oauth","description":"OAuth 2.1 for connected statement tools. Public calculators stay open."}],"paths":{"/api/public/tax-estimate":{"post":{"operationId":"estimateSaTax","summary":"Estimate SA individual income tax","description":"Returns taxable income, tax before and after rebates, medical credits, the section 11F RA deduction, the home office deduction, refund or owing, and marginal and effective rates.","tags":["sa-tax"],"responses":{"200":{"description":"Estimate. Includes a disclaimer. Not a SARS assessment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxEstimate"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxEstimateRequest"},"example":{"taxYear":"2026/27","age":35,"annualSalary":245100,"freelanceIncome":0,"otherTaxableIncome":0,"payePaid":30000,"provisionalPaid":0,"raContributions":0,"medicalAidMembers":1,"medicalAidContributions":0,"homeOffice":{"officeM2":12,"homeM2":80,"monthlyRent":9000,"months":12}}}}}},"get":{"operationId":"estimateSaTaxGet","summary":"Estimate SA individual income tax from query parameters","description":"Same result as POST. Use flat query names: annualSalary, freelanceIncome, officeM2, homeM2, monthlyRent, months.","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string","default":"2026/27"}},{"name":"age","in":"query","schema":{"type":"integer","minimum":0,"maximum":120}},{"name":"annualSalary","in":"query","schema":{"type":"number","minimum":0}},{"name":"freelanceIncome","in":"query","schema":{"type":"number","minimum":0}},{"name":"otherTaxableIncome","in":"query","schema":{"type":"number","minimum":0}},{"name":"payePaid","in":"query","schema":{"type":"number","minimum":0}},{"name":"provisionalPaid","in":"query","schema":{"type":"number","minimum":0}},{"name":"raContributions","in":"query","schema":{"type":"number","minimum":0}},{"name":"medicalAidMembers","in":"query","schema":{"type":"integer","minimum":0}},{"name":"medicalAidContributions","in":"query","schema":{"type":"number","minimum":0}},{"name":"medicalAidMonths","in":"query","schema":{"type":"integer","minimum":0,"maximum":12}},{"name":"officeM2","in":"query","schema":{"type":"number","minimum":0}},{"name":"homeM2","in":"query","schema":{"type":"number","exclusiveMinimum":0}},{"name":"monthlyRent","in":"query","schema":{"type":"number","minimum":0}},{"name":"months","in":"query","schema":{"type":"integer","minimum":0,"maximum":12}}],"responses":{"200":{"description":"Estimate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxEstimate"},"example":{"url":"https://taxzi.co.za","statementsCta":{"label":"Get your exact figure from your bank statements","url":"https://taxzi.co.za/?utm_source=public_api&utm_medium=public_api&utm_campaign=tax-estimate&utm_content=exact_figure_from_statements"},"developersUrl":"https://taxzi.co.za/developers","taxYear":"2026/2027","assessmentLabel":"2027 year of assessment (1 Mar 2026 – 28 Feb 2027)","tablesKnown":true,"taxableIncome":245100,"taxBeforeRebates":44118,"rebates":17820,"taxAfterRebates":26298,"medicalCredits":4512,"taxAfterCredits":21786,"raDeduction":0,"homeOfficeDeduction":0,"result":"refund","refund":8214,"owing":0,"marginalRate":18,"effectiveRate":8.89,"assumptions":["Individual taxpayer. Tables: 2027 year of assessment (1 Mar 2026 – 28 Feb 2027).","Section 11F retirement deduction is the lesser of contributions, 27.5% of total income, and R430 000 for 2026/2027.","Medical scheme fees tax credit is the section 6A fixed monthly amount for the number of members, not a percentage of contributions paid.","Home office, when supplied, is the office floor area divided by the home floor area, applied to rent for the months given (section 23(b)). Mortgage interest is not included. A salary-only employee may still be blocked by section 23(m).","Interest exemptions, section 18A donations, travel, and capital gains are not in this request.","PAYE and provisional tax are treated as tax already paid. A refund or amount owing is tax after rebates and medical credits, minus those payments.","Marginal rate is the bracket rate once taxable income reaches the age threshold; below that it is 0. Effective rate is tax after credits divided by total income.","Medical aid months were not supplied. The section 6A credit is for 12 months."],"disclaimer":"Taxzi is an estimate assistance tool, not a registered tax practitioner. You review every line. Nothing files with SARS. This calculator is an estimate for an individual taxpayer, not a SARS assessment, and nothing is filed. Confirm figures on sars.gov.za or with a registered tax practitioner before you rely on them.","income":{"remuneration":245100,"freelance":0,"otherTaxable":0,"total":245100},"deductions":{"retirementAnnuity":{"contributed":0,"allowed":0,"rate":0.275,"cap":430000,"limit":67402.5},"homeOffice":null},"medical":{"members":1,"months":12,"contributionsRecorded":0,"credit":4512},"payments":{"paye":30000,"provisional":0,"total":30000}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}}},"/api/public/ra-saving":{"post":{"operationId":"raTaxSaving","summary":"Tax saved by a retirement annuity contribution","description":"How much individual income tax comes back if the person contributes this many rands to an RA, given annual income. Section 11F, 27.5%, year cap from the Taxzi tables.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RaSavingRequest"},"example":{"contribution":20000,"annualIncome":400000,"age":35,"taxYear":"2026/27"}}}},"responses":{"200":{"description":"Saving","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RaSaving"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"raTaxSavingGet","summary":"RA tax saving from query parameters","tags":["sa-tax"],"parameters":[{"name":"contribution","in":"query","required":true,"schema":{"type":"number","minimum":0}},{"name":"annualIncome","in":"query","required":true,"schema":{"type":"number","minimum":0}},{"name":"age","in":"query","schema":{"type":"integer"}},{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Saving","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RaSaving"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/home-office":{"post":{"operationId":"homeOfficeDeduction","summary":"Home office floor-area deduction","description":"Section 23(b) apportionment of rent. office m² / home m² × monthly rent × months.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeOfficeRequest"},"example":{"officeM2":15,"homeM2":150,"monthlyRent":10000,"months":12}}}},"responses":{"200":{"description":"Deduction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeOffice"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}},"get":{"operationId":"homeOfficeDeductionGet","summary":"Home office deduction from query parameters","tags":["sa-tax"],"parameters":[{"name":"officeM2","in":"query","required":true,"schema":{"type":"number","minimum":0}},{"name":"homeM2","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0}},{"name":"monthlyRent","in":"query","required":true,"schema":{"type":"number","minimum":0}},{"name":"months","in":"query","schema":{"type":"integer","minimum":0,"maximum":12,"default":12}}],"responses":{"200":{"description":"Deduction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeOffice"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/marginal-rate":{"post":{"operationId":"marginalRate","summary":"Marginal rate for a taxable income","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarginalRateRequest"},"example":{"taxableIncome":300000,"age":35,"taxYear":"2026/27"}}}},"responses":{"200":{"description":"Rate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarginalRate"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}},"get":{"operationId":"marginalRateGet","summary":"Marginal rate from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxableIncome","in":"query","required":true,"schema":{"type":"number","minimum":0}},{"name":"age","in":"query","schema":{"type":"integer"}},{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Rate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarginalRate"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/brackets":{"get":{"operationId":"saTaxBrackets","summary":"Published individual brackets, rebates, and caps","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string","default":"2026/27"}}],"responses":{"200":{"description":"Tables","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Brackets"}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/provisional-tax":{"post":{"operationId":"provisionalTax","summary":"IRP6 first and second period payments, with underestimation warnings","description":"IRP6 first and second period payments, with underestimation warnings The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"provisionalTaxGet","summary":"IRP6 first and second period payments, with underestimation warnings from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/cgt":{"post":{"operationId":"capitalGainsTax","summary":"Crypto and investment CGT. Year-table exclusion, 40% inclusion.","description":"Crypto and investment CGT. Year-table exclusion, 40% inclusion. The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"capitalGainsTaxGet","summary":"Crypto and investment CGT. Year-table exclusion, 40% inclusion. from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/two-pot":{"post":{"operationId":"twoPotWithdrawal","summary":"Two-pot savings withdrawal at marginal rates. Source code 3926.","description":"Two-pot savings withdrawal at marginal rates. Source code 3926. The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"twoPotWithdrawalGet","summary":"Two-pot savings withdrawal at marginal rates. Source code 3926. from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/paye-check":{"post":{"operationId":"payslipPayeCheck","summary":"Monthly salary versus PAYE deducted. Flags over or under.","description":"Monthly salary versus PAYE deducted. Flags over or under. The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"payslipPayeCheckGet","summary":"Monthly salary versus PAYE deducted. Flags over or under. from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/medical-credits":{"post":{"operationId":"medicalTaxCredits","summary":"Section 6A credit plus the section 6B additional credit.","description":"Section 6A credit plus the section 6B additional credit. The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"medicalTaxCreditsGet","summary":"Section 6A credit plus the section 6B additional credit. from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/donations":{"post":{"operationId":"section18aDonations","summary":"Section 18A donation, 10% cap, source code 4011.","description":"Section 18A donation, 10% cap, source code 4011. The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"section18aDonationsGet","summary":"Section 18A donation, 10% cap, source code 4011. from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/travel-allowance":{"post":{"operationId":"travelAllowance","summary":"Logbook claim at the SARS rate per kilometre.","description":"Logbook claim at the SARS rate per kilometre. The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"travelAllowanceGet","summary":"Logbook claim at the SARS rate per kilometre. from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/public/ra-optimiser":{"post":{"operationId":"raRefundOptimiser","summary":"Retirement annuity top-up that maximises the refund.","description":"Retirement annuity top-up that maximises the refund. The JSON includes statementsCta, a link to taxzi.co.za with UTM parameters.","tags":["sa-tax"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Calculator result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/TooMany"}}},"get":{"operationId":"raRefundOptimiserGet","summary":"Retirement annuity top-up that maximises the refund. from query parameters","tags":["sa-tax"],"parameters":[{"name":"taxYear","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calculator result"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/.well-known/oauth-protected-resource":{"get":{"operationId":"oauthProtectedResource","summary":"MCP protected-resource metadata (RFC 9728)","tags":["mcp-oauth"],"responses":{"200":{"description":"Resource metadata. resource is /api/mcp/account.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/.well-known/oauth-protected-resource/api/mcp/account":{"get":{"operationId":"oauthProtectedResourceAccount","summary":"Path-form protected-resource metadata for the account MCP server","tags":["mcp-oauth"],"responses":{"200":{"description":"Same resource metadata as the root document.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"operationId":"oauthAuthorizationServer","summary":"OAuth 2.1 authorization-server metadata (RFC 8414)","tags":["mcp-oauth"],"responses":{"200":{"description":"Authorization server metadata. PKCE S256 is required.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/oauth/register":{"post":{"operationId":"oauthRegister","summary":"Dynamic client registration (RFC 7591)","tags":["mcp-oauth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"201":{"description":"Registered client. Public clients receive no secret."},"400":{"description":"invalid_client_metadata"}}}},"/api/oauth/token":{"post":{"operationId":"oauthToken","summary":"Exchange an authorization code or refresh token","description":"Authorization code with PKCE S256, or a rotating refresh token. Access tokens last 900 seconds. A refresh family ends after 90 days. Resource is https://taxzi.co.za/api/mcp/account.","tags":["mcp-oauth"],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Bearer token"},"400":{"description":"invalid_grant or invalid_request"}}}},"/api/oauth/revoke":{"post":{"operationId":"oauthRevoke","summary":"Revoke an access or refresh token (RFC 7009)","tags":["mcp-oauth"],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Revoked, or unknown. The body is empty either way."}}}},"/api/mcp/account":{"post":{"operationId":"mcpAccount","summary":"Authenticated Taxzi MCP server","description":"upload_statement (base64 PDF or CSV, 3MB), list_statements, get_tax_report, and get_filing_pack_summary. initialize without a bearer token is HTTP 401 with WWW-Authenticate and resource_metadata. Figures match the dashboard.","tags":["mcp-oauth"],"responses":{"200":{"description":"JSON-RPC result"},"401":{"description":"Bearer challenge with resource_metadata"}}}},"/api/mcp":{"post":{"operationId":"mcpStreamableHttp","summary":"Taxzi MCP server","description":"Public calculator tools. No Authorization header. Account tools are on /api/mcp/account.","tags":["mcp-oauth"],"responses":{"200":{"description":"JSON-RPC result"},"401":{"description":"Bearer challenge with resource_metadata"}}}}},"components":{"securitySchemes":{"taxziOauth":{"type":"oauth2","description":"Authorization code with PKCE S256. Public calculator routes do not use this.","flows":{"authorizationCode":{"authorizationUrl":"https://taxzi.co.za/oauth/authorize","tokenUrl":"https://taxzi.co.za/api/oauth/token","refreshUrl":"https://taxzi.co.za/api/oauth/token","scopes":{"statements:read":"List this user's statements","statements:write":"Upload a statement using this user's credits","tax:read":"Read this user's statement estimate and filing-pack summary"}}}}},"responses":{"BadRequest":{"description":"Validation or JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooMany":{"description":"In-memory rate limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error","code","message","resolution"],"properties":{"error":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}}}}}},"HomeOfficeRequest":{"type":"object","required":["officeM2","homeM2","monthlyRent"],"properties":{"officeM2":{"type":"number","minimum":0},"homeM2":{"type":"number","exclusiveMinimum":0},"monthlyRent":{"type":"number","minimum":0},"months":{"type":"integer","minimum":0,"maximum":12,"default":12}}},"TaxEstimateRequest":{"type":"object","properties":{"taxYear":{"type":"string","default":"2026/27","description":"2025/2026, 2025/26, 2026/2027, or 2026/27"},"age":{"type":"integer","minimum":0,"maximum":120},"annualSalary":{"type":"number","minimum":0,"description":"Annual remuneration in rands"},"remuneration":{"type":"number","minimum":0},"freelanceIncome":{"type":"number","minimum":0},"otherTaxableIncome":{"type":"number","minimum":0},"payePaid":{"type":"number","minimum":0},"provisionalPaid":{"type":"number","minimum":0},"raContributions":{"type":"number","minimum":0},"medicalAidMembers":{"type":"integer","minimum":0,"maximum":30},"medicalAidContributions":{"type":"number","minimum":0,"description":"Recorded only. Section 6A does not use this rand amount."},"medicalAidMonths":{"type":"integer","minimum":0,"maximum":12},"homeOffice":{"$ref":"#/components/schemas/HomeOfficeRequest"}}},"RaSavingRequest":{"type":"object","required":["contribution","annualIncome"],"properties":{"contribution":{"type":"number","minimum":0},"annualIncome":{"type":"number","minimum":0},"age":{"type":"integer"},"taxYear":{"type":"string"}}},"MarginalRateRequest":{"type":"object","required":["taxableIncome"],"properties":{"taxableIncome":{"type":"number","minimum":0},"age":{"type":"integer"},"taxYear":{"type":"string"}}},"TaxEstimate":{"type":"object","required":["url","taxYear","taxableIncome","taxBeforeRebates","taxAfterRebates","medicalCredits","raDeduction","homeOfficeDeduction","refund","owing","marginalRate","effectiveRate","assumptions","disclaimer"],"properties":{"url":{"type":"string","format":"uri"},"taxYear":{"type":"string"},"taxableIncome":{"type":"number"},"taxBeforeRebates":{"type":"number"},"taxAfterRebates":{"type":"number"},"medicalCredits":{"type":"number"},"taxAfterCredits":{"type":"number"},"raDeduction":{"type":"number"},"homeOfficeDeduction":{"type":"number"},"result":{"type":"string","enum":["refund","owing","zero"]},"refund":{"type":"number"},"owing":{"type":"number"},"marginalRate":{"type":"number","description":"Percent. 18 means 18%."},"effectiveRate":{"type":"number","description":"Percent of total income, after credits."},"assumptions":{"type":"array","items":{"type":"string"}},"disclaimer":{"type":"string"}},"example":{"url":"https://taxzi.co.za","statementsCta":{"label":"Get your exact figure from your bank statements","url":"https://taxzi.co.za/?utm_source=public_api&utm_medium=public_api&utm_campaign=tax-estimate&utm_content=exact_figure_from_statements"},"developersUrl":"https://taxzi.co.za/developers","taxYear":"2026/2027","assessmentLabel":"2027 year of assessment (1 Mar 2026 – 28 Feb 2027)","tablesKnown":true,"taxableIncome":245100,"taxBeforeRebates":44118,"rebates":17820,"taxAfterRebates":26298,"medicalCredits":4512,"taxAfterCredits":21786,"raDeduction":0,"homeOfficeDeduction":0,"result":"refund","refund":8214,"owing":0,"marginalRate":18,"effectiveRate":8.89,"assumptions":["Individual taxpayer. Tables: 2027 year of assessment (1 Mar 2026 – 28 Feb 2027).","Section 11F retirement deduction is the lesser of contributions, 27.5% of total income, and R430 000 for 2026/2027.","Medical scheme fees tax credit is the section 6A fixed monthly amount for the number of members, not a percentage of contributions paid.","Home office, when supplied, is the office floor area divided by the home floor area, applied to rent for the months given (section 23(b)). Mortgage interest is not included. A salary-only employee may still be blocked by section 23(m).","Interest exemptions, section 18A donations, travel, and capital gains are not in this request.","PAYE and provisional tax are treated as tax already paid. A refund or amount owing is tax after rebates and medical credits, minus those payments.","Marginal rate is the bracket rate once taxable income reaches the age threshold; below that it is 0. Effective rate is tax after credits divided by total income.","Medical aid months were not supplied. The section 6A credit is for 12 months."],"disclaimer":"Taxzi is an estimate assistance tool, not a registered tax practitioner. You review every line. Nothing files with SARS. This calculator is an estimate for an individual taxpayer, not a SARS assessment, and nothing is filed. Confirm figures on sars.gov.za or with a registered tax practitioner before you rely on them.","income":{"remuneration":245100,"freelance":0,"otherTaxable":0,"total":245100},"deductions":{"retirementAnnuity":{"contributed":0,"allowed":0,"rate":0.275,"cap":430000,"limit":67402.5},"homeOffice":null},"medical":{"members":1,"months":12,"contributionsRecorded":0,"credit":4512},"payments":{"paye":30000,"provisional":0,"total":30000}}},"RaSaving":{"type":"object","additionalProperties":true},"HomeOffice":{"type":"object","additionalProperties":true},"MarginalRate":{"type":"object","additionalProperties":true},"Brackets":{"type":"object","additionalProperties":true}}}}