1099-NEC and 1099-MISC Filing-Readiness Audit API Reference

Beta. Audits one payer's vendor and payee list for tax year 2026: which payees need a 1099-NEC or 1099-MISC and in which boxes, and every missing or malformed TIN, missing W-9 or address and unpaid backup withholding that would stop a clean filing, with the e-file rule and due dates. Product page and free test form.

Endpoint

PaidPOST https://www.spreadrun.com/api/v1/1099-readiness-audit, API key required, $25.00 per completed audit
DemoPOST https://www.spreadrun.com/api/demo/1099-readiness-audit, no key, 10 runs per day, up to 25 payees and 64 KB.
BodyOne of: CSV text (parameters in the query string); an .xlsx workbook with a Payees sheet, or the first sheet (parameters in the query string or a Parameters sheet of name and value rows); or JSON {"parameters": {...}, "payeesCsv": "..."}. Up to 5,000 rows and 4.4 MB.

Parameters

taxYearOptional, default 2026. The tax year the payments were made in. Only 2026 is supported.
asOfOptional date, YYYY-MM-DD. The day the days-left figures count from. Default: today (UTC).
otherInformationReturnsOptional whole number, default 0. Other information returns you file for the year (Forms W-2, other 1099s). Counted with the forms from this list for the 10-return e-file rule.

An unknown parameter is refused, so a typo never changes the result quietly.

Columns

A header row, then one row per payee with the year's totals. Case and spacing in column names do not matter, and common export names are accepted (for example vendor_name, tax_id, nonemployee_compensation). Blank amounts count as 0. At least one amount column is required.

payee_nameRequired. The name on the payee's Form W-9.
tinThe payee's SSN, ITIN, ATIN or EIN. Write SSNs, ITINs and ATINs as XXX-XX-XXXX and EINs as XX-XXXXXXX, or add tin_type. Rows with the same TIN are one payee.
tin_typeOptional. SSN, EIN, ITIN or ATIN. Needed when the TIN has no dashes.
entity_typeThe federal tax classification from the W-9: individual, sole_proprietor, single_member_llc, partnership, llc_partnership, c_corporation, s_corporation, llc_c_corporation, llc_s_corporation, trust_estate, tax_exempt, government or foreign_person. Blank is treated as reportable, with a warning.
w9_on_fileOptional yes or no.
address1, address2, city, state, zip, countryThe payee's mailing address. US addresses need a state code and a 5 digit or ZIP+4 code; a foreign address needs a country.
necNonemployee compensation paid for the year (1099-NEC box 1a, $2,000 threshold).
attorney_feesFees paid for legal services (1099-NEC box 1a). Reported even when the law firm is a corporation.
rents, royalties, other_income, medical, substitute_payments, attorney_proceeds, fish_purchased1099-MISC boxes 1, 2, 3, 6, 8, 10 and 11.
direct_salesSales of consumer products for resale (the direct sales checkbox at $5,000 or more).
federal_withheldFederal income tax withheld under backup withholding (box 4). Any amount means a form, whatever the payments.
card_paymentsAmounts paid by credit card or a third party network such as PayPal. Not counted: reported on Form 1099-K.
payee_refOptional. Your own vendor reference. Never repeated in the report.

Start from the CSV template or the sample with errors. The payees in the samples are invented.

Method

  • Rows with the same TIN are one payee: their amounts are added together before any threshold is applied. Rows without a TIN are matched by name instead.
  • Each payment type is compared with its threshold for the tax year (rules.json). A form is required for a payee when any box meets its threshold, or when federal income tax was withheld, whatever the amount.
  • Payments to corporations (including LLCs taxed as corporations) are left off, except attorney fees, gross proceeds paid to an attorney, medical and health care payments, substitute payments and fish purchased for resale. Tax-exempt organizations, government units and foreign persons who gave a Form W-8 get no 1099-NEC or 1099-MISC.
  • Amounts in card_payments are not counted: payments by credit card or a third party network such as PayPal are reported by the card company or network on Form 1099-K.
  • Backup withholding: where a reportable payee gave no usable TIN, 24 percent of the reportable amount should have been withheld. The check compares that figure with federal_withheld.

