API reference
Federal, California, Washington, New York and New York City tax law as citable data: resolve a citation, fetch a section, search, and check cited claims.
§1. Overview
Base URL https://www.taxcitation.com. Every JSON response has the same envelope:
{ "data": …, "meta": { "requestId": "req_…", "apiVersion": "2026-09-26", "latencyMs": 30,
"creditsConsumed": 2, "costDollars": { "total": 0.02, "credits": 0.02, "inference": 0 } } }Errors return {"error": "…"} with status 400, 401, 404, 429 or 500. Failed calls cost nothing.
Identify your client with a header. Any stable ID will do; quota is counted per client.
X-CPA-Copilot-Client: my-app-prod§2. Access
Federal law is public. California is included in the public tier. Washington, New York and New York City need an API key:
Authorization: Bearer tlk_…X-Api-Key: tlk_… also works. Get a key from Get API key: finish Stripe Checkout and the key is shown once. Create, name and revoke up to ten keys, and see usage and cost per call, on your account page. Every paid key reads federal, California, Washington, New York and New York City law.
Credits
One credit is $0.01. Each successful call reports what it cost in meta.creditsConsumed; Stripe invoices monthly for what you used, and new accounts start with $5 of credit.
| Call | Credits |
|---|---|
| Resolve (per citation, resolved or not) | 2 |
| Section or contents, per section: metadata and highlights / with text | 2 / 6 |
Search / with text=1 | 4 / 8 |
| Verify (per claim) | 4, plus the classifier's tokens at cost + 50% (about $0.0001) |
| Answer | 4, plus the actual token cost of drafting and verifying it, + 50% (meta.inferenceCostUsd is the cost before the margin; typically about $0.003) |
The MCP tools cost the same as their REST equivalents.
Grants
Keys issued by hand can carry narrower grants per jurisdiction and use-case corpus: individual, business, passthrough, payroll, sales-excise, property, real-estate, estate-trust, retirement, wealth-advisory, exempt-orgs, international and procedure. Every endpoint and MCP tool reads only what the key grants; a request can narrow that, never widen it.
§3. Cite IDs
Stable, URL-safe and lower-case, in the form jurisdiction/code/section.
| Cite ID | Section |
|---|---|
us/irc/162 | 26 U.S.C. § 162 |
ca/rtc/17041 | Cal. Rev. & Tax. Code § 17041 |
us/irs/p501-2024 | IRS Publication 501 (2024) |
us/irs/p17-2024/part-72 | One part of IRS Publication 17 (2024) |
ca/rtc/19853/v/<id> | An alternate California version, by leginfo version ID |
ca/cons/XIII-36 | Cal. Const. art. XIII, § 36 |
us/cfr26/1.401(k)-1 | Treas. Reg. § 1.401(k)-1 |
us/rev-rul/2024-1 | Rev. Rul. 2024-1 |
wa/rcw/82.87.040 | RCW 82.87.040 |
ny/tax/601 | N.Y. Tax Law § 601 |
nyc/admin/11-1701 | N.Y.C. Admin. Code § 11-1701 |
§4. The section object
| Field | Value |
|---|---|
citeId | Stable ID, as above |
citation | Formal: “26 U.S.C. § 162”, “Cal. Rev. & Tax. Code § 17041”, “IRS Publication 501 (2024)” |
citationShort | “IRC § 162”, “R&TC § 17041” |
jurisdiction | US, US-CA, US-WA, US-NY or US-NY-NYC. California was CA before September 2026. |
sourceType | statute, regulation, guidance, decision or form |
heading | Section heading |
status | in_force, repealed, reserved, renumbered, omitted, superseded, not_yet_operative, inoperative |
operativeFrom, operativeUntil | Dates, when the section has an operative window |
lastAmendedYear | Year, when the source gives it |
snapshotDate | Date of the source snapshot, when recorded |
hierarchy | Place in the code: [{type, num, heading}], outermost first |
sourceUrl | Official source |
text | Section text, when requested |
§5. Resolve
GET/v1/resolve
| Parameter | Meaning |
|---|---|
cite | A citation in any accepted format (required) |
jurisdiction | US, CA, WA, NY or NYC, to settle a bare section number |
asOf | YYYY-MM-DD; the version in force on that date |
text | 1 to include the section text |
Exhibit 5.1Request
curl "https://www.taxcitation.com/v1/resolve?cite=R%26TC%20%C2%A7%2019132(a)(1)"Exhibit 5.2Response
{
"data": {
"input": "R&TC § 19132(a)(1)",
"resolved": true,
"citeId": "ca/rtc/19132",
"pinpoint": "(a)(1)",
"pinpointFound": true,
"section": {
"citeId": "ca/rtc/19132",
"citation": "Cal. Rev. & Tax. Code § 19132",
"citationShort": "R&TC § 19132",
"jurisdiction": "US-CA",
"sourceType": "statute",
"heading": "Penalties and Additions to Tax",
"status": "in_force",
"hierarchy": [
{ "num": "2", "type": "division", "heading": "OTHER TAXES" },
{ "num": "10.2", "type": "part", "heading": "ADMINISTRATION OF FRANCHISE AND INCOME TAX LAWS" },
{ "num": "4", "type": "chapter", "heading": "Payments and Assessments" },
{ "num": "7", "type": "article", "heading": "Penalties and Additions to Tax" }
],
"sourceUrl": "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC§ionNum=19132."
}
},
"meta": { "apiVersion": "2026-09-23", "latencyMs": 30 }
}POST/v1/resolve
Up to 50 citations at once; data is an array of resolutions in the same order.
curl -X POST https://www.taxcitation.com/v1/resolve \
-H "content-type: application/json" \
-d '{"citations": ["IRC § 162(a)", "RTC 17041", "Pub. 501 (2024)"]}'Accepted formats
26 U.S.C. § 162(a) · 26 USC 162 · IRC § 162 · I.R.C. §162 · Internal Revenue Code section 162 · Treas. Reg. § 1.401(k)-1 · Rev. Rul. 2024-1 · PLR 202637005 · Cal. Rev. & Tax. Code § 17041 · R&TC § 17041 · RTC 17041 · Revenue and Taxation Code section 17041 · Cal. Const. art. XIII, § 36 · RCW 82.87.040 · WAC 458-20-101 · N.Y. Tax Law § 601 · 20 NYCRR § 112.3 · N.Y.C. Admin. Code § 11-1701 · Pub. 501 (2024) · Publication 17 2024 · Instructions for Form 1040-SS (2024) · Form 1099-MISC (2024) · cite IDs · bare “section 17041”.
§6. Sections
POST/v1/contents
The text of up to 20 sections, by id or by citation: {"ids": ["us/irc/162", "IRC § 6651(a)(2)", "R&TC 19132"], "text": {"maxCharacters": 20000}, "highlights": {"query": "…"}}. Results have the search result shape plus text; a citation with a subsection returns just that subsection (with pinpoint). Ids you cannot read are listed in data.errors and cost nothing. format: "claude" works here too.
GET/v1/sections/{citeId}
Fetch a section by cite ID. text=0 leaves out the text.
Exhibit 6.1Request
curl "https://www.taxcitation.com/v1/sections/us/irc/162?text=0"Exhibit 6.2Response
{
"data": {
"citeId": "us/irc/162",
"citation": "26 U.S.C. § 162",
"citationShort": "IRC § 162",
"jurisdiction": "US",
"sourceType": "statute",
"heading": "Trade or business expenses",
"status": "in_force",
"hierarchy": [
{ "num": "A", "type": "subtitle", "heading": "Income Taxes" },
{ "num": "1", "type": "chapter", "heading": "NORMAL TAXES AND SURTAXES" },
{ "num": "B", "type": "subchapter", "heading": "Computation of Taxable Income" },
{ "num": "VI", "type": "part", "heading": "ITEMIZED DEDUCTIONS FOR INDIVIDUALS AND CORPORATIONS" }
],
"sourceUrl": "https://uscode.house.gov/view.xhtml?req=granuleid:USC-prelim-title26-section162&num=0&edition=prelim"
},
"meta": { "apiVersion": "2026-09-23", "latencyMs": 1 }
}§7. Search
POST/v1/search
Search returns sources, not answers: ranked sections with verbatim highlights, for your model to reason over and cite. Nothing in a result is generated.
| Field | Meaning |
|---|---|
query | Keywords or a short question (required). Several short searches beat one long one. |
objective | The question you are working on, in a sentence. The reranker orders results against the query plus the objective, and it picks the highlights; retrieval uses the query alone. Send it with short keyword queries: on our short-query test set it lifts the first result from 54% to 67% correct. |
numResults | Default 10, at most 50 |
filters | jurisdictions (US, CA, WA, NY, NYC), sourceTypes (statute, regulation, guidance, decision, form), codes (USC26, RCW82, TAX…), authority (any of statute, regulation, administrative, judicial, procedural = the IRM, informational = forms and publications), taxYear, includeInactive |
contents | highlights: on by default, {maxPerResult: 3, maxCharacters: 600}, or false. text: off by default; true or {maxCharacters} returns the matched passage. |
mode | auto (default: reranked) or fast (no reranking, lower latency) |
format | json (default) or claude: each result as a Claude search_result block to put in a tool_result, so Claude cites the section natively |
Exhibit 7.1Request
curl https://www.taxcitation.com/v1/search \
-H "Authorization: Bearer $TAXCITATION_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "late payment penalty per month",
"objective": "What percentage per month is added when tax shown on a return is paid late?",
"numResults": 5,
"filters": {"jurisdictions": ["US"], "sourceTypes": ["statute"], "taxYear": 2025}}'Exhibit 7.2Response, first result
{
"id": "us/irc/6651",
"citation": "26 U.S.C. § 6651",
"citationShort": "IRC § 6651",
"title": "Failure to file tax return or to pay tax",
"url": "https://uscode.house.gov/view.xhtml?req=granuleid:USC-prelim-title26-section6651…",
"jurisdiction": "US",
"sourceType": "statute",
"authority": { "kind": "statute", "substantialAuthority": true },
"status": "in_force",
"path": ["Subtitle F — Procedure and Administration", "Chapter 68 — Additions to the Tax…", "…"],
"rank": 1,
"highlights": [{
"pinpoint": "(a)(2)",
"text": "…there shall be added to the amount shown as tax on such return 0.5 percent of the amount of such tax if the failure is for not more…",
"score": 1
}]
}data.results holds the results; data.warnings says how they were scoped (a jurisdiction your key does not include, a defaulted tax year). authority.kind is statute, regulation, administrative, judicial, procedural (the IRM) or informational (forms and publications); for federal documents, substantialAuthority says whether the document type counts as authority under Treas. Reg. § 1.6662-4(d)(3)(iii). GET /v1/search?q=…&objective=…&limit=…&jurisdiction=…&sourceType=…&taxYear=…&text=1&format=claude takes the same options as query parameters.
§8. Verify
POST/v1/verify
Send claims with their citations, or free text containing citations. Optional asOf.
{"claims": [{"claim": "…", "citation": "…", "quote": "…"}]}
{"text": "…"}| Field | Meaning |
|---|---|
verdict | supported, contradicted, unsupported or unresolved |
confidence | 0 to 1 |
needsReview | True when confidence is below 0.8, the verdict is not supported, or the quote or pinpoint is not found |
quoteMatch | exact, approximate (IRS PDF text) or missing |
Exhibit 8.1Request
curl -X POST https://www.taxcitation.com/v1/verify \
-H "content-type: application/json" -H "X-CPA-Copilot-Client: my-app-prod" \
-d '{"claims": [{"claim": "California imposes a penalty for failure to pay tax.", "citation": "R&TC § 19132(a)(1)"}]}'Exhibit 8.2Response
{
"data": {
"results": [
{
"claim": "California imposes a penalty for failure to pay tax.",
"citation": "R&TC § 19132(a)(1)",
"verdict": "supported",
"needsReview": false,
"citeId": "ca/rtc/19132",
"resolvedCitation": "Cal. Rev. & Tax. Code § 19132",
"status": "in_force",
"pinpointFound": true,
"sourceUrl": "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=RTC§ionNum=19132.",
"notes": [],
"confidence": 1
}
],
"summary": { "total": 1, "supported": 1, "contradicted": 0, "unsupported": 0, "unresolved": 0, "needsReview": 0 }
},
"meta": { "apiVersion": "2026-09-23", "latencyMs": 213 }
}Answer
POST/v1/answer
{"question": "…", "jurisdiction": "US,CA"} returns answer, claims (each with claim, citeId, citation, pinpoint, quote and verification), sources, checks and timingsMs.
§9. MCP
Streamable HTTP at https://www.taxcitation.com/mcp. The same five tools, with the same grants: send your key in the same Authorization header.
claude mcp add --transport http tax-law https://www.taxcitation.com/mcp \
--header "Authorization: Bearer tlk_…"Cursor, Claude Desktop, VS Code and other clients take the same URL and header:
{ "mcpServers": { "tax-law": {
"url": "https://www.taxcitation.com/mcp",
"headers": { "Authorization": "Bearer tlk_…" } } } }Without a header the server serves the free tier. A green connection proves little: ask it to resolve IRC § 162 and check you get the section back.
| Tool | Arguments |
|---|---|
resolve_citation | citation, jurisdiction?, asOf?, includeText? |
search_tax_law | query, objective?, numResults?, jurisdictions?, sourceTypes?, taxYear?, includeInactive?, includeText? |
get_sections | ids (ids or citations, up to 20), highlightQuery?, maxCharacters? |
get_section | cite_id, includeText? |
verify_citations | claims? or text?, asOf? |
answer_tax_question | question, jurisdictions? |
§10. How citations are checked
- Resolve against the index: does the section exist, what is its status, and is the pinpoint present?
- Quote: verbatim for statutes; at least 85% word coverage for IRS PDF text.
- Classify: a TypeSafe Jev
choiceover supports, contradicts or says nothing, with claims batched per section. Verdicts at 0.8 confidence or above are accepted automatically.
§11. Sources and freshness
| Jurisdiction | Sources | From |
|---|---|---|
| Federal | US Code Title 26, with ERISA, the Bank Secrecy Act, the Advisers Act and the Social Security Act; 26 CFR, with 29, 31, 17 and 20 CFR; Internal Revenue Bulletin rulings, procedures, notices and T.D.s since 2004; IRS forms, instructions and publications; Tax Court opinions | OLRC, eCFR, irs.gov, CourtListener |
| California | Revenue and Taxation Code; tax parts of the UIC, Probate, Corporations, Family, B&P, Government and Insurance codes; Const. art. XIII; CCR Title 18 (CDTFA, BOE); CDTFA annotations; OTA and BOE opinions | leginfo pubinfo dump, cdtfa.ca.gov, boe.ca.gov, ota.ca.gov |
| Washington | RCW Titles 82, 83, 84 and related titles; WAC 458, 192, 460 and 4; Washington Tax Decisions; Excise Tax Advisories | leg.wa.gov, dor.wa.gov |
| New York | Tax Law and ten other consolidated laws; 20 NYCRR (in progress); TSB-M and TSB-A; Tax Appeals decisions | NY Senate Open Legislation, Cornell LII, tax.ny.gov, dta.ny.gov |
| New York City | Admin. Code Title 11; RCNY Title 19; Tax Appeals Tribunal decisions; Finance memoranda | American Legal Publishing, nyc.gov |