API DOCUMENTATION

Tax calculations

The same deterministic rule packages the product runs, reached statelessly.

POST /v1/tax/calculations with jurisdiction, tax_year, program (T1 personal or T2 corporate) and inputs. The answer is a tax.calculation: the versioned rule package that produced it, the currency, the scope (IN_SCOPE, OUT_OF_SCOPE with reasons, or INCOMPLETE for a CA/T1 with blocking issues), the lines, and for CA/T1 a summary and the issues with a fix action each. The same request always yields the same lines; input_hash is the canonical hash of the request. Field names inside inputs are the rule package's own.

Jurisdiction / programTax yearsCurrencyNote
CA / T12026CADinputs = { facts, slips, claims } exactly as TaxPio's T1 rule package takes them: money as decimal strings in dollars, slips typed by kind (T4, T4A, T5, …).
CA / T2 (profile-based)—CADT2 is prepared from a tax profile's records, schedules and documents rather than one request body. Create a business profile and prepare through the product; the profile-based API follows.

CA/T1 inputs

inputs = { facts, slips, claims }. facts: province (two-letter code), maritalStatus (SINGLE, MARRIED, COMMON_LAW, SEPARATED, DIVORCED, WIDOWED), dateOfBirth (YYYY-MM-DD), spouseNetIncome, eligibleDependant. slips: an array of typed slips (T4, T4A, T4A_OAS, T4A_P, T4E, T5, T3, T5008, T2202, RRSP_RECEIPT, T2125, T776) with money as decimal strings in dollars. claims: rrspDeduction, professionalDues, childCareExpenses, otherEmploymentExpenses, medicalExpenses, charitableDonations, studentLoanInterest. An RRSP deduction needs an RRSP_RECEIPT slip that covers it, or the calculation comes back INCOMPLETE with the issue that says so.

CA/T1 request
{
  "jurisdiction": "CA", "program": "T1", "tax_year": 2026,
  "inputs": {
    "facts": { "province": "ON", "maritalStatus": "SINGLE", "dateOfBirth": "1990-05-01" },
    "slips": [
      { "kind": "T4", "employmentIncome": "85000.00", "cppContributions": "4230.45", "cpp2Contributions": "416.00", "eiPremiums": "1123.07", "rppContributions": "0.00", "incomeTaxDeducted": "14000.00", "unionDues": "600.00", "charitableDonations": "0.00", "pensionAdjustment": "0.00" },
      { "kind": "RRSP_RECEIPT", "contribution": "5000.00" }
    ],
    "claims": { "rrspDeduction": "5000.00" }
  }
}

Corporate T2 is prepared from a tax profile's records, schedules and documents rather than one request body; it answers 422 UNSUPPORTED_PROGRAM through this endpoint. The profile-based API follows.