Report

FieldMeaning
statusFAIL if any error, WARN if only warnings, otherwise PASS. A PASS is a readiness check, not tax advice and not IRS acceptance.
payeesOne entry per payee: lines (its rows in your file), entity, reportable, forms (form, then box and amount, such as {"1099-NEC": {"box1a": "4800.00"}}), reason when no form is needed, and backupWithholdingExpected when it applies.
filingformsToFile, informationReturnsCounted, efileRequired and efileRule, system, irisCsvUploads, and dueDates (what, due, daysLeft).
totalsrows, payees, reportablePayees, notReportable, reportableAmount, payeesWithErrors.
thresholdsThe thresholds used for the tax year.
findingsBy line, errors first. Each has severity, ruleId, path, line, message and source. Up to 500; findingsTruncated says when there were more.
methodology, notChecked, sources, rulesReadOn, scope, input, inputSha256The method, what the report does not cover, where the rules come from and when they were read, what the verdict means, and a fingerprint of the request body.

The report never repeats a name, TIN, address or reference. Join it back to your file by lines.

Rule IDs

RuleSeverityMeaningRule source
F1099-TIN-MISSINGerrorA payee who needs a form has no TIN.Pub. 1099
F1099-TIN-SHAPEerrorThe TIN is not nine digits.i1099mec
F1099-TIN-PLACEHOLDERerrorThe TIN is all one digit or a counting sequence.TIN structure
F1099-TIN-AMBIGUOUSerrorNo dashes and no tin_type, so SSN and EIN cannot be told apart.i1099mec
F1099-TIN-DASHerrorThe dashes do not match the TIN type.i1099mec
F1099-TIN-SSN-NEVER-ISSUEDerrorAn SSN with an area, group or serial number the SSA never issues.TIN structure
F1099-TIN-ITIN-RANGEerrorAn ITIN or ATIN outside the IRS ranges.TIN structure
F1099-TIN-EIN-PREFIXerrorAn EIN whose first two digits are not a prefix the IRS assigns.TIN structure
F1099-TIN-ENTITYwarningA corporation or partnership with an individual's number.TIN structure
F1099-W9-MISSINGerror or warningNo W-9 on file for a payee who needs a form (an error when the TIN also has a problem).Pub. 1099
F1099-BACKUP-WITHHOLDINGwarningNo usable TIN, and less than 24 percent of the reportable payments was withheld.Pub. 1099
F1099-NAME-MISSINGerrorThe payee name is blank.i1099mec
F1099-ADDRESS-MISSINGerrorStreet, city, or for a US address the state or ZIP, is blank.i1099mec
F1099-STATEerrorNot a two-letter US state, territory or military code.i1099mec
F1099-ZIPerrorNot 5 digits or ZIP+4, often a lost leading zero.Pub. 5717
F1099-DUPLICATE-PAYEEwarningSeveral rows for one payee: added together.i1099mec
F1099-SAME-TIN-NAMESwarningRows with one TIN but different names.i1099mec
F1099-ENTITY-UNKNOWNwarningNo entity type: treated as reportable.i1099mec
F1099-ENTITY-CONFLICTwarningRows for one payee give different entity types.i1099mec
F1099-FOREIGNwarningA foreign person: no 1099, but Form 1042-S may apply.Pub. 1099

Source keys, as returned in every report:

i1099mecIRS Instructions for Forms 1099-MISC and 1099-NEC (Rev. December 2026)
p1099IRS Publication 1099 (2026), General Instructions for Certain Information Returns
p5717IRS Publication 5717 (Rev. 9-2026), IRIS Taxpayer Portal User Guide
tinIRS TIN structure: SSN numbers never issued (area 000, 666 or 900-999, group 00, serial 0000), ITIN and ATIN ranges, and the EIN prefixes the IRS assigns

