US bilateral income and estate tax treaties, together with Treasury's Technical Explanations, are available as a queryable corpus of 119 items behind corpusType=US_TAX_TREATY, refreshed as treaties are signed. The point of putting them behind an API is not storage. It is addressability at the article level, because nobody reads a treaty end to end. They read Article 7, or Article 12, or the Limitation on Benefits article, and a PDF sitting on a Treasury page cannot hand you one article as data. If you are building for cross-border tax, transfer pricing, or a payroll or payments platform that has to decide a withholding rate at runtime, that granularity is the whole product.
TL;DR
- 119 items,
corpusType=US_TAX_TREATY, refreshed as treaties are signed. The corpus covers US bilateral income and estate tax treaties plus Treasury's Technical Explanations. - Article-level retrieval is the reason this exists. A treaty PDF is one blob. A treaty corpus is a set of citable articles you can pin, diff, and quote.
- A Technical Explanation is Treasury's own article-by-article commentary on what the treaty text means, submitted to the Senate with the treaty. It is the closest thing a treaty has to legislative history, and practitioners lean on it hard.
- Article numbering is not standard across treaties. Business profits is not always Article 7 and Limitation on Benefits is not always Article 22, which is exactly why you query the specific treaty instead of hardcoding a number.
- A treaty alone is never the answer. A real position needs the article, the Technical Explanation, the Internal Revenue Code section in Title 26, and the Treasury Regulations in 26 CFR, and those interact through the later-in-time rule and the treaty's own saving clause.
- Deliberately not here: the OECD Model and its Commentary (not US primary law), competent authority agreements, and any foreign country's domestic tax law.

