List forms

Lists the 1099s the caller org prepared as payer, oldest first, voided and superseded ones included — a return that was furnished stays on the record.

GET /v1/tax/forms

Addresshttps://api.hanzo.ai/v1/tax/forms
MethodGET
Operationget_tax_forms
AuthAuthorization: Bearer $HANZO_API_KEY

Lists the 1099s the caller org prepared as payer, oldest first, voided and superseded ones included — a return that was furnished stays on the record. Org admins only.

Request

1 field.

FieldInTypeRequiredDescription
yearqueryinteger—Year narrows the list to one tax year; absent lists every year.

Response

StatusBodyMeaning
200tax.formListok
defaultproblem-detailsrefused

200 body — 59 fields.

FieldInTypeAlwaysDescription
databodytax.Form[]—Data are the forms, oldest first.
data[].accountbodystring—Account is the account number the form prints — the original form's id, which a correction keeps, so the IRS can tie the two.
data[].backupbodytax.Withholding—
data[].backup.dueCentsbodyinteger (int64)—DueCents is what 24% of the reported boxes comes to — what should have been withheld.
data[].backup.ratebodyinteger (int64)—Rate is the backup withholding rate, in percent: 24.
data[].backup.reasonbodystring—Reason says why, and which rule — or, when nothing is required, what the payer should still know.
data[].backup.requiredbodyboolean—Required is true when the payer holds no TIN for the payee — the IRC §3406(a)(1)(A) trigger these forms can know.
data[].boxesbodytax.Amount[]—Boxes are the figures, box 4 (federal income tax withheld) included.
data[].boxes[].boxbodystring—Box is the box number, e.g. "1a".
data[].boxes[].centsbodyinteger (int64)—Cents is the amount in cents.
data[].boxes[].labelbodystring—Label is the box's caption on the form.
data[].certifiedbodyboolean—Certified is whether the payee's W-9 was certified when the form was prepared.
data[].correctedbodyboolean—Corrected is true for a form that corrects one already furnished.
data[].createdAtbodyinteger (int64)—CreatedAt is when the form was prepared, unix seconds.
data[].deliverybodystring—Delivery is electronic (Copy B in the payee's inbox) or paper, once furnished.
data[].duebodytax.Deadline—
data[].due.filebodystring—File is the date the return is due to the IRS, electronically (IRIS).
data[].due.furnishbodystring—Furnish is the date Copy B is due to the recipient.
data[].furnishedAtbodyinteger (int64)—FurnishedAt is when Copy B was delivered in the inbox, or marked owed on paper.
data[].idbodystring—ID is the form's id, "f1099_"-prefixed.
data[].kindbodystring—Kind is 1099-NEC or 1099-MISC.
data[].mailedAtbodyinteger (int64)—MailedAt is when the payer recorded mailing a paper Copy B.
data[].notesbodystring[]—Notes are what still needs a person, in words.
data[].payerbodytax.Party—
data[].payer.addressbodytax.Address—
data[].payer.address.citybodystring—City is the city or town.
data[].payer.address.countrybodystring—Country is ISO 3166-1 alpha-2; "US" when absent.
data[].payer.address.line1bodystring—Line1 is the number, street, and apartment or suite.
data[].payer.address.line2bodystring—Line2 continues the street address, when there is more of it.
data[].payer.address.statebodystring—State is the two-letter state or territory code.
data[].payer.address.zipbodystring—ZIP is five or nine digits.
data[].payer.businessNamebodystring—BusinessName is W-9 line 2, when there is one.
data[].payer.namebodystring—Name is W-9 line 1.
data[].payer.orgbodystring—Org is the Hanzo org.
data[].payer.phonebodystring—Phone is the payer's telephone number; a recipient has none on the form.
data[].payer.tinbodystring—TIN is masked here always.
data[].payer.tinTypebodystring—TINType is ssn or ein; empty when no TIN is held.
data[].paymentsbodystring[]—Payments are the rail payment ids summed into the boxes.
data[].reasonbodystring—Reason is why a corrected form was made.
data[].recipientbodytax.Party—
data[].recipient.addressbodytax.Address—
data[].recipient.address.citybodystring—City is the city or town.
data[].recipient.address.countrybodystring—Country is ISO 3166-1 alpha-2; "US" when absent.
data[].recipient.address.line1bodystring—Line1 is the number, street, and apartment or suite.
data[].recipient.address.line2bodystring—Line2 continues the street address, when there is more of it.
data[].recipient.address.statebodystring—State is the two-letter state or territory code.
data[].recipient.address.zipbodystring—ZIP is five or nine digits.
data[].recipient.businessNamebodystring—BusinessName is W-9 line 2, when there is one.
data[].recipient.namebodystring—Name is W-9 line 1.
data[].recipient.orgbodystring—Org is the Hanzo org.
data[].recipient.phonebodystring—Phone is the payer's telephone number; a recipient has none on the form.
data[].recipient.tinbodystring—TIN is masked here always.
data[].recipient.tinTypebodystring—TINType is ssn or ein; empty when no TIN is held.
data[].statusbodystring—Status is draft, reviewed, furnished, owed or void.
data[].supersededBybodystring—SupersededBy is the form that corrects this one, once there is one.
data[].supersedesbodystring—Supersedes is the form this one corrects.
data[].updatedAtbodyinteger (int64)—UpdatedAt is when its status last moved, unix seconds.
data[].w9bodystring—W9 is where the payer's W-9 request stood when the form was prepared.
data[].yearbodyinteger (int64)—Year is the calendar year the payments were made.

Failure carries the platform error shape — see Errors.

Examples

hanzo has no subcommand for this operation — the CLI serves only what cloud's live route table confirms. Use HTTP or an SDK.

import { Configuration, TaxApi } from 'hanzoai';

const api = new TaxApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getTaxForms();
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import TaxApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = TaxApi(client).get_tax_forms()
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.TaxAPI.GetTaxForms(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, tax_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = tax_api::get_tax_forms(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.TaxApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new TaxApi(client).getTaxForms();
curl https://api.hanzo.ai/v1/tax/forms \
  -H "Authorization: Bearer $HANZO_API_KEY"

MCP reaches tax through the tax tool, which names its 26 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_tax_filings"
         }
       }
     }'

Tax API · All Hanzo APIs · Interactive reference

Was this page useful?