Not checked

  • Whether each payment is really for services, rent or the other types as you entered them, and whether the payee is an employee (wages go on Form W-2, not a 1099).
  • Whether a TIN matches the name on IRS records. A TIN can have a valid structure and still be wrong: use the IRS TIN Matching program before you file.
  • The boxes new for 2026 (1099-NEC boxes 1b cash tips, 1c Treasury tipped occupation code, 1d qualified overtime and 3 excess golden parachute payments; 1099-MISC boxes 13a, 13b and 14), and 1099-MISC boxes 5, 9, 12 and 15 (fishing boat proceeds, crop insurance proceeds, section 409A deferrals, nonqualified deferred compensation). Add them yourself where they apply.
  • Payments by a federal executive agency for services, which are reported even when paid to a corporation.
  • State filing requirements, state withholding and the combined federal and state program.
  • The IRIS upload file itself. The IRS publishes the tax year 2026 IRIS CSV templates inside the IRIS portal; use the template for each form type.

Example responses

A paid audit of the clean sample (report shortened, payees left out), its first two payees, and the findings from a demo run of the sample with errors. All generated by running the real endpoint code.

{
  "requestId": "7f3c2a1e-5b8d-4c6f-9e0a-1d2b3c4d5e6f",
  "api": "1099-readiness-audit",
  "mode": "paid",
  "charged": true,
  "priceCents": 2500,
  "balanceCents": 2500,
  "report": {
    "schemaVersion": 1,
    "status": "PASS",
    "summary": "4 of 8 payees need a 1099 for tax year 2026, and nothing in these rows stops a clean filing.",
    "taxYear": 2026,
    "asOf": "2026-11-03",
    "thresholds": {
      "nec": "2000",
      "rents": "2000",
      "royalties": "10",
      "other_income": "2000",
      "medical": "2000",
      "substitute_payments": "10",
      "attorney_proceeds": "600",
      "fish_purchased": "600",
      "direct_sales": "5000"
    },
    "totals": {
      "rows": 8,
      "payees": 8,
      "reportablePayees": 4,
      "notReportable": 4,
      "reportableAmount": "34800.00",
      "payeesWithErrors": 0
    },
    "filing": {
      "formsToFile": {
        "1099-NEC": 2,
        "1099-MISC": 2
      },
      "informationReturnsCounted": 4,
      "efileRequired": false,
      "efileRule": "4 information returns counted (4 from this list). At 10 or more, counting all types together, you must file electronically.",
      "system": "IRIS (Information Returns Intake System). FIRE takes no tax year 2026 returns.",
      "irisCsvUploads": {
        "1099-NEC": 1,
        "1099-MISC": 1
      },
      "irisCsvNote": "The IRIS Taxpayer Portal takes up to 250 forms per CSV file, one form type and one tax year per file, using the IRS template for that form.",
      "dueDates": [
        {
          "what": "1099-NEC to the IRS and to recipients",
          "due": "2027-02-01",
          "daysLeft": 90
        },
        {
          "what": "1099-MISC statements to recipients",
          "due": "2027-02-01",
          "daysLeft": 90
        },
        {
          "what": "1099-MISC to the IRS, electronically",
          "due": "2027-03-31",
          "daysLeft": 148
        }
      ],
      "cardPaymentsNote": "1 row include card or third party network payments. They were not counted: the card company or network reports them on Form 1099-K."
    },
    "findingCount": 0,
    "findingCounts": {
      "error": 0,
      "warning": 0
    },
    "ruleCounts": {},
    "findings": [],
    "findingsTruncated": false,
    "rulesReadOn": "2026-11-03",
    "scope": "A readiness check of the payee list you entered against the published IRS rules for the tax year. It is not tax advice, not a filing and not IRS acceptance. A PASS means no problems were found in these rows; the returns, and the decisions about what each payment was, remain yours.",
    "input": {
      "format": "json",
      "bytes": 1102,
      "columns": [
        "address1",
        "attorney_fees",
        "card_payments",
        "city",
        "entity_type",
        "federal_withheld",
        "medical",
        "nec",
        "payee_name",
        "payee_ref",
        "rents",
        "state",
        "tin",
        "tin_type",
        "w9_on_file",
        "zip"
      ]
    },
    "inputSha256": "408c25805de0f25555686d4c37138b6ae20839b820378561bfa1b622c9383ac3"
  }
}
[
  {
    "lines": [
      2
    ],
    "entity": "individual",
    "forms": {
      "1099-NEC": {
        "box1a": "4800.00"
      }
    },
    "reportable": true
  },
  {
    "lines": [
      3
    ],
    "entity": "corporation",
    "forms": {},
    "reportable": false,
    "reason": "Payments to corporations are not reported, except attorney fees, medical and health care payments and the other listed exceptions."
  }
]
[
  {
    "severity": "error",
    "ruleId": "F1099-TIN-MISSING",
    "path": "/payees/line[2]",
    "line": 2,
    "message": "A 1099 is required but there is no TIN. Get a Form W-9 before you file. Without a TIN, backup withholding applies to the payments.",
    "source": "p1099"
  },
  {
    "severity": "error",
    "ruleId": "F1099-W9-MISSING",
    "path": "/payees/line[2]",
    "line": 2,
    "message": "There is no Form W-9 on file for a payee who needs a 1099. Request one now: the W-9 gives the legal name, TIN and tax classification that go on the form.",
    "source": "p1099"
  },
  {
    "severity": "warning",
    "ruleId": "F1099-BACKUP-WITHHOLDING",
    "path": "/payees/line[2]",
    "line": 2,
    "message": "This payee gave no usable TIN, so 24 percent of the reportable payments should have been withheld as backup withholding. Less was withheld. The payer is liable for backup withholding it should have collected; collect the W-9 before the next payment.",
    "source": "p1099"
  },
  {
    "severity": "error",
    "ruleId": "F1099-TIN-EIN-PREFIX",
    "path": "/payees/line[3]",
    "line": 3,
    "message": "The TIN is marked as an EIN, but its first two digits are not a prefix the IRS assigns to EINs. It is probably mistyped, or it is an SSN.",
    "source": "tin"
  },
  {
    "severity": "warning",
    "ruleId": "F1099-DUPLICATE-PAYEE",
    "path": "/payees/line[4]",
    "line": 4,
    "message": "Lines 4, 5 are the same payee. Their amounts were added together, because the thresholds apply to the total paid to a payee for the year.",
    "source": "i1099mec"
  },
  {
    "severity": "warning",
    "ruleId": "F1099-ENTITY-UNKNOWN",
    "path": "/payees/line[4]",
    "line": 4,
    "message": "No entity type, so this payee was treated as reportable. If the W-9 shows a corporation, most of these payments need no 1099. Add entity_type from the W-9.",
    "source": "i1099mec"
  }
]

Errors

See the shared error table. Rejected with HTTP 400 and not charged: a tax year other than 2026, no payee_name or amount column, a column this audit does not use, an unreadable or negative amount, an unknown entity_type or tin_type, and on the demo endpoint more than 25 payees. Example, tax year 2025 (HTTP 400):

{
  "error": {
    "code": "input_error",
    "message": "This audit covers tax year 2026. Other years use different thresholds and due dates.",
    "requestId": "7f3c2a1e-5b8d-4c6f-9e0a-1d2b3c4d5e6f",
    "charged": false
  }
}

Code samples

curl -X POST "https://www.spreadrun.com/api/v1/1099-readiness-audit?taxYear=2026" \
  -H "Authorization: Bearer $SPREADRUN_API_KEY" \
  -H "Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" \
  --data-binary @vendors_2026.xlsx