{"openapi":"3.1.0","info":{"title":"OSVčalc 2026 API","version":"1.0.0","description":"Free, keyless JSON API for the OSVčalc calculator (tax year 2026). It runs the same calculation as the web app and the MCP server: income tax, social and health insurance doplatek, VAT status and a year-end projection. Stateless, nothing is stored, CORS is open and requests are rate-limited (shared with the MCP server). Results are an estimate, not tax advice."},"servers":[{"url":"https://osvcalc.cz"}],"tags":[{"name":"Calculation","description":"Calculate taxes and insurance"},{"name":"Reference","description":"Explain every input"}],"paths":{"/api/calculate":{"post":{"operationId":"calculate","tags":["Calculation"],"summary":"Calculate taxes and insurance","description":"Send what has been paid to you so far this year plus a few optional details, and get back how much to have set aside right now. Send either `income` or `invoices`, every other field is optional and has a default. `summary` holds the numbers, `text` a readable explanation in the chosen `locale`. Send either `income` or `invoices`, not both.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"income":{"default":0,"description":"All the money your customers have paid you this year, from 1 January until today. Count only what actually arrived in your bank account (or was handed to you in cash). An invoice you sent doesn't count until it's paid, so an invoice from 2025 that was paid in 2026 counts for 2026.\n\nLeave out money moved between your own accounts, loans, and anything else that isn't payment for your work. If you are a plátce DPH (you charge VAT), enter the amounts without VAT.\n\nSend either income or invoices: leave this out (or 0) when you send invoices.","type":"number","minimum":0,"maximum":10000000000},"saved":{"default":0,"description":"Money you have already put aside for this year's tax and insurance, for example in a savings account. It's subtracted from what you still need to set aside.\n\nDon't include the monthly zálohy you have already paid. Those are counted separately.","type":"number","minimum":0,"maximum":10000000000},"monthly":{"default":0,"description":"Your best guess of income still to be paid into your account per month, from the month after currentMonth through December. Only feeds the year-end projection, not the amount owed right now.","type":"number","minimum":0,"maximum":10000000000},"startMonth":{"default":1,"description":"Month the business started, 1 to 12 (1 = January or earlier, i.e. self-employed for the whole year). Minimum social and health insurance is owed for every month from this one onward.","type":"integer","minimum":1,"maximum":12},"currentMonth":{"description":"The month the calculation is made for. Normally just leave it on the current month.\n\nChange it to see where you would stand in a different month, for example to plan ahead. Defaults to today's month.","type":"integer","minimum":1,"maximum":12},"paidNow":{"default":false,"description":"Zálohy are payments you send every month in advance, so you don't have to pay everything at once after the year ends. As OSVČ you usually pay two of them: social insurance to your local social security office (OSSZ) and health insurance to your health insurance company.\n\nTick this once this month's payments have left your account, so the calculator stops counting them as money you still owe.","type":"boolean"},"status":{"default":"hlavniStandard","description":"This decides how much minimum insurance you have to pay.\n\n• Hlavní (main): the business is your main livelihood. You pay minimum social and health insurance every month, even if you earn little.\n\n• Začínající (starting): choose this if you started in 2024, 2025 or 2026 and were not self-employed (OSVČ) in the 20 calendar years before. Your minimum social insurance is lower in the year you start and the two years after.\n\n• Vedlejší (side): the business runs alongside something else, such as a job, studies, a pension, or maternity or parental leave. There's no minimum health insurance, and social insurance is owed only if the year's profit reaches 117 521 Kč (proportionally less if you were active only part of the year).","type":"string","enum":["hlavniStandard","hlavniZacinajici","vedlejsi"]},"taxRegime":{"default":"pausal","description":"This decides how your tax is worked out. There are three options:\n\n• Výdajový paušál: you're taxed as if a fixed percentage of your income went on business costs. No receipts needed. Usually the better choice when your real costs are low, which is typical for services.\n\n• Skutečné výdaje (actual expenses): you deduct what your business really spent, backed by invoices and receipts, and you must keep tax records (daňová evidence). Only worth it when your real costs are higher than what the paušál would give you, for example with expensive materials, subcontractors or equipment.\n\n• Paušální daň (flat tax): one fixed monthly payment covers income tax, social and health insurance all at once, and you usually don't file a tax return or přehledy (the yearly summaries for your insurers). It tends to pay off when your income is near the top of its band and you have no children or spouse to claim for, because no tax credits or deductions apply in it. Not available to plátci DPH, with a job on the side, or above 2 000 000 Kč of income.\n\nYou can switch between the options here to compare. Between paušál and actual expenses you choose each year in your tax return (once you have filed with the paušál, you can't switch that year to actual expenses). Paušální daň has to be signed up for by 10 January, or by the day you start the business.","type":"string","enum":["pausal","actual","pausalTax"]},"pausalRate":{"description":"You pay tax only on your profit: what you earned minus what your business cost you. The výdajový paušál is a shortcut. Instead of collecting receipts, the law lets you count a fixed percentage of your income as business costs. Example: with a 60 % paušál and 100 000 Kč of income, you're taxed as if your profit were 40 000 Kč.\n\nThe percentage depends on the kind of work you do:\n• 80 %: agriculture, forestry and craft trades (řemeslné živnosti, e.g. baker, plumber, bricklayer, hairdresser)\n• 60 %: all other trades run on a trade licence (volné, vázané and koncesované živnosti), which covers most IT and sales work on a živnostenský list\n• 40 %: work that needs no trade licence, such as liberal professions (doctor, lawyer, tax advisor) and royalties for authors, translators and artists\n• 30 %: renting out property that belongs to your business\n\nThe paušál applies to at most 2 000 000 Kč of income, so the most you can deduct is 1 600 000, 1 200 000, 800 000 or 600 000 Kč respectively. Not sure which one is yours? Your extract from the trade register (výpis ze živnostenského rejstříku) shows which kind of živnost you have.","type":"string","enum":["0.3","0.4","0.6","0.8"]},"pausalBand":{"description":"Force a specific pásmo instead of letting it be chosen automatically from income and pausalRate. Only meaningful with taxRegime 'pausalTax', and only useful if you've already declared into a band and want figures for that one specifically.","anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"actualExpenses":{"default":0,"description":"What your business has actually spent so far this year, as long as you can prove it with an invoice or receipt: materials, goods you resell, subcontractors, rent for your workspace, software, business trips and similar. They count when paid, the same way as income.\n\nThings costing over 80 000 Kč (like a car or an expensive machine) can't be deducted all at once; they're spread over several years instead (depreciation). Personal spending and your own social and health insurance payments don't count.","type":"number","minimum":0,"maximum":10000000000},"expectedExpenses":{"default":0,"description":"Your best guess of business costs still to be paid per month, from the month after currentMonth through December. Only used with taxRegime 'actual'; with 'pausal' expenses are a fixed percentage of income instead.","type":"number","minimum":0,"maximum":10000000000},"platceDph":{"default":false,"description":"DPH is Czech VAT. A plátce DPH (VAT payer) adds VAT, usually 21 %, to most invoices, passes it on to the tax office and files regular VAT returns. In return, they can get back the VAT they paid on business purchases.\n\nRegistering becomes compulsory once your turnover (all your income added up) for the calendar year goes over 2 000 000 Kč: you apply within 10 working days and become a plátce from 1 January of the next year. If it goes over 2 536 500 Kč, you become a plátce from the very next day, again applying within 10 working days.\n\nA plátce can't use paušální daň. Enter income and expenses here without VAT.\n\nHeads-up: even if you're not a plátce, you may need to register as an identifikovaná osoba within 15 days when you buy services from abroad (ads, hosting, software subscriptions) or invoice a business in another EU country.","type":"boolean"},"crossBorderServices":{"default":false,"description":"Buying services from abroad (SaaS subscriptions, ads, hosting) or invoicing a business in another EU country can make you an identifikovaná osoba, with a 15-day registration deadline, even as a non-payer of VAT. Tick this if either applies so the calculator flags it.","type":"boolean"},"vedlejsiSocialAdvances":{"default":false,"description":"Vedlejší only. Social insurance zálohy are owed only if you signed up for social insurance voluntarily, or from the year after the year your profit reached the rozhodná částka (117 521 Kč in 2026, §13a of the social insurance act). Tick this if you are paying them; the minimum is 1 574 Kč a month. If not, nothing is due monthly, and the year's social insurance, if any, is paid in one go after you file the přehled.","type":"boolean"},"soubeh":{"default":false,"description":"Tick this if you also have a job this year: a regular employment contract (pracovní poměr), or a DPP or DPČ agreement.\n\nYour wages and your business profit are added together in one tax return, so a salary can push part of your profit into the higher 23 % band. With a job on the side, paušální daň is not available. A job usually also makes your business a vedlejší (side) activity, see Activity status.","type":"boolean"},"employmentIncome":{"default":0,"description":"Your gross pay (hrubá mzda) from your job so far this year: the amount before tax and insurance are taken off, as shown on your payslips. It's not the amount that lands in your account.\n\nIt's added to your business profit to work out income tax, and it counts toward the income needed to have the child bonus paid out.","type":"number","minimum":0,"maximum":10000000000},"otherIncome":{"default":0,"description":"Income besides this activity and employment: rent (§9), capital income such as interest or dividends (§8) and other income (§10), for the whole year. It only matters for paušální daň, which is closed to you once it is above 50 000 Kč (§7a). It does not change your income tax estimate. A DPP taxed at source (srážková daň) does not block paušální daň, so leave it out here.","type":"number","minimum":0,"maximum":10000000000},"vosPartner":{"default":false,"description":"A partner in a veřejná obchodní společnost (general partnership) cannot use paušální daň (§7a). Tick this to have the calculator treat paušální daň as unavailable.","type":"boolean"},"credits":{"default":{"childrenCount":0,"childrenZtpCount":0,"disability":"none","ztp":false,"manzelEligible":false,"manzelZtp":false,"dary":0,"hypotekaInterest":0,"hypotekaOld":false,"pojisteni":0,"lossCarryForward":0},"type":"object","properties":{"childrenCount":{"default":0,"description":"Number of children (daňové zvýhodnění). Children who live with you and whom you support: up to age 18, or up to 26 while they're studying.\n\nEach child lowers your tax directly: by 15 204 Kč a year for the first child, 22 320 Kč for the second, and 27 840 Kč for the third and each one after. If this is more than your tax, the tax office pays you the difference as a daňový bonus, but only if your income from business and employment for the year is at least 134 400 Kč. Only one parent can claim a given child in a given month.","type":"integer","minimum":0,"maximum":20},"childrenZtpCount":{"default":0,"description":"of which ZTP/P. How many of those children have a ZTP/P card (the card for people with a severe disability who need someone to accompany them). The tax discount for each such child is doubled.","type":"integer","minimum":0,"maximum":20},"disability":{"default":"none","description":"Pick your degree if you receive an invalidní důchod (disability pension). 1st or 2nd degree lowers your tax by 2 520 Kč a year, 3rd degree by 5 040 Kč. This is separate from the ZTP/P discount, and you can claim both.","type":"string","enum":["none","first","second","third"]},"ztp":{"default":false,"description":"Tick this if you yourself have a ZTP/P card (the card for people with a severe disability who need someone to accompany them). It lowers your tax by 16 140 Kč a year. For a child or spouse with a ZTP/P card, use their own fields instead.","type":"boolean"},"manzelEligible":{"default":false,"description":"Lowers your tax by 24 840 Kč a year if all of this is true:\n• you live with your husband or wife,\n• their own income for the whole year is no more than 68 000 Kč,\n• they look after a child under 3 in your household.\n\nOnly months in which all of this is true count. Maternity pay (mateřská) counts toward the 68 000 Kč limit, parental allowance (rodičovský příspěvek) does not.","type":"boolean"},"manzelZtp":{"default":false,"description":"If your husband or wife has a ZTP/P card, this discount doubles to 49 680 Kč a year.","type":"boolean"},"dary":{"default":0,"description":"Donations to charities, non-profits, schools, municipalities, political parties and similar recipients for public-benefit purposes (health, education, culture, sport, social care, animal welfare and so on).\n\nGifts don't lower your tax directly. They lower your tax base (your profit, plus wages if you have a job), which the tax is calculated from, so at the 15 % rate you save about 15 % of what you gave. They count only if they add up to at least 1 000 Kč in the year, or to more than 2 % of your tax base, and at most 30 % of your tax base can be deducted. Keep a confirmation (potvrzení o daru) from each recipient.","type":"number","minimum":0,"maximum":10000000000},"hypotekaInterest":{"default":0,"description":"Interest you paid this year on a mortgage or building-savings loan (úvěr ze stavebního spoření) for your own home. Your bank's yearly statement shows the amount.\n\nOnly the interest counts, not the part of your payments that pays off the loan itself. It lowers your tax base (the profit your tax is calculated from) by up to 150 000 Kč a year, a limit shared by the whole household.","type":"number","minimum":0,"maximum":10000000000},"hypotekaOld":{"default":false,"description":"Tick this if the loan contract was signed before 1 January 2021. Those older loans keep a higher limit of 300 000 Kč of interest a year. A refinanced older loan usually keeps it too, as long as the amount wasn't increased.","type":"boolean"},"pojisteni":{"default":0,"description":"Money you yourself paid into private pension savings (doplňkové penzijní spoření or penzijní připojištění), a DIP (dlouhodobý investiční produkt, a long-term investment account) and private life insurance (životní pojištění).\n\nIt lowers your tax base (the profit your tax is calculated from) by up to 48 000 Kč a year for all of them together. For pension savings, only the part above 20 400 Kč a year counts, so enter just that part. Employer contributions don't count. Life insurance has to meet the legal conditions, which your insurer's yearly confirmation states.","type":"number","minimum":0,"maximum":10000000000},"lossCarryForward":{"default":0,"description":"A tax loss (daňová ztráta) from your business in an earlier year, as finally assessed, that you have not used up yet. It can be taken off your tax base in the 5 years after it arose (§34). It only reduces business profit, never your wages from employment, and it comes off before the other deductions. Enter the part you are using this year.","type":"number","minimum":0,"maximum":10000000000}},"description":"Optional tax credits and deductions (children, disability, spouse, gifts, mortgage interest, insurance, loss carried forward). Every field defaults to none."},"nemocenske":{"default":false,"description":"Sickness insurance is optional for OSVČ. If you pay it, you get sick pay (nemocenská) when illness stops you working, and it's required for maternity pay (peněžitá pomoc v mateřství).\n\nFor sick pay you must have paid it for at least 3 months right before falling ill. For maternity pay you need at least 180 days of it as OSVČ in the year before, and at least 270 days of sickness insurance (as an employee or OSVČ) in the previous two years.","type":"boolean"},"nemocenskeMonthly":{"default":243,"description":"How much you pay each month, at least 243 Kč. You choose the amount yourself: it's 2.7 % of a base you pick (at least 9 000 Kč). Sick pay is calculated from that same base, so paying more means you get more when you're ill.","type":"number","minimum":0,"maximum":10000000000},"socialPaid":{"description":"What you actually paid in social insurance zálohy so far this year, if different from the assumed minimum. Leave unset to assume the minimum záloha was paid every month from startMonth onward.","type":"number","minimum":0,"maximum":10000000000},"healthPaid":{"description":"What you actually paid in health insurance zálohy so far this year, if different from the assumed minimum. Leave unset to assume the minimum záloha was paid every month from startMonth onward.","type":"number","minimum":0,"maximum":10000000000},"pausalPaid":{"description":"What you actually paid in paušální daň so far this year, if different from the assumed monthly rate (a band's rate can be revised retroactively mid-year, as pásmo 1's was in 2026). Leave unset to assume the then-current monthly rate was paid every month.","type":"number","minimum":0,"maximum":10000000000},"invoices":{"description":"Alternative to entering income/currentMonth directly: a list of what was actually paid and when, letting the tool work out year-to-date income and the current month itself, correctly excluding an invoice issued in December but actually paid the following year. When given, this replaces income and currentMonth rather than adding to them, so don't also pass a non-zero income.","maxItems":1000,"type":"array","items":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":10000000000,"description":"The invoice amount, in Kč, without VAT if you are a plátce DPH."},"paidDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"The date the payment actually landed in the account (cash basis), not the invoice date."}},"required":["amount","paidDate"]}},"employerTaxWithheld":{"description":"Souběh only: the income tax your employer has actually withheld from your salary this year (sražená záloha na daň, shown on your payslips or the potvrzení o zdanitelných příjmech). Leave unset to let the calculator estimate it from employmentIncome.","type":"number","minimum":0,"maximum":10000000000},"insurer":{"default":"","description":"The user's health insurer, if known, so the filing guide can name the account to pay into. Leave empty if unknown.","type":"string","enum":["","vzp","vozp","cpzp","ozp","zps","zpmvcr","rbp"]},"locale":{"default":"en","description":"Language for the returned explanation text.","type":"string","enum":["en","cs"]}},"additionalProperties":false},"examples":{"minimal":{"summary":"Minimal","value":{"income":500000,"currentMonth":9}},"actual":{"summary":"Actual expenses, Czech text","value":{"income":800000,"currentMonth":6,"taxRegime":"actual","actualExpenses":200000,"locale":"cs"}},"invoices":{"summary":"From invoices","value":{"invoices":[{"amount":120000,"paidDate":"2026-03-15"}]}},"soubeh":{"summary":"Employed as well (souběh)","value":{"income":300000,"currentMonth":8,"soubeh":true,"employmentIncome":480000,"employerTaxWithheld":36000}},"credits":{"summary":"With children and a mortgage","value":{"income":900000,"currentMonth":10,"credits":{"childrenCount":2,"childrenZtpCount":1,"hypotekaInterest":90000,"dary":5000}}},"pausalTax":{"summary":"Paušální daň","value":{"income":350000,"currentMonth":7,"taxRegime":"pausalTax","pausalBand":1}},"vedlejsi":{"summary":"Side activity (vedlejší) with sick pay","value":{"income":200000,"currentMonth":6,"status":"vedlejsi","nemocenske":true,"nemocenskeMonthly":400}}}}}},"responses":{"200":{"description":"Success. Also returned (with `summary.error` true and a message in `text`) when `currentMonth` is before `startMonth`: check `summary.error`.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"error":{"type":"boolean","description":"True when currentMonth is before startMonth, so there is nothing to calculate. Every number is then 0."},"hasIncome":{"type":"boolean","description":"True when income is above 0."},"total":{"type":"number","description":"CZK to have set aside right now, on top of advance payments (zálohy) already paid: income tax so far plus the social and health insurance doplatek plus this month's unpaid zálohy. With paušální daň it is this month's unpaid payment."},"hasUnpaid":{"type":"boolean","description":"True when this month's zálohy are not paid yet (paidNow is false), so `unpaid` is filled in."},"currentMonth":{"type":"number","description":"The month the calculation is for, 1 to 12."},"gap":{"anyOf":[{"type":"object","properties":{"ahead":{"type":"boolean","description":"True when the amount you have saved covers `total`."},"amount":{"type":"number","description":"How far ahead or behind you are, always positive."}},"required":["ahead","amount"],"additionalProperties":false},{"type":"null"}],"description":"Your `saved` amount compared with `total`. Null unless both saved and income are above 0."},"regime":{"type":"string","enum":["pausal","actual","pausalTax"],"description":"The tax regime used: pausal (výdajový paušál), actual (skutečné výdaje) or pausalTax (paušální daň)."},"tax":{"type":"object","properties":{"value":{"type":"number","description":"Income tax owed so far, after the sleva na poplatníka, any credits and (souběh) the tax your employer already withheld."},"profit":{"type":"number","description":"Taxable profit: income minus expenses."},"gross":{"type":"number","description":"Income tax before the sleva na poplatníka and credits."},"expenses":{"type":"number","description":"Expenses deducted: the paušál share of income, or your actual expenses."},"wages":{"type":"number","description":"Souběh only: gross wages added to the tax base (0 otherwise)."},"withheld":{"type":"number","description":"Souběh only: income tax your employer already withheld, credited against the tax (0 otherwise)."}},"required":["value","profit","gross","expenses","wages","withheld"],"additionalProperties":false,"description":"Income tax so far."},"social":{"type":"object","properties":{"value":{"type":"number","description":"Doplatek still to pay now: owed minus paid minus this month's unpaid záloha, never below 0."},"owed":{"type":"number","description":"Social insurance owed for the months so far, based on profit (never below the minimum)."},"paid":{"type":"number","description":"Zálohy paid so far: the minimum záloha for every month up to the last paid one, unless `socialPaid` was given."},"exempt":{"type":"boolean","description":"True when no social insurance is owed, typically a vedlejší activity below the threshold."}},"required":["value","owed","paid","exempt"],"additionalProperties":false,"description":"Social insurance (ČSSZ)."},"health":{"type":"object","properties":{"value":{"type":"number","description":"Doplatek still to pay now: owed minus paid minus this month's unpaid záloha, never below 0."},"owed":{"type":"number","description":"Health insurance owed for the months so far, based on profit (never below the minimum)."},"paid":{"type":"number","description":"Zálohy paid so far: the minimum záloha for every month up to the last paid one, unless `healthPaid` was given."},"exempt":{"type":"boolean","description":"Always false for health insurance."}},"required":["value","owed","paid","exempt"],"additionalProperties":false,"description":"Health insurance (zdravotní pojišťovna)."},"unpaid":{"anyOf":[{"type":"object","properties":{"value":{"type":"number","description":"All of this month's unpaid payments added up."},"social":{"type":"number","description":"Unpaid social insurance záloha."},"health":{"type":"number","description":"Unpaid health insurance záloha."},"nemocenske":{"type":"number","description":"Unpaid voluntary sick-pay insurance (nemocenské)."}},"required":["value","social","health","nemocenske"],"additionalProperties":false},{"type":"null"}],"description":"This month's advance payments that are not paid yet. Null when everything is paid or nothing is due."},"notes":{"type":"object","properties":{"healthAtMinimum":{"type":"boolean","description":"True when health insurance owed does not exceed what you paid plus this month's záloha, so only the minimum applies."},"socialOverpaidAmount":{"description":"By how much the social zálohy you paid exceed what is owed, when that is more than 100 CZK, else null.","type":["number","null"]},"pausalCapped":{"type":"boolean","description":"True when income is above the cap up to which the výdajový paušál applies, so the deductible expenses are limited."},"socialExempt":{"type":"boolean","description":"Same as `social.exempt`."}},"required":["healthAtMinimum","socialOverpaidAmount","pausalCapped","socialExempt"],"additionalProperties":false,"description":"Flags the explanation text draws on."},"isDecember":{"type":"boolean","description":"True when currentMonth is 12, so the figures are final and there is no projection."},"projection":{"anyOf":[{"type":"object","properties":{"endTotal":{"type":"number","description":"Total to have set aside by filing: income tax plus insurance doplatky for the whole year."},"perMonth":{"type":"number","description":"CZK to put aside each remaining month to reach `endTotal`."},"monthlyAdv":{"type":"number","description":"Advance payments (social, health, nemocenské) still due each month."},"hasMonthlyIncome":{"type":"boolean","description":"True when `monthly` was above 0, so the projection includes future income."},"endIncome":{"type":"number","description":"Projected income for the whole year."},"endProfit":{"type":"number","description":"Projected taxable profit for the whole year."},"nextMonth":{"type":"number","description":"First month the projection covers, 2 to 12."},"overThreshold":{"type":"boolean","description":"True when projected income passes the 2 000 000 Kč VAT registration threshold."}},"required":["endTotal","perMonth","monthlyAdv","hasMonthlyIncome","endIncome","endProfit","nextMonth","overThreshold"],"additionalProperties":false},{"type":"null"}],"description":"Year-end projection. Null in December."},"taxBurden":{"type":"object","properties":{"total":{"type":"number","description":"Income tax plus social and health insurance owed for the months so far."},"percentOfIncome":{"description":"`total` as a percentage of income. Null without income.","type":["number","null"]}},"required":["total","percentOfIncome"],"additionalProperties":false,"description":"What tax and insurance take from your income."},"pausalTax":{"anyOf":[{"type":"object","properties":{"pasmo":{"anyOf":[{"anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},{"type":"null"}],"description":"The paušální daň band (pásmo), chosen from income and rate. Null when income fits none."},"eligible":{"type":"boolean","description":"True when paušální daň can be used."},"ineligibleReason":{"anyOf":[{"type":"string","enum":["platceDph","soubeh","vos","otherIncome","income"]},{"type":"null"}],"description":"Why not: you are a VAT payer, you also have employment income, you are a v.o.s. partner, other income is above 50 000 Kč, or income is too high. Null when eligible."},"owedSoFar":{"type":"number","description":"Monthly payments due so far."},"paidSoFar":{"type":"number","description":"Monthly payments made so far, or `pausalPaid` when given."},"unpaidThisMonth":{"type":"number","description":"This month's payment, when it is not paid yet."},"overLimit":{"type":"boolean","description":"True when income is above the 2 000 000 Kč limit for paušální daň."},"annualTotal":{"type":"number","description":"Payments for the whole year at the band's real rate."},"projectedOverBand":{"type":"boolean","description":"True when income plus expected future income would land in a different band than the current one."}},"required":["pasmo","eligible","ineligibleReason","owedSoFar","paidSoFar","unpaidThisMonth","overLimit","annualTotal","projectedOverBand"],"additionalProperties":false},{"type":"null"}],"description":"Only for the paušální daň regime, otherwise null."},"vat":{"type":"object","properties":{"approachingThreshold":{"type":"boolean","description":"Income is close to the VAT registration threshold."},"overRegistrationThreshold":{"type":"boolean","description":"Income reached 2 000 000 Kč, so you must register for VAT."},"overImmediateThreshold":{"type":"boolean","description":"Income reached 2 536 500 Kč, so VAT registration applies immediately."}},"required":["approachingThreshold","overRegistrationThreshold","overImmediateThreshold"],"additionalProperties":false,"description":"VAT registration status based on income so far."},"comparison":{"type":"array","items":{"type":"object","properties":{"regime":{"type":"string","enum":["pausal","actual","pausalTax"],"description":"The tax regime."},"total":{"type":"number","description":"Tax plus insurance owed for the months so far under that regime."},"eligible":{"type":"boolean","description":"True when you can use that regime."}},"required":["regime","total","eligible"],"additionalProperties":false},"description":"The same year under each regime, to compare them."},"nextYearAdvances":{"anyOf":[{"type":"object","properties":{"taxAdvanceCount":{"anyOf":[{"type":"number","const":0},{"type":"number","const":2},{"type":"number","const":4}],"description":"How many income tax advances next year: none, two or four, depending on this year's tax."},"taxAdvanceAmount":{"type":"number","description":"Amount of each income tax advance."},"socialAdvance":{"type":"number","description":"Monthly social insurance záloha next year."},"healthAdvance":{"type":"number","description":"Monthly health insurance záloha next year."}},"required":["taxAdvanceCount","taxAdvanceAmount","socialAdvance","healthAdvance"],"additionalProperties":false},{"type":"null"}],"description":"Suggested advance payments for next year, based on this year's projected figures. Null without income."},"status":{"type":"string","enum":["hlavniStandard","hlavniZacinajici","vedlejsi"],"description":"The activity status used, as sent."},"crossBorderServices":{"type":"boolean","description":"As sent."}},"required":["error","hasIncome","total","hasUnpaid","currentMonth","gap","regime","tax","social","health","unpaid","notes","isDecember","projection","taxBurden","pausalTax","vat","comparison","nextYearAdvances","status","crossBorderServices"],"additionalProperties":false},"text":{"type":"string","description":"A readable Markdown explanation of the result, in the language given by `locale`, including where and how much to pay."}},"required":["summary","text"]},"example":{"summary":{"error":false,"hasIncome":true,"total":8311,"hasUnpaid":true,"currentMonth":9,"gap":null,"regime":"pausal","tax":{"value":0,"profit":200000,"gross":30000,"expenses":300000,"wages":0,"withheld":0},"social":{"value":0,"owed":45042,"paid":44330,"exempt":false},"health":{"value":0,"owed":29748,"paid":26448,"exempt":false},"unpaid":{"value":8311,"social":5005,"health":3306,"nemocenske":0},"notes":{"healthAtMinimum":true,"socialOverpaidAmount":4293,"pausalCapped":false,"socialExempt":false},"isDecember":false,"projection":{"endTotal":0,"perMonth":0,"monthlyAdv":8311,"hasMonthlyIncome":false,"endIncome":500000,"endProfit":200000,"nextMonth":10,"overThreshold":false},"taxBurden":{"total":74790,"percentOfIncome":14.957999999999998},"pausalTax":null,"vat":{"approachingThreshold":false,"overRegistrationThreshold":false,"overImmediateThreshold":false},"comparison":[{"regime":"pausal","total":74790,"eligible":true},{"regime":"pausalTax","total":82458,"eligible":true}],"nextYearAdvances":{"taxAdvanceCount":0,"taxAdvanceAmount":0,"socialAdvance":5005,"healthAdvance":3306},"status":"hlavniStandard","crossBorderServices":false},"text":"## What you should have set aside now: 8 311\nThis year's doplatek so far plus this month's unpaid zálohy.\nThis is what you've accrued so far this year, through the current month, not a full-year total. See \"Rest of the year\" below for the full-year projection.\n\n- **Income tax: 0**: 15 % of 200 000 Kč profit is 30 000 Kč, minus the 30 840 Kč sleva\n- **Social doplatek: 0**: 45 042 owed, 44 330 already paid in zálohy, plus 5 005 due this month\n- **Health doplatek: 0**: 29 748 owed, 26 448 already paid in zálohy, plus 3 306 due this month\n- **Zálohy for September: 8 311**: Social 5 005 plus health 3 306, not yet paid\n\n- Health is at the minimum, so your zálohy already cover it.\n- You've overpaid social by 4 293 Kč; ČSSZ refunds it after the přehled.\n\n### Rest of the year\nAdd your expected monthly income to see the year-end figure.\nTo have saved by the time you file in spring 2027: 0\n0 Kč: Set aside on top of zálohy, each month October through December\n8 311 Kč: Zálohy you'll keep paying each month\n\nSo far this year you'd owe 74 790 Kč in taxes and insurance, 15.0 % of what you've earned.\n\n### Regime comparison\nSame year-to-date basis as above, not a full-year total.\n- Výdajový paušál: 74 790 (Cheapest)\n- Paušální daň: 82 458\n\n### Next year's advances\nNo income tax zálohy next year, based on this year's projected tax.\nNew monthly social záloha: 5 005 Kč.\nNew monthly health záloha: 3 306 Kč.\nThese apply from the month after you file next year's přehled. They're based on this year's minimums and rates: next year's official figures aren't published yet, so recheck them once they are.\n\n### Where to file it and pay it\n**Daňové přiznání (tax return)**\nComputed tax: 0 Kč\nIncome goes on line 101 of Přílohu č. 1 and paušál expenses on line 102 (line 104 is the difference). The dílčí základ daně from self-employment (line 113) carries over to line 37 of the main form. The sleva na poplatníka goes on line 64, tax after credits comes out on line 71, tax your employer withheld goes on line 84, and the amount still to pay is on line 91. These line numbers are from the 2025 form; the 2026 form is not published yet, so check them when it is.\nDeadline: 1 April 2027 on paper, 3 May 2027 electronically (1 May is a Saturday; mandatory if you have a datová schránka), or 1 July 2027 through a daňový poradce.\nPayment: the finanční úřad's account in the form 721-[FÚ matrika]/0710 (look up your FÚ's matrika on financnisprava.gov.cz), variable symbol = your rodné číslo without the slash.\nDouble-check this yourself: this isn't tax advice.\n**Přehled o příjmech a výdajích for the OSSZ**\nSocial doplatek: 0 Kč\nDeadline: one month after your own tax return deadline; the doplatek is due within 8 days of filing.\nPayment: the account and variable symbol your OSSZ assigned when you registered as OSVČ (check the letter from your OSSZ or the ČSSZ ePortál).\nDouble-check this yourself: this isn't tax advice.\n**Přehled for your health insurer**\nHealth doplatek: 0 Kč\nDeadline: one month after your own tax return deadline; the doplatek is due within 8 days of filing.\nPick your insurer to see its exact account number.\nDouble-check this yourself: this isn't tax advice.\nThe exact FÚ matrika, your OSSZ account and variable symbol, and VZP's account are personal or regional, so double-check them before you pay.\n\n### What these figures mean\n- **Income tax**: Income tax on your profit. Profit is your income minus the paušál (or your actual expenses), with the paušál applied to at most 2 000 000 Kč of income.\n\nThe tax is 15 % of profit up to 1 762 812 Kč and 23 % of anything above that. Then everyone gets 30 840 Kč taken off the tax (sleva na poplatníka). In your first year of business no monthly tax advances are owed, so the whole tax is paid when you file your return.\n- **Social doplatek**: Social insurance mainly pays for your future state pension. This line is what you'll still owe for the year on top of the monthly zálohy you've already paid.\n\nIt's 29.2 % of 55 % of your profit, but it's never calculated from less than a minimum base per month: 17 139 Kč (hlavní standard), 12 242 Kč (hlavní začínající) or 5 387 Kč (vedlejší, owed only once the year's profit passes 117 521 Kč).\n- **Health doplatek**: Health insurance pays for your healthcare: doctors, hospitals, medicine. This line is what you'll still owe for the year on top of the monthly zálohy you've already paid.\n\nIt's 13.5 % of 50 % of your profit. For hlavní (main) activity it's never calculated from less than 24 483.50 Kč per month, so there's a minimum you pay even with low profit. Vedlejší (side) activity has no minimum.\n- **Zálohy for September**: This month's social and health insurance payments (plus sickness insurance, if you pay it) that, based on what you entered, haven't left your account yet.\n- **Total tax burden**: Everything you'll pay for the year: income tax plus social and health insurance, as a share of your income. It's the real cost of being self-employed, not just the tax rate.\n- **Regime comparison**: What you'd pay this year under each tax regime, using the same income and discounts, so you can see which one is cheapest for you.\n- **Next year's advances**: An estimate of the monthly zálohy (and tax advances, if any) you'll pay next year, based on this year's forecast. They start the month after you file this year's přehled (the yearly summary you send to your social and health insurers).\n\nBased on 2026 rules as known today. Mid-year retroactive changes (like pásmo 1's July cut) can make monthly figures from earlier in the year stale. Rerun this if a paid amount surprises you.\n\nThis is running as an MCP server: your inputs are sent to and processed by the OSVčalc server to compute this, not kept in a browser. OSVčalc does not save them. The hosting provider, Vercel, may keep short-lived technical logs such as your IP address, and the IP address is used for rate limiting. It's not financial or tax advice, just an orientational estimate. If needed, consult an accountant (účetní) or tax advisor (daňový poradce). Full privacy policy: https://osvcalc.cz/policy"}}}},"400":{"description":"The body is not valid JSON, a field is invalid, or an unknown field was sent. `issues` lists each problem as an array of zod issues (`code`, `path`, `message`).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Request body must be valid JSON"}}}},"405":{"description":"Wrong HTTP method. The `Allow` header lists the accepted ones.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Method not allowed, use POST"}}}},"422":{"description":"Both `income` and `invoices` were sent. Send only one.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Pass either income or invoices, not both: invoices already imply year-to-date income. Leave income at 0 (or unset) when using invoices."}}}},"429":{"description":"Too many requests. The `Retry-After` header says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Rate limit exceeded"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","example":60}}}},"500":{"description":"An unexpected error on our side. The details are not returned.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Internal error"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://osvcalc.cz/api/calculate \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"income\":500000,\"currentMonth\":9}'"},{"lang":"curl","label":"curl (invoices)","source":"curl -X POST https://osvcalc.cz/api/calculate \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"invoices\":[{\"amount\":120000,\"paidDate\":\"2026-03-15\"}]}'"}]}},"/api/field-guide":{"get":{"operationId":"fieldGuide","tags":["Reference"],"summary":"Explain every input","description":"Lists every input the calculation accepts with its label, explanation, type, options and default, grouped like the web app. Nothing is calculated.","parameters":[{"name":"locale","in":"query","required":false,"description":"Language of the returned labels and explanations.","schema":{"type":"string","enum":["en","cs"],"default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The field's name in the request body. Credit fields are written `credits.name`."},"group":{"type":"string","enum":["core","extraOptions","credits","restOfYear"],"description":"Where the web app shows the field: core, extra options, credits and deductions, or rest of the year."},"label":{"type":"string","description":"The field's label, as in the web app."},"help":{"type":"string","description":"What the field means and how to fill it in."},"type":{"type":"string","enum":["number","boolean","enum","array"],"description":"The kind of value the field takes. `array` is the invoices list, whose item shape the help text gives."},"options":{"description":"The allowed values, for enum fields.","type":"array","items":{"type":"object","properties":{"value":{"description":"The value to send, with its JSON type: a number for pausalBand, a string otherwise.","type":["string","number"]},"label":{"type":"string","description":"What that value means, as shown in the web app."}},"required":["value","label"],"additionalProperties":false}},"default":{"description":"The value used when the field is left out.","type":["string","number","boolean"]}},"required":["key","group","label","help","type","default"],"additionalProperties":false},"description":"Every input the calculation accepts."},"disclaimer":{"type":"string","description":"The not-tax-advice notice to show alongside results."}},"required":["fields","disclaimer"],"additionalProperties":false}}}},"400":{"description":"The body is not valid JSON, a field is invalid, or an unknown field was sent. `issues` lists each problem as an array of zod issues (`code`, `path`, `message`).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Invalid input"}}}},"405":{"description":"Wrong HTTP method. The `Allow` header lists the accepted ones.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Method not allowed, use GET"}}}},"429":{"description":"Too many requests. The `Retry-After` header says how many seconds to wait.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Rate limit exceeded"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","example":60}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl \"https://osvcalc.cz/api/field-guide?locale=en\""}]}},"/api/openapi.json":{"get":{"operationId":"openapi","tags":["Reference"],"summary":"OpenAPI","description":"This document as JSON. Not rate-limited.","parameters":[{"name":"locale","in":"query","required":false,"description":"Language of the returned labels and explanations.","schema":{"type":"string","enum":["en","cs"],"default":"en"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The body is not valid JSON, a field is invalid, or an unknown field was sent. `issues` lists each problem as an array of zod issues (`code`, `path`, `message`).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Invalid input"}}}},"405":{"description":"Wrong HTTP method. The `Allow` header lists the accepted ones.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}},"required":["error"]},"example":{"error":"Method not allowed, use GET"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl \"https://osvcalc.cz/api/openapi.json\""}]}}}}