Free · no account

Tax calculator for developers and AI agents

ChatGPT, Claude, Grok, and Perplexity can estimate South African individual income tax here. The sums use the same tables as the website. Nothing is stored.

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.

When to call it

Use this when someone needs a rand estimate of South African individual income tax: salary, freelance income, PAYE already paid, a retirement annuity contribution, medical aid members, or a home office measured in square metres. Do not use it for company tax, trusts, VAT, or to file a return.

Uploading a bank statement and anything saved against an account stays behind login. Do not send an ID number, a statement, or a password to these endpoints.

Estimate

POST /api/public/tax-estimate or the same path with GET query parameters. Default year is 2026/27. CORS is open. There is a simple in-memory limit of 60 requests a minute per client, and inputs are not written to a log or a database.

curl -s https://taxzi.co.za/api/public/tax-estimate \
  -H 'content-type: application/json' \
  -d '{  "taxYear": "2026/27",  "age": 35,  "annualSalary": 245100,  "freelanceIncome": 0,  "payePaid": 30000,  "raContributions": 0,  "medicalAidMembers": 1,  "homeOffice": { "officeM2": 12, "homeM2": 80, "monthlyRent": 9000, "months": 12 }}'

The JSON comes back with taxable income, tax before and after rebates, medical credits, the section 11F deduction, the home office deduction, a refund or an amount owing, the marginal and effective rates, assumptions, a disclaimer, and a link to taxzi.co.za.

Shorter questions

  • POST /api/public/ra-saving — how much tax comes back on a contribution. Body: contribution, annualIncome, optional age and taxYear. The cap is 27.5% of income, or the year table (R430,000 for 2026/2027, R350,000 for 2025/2026).
  • POST /api/public/home-office — officeM2, homeM2, monthlyRent, months.
  • POST /api/public/marginal-rate — taxableIncome.
  • GET /api/public/brackets — the brackets, rebates, and caps.
  • POST /api/public/provisional-tax — IRP6 first and second payments, with the 20% underestimation warning.
  • POST /api/public/cgt — crypto or investment gain. R50,000 exclusion for 2026/27, then 40%.
  • POST /api/public/two-pot — savings withdrawal at marginal rates (3926).
  • POST /api/public/paye-check — monthly salary versus PAYE deducted.
  • POST /api/public/medical-credits — section 6A and the additional credit.
  • POST /api/public/donations — section 18A, 10% cap, code 4011.
  • POST /api/public/travel-allowance — logbook at the SARS rate per kilometre.
  • POST /api/public/ra-optimiser — contribution that maximises the refund, before 28 February.

MCP

Public calculators are Streamable HTTP at https://taxzi.co.za/api/mcp. Tools include calculate_sa_tax, provisional_tax, crypto_cgt, two_pot_withdrawal, payslip_paye_check, medical_tax_credits, section_18a_donations, travel_allowance, ra_refund_optimiser, ra_tax_saving, home_office_deduction, and sa_tax_brackets. No API key. Every calculator result links back to a statement review. Account tools live at https://taxzi.co.za/api/mcp/account. The server card is at /api/mcp/server-card.

curl -s https://taxzi.co.za/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Connect an account

ChatGPT and Claude connect at https://taxzi.co.za/api/mcp/account. That endpoint returns 401 and WWW-Authenticate on initialize, which is what starts “Connect Taxzi”. Resource metadata is at /.well-known/oauth-protected-resource and /.well-known/oauth-protected-resource/api/mcp/account. The server speaks OAuth 2.1 with PKCE (S256) and dynamic client registration. Public calculator calls on /api/mcp stay unauthenticated. upload_statement takes a base64 PDF or CSV up to 3MB so the JSON body stays under Vercel's 4.5MB limit. get_tax_report and get_filing_pack_summary use the same figures as the dashboard.

A new statement spends one analysis credit, the same rule as the website. Uploading the same period again is free. get_tax_report uses the amounts on that user's statements and does not annualise them. The consent screen includes a POPIA note: Taxzi is the responsible party, the assistant is separate, and only the listed data is shared.

Discovery

Questions about the product: david.sampson@superstack.co.za.