{"openapi":"3.1.0","info":{"title":"zaref — SA reference data","version":"0.3.1","description":"Independent data service. Not affiliated with, or endorsed by, any South African government entity. Every value carries the official source URL and its effective date; verify against the source for legal or financial use."},"servers":[{"url":"https://zaref.dev"}],"paths":{"/catalog":{"get":{"summary":"Catalog of all series with freshness metadata","security":[],"responses":{"200":{"description":"OK"}}}},"/v1/all":{"get":{"summary":"Snapshot of every series","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.025 USDC on Base)"}}}},"/v1/fuel-prices":{"get":{"summary":"Fuel prices","description":"Current SA retail/wholesale fuel prices: petrol 93/95 (inland & coastal), diesel 50ppm, illuminating paraffin. Rand per litre.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/fuel-prices/history":{"get":{"summary":"Fuel prices (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/repo-prime":{"get":{"summary":"Repo & prime rate","description":"SARB repo rate and prime lending rate, with last MPC change date.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/repo-prime/history":{"get":{"summary":"Repo & prime rate (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/cpi":{"get":{"summary":"CPI (headline, YoY)","description":"Latest Stats SA headline consumer inflation, year-on-year %, with reference month.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/cpi/history":{"get":{"summary":"CPI (headline, YoY) (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/income-tax":{"get":{"summary":"Income tax tables","description":"Personal income tax brackets, rebates and thresholds for the current SA tax year.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/income-tax/history":{"get":{"summary":"Income tax tables (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/vat":{"get":{"summary":"VAT rate","description":"VAT rate currently in force in South Africa.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/vat/history":{"get":{"summary":"VAT rate (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/uif-oid":{"get":{"summary":"UIF & OID limits","description":"UIF contribution remuneration ceiling and OID (COIDA) earnings threshold.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/uif-oid/history":{"get":{"summary":"UIF & OID limits (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/minimum-wage":{"get":{"summary":"National minimum wage","description":"National minimum wage per hour, incl. special categories, with effective date.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/minimum-wage/history":{"get":{"summary":"National minimum wage (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/public-holidays":{"get":{"summary":"Public holidays","description":"Official SA public holidays for the current calendar year, incl. proclaimed one-offs and Sunday observances.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"security":[],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"404":{"description":"Unknown series"}}}},"/v1/public-holidays/history":{"get":{"summary":"Public holidays (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/school-terms":{"get":{"summary":"School terms","description":"DBE public school term dates.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/school-terms/history":{"get":{"summary":"School terms (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/sassa-grants":{"get":{"summary":"SASSA grant amounts","description":"All SASSA social grant amounts incl. SRD, with effective date.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/sassa-grants/history":{"get":{"summary":"SASSA grant amounts (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/travel-rates":{"get":{"summary":"SARS travel rates","description":"SARS prescribed per-km reimbursement rate and subsistence allowances for the current tax year.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/travel-rates/history":{"get":{"summary":"SARS travel rates (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/tax-rates-other":{"get":{"summary":"Other national tax rates","description":"Corporate tax, dividends WHT, CGT inclusion, transfer duty brackets, retirement caps, medical tax credits, interest exemptions, estate/donations tax.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/tax-rates-other/history":{"get":{"summary":"Other national tax rates (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/unemployment":{"get":{"summary":"Unemployment rate","description":"Latest Stats SA QLFS official and expanded unemployment rates, with reference quarter.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/unemployment/history":{"get":{"summary":"Unemployment rate (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/gdp":{"get":{"summary":"GDP growth","description":"Latest Stats SA GDP growth (QoQ and YoY), with reference quarter.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/gdp/history":{"get":{"summary":"GDP growth (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/ppi":{"get":{"summary":"PPI (final manufactured goods)","description":"Latest Stats SA producer inflation YoY, with reference month.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/ppi/history":{"get":{"summary":"PPI (final manufactured goods) (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/toll-fees":{"get":{"summary":"Toll fees","description":"Mainline toll plaza tariffs (vehicle classes 1-4) for the major national routes, current adjustment.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/toll-fees/history":{"get":{"summary":"Toll fees (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/electricity-tariffs":{"get":{"summary":"Electricity tariffs","description":"NERSA-approved Eskom tariff increases and key residential rates for the current year.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/electricity-tariffs/history":{"get":{"summary":"Electricity tariffs (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/municipal-tariffs":{"get":{"summary":"Metro municipal tariffs","description":"Residential electricity/water/refuse/rates headline tariffs for the 5 big metros, current municipal year.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/municipal-tariffs/history":{"get":{"summary":"Metro municipal tariffs (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/learnership-allowances":{"get":{"summary":"Learnership allowances","description":"Minimum weekly learnership allowances per NQF level, per the current NMW gazette.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/learnership-allowances/history":{"get":{"summary":"Learnership allowances (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/sectoral-wages":{"get":{"summary":"Sectoral minimum wages","description":"Minimum wages for sectors with their own determinations (contract cleaning, private security, etc.) beside the NMW.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/sectoral-wages/history":{"get":{"summary":"Sectoral minimum wages (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/sars-interest-rates":{"get":{"summary":"SARS & prescribed interest rates","description":"Official rate of interest (fringe benefits, s7C loans), SARS interest on outstanding taxes and refunds, and the prescribed rate of interest for legal and judgment debts.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/sars-interest-rates/history":{"get":{"summary":"SARS & prescribed interest rates (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/retirement-limits":{"get":{"summary":"Retirement & TFSA limits","description":"Retirement contribution deduction cap, tax-free savings limits, retirement and withdrawal lump-sum tax tables, living-annuity thresholds.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/retirement-limits/history":{"get":{"summary":"Retirement & TFSA limits (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/nca-max-rates":{"get":{"summary":"NCA maximum interest rates","description":"Maximum lawful interest rates per credit type under NCA Regulation 42 Table A, computed at the current repo rate, plus the in duplum rule and service fee cap.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/nca-max-rates/history":{"get":{"summary":"NCA maximum interest rates (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/bcea-thresholds":{"get":{"summary":"BCEA earnings threshold","description":"The BCEA earnings threshold, which working-time protections fall away above it, the earnings definition and related LRA/EEA effects.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/bcea-thresholds/history":{"get":{"summary":"BCEA earnings threshold (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/tax-calendar":{"get":{"summary":"Tax calendar","description":"SARS filing-season windows, provisional tax deadlines, employer reconciliation windows and recurring monthly deadlines.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/tax-calendar/history":{"get":{"summary":"Tax calendar (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/exchange-control":{"get":{"summary":"Exchange control allowances","description":"Single discretionary allowance (R2m from April 2026), foreign investment allowance, minors' travel and cash export limits, with the TCS PIN rules.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/exchange-control/history":{"get":{"summary":"Exchange control allowances (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/deeds-fees":{"get":{"summary":"Deeds Office fees","description":"Deeds Office transfer and bond registration fee tiers, lodgement and ancillary fees, per the current gazetted schedule.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/deeds-fees/history":{"get":{"summary":"Deeds Office fees (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/fuel-levies":{"get":{"summary":"Fuel levies","description":"General fuel levy, RAF levy and carbon fuel levy per litre for petrol and diesel, plus the carbon tax rate, including temporary relief episodes.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/fuel-levies/history":{"get":{"summary":"Fuel levies (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/zaronia":{"get":{"summary":"ZARONIA benchmark rate","description":"SARB's ZARONIA risk-free overnight benchmark, the designated JIBAR successor (JIBAR ceases 2026-12-31), with the transition timeline and daily-rate history for compounded interest calculations.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/zaronia/history":{"get":{"summary":"ZARONIA benchmark rate (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/wear-and-tear-periods":{"get":{"summary":"SARS wear-and-tear write-off periods","description":"SARS BGR7 schedule of straight-line depreciation write-off periods (in years) for over 140 asset classes, plus the R7,000 small-item write-off threshold.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/wear-and-tear-periods/history":{"get":{"summary":"SARS wear-and-tear write-off periods (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/fx-rates":{"get":{"summary":"ZAR exchange rates","description":"SARB indicative daily ZAR exchange rates against USD, GBP, EUR and JPY, plus the nominal effective exchange rate (trade-weighted) index.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/fx-rates/history":{"get":{"summary":"ZAR exchange rates (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/bond-yields":{"get":{"summary":"SA benchmark bond yields","description":"SARB closing yields on the R2030 and R209 South African government benchmark bonds, key reference points for the domestic yield curve.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/bond-yields/history":{"get":{"summary":"SA benchmark bond yields (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/v1/sovereign-credit-rating":{"get":{"summary":"SA sovereign credit rating","description":"South Africa's current credit rating and outlook from Moody's, S&P Global and Fitch, with each agency's most recent rating action date.","parameters":[{"name":"as_at","in":"query","required":false,"description":"Point-in-time answer: values in force on this date (YYYY-MM-DD). Errors if the date precedes verified coverage.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid parameter"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"404":{"description":"Unknown series"}}}},"/v1/sovereign-credit-rating/history":{"get":{"summary":"SA sovereign credit rating (history)","description":"Dated history points for this series.","responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"},"404":{"description":"No history yet"}}}},"/calc/income-tax":{"get":{"summary":"Calculator: income-tax","description":"SA personal income tax for the current tax year: annual and monthly tax, effective rate, age rebates applied. Example: /calc/income-tax?annual=750000&age=40","parameters":[{"name":"annual","in":"query","required":true,"description":"number, required: annual taxable income in ZAR","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/net-salary":{"get":{"summary":"Calculator: net-salary","description":"Net take-home from a gross monthly salary: PAYE plus employee UIF at the current tables. Example: /calc/net-salary?monthly=50000&age=35","parameters":[{"name":"monthly","in":"query","required":true,"description":"number, required: gross monthly salary in ZAR","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/transfer-duty":{"get":{"summary":"Calculator: transfer-duty","description":"Property transfer duty from the current SARS brackets. Example: /calc/transfer-duty?price=2500000","parameters":[{"name":"price","in":"query","required":true,"description":"number, required: property price in ZAR","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/fuel-cost":{"get":{"summary":"Calculator: fuel-cost","description":"Fuel cost for a trip at current official SA fuel prices. Example: /calc/fuel-cost?km=568&l_per_100km=7.5&fuel=petrol_95&region=inland","parameters":[{"name":"km","in":"query","required":true,"description":"number, required","schema":{"type":"number"}},{"name":"l_per_100km","in":"query","required":false,"description":"number, default 7.5","schema":{"type":"number"}},{"name":"fuel","in":"query","required":false,"description":"petrol_95 | petrol_93 | diesel_50ppm | diesel_500ppm","schema":{"type":"string","enum":["petrol_95","petrol_93","diesel_50ppm","diesel_500ppm"]}},{"name":"region","in":"query","required":false,"description":"inland | coastal","schema":{"type":"string","enum":["inland","coastal"]}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/toll-route":{"get":{"summary":"Calculator: toll-route","description":"Total mainline toll cost for a full run of a national route at current gazetted tariffs. Example: /calc/toll-route?route=N3&vehicle_class=1","parameters":[{"name":"route","in":"query","required":false,"description":"N1 | N2 | N3 | N4, default N3","schema":{"type":"string","enum":["N1","N2","N3","N4"]}},{"name":"vehicle_class","in":"query","required":false,"description":"number, integer 1-4, default 1","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/vat":{"get":{"summary":"Calculator: vat","description":"Add or strip VAT at the current SA rate (direction=add | remove | strip; unrecognised values are rejected). Free. Example: /calc/vat?amount=1000&direction=add","parameters":[{"name":"amount","in":"query","required":true,"description":"number, required","schema":{"type":"number"}},{"name":"direction","in":"query","required":false,"description":"add (excl->incl, default) | remove | strip (both incl->excl)","schema":{"type":"string","enum":["add","remove","strip"]}}],"security":[],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"}}}},"/calc/cgt":{"get":{"summary":"Calculator: cgt","description":"Capital gains tax for individuals (marginal method), companies and trusts. Example: /calc/cgt?gain=500000&type=individual&taxable_income=800000","parameters":[{"name":"gain","in":"query","required":true,"description":"number, required: capital gain in ZAR","schema":{"type":"number"}},{"name":"type","in":"query","required":false,"description":"individual (default) | company | trust","schema":{"type":"string","enum":["individual","company","trust"]}},{"name":"taxable_income","in":"query","required":false,"description":"number, individual only: other taxable income","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/estate-duty":{"get":{"summary":"Calculator: estate-duty","description":"Estate duty after the section 4A abatement, tiered at R30m. Example: /calc/estate-duty?estate=10000000","parameters":[{"name":"estate","in":"query","required":true,"description":"number, required: dutiable estate value in ZAR","schema":{"type":"number"}},{"name":"abatement_used_zar","in":"query","required":false,"description":"number, default 0: portion of the R3.5m abatement already used","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/learnership":{"get":{"summary":"Calculator: learnership","description":"Minimum weekly learnership allowance by NQF level and credits. Example: /calc/learnership?nqf=4&credits=200","parameters":[{"name":"nqf","in":"query","required":false,"description":"number 1-8, default 1","schema":{"type":"number"}},{"name":"credits","in":"query","required":false,"description":"number, credits already earned, default 0","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/lump-sum-tax":{"get":{"summary":"Calculator: lump-sum-tax","description":"Tax on a retirement fund lump sum or withdrawal using the cumulative SARS method (prior lump sums aggregate). Example: /calc/lump-sum-tax?amount=1200000&type=retirement","parameters":[{"name":"amount","in":"query","required":true,"description":"number, required: lump sum in ZAR","schema":{"type":"number"}},{"name":"type","in":"query","required":false,"description":"retirement (default) | severance | withdrawal","schema":{"type":"string","enum":["retirement","severance","withdrawal"]}},{"name":"previous_lump_sums","in":"query","required":false,"description":"number, default 0: aggregate of all prior lump sums taken since 2007-2011","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/nca-max-rate":{"get":{"summary":"Calculator: nca-max-rate","description":"Maximum lawful interest rate for a credit agreement under NCA Regulation 42 Table A, at the current or a given repo rate. Example: /calc/nca-max-rate?type=unsecured","parameters":[{"name":"type","in":"query","required":false,"description":"mortgage | credit_facility | unsecured | developmental | short_term | incidental | other, default unsecured","schema":{"type":"string","enum":["mortgage","credit_facility","unsecured","developmental","short_term","incidental","other"]}},{"name":"repo","in":"query","required":false,"description":"number, optional: repo rate % at the date the credit was granted (defaults to the current repo)","schema":{"type":"number"}},{"name":"subsequent_loan","in":"query","required":false,"description":"boolean: short_term only, true for a subsequent loan in the same calendar year","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/property-costs":{"get":{"summary":"Calculator: property-costs","description":"Total statutory costs of buying a property: transfer duty plus Deeds Office transfer, bond and lodgement fees. Example: /calc/property-costs?price=2500000&bond=2000000","parameters":[{"name":"price","in":"query","required":true,"description":"number, required: property price in ZAR","schema":{"type":"number"}},{"name":"bond","in":"query","required":false,"description":"number, default 0: bond amount registered","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/two-pot-withdrawal":{"get":{"summary":"Calculator: two-pot-withdrawal","description":"Tax on a two-pot retirement savings-component withdrawal at the member's marginal rate. Example: /calc/two-pot-withdrawal?amount=50000&annual_income=600000","parameters":[{"name":"amount","in":"query","required":true,"description":"number, required: savings-component withdrawal in ZAR","schema":{"type":"number"}},{"name":"annual_income","in":"query","required":false,"description":"number, default 0: other annual taxable income","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/travel-allowance":{"get":{"summary":"Calculator: travel-allowance","description":"PAYE inclusion and monthly tax impact of a fixed travel allowance under the 80/20 rule. Example: /calc/travel-allowance?monthly_allowance=8000&annual_income=720000","parameters":[{"name":"monthly_allowance","in":"query","required":true,"description":"number, required: fixed monthly travel allowance in ZAR","schema":{"type":"number"}},{"name":"business_use_80_percent","in":"query","required":false,"description":"true if at least 80% of use is business (20% inclusion instead of 80%)","schema":{"type":"boolean"}},{"name":"annual_income","in":"query","required":false,"description":"number, optional: annual taxable income for the PAYE impact","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/company-car":{"get":{"summary":"Calculator: company-car","description":"Company car fringe benefit: monthly taxable value (3.5%/3.25%) and PAYE impact. Example: /calc/company-car?vehicle_value=450000&maintenance_plan=true&annual_income=720000","parameters":[{"name":"vehicle_value","in":"query","required":true,"description":"number, required: determined value (cash cost incl VAT) in ZAR","schema":{"type":"number"}},{"name":"maintenance_plan","in":"query","required":false,"description":"true if the vehicle had a maintenance plan when acquired (3.25% instead of 3.5%)","schema":{"type":"boolean"}},{"name":"business_use_80_percent","in":"query","required":false,"description":"true if at least 80% business use (20% PAYE inclusion)","schema":{"type":"boolean"}},{"name":"annual_income","in":"query","required":false,"description":"number, optional: annual taxable income for the PAYE impact","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/bond-repayment":{"get":{"summary":"Calculator: bond-repayment","description":"Monthly bond repayment and total interest, at the live prime rate by default. Example: /calc/bond-repayment?amount=1500000&years=20","parameters":[{"name":"amount","in":"query","required":true,"description":"number, required: purchase/loan amount in ZAR","schema":{"type":"number"}},{"name":"years","in":"query","required":false,"description":"number, default 20","schema":{"type":"number"}},{"name":"rate","in":"query","required":false,"description":"number, optional: annual interest %, defaults to the current prime rate","schema":{"type":"number"}},{"name":"deposit","in":"query","required":false,"description":"number, default 0","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/zaronia-interest":{"get":{"summary":"Calculator: zaronia-interest","description":"Compound-in-arrears interest on a principal over a date range, using zaref's accumulating daily ZARONIA history (ACT/365). Coverage limited to dates zaref has tracked. Example: /calc/zaronia-interest?principal=1000000&start=2026-07-10&end=2026-07-14","parameters":[{"name":"principal","in":"query","required":true,"description":"number, required: principal amount in ZAR","schema":{"type":"number"}},{"name":"start","in":"query","required":true,"description":"date YYYY-MM-DD, required","schema":{"type":"string"}},{"name":"end","in":"query","required":true,"description":"date YYYY-MM-DD, required (exclusive)","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/uif":{"get":{"summary":"Calculator: uif","description":"Monthly UIF contribution (employee 1% + employer 1%) at the current earnings ceiling. Example: /calc/uif?monthly_salary=25000","parameters":[{"name":"monthly_salary","in":"query","required":true,"description":"number, required: gross monthly salary in ZAR","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/donations-tax":{"get":{"summary":"Calculator: donations-tax","description":"Donations tax owed on a donation, after the annual natural-person exemption. Example: /calc/donations-tax?amount=500000","parameters":[{"name":"amount","in":"query","required":true,"description":"number, required: donation amount in ZAR","schema":{"type":"number"}},{"name":"prior_donations_this_year","in":"query","required":false,"description":"number, default 0: other donations already made this calendar year","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/local-interest":{"get":{"summary":"Calculator: local-interest","description":"Taxable local interest after the age-based annual exemption. Example: /calc/local-interest?amount=40000&age=40","parameters":[{"name":"amount","in":"query","required":true,"description":"number, required: local interest received in ZAR","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/medical-tax-credit":{"get":{"summary":"Calculator: medical-tax-credit","description":"Medical scheme fees tax credit plus the additional medical expenses tax credit from qualifying out-of-pocket costs. Example: /calc/medical-tax-credit?members=1&dependants=2&out_of_pocket_annual=15000&taxable_income=500000","parameters":[{"name":"members","in":"query","required":false,"description":"number, default 1: taxpayer + main member count","schema":{"type":"number"}},{"name":"dependants","in":"query","required":false,"description":"number, default 0: additional dependants beyond the first two members","schema":{"type":"number"}},{"name":"out_of_pocket_annual","in":"query","required":false,"description":"number, default 0: qualifying medical expenses not covered by a scheme","schema":{"type":"number"}},{"name":"taxable_income","in":"query","required":false,"description":"number, default 0: for the AMTC threshold","schema":{"type":"number"}},{"name":"has_65_plus_or_disability","in":"query","required":false,"description":"boolean, default false","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/provisional-tax":{"get":{"summary":"Calculator: provisional-tax","description":"Estimated first and second provisional tax payments (50/50 split) net of employees' tax already withheld, with the current filing deadlines. Example: /calc/provisional-tax?annual_taxable_income=900000&employees_tax_paid=180000","parameters":[{"name":"annual_taxable_income","in":"query","required":true,"description":"number, required","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}},{"name":"employees_tax_paid","in":"query","required":false,"description":"number, default 0: PAYE already withheld this year","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/net-to-gross":{"get":{"summary":"Calculator: net-to-gross","description":"Gross monthly salary required to net a target take-home amount, at the current tax tables. Example: /calc/net-to-gross?net_monthly=40000&age=35","parameters":[{"name":"net_monthly","in":"query","required":true,"description":"number, required: target take-home pay in ZAR","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/home-office-expense":{"get":{"summary":"Calculator: home-office-expense","description":"Deductible home office expense by area apportionment (s23(b)/(m)). Example: /calc/home-office-expense?office_area_m2=12&home_area_m2=180&annual_home_costs=240000","parameters":[{"name":"office_area_m2","in":"query","required":true,"description":"number, required","schema":{"type":"number"}},{"name":"home_area_m2","in":"query","required":true,"description":"number, required","schema":{"type":"number"}},{"name":"annual_home_costs","in":"query","required":true,"description":"number, required: total annual home running costs in ZAR (rent/bond interest, rates, utilities, cleaning)","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/sbc-tax":{"get":{"summary":"Calculator: sbc-tax","description":"Small Business Corporation income tax at the progressive SBC rates (eligibility conditions apply). Example: /calc/sbc-tax?annual_taxable_income=600000","parameters":[{"name":"annual_taxable_income","in":"query","required":true,"description":"number, required","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/wear-and-tear":{"get":{"summary":"Calculator: wear-and-tear","description":"Annual and monthly straight-line wear-and-tear allowance for an asset, using the SARS BGR7 write-off period schedule. Example: /calc/wear-and-tear?asset=Passenger%20cars&cost=350000","parameters":[{"name":"asset","in":"query","required":true,"description":"string, required: asset name, e.g. 'Passenger cars', 'Computers - personal'","schema":{"type":"string"}},{"name":"cost","in":"query","required":true,"description":"number, required: acquisition cost in ZAR","schema":{"type":"number"}},{"name":"years","in":"query","required":false,"description":"number, optional: override write-off period for assets not in the SARS schedule","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/crypto-tax":{"get":{"summary":"Calculator: crypto-tax","description":"Estimated SA tax on crypto asset gains: revenue-nature profits taxed at the marginal rate, capital-nature gains via CGT with the annual exclusion and 40% inclusion. Handles staking/mining/airdrop receipts and FIFO batch matching of a raw buy/sell transaction list. Example: /calc/crypto-tax?capital_gain=150000&revenue_gain=50000&other_taxable_income=600000&age=35","parameters":[{"name":"capital_gain","in":"query","required":false,"description":"number, default 0: net crypto gains of a capital nature (long-term holdings) in ZAR","schema":{"type":"number"}},{"name":"revenue_gain","in":"query","required":false,"description":"number, default 0: net crypto profits of a revenue nature (frequent trading) in ZAR","schema":{"type":"number"}},{"name":"staking_income","in":"query","required":false,"description":"number, default 0: ZAR market value of staking rewards at receipt","schema":{"type":"number"}},{"name":"mining_income","in":"query","required":false,"description":"number, default 0: ZAR market value of mined coins at receipt","schema":{"type":"number"}},{"name":"airdrop_income","in":"query","required":false,"description":"number, default 0: ZAR market value of airdropped coins at receipt","schema":{"type":"number"}},{"name":"other_taxable_income","in":"query","required":false,"description":"number, default 0: other annual taxable income (salary etc.) in ZAR, needed for the marginal rate","schema":{"type":"number"}},{"name":"age","in":"query","required":false,"description":"number, default 30","schema":{"type":"number"}},{"name":"transactions","in":"query","required":false,"description":"string, optional: URI-encoded JSON array of {type: buy|sell, asset, quantity, total_zar, date} records (max 500); FIFO-matched into per-disposal gains","schema":{"type":"string"}},{"name":"classification","in":"query","required":false,"description":"auto (default: >=3yr hold -> capital, else revenue) | capital | revenue: how to treat matched disposals","schema":{"type":"string","enum":["auto","capital","revenue"]}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/crypto-classify":{"get":{"summary":"Calculator: crypto-classify","description":"Indicative capital-vs-revenue classification of crypto gains by weighing the classic SA case-law factors: intention, holding period and trading frequency. Example: /calc/crypto-classify?holding_period_months=30&trades_per_month=1&intention=hold_long_term","parameters":[{"name":"holding_period_months","in":"query","required":true,"description":"number, required: how long the crypto was/will be held","schema":{"type":"number"}},{"name":"trades_per_month","in":"query","required":false,"description":"number, default 0: average disposal frequency","schema":{"type":"number"}},{"name":"intention","in":"query","required":false,"description":"hold_long_term | active_trading | unknown (default)","schema":{"type":"string","enum":["hold_long_term","active_trading","unknown"]}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/calc/bond-price":{"get":{"summary":"Calculator: bond-price","description":"Clean price of a fixed-rate bond from face value, coupon and years to maturity, at a given yield (defaults to the live R2030 benchmark yield). Example: /calc/bond-price?face_value=1000000&coupon_percent=8&years_to_maturity=4","parameters":[{"name":"face_value","in":"query","required":true,"description":"number, required: bond face/par value in ZAR","schema":{"type":"number"}},{"name":"coupon_percent","in":"query","required":true,"description":"number, required: annual coupon rate","schema":{"type":"number"}},{"name":"years_to_maturity","in":"query","required":true,"description":"number, required","schema":{"type":"number"}},{"name":"yield_percent","in":"query","required":false,"description":"number, optional: market yield, defaults to the live R2030 benchmark yield","schema":{"type":"number"}},{"name":"payments_per_year","in":"query","required":false,"description":"number, default 2 (semi-annual, standard for SA government bonds)","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid or unknown parameter (unrecognised values are rejected, never silently defaulted)"},"402":{"description":"Payment Required (x402: $0.01 USDC on Base)"}}}},"/v1/tenders":{"get":{"summary":"Government tenders (live)","description":"Live South African government tender feed from National Treasury's eTenders OCDS API: filter by province, procurement category, buyer, keyword and closing window. Returns compact tender records with closing dates, briefing sessions, documents and contacts. Example: /v1/tenders?province=Gauteng&closing_within_days=14","parameters":[{"name":"province","in":"query","required":false,"description":"string, optional: filter by province name (substring match)","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"string, optional: goods | services | works, or category text","schema":{"type":"string"}},{"name":"buyer","in":"query","required":false,"description":"string, optional: procuring entity name (substring match)","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"string, optional: keyword over title, description and buyer","schema":{"type":"string"}},{"name":"closing_within_days","in":"query","required":false,"description":"number, optional: only tenders still open and closing within N days","schema":{"type":"number"}},{"name":"days","in":"query","required":false,"description":"number, default 7, max 31: published-date window to search","schema":{"type":"number"}},{"name":"limit","in":"query","required":false,"description":"number, default 25, max 100","schema":{"type":"number"}}],"responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"503":{"description":"Upstream source unreachable"}}}},"/v1/crypto-prices":{"get":{"summary":"Crypto ZAR prices (live)","description":"Live ZAR crypto prices from VALR's public market data: last traded, bid/ask, 24-hour high/low/volume and daily change for BTC, ETH and every other ZAR pair on the exchange. Example: /v1/crypto-prices?pairs=BTCZAR,ETHZAR","parameters":[{"name":"pairs","in":"query","required":false,"description":"string, default BTCZAR,ETHZAR,SOLZAR,XRPZAR: comma-separated ZAR pairs, or 'all' for every listed ZAR pair","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"},"503":{"description":"Upstream source unreachable"}}}},"/v1/changes":{"get":{"summary":"Series changed since a date","description":"Cache-freshness diff: value_changed and reconfirmed flags per series.","parameters":[{"name":"since","in":"query","required":true,"description":"Date to diff from (YYYY-MM-DD).","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK"},"402":{"description":"Payment Required (x402: $0.005 USDC on Base)"}}}}}}