IRS API: Get tax form
Finds current IRS forms, instructions and publications by number or purpose. Each result has its revision and posting dates, PDF links and a short explanation.
Unofficial. Not affiliated with or endorsed by IRS.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Form, required
form The form number or what it is for, such as W-9 or change of address.
W-9
- Max Results optional
max_results Maximum number of matching products to return, for example 5.
5 (default)
Whole number from 1 to 20.
Input as JSON
{ "form": "W-9"}Output
{ "forms": [ { "type": "form", "title": "Request for Taxpayer Identification Number and Certification", "pdf_link": "https://www.irs.gov/pub/irs-pdf/fw9.pdf" , "explanation": "Form W-9 is used by U.S. persons to provide correct taxpayer identification number (TIN) to payers (or brokers) who are required to file information returns with IRS.", "form_number": "W-9", "posted_date": "2024-03-06", "revision_date": "Mar 2024", "about_page_link": "https://www.irs.gov/forms-pubs/about-form-w-9" , "instructions_pdf_link": "https://www.irs.gov/pub/irs-pdf/iw9.pdf" }, { "type": "instructions", "title": "Instructions for the Requestor of Form W-9, Request for Taxpayer Identification Number and Certification", "pdf_link": "https://www.irs.gov/pub/irs-pdf/iw9.pdf" , "explanation": "Form W-9 is used by U.S. persons to provide correct taxpayer identification number (TIN) to payers (or brokers) who are required to file information returns with IRS.", "form_number": "W-9", "posted_date": "2024-03-11", "revision_date": "Mar 2024", "about_page_link": "https://www.irs.gov/forms-pubs/about-form-w-9" , "instructions_pdf_link": null }, { "type": "form", "title": "Request for Taxpayer Identification Number and Certification (Spanish Version)", "pdf_link": "https://www.irs.gov/pub/irs-pdf/fw9sp.pdf" , "explanation": "Form W-9 (sp), Request for Taxpayer Identification Number and Certification (Spanish Version), is used by U.S. persons to provide correct taxpayer identification number (TIN) to payers (or brokers) who are required to file information returns with IRS.", "form_number": "W-9 (sp)", "posted_date": "2024-03-13", "revision_date": "Mar 2024", "about_page_link": "https://www.irs.gov/forms-pubs/about-form-w-9" , "instructions_pdf_link": "https://www.irs.gov/pub/irs-pdf/iw9.pdf" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"irs.gov/get_tax_form","input":{"form":"W-9"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "irs.gov/get_tax_form" , "input": { "form": "W-9" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "irs.gov/get_tax_form" , "input": { "form": "W-9" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run irs.gov/get_tax_form# with {"form":"W-9"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "form" ], "properties": { "form": { "type": "string", "minLength": 1, "description": "The form number or what it is for, such as W-9 or change of address." }, "max_results": { "type": "integer", "default": 5, "maximum": 20, "minimum": 1, "description": "Maximum number of matching products to return, for example 5." } }}Output schema
{ "type": "object", "required": [ "forms" ], "properties": { "forms": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" }, "title": { "type": "string" }, "pdf_link": { "type": "string" }, "explanation": { "type": [ "string", "null" ] }, "form_number": { "type": "string" }, "posted_date": { "type": [ "string", "null" ] }, "revision_date": { "type": [ "string", "null" ] }, "about_page_link": { "type": [ "string", "null" ] }, "instructions_pdf_link": { "type": [ "string", "null" ] } } } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
irs.gov/get_tax_form- Returns
- form number, title, type, revision date, posted date, PDF link, instructions PDF link, About page link, explanation
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method irs.gov/get_tax_form with the inputs above.
Ask your agent
- Find the current revision of the W-9 form and its PDF link
- I need the IRS form for reporting a change of address, with the posted date
- Look up IRS Publication 17 and its latest revision date on irs.gov
- Which IRS form do I use to request an extension for filing my return, and where is the instructions PDF?
- Show me up to 8 IRS forms related to estimated tax payments, with their About page links
See more
All IRS methodsLooks up an organization in the IRS Tax Exempt Organization Search by name or EIN. It reports whether donations are deductible, whether the organization was automatically revoked, and its recent Form 990 filings.
irs.gov/check_charity_statusFind Federal Register rules, proposed rules, notices, and presidential documents by topic, agency, publication dates, and comment status. Significant means designated significant by the source; documents without that designation show no.
federalregister.gov/search_rulesLooks up a US nonprofit by name, EIN or Nonprofit Explorer link and returns its recent Form 990 filing years with revenue, expenses, assets, liabilities, top reported pay and PDF links.
projects.propublica.org/get_nonprofit_financialsSearch UK legislation by topic or title, with optional type and year filters. Closest title matches appear first; broader text matches fill remaining places.
legislation.gov.uk/search_legislationLists a UK company's Companies House filings, newest first, with date, form code, type, description, page count and PDF link. Finds the company by name, company number or Companies House link; a category picks accounts, confirmation statements, officers, address, capital, charges or incorporation filings.
find-and-update.company-information.service.gov.uk/list_filing_historyFinds current eCFR regulation sections for a topic or an exact CFR citation. Returns each section's text, last amendment date and the date the title is current through.
ecfr.gov/get_regulationFinds matching lines of the US Harmonized Tariff Schedule for a product description or HTS code and returns their general, special-program and column 2 duty rates, units and notes on additional duties.
hts.usitc.gov/get_import_dutySearches public National Archives Catalog records by keywords, year range, material type and online availability, in catalog relevance order.
catalog.archives.gov/search_records