How many items sit behind corpusType=US_TAX_TREATY?
One of the source-by-source entries in our US primary law corpus series.
The fourth corpus in the sequence below has its own post: IRS Guidance API: Revenue Rulings, Revenue Procedures, Notices, and Announcements. For the Treasury Regulations side, see CFR API: 219,114 Federal Regulation Sections, Refreshed Daily.
How these numbers were measured
Counts come from a live measurement of our own corpus on 2026-08-30. GET /us/statutes/coverage is free, returns per-corpus counts with a measuredAt stamp, and is the endpoint to call before you trust anything in this post. The coverage reference describes it. We build this API, so verify rather than take our word for it.
Legal propositions carry their citation inline. Nothing here is tax advice, and a treaty position is a lawyer's call, not an API response.
Why article-level addressing is the whole point
Treasury publishes each treaty as a document. That is correct for a treaty and useless for software.
Consider what a cross-border question actually looks like. A payments platform is about to pay a software license fee to a company in another country and has to decide the withholding rate. That decision turns on one article, the royalties article, and possibly on the Limitation on Benefits article that determines whether the recipient qualifies for treaty benefits at all.
The platform does not want a 40-page PDF. It wants one article, its text, its stable id, and the official source URL so a human can check it.
What a Technical Explanation is, and why practitioners rely on it
When Treasury sends a signed treaty to the Senate for advice and consent, it also prepares a Technical Explanation: a document that walks the treaty article by article and says what the negotiated language means.
This is not a summary and it is not commentary from a publisher. It is the executive branch's own account of what it agreed to, produced by the people who negotiated it, and put in front of the body that has to consent to it.
That provenance is why practitioners treat it the way they treat legislative history for a statute. When treaty text is ambiguous, the Technical Explanation is usually the first place anybody looks, and it frequently resolves the question outright.
For a developer, the practical consequence is that a treaty article and its Technical Explanation paragraph are two texts that must be retrievable as a pair. A tool that returns the article and drops the explanation has done the easy half.
| Document | Who writes it | What it is for | In this corpus? |
|---|---|---|---|
| Bilateral treaty text | The two governments | The binding instrument | Yes |
| Treasury Technical Explanation | US Treasury | Article-by-article meaning, sent to the Senate | Yes |
| Protocol | The two governments | Amends specific articles of an existing treaty | Yes, as signed instruments |
| Senate Foreign Relations Committee report | The Senate committee | The Senate's own record on consent | Not in this corpus |
| Competent authority agreement | The two tax administrations | Resolves specific interpretive or case issues | Not in this corpus |
| OECD Model and Commentary | The OECD | Drafting and interpretive reference | Not in this corpus, not US primary law |
| Foreign domestic tax law | Each foreign country | The other side of the transaction | Not in this corpus |
Refresh cadence, and what "signed" does not mean
This corpus refreshes as treaties are signed, which is the right cadence for an instrument that changes rarely and discontinuously.
Be precise about the lifecycle, because it trips people up. A treaty is negotiated, then signed, then submitted to the Senate for advice and consent, then ratified, and only then enters into force. Effective dates for particular taxes often lag entry into force by a further period specified in the treaty itself.
Signature is not force. A signed protocol can sit for years before it does anything to a withholding rate.
The interaction with domestic law
A treaty does not float above the Internal Revenue Code, and the Code does not override the treaty by default. They interact through two mechanisms that any serious cross-border tool has to represent.
The later-in-time rule. A treaty and a federal statute occupy the same rung, so where they genuinely conflict, the later-enacted one controls. Congress said this explicitly for tax at 26 U.S.C. § 7852(d)(1), which provides that neither a treaty nor a law has preferential status by reason of its being a treaty or a law. The underlying constitutional principle traces to Whitney v. Robertson, 124 U.S. 190 (1888).
The saving clause. Almost every US treaty contains one. It reserves the right of the United States to tax its own citizens and residents as if the treaty had not entered into force, subject to a listed set of exceptions carved out inside the clause itself.
That second one is where most naive tools go wrong. A model that reads "Article 15 says employment income is taxable only in the residence state" and stops has skipped the clause that pulls US persons back out of the benefit. The exceptions list inside the saving clause is the part that decides the answer.
Two Code provisions round out the picture. 26 U.S.C. § 894(a) provides that the Code applies with due regard to any treaty obligation of the United States. 26 U.S.C. § 6114 requires a taxpayer to disclose a treaty-based return position, with the mechanics in 26 CFR § 301.6114-1.
The worked query sequence, across four corpora
Base URL is https://api.vaquill.ai/api/v1, auth is a bearer key, and statutes routes are mounted at /us/statutes/*. Search costs 4 credits, coverage is free, and failed calls are not charged.
Step 0. See what is there.
curl -s https://api.vaquill.ai/api/v1/us/statutes/coverage \
-H "Authorization: Bearer vq_key_..."
Coverage is worth calling here for one reason: the count. Because a treaty and its Technical Explanation are separate items, 119 items is not 119 countries, and coverage is where you enumerate what is actually present instead of guessing.
Step 1. Find the article.
curl -s -X POST https://api.vaquill.ai/api/v1/us/statutes/search \
-H "Authorization: Bearer vq_key_..." \
-H "Content-Type: application/json" \
-d '{
"query": "royalties withholding rate industrial equipment",
"corpusType": "US_TAX_TREATY",
"limit": 10
}'
Search is hybrid, running semantic and keyword retrieval together, a design Hybrid Search Over 12 Million Legal Passages: Why Semantic Alone Fails on Law explains. Treaty language is stilted and old ("payments of any kind received as a consideration for the use of, or the right to use..."), so the semantic half matters more here than in most corpora. Users ask about "royalty withholding" and the document says something else entirely.
Step 2. Pull the article, then its Technical Explanation.
curl -s "https://api.vaquill.ai/api/v1/us/statutes/section/{actId}" \
-H "Authorization: Bearer vq_key_..."
The actId is stable and not guessable, a shape the section id reference sets out. Take it from the search response and store it; ids you construct from a citation string tend to 404, and that is deliberate rather than a defect. Every result carries the official source URL for the publisher's own copy, so a reviewer can open Treasury's version of the same text.
Step 3. Get the Code section.
-d '{
"query": "withholding of tax on nonresident aliens",
"corpusType": "USC",
"titleNumber": "26",
"limit": 5
}'
Title 26 lives inside the USC corpus at 60,170 sections, current through the publisher's stated date on the 2024 edition.
Step 4. Get the regulation.
-d '{
"query": "claim of reduced withholding under an income tax treaty",
"corpusType": "CFR",
"titleNumber": "26",
"limit": 5
}'
The CFR corpus is 219,114 sections and refreshes daily, which is the piece of this chain that moves most often.
Step 5. Get the administrative guidance.
-d '{
"query": "treaty benefit documentation procedure",
"corpusType": "AGENCY_GUIDANCE",
"source": "irs_rev_proc",
"limit": 5
}'
IRS revenue procedures, revenue rulings, notices, and announcements sit under AGENCY_GUIDANCE at 1,469 documents combined across irs_rev_proc, irs_rev_rul, irs_notice, and irs_announcement, covering 2015 to the present and refreshed weekly. We have a separate post in this series on querying IRS guidance as data, including where that 2015 start date bites; read it alongside this one if guidance is a load-bearing part of your workflow.
Five calls, one schema, one actId convention, and a citation at every step. Unknown filter values return 422 rather than silently matching nothing, and the source filter's error message lists every valid code, so a wrong guess teaches you the vocabulary. Paging is cut from a single ranking, so results never repeat or disappear between pages and a later page costs no more than the first.
The four-corpus table
| Layer | corpusType | Filter | Size | Refresh |
|---|---|---|---|---|
| Treaty article and Technical Explanation | US_TAX_TREATY | none needed | 119 items | As treaties are signed |
| Internal Revenue Code | USC | titleNumber=26 | 60,170 total sections | Checked weekly for a new edition |
| Treasury Regulations | CFR | titleNumber=26 | 219,114 total sections | Daily |
| IRS administrative guidance | AGENCY_GUIDANCE | source=irs_rev_proc and siblings | 1,469 combined | Weekly |
Those four are the answer, and each token in the corpusType column is defined in the corpus types reference. A tool that serves only the first one is a document viewer with extra steps. The last row is unpacked in IRS Guidance API: Revenue Rulings, Revenue Procedures, Notices, and Announcements, and the Treasury Regulations row in CFR API: 219,114 Federal Regulation Sections, Refreshed Daily.
The version problem, stated honestly
Every citation here maps to one text, the one in force, and no as_of=DATE parameter exists. Point-in-time retrieval of a superseded treaty article is not something this corpus can do. Amendment History and Point-in-Time Law: What a Legal API Can and Cannot Tell You is the fuller argument for why.
For tax that is a real constraint, because a return position for an earlier year runs on the text in force for that year, and a protocol may have replaced an article since. Say this plainly in your product rather than letting a user assume the API is answering a historical question.
What you do get: amendment history per section, a lastAmendedYear field, yearFrom and yearTo currency filters, change events captured on each refresh, and per-section diffs on watched sources. Those tell you that something changed and when, which is enough to route a human to the right archived document, and they are not a substitute for serving the old text.
One caveat on the year filters everywhere in the API: they filter on the last amendment year the publisher credits, so they track the law rather than our rebuild date. About a fifth of sections across the whole corpus carry no amendment credit at all, because some publishers print none, and those drop out of results once either bound is set.
Who this is wrong for
The OECD Model Commentary sits outside this corpus by design. It is an influential interpretive reference rather than US primary law, so it falls outside a government-source-only policy.
The other country's domestic law is the other half of a treaty analysis, and it lives in a foreign jurisdiction rather than in a US primary law corpus.
If your workflow depends on competent authority agreements or on the Senate committee record, those are separate documents and they are not in the 119.
And if you want a rate lookup that returns a single number for a country and a payment type, build that yourself on top of these calls. We serve the law; the arithmetic and the qualification analysis are yours, and any vendor selling you a bare rate table without the Limitation on Benefits analysis is selling you a liability.
Where the corpus sits
Federal coverage totals 618,875 sections inside a corpus of 4,150,839 distinct sections across 53 jurisdictions, indexed as 12,003,716 retrieval passages.
| Federal corpus | corpusType | Sections | Refresh |
|---|---|---|---|
| Code of Federal Regulations | CFR | 219,114 | Daily |
| Federal Register rules, 1994 to present | FEDERAL_REGISTER | 202,526 | Weekly |
| Statutes at Large, 113th to 119th Congresses | SESSION_LAW | 110,287 | Weekly |
| United States Code, 2024 edition | USC | 60,170 | Checked weekly |
| Federal agency guidance, 34 sources | AGENCY_GUIDANCE | 21,906 | Weekly |
| Executive Orders, 2015 to present | EXECUTIVE_ACTION | 3,788 | Daily |
| Federal Rules of Procedure and Supreme Court Rules | FEDERAL_RULES | 589 | Monthly |
| US Sentencing Guidelines | SENTENCING_GUIDELINES | 302 | Annual |
| US bilateral tax treaties and Technical Explanations | US_TAX_TREATY | 119 | As signed |
| US Constitution | CONSTITUTION | 74 | On amendment |
The sourcing rule across those corpora is the government publisher's own copy, and a commercial aggregator is never used as a source. None falls back to one. Where a publisher's terms prohibit automated access, the corpus is paused and the pause is declared in the freshness array of the API response itself rather than quietly patched from a reseller.
The same surface is published as an MCP server at mcp.vaquill.ai, so an agent can run the five-call sequence above as tools. We build the Vaquill AI primary law API, and the collection layer behind it is published at open-us-law, so the sourcing is readable rather than asserted.
FAQ
What is in the US tax treaty corpus?
119 items behind corpusType=US_TAX_TREATY, covering US bilateral income and estate tax treaties along with Treasury's Technical Explanations and signed protocols. It refreshes as treaties are signed. Because a treaty and its Technical Explanation are separate items, the item count is larger than the number of countries covered.
What is a Technical Explanation and does it bind anyone?
It is Treasury's article-by-article commentary on a treaty, prepared by the negotiators and submitted to the Senate with the treaty itself. It is not the treaty and it does not bind a court, but it is the closest thing a treaty has to legislative history and it is where practitioners look first when text is ambiguous.
Can I look up a treaty article by number?
Yes, but query for the concept first and read the number off the response. Article numbering varies across treaties because each was negotiated separately over decades against different model drafts, so business profits is not always Article 7 and Limitation on Benefits is not always Article 22.
How does a tax treaty interact with the Internal Revenue Code?
Through the later-in-time rule and the saving clause. Neither instrument has automatic priority, which Congress made explicit at 26 U.S.C. § 7852(d)(1), and the constitutional principle traces to Whitney v. Robertson, 124 U.S. 190 (1888). Separately, the saving clause in most US treaties lets the United States tax its own citizens and residents as if the treaty had not entered into force, subject to the exceptions listed inside the clause.
Is the OECD Model Tax Convention included?
No. The OECD Model and its Commentary are drafting and interpretive references rather than US primary law, so they sit outside the sourcing policy for this corpus. Competent authority agreements and any foreign country's domestic tax law are also out of scope.
Can I retrieve the version of a treaty article that applied in an earlier year?
Versioning here runs off the amendment record rather than a date parameter. A citation maps to one text here, the one in force, and no as_of parameter is offered. You do get amendment history, a lastAmendedYear field, yearFrom and yearTo filters, change events per refresh, and per-section diffs on watched sources, which tell you that something moved without serving the superseded text.
What corpora do I need for a full cross-border answer?
Four. The treaty article and its Technical Explanation in US_TAX_TREATY, the Code section under corpusType=USC with titleNumber=26, the Treasury Regulation under corpusType=CFR with titleNumber=26, and IRS administrative guidance under AGENCY_GUIDANCE with source=irs_rev_proc or its sibling codes.
How much does this cost per query?
A search call is 4 credits. GET /us/statutes/coverage and GET /boards are free, failed calls are not charged, and paging costs the same on a later page as on the first because pages are cut from a single ranking.
Does signing a treaty change the withholding rate right away?
No. Signature is followed by Senate advice and consent, ratification, and entry into force, and effective dates for particular taxes often lag entry into force by a period the treaty specifies. Model signature, entry into force, and effective date as separate fields, or your platform will apply a rate that is not yet in effect.
Are estate tax treaties covered too?
Yes. The corpus covers US bilateral income and estate tax treaties. The US estate and gift treaty network is much smaller than the income treaty network, so call GET /us/statutes/coverage to see what is present rather than assuming a counterpart exists for a given country.
New legal AI guides, weekly.
Further Reading
FAR and DFARS API: Government Contract Clauses You Can Query by Number
Read postExecutive Orders API: Presidential Documents, Refreshed Daily
Read postCFR API: 219,114 Federal Regulation Sections, Refreshed Daily
Read postInsurance Compliance Across 50 States: Where the Rules Actually Live
Read postState Insurance Bulletins API: 49 Insurance Departments in One Query
Read postState Constitutions API: 51 Jurisdictions With Article and Section Structure
Read post
Co-Founder & CTO
Priyansh leads engineering and AI at Vaquill, from the matter workbench to drafting, document comparison, document matrix, and citation-verified research.