---
title: "IRS Form 1099-NEC (Copy B): API schema and JSON request"
description: This workflow collects payer, recipient, and compensation details needed to prepare the recipient copy of IRS Form 1099-NEC.
seotitle: IRS Form 1099-NEC (Copy B) API schema | PostalForm
seo-description: "Automate IRS Form 1099-NEC (Copy B) with PostalForm: field identifiers, recipient routing, attachments, a JSON request template and the guided browser workflow."
group: resources
indexable: true
llms: true
nav: false
schema: webpage
published: 2026-03-25
updated: 2026-05-31
path: /developers/forms/1099-nec
---
# IRS Form 1099-NEC (Copy B): API schema and JSON request

This workflow collects payer, recipient, and compensation details needed to prepare the recipient copy of IRS Form 1099-NEC.

## How does an agent prepare this form?
PostalForm uses the same workflow definition for this API reference and its guided browser form. Fetch the live schema, collect the active required fields and attachments, and validate the completed request. Review the generated PDF, resolved recipient, mailing service and price with the owner before authorizing payment.

## Submission and recipient rules
| Setting | Current workflow value |
| --- | --- |
| Form slug | `1099-nec` |
| Recipient mode | `user` |
| Certified Mail | optional |
| Base U.S. mail service | USPS First-Class Mail (`mail_class="standard"` in the API); not USPS Marketing Mail |
| Attachment total limit | 12 MB |
| Validate without payment | `POST /api/machine/orders/validate` or `POST /api/machine/mpp/orders/validate` |
| Machine order | `POST /api/machine/orders` (x402) or `POST /api/machine/mpp/orders` (MPP) |

Send a top-level `form` instead of `pdf` or `letter`; those three document sources are mutually exclusive. Workflow forms are letters, not postcards. The machine envelope requires buyer, sender and recipient fields. For predefined or computed recipients, the server binds the final recipient to the workflow rules. Inspect the resolved recipient returned by validation; do not substitute a convenient office address.

The template below is structural, not ready to submit: replace every placeholder, complete the active fields, omit unused optional attachments, and use the field options and visibility rules in the schema. Empty strings and unchecked checkboxes are not user answers. Never infer a signature, legal eligibility, factual declaration or consent from a default value.

## JSON request template
```json
{
  "request_id": "<new UUID; preserve on retry>",
  "buyer_name": "<buyer name>",
  "buyer_email": "<buyer email>",
  "sender_name": "<sender name>",
  "sender_address_type": "Manual",
  "sender_address_manual": {
    "line1": "<street address>",
    "city": "<city>",
    "state": "<state or region>",
    "zip": "<postal code>",
    "countryCode": "US"
  },
  "recipient_name": "<confirmed recipient name>",
  "recipient_address_type": "Manual",
  "recipient_address_manual": {
    "line1": "<street address>",
    "city": "<city>",
    "state": "<state or region>",
    "zip": "<postal code>",
    "countryCode": "US"
  },
  "mail_class": "standard",
  "double_sided": true,
  "color": false,
  "certified": false,
  "form": {
    "slug": "1099-nec",
    "fields": {
      "calendar_year": "",
      "corrected": false,
      "payer_name": "",
      "payer_street_address": "",
      "payer_city_state_zip_phone": "",
      "payer_tin": "",
      "recipient_tin": "",
      "recipient_name": "",
      "recipient_street_address": "",
      "recipient_city_state_zip": "",
      "account_number": "",
      "box_1_nonemployee_compensation": "",
      "box_2_direct_sales": false,
      "box_3_excess_golden_parachute_payments": "",
      "box_4_federal_income_tax_withheld": "",
      "report_state_info": false,
      "state_1_tax_withheld": "",
      "state_2_tax_withheld": "",
      "state_1_payer_state_number": "",
      "state_2_payer_state_number": "",
      "state_1_income": "",
      "state_2_income": ""
    }
  }
}
```

## Field reference
| Field ID | Label | Type | Required when active | Choices |
| --- | --- | --- | --- | --- |
| `calendar_year` | Tax year you're reporting | text | Yes | See schema |
| `corrected` | This is a corrected copy | checkbox | No | See schema |
| `payer_name` | Payer name | text | Yes | See schema |
| `payer_street_address` | Payer street address | text | Yes | See schema |
| `payer_city_state_zip_phone` | Payer city, state, ZIP, and phone | text | Yes | See schema |
| `payer_tin` | Your business tax ID (payer TIN) | text | Yes | See schema |
| `recipient_tin` | Contractor's SSN or tax ID (recipient TIN) | text | Yes | See schema |
| `recipient_name` | Recipient name | text | Yes | See schema |
| `recipient_street_address` | Recipient street address | text | Yes | See schema |
| `recipient_city_state_zip` | Recipient city, state, ZIP | text | Yes | See schema |
| `account_number` | Account number | text | No | See schema |
| `box_1_nonemployee_compensation` | Total you paid the contractor (Box 1) | text | Yes | See schema |
| `box_2_direct_sales` | Direct sales of $5,000 or more for resale (Box 2) | checkbox | No | See schema |
| `box_3_excess_golden_parachute_payments` | Excess golden parachute payments (Box 3) | text | No | See schema |
| `box_4_federal_income_tax_withheld` | Federal income tax withheld (Box 4) | text | No | See schema |
| `report_state_info` | I need to report state tax withholding or state income | checkbox | No | See schema |
| `state_1_tax_withheld` | State 1 tax withheld | text | No | See schema |
| `state_2_tax_withheld` | State 2 tax withheld | text | No | See schema |
| `state_1_payer_state_number` | State 1 payer state number | text | No | See schema |
| `state_2_payer_state_number` | State 2 payer state number | text | No | See schema |
| `state_1_income` | State 1 income | text | No | See schema |
| `state_2_income` | State 2 income | text | No | See schema |

Compound fields use nested objects keyed by subfield ID. Evaluate group and field visibility before deciding which fields are active. Conditional requirements, validation rules, recipient rules, attachment formats and compliance policies are preserved in the complete schema below.

## Complete workflow schema
```json
{
  "schema_version": 1,
  "workflow_version": 1,
  "slug": "1099-nec",
  "name": "IRS Form 1099-NEC (Copy B)",
  "description": "Fill out IRS Form 1099-NEC Copy B online, review the recipient PDF, and mail it to a contractor or other payee.",
  "agent_summary": "This workflow collects payer, recipient, and compensation details needed to prepare the recipient copy of IRS Form 1099-NEC.",
  "form_summary": "Use this workflow to prepare IRS Form 1099-NEC Copy B for the recipient. PostalForm generates a reviewable PDF and mails the recipient copy to the payee after approval. This workflow does not file Copy A with the IRS.",
  "data_collected": [
    "Calendar year and corrected-status indicator",
    "Payer name, address, phone number, and payer TIN",
    "Recipient name, address, and recipient TIN",
    "Nonemployee compensation, withholding, and optional state reporting amounts"
  ],
  "topics": [
    "tax",
    "contractor payments",
    "information returns",
    "1099"
  ],
  "publish_state": "published",
  "llms": true,
  "indexable": true,
  "certified_mail": "optional",
  "recipient": {
    "mode": "user"
  },
  "checkout_flow": "home",
  "published_at": "2026-03-25",
  "updated_at": "2026-05-31",
  "groups": [
    {
      "id": "form-status",
      "label": "Form status",
      "depends_on": []
    },
    {
      "id": "payer-details",
      "label": "Payer details",
      "depends_on": []
    },
    {
      "id": "recipient-details",
      "label": "Recipient details",
      "depends_on": []
    },
    {
      "id": "compensation",
      "label": "Compensation and withholding",
      "depends_on": []
    },
    {
      "id": "state-reporting",
      "label": "State reporting",
      "description": "Complete this only if state tax was withheld or you need to report state income.",
      "visibility": {
        "fieldId": "report_state_info",
        "operator": "truthy"
      },
      "depends_on": [
        "report_state_info"
      ]
    }
  ],
  "fields": [
    {
      "id": "calendar_year",
      "label": "Tax year you're reporting",
      "type": "text",
      "required": true,
      "meta_class": "tax_year",
      "ui_width": null,
      "group_id": "form-status",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "validation": {
        "maxLength": 4
      },
      "compound": null
    },
    {
      "id": "corrected",
      "label": "This is a corrected copy",
      "type": "checkbox",
      "required": false,
      "meta_class": "plain_checkbox",
      "ui_width": null,
      "group_id": "form-status",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "payer_name",
      "label": "Payer name",
      "type": "text",
      "required": true,
      "meta_class": "name",
      "ui_width": null,
      "group_id": "payer-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "payer_street_address",
      "label": "Payer street address",
      "type": "text",
      "required": true,
      "meta_class": "address",
      "ui_width": null,
      "group_id": "payer-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "payer_city_state_zip_phone",
      "label": "Payer city, state, ZIP, and phone",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "payer-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "payer_tin",
      "label": "Your business tax ID (payer TIN)",
      "type": "text",
      "required": true,
      "meta_class": "ein",
      "ui_width": null,
      "group_id": "payer-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "validation": {
        "maxLength": 10
      },
      "compound": null
    },
    {
      "id": "recipient_tin",
      "label": "Contractor's SSN or tax ID (recipient TIN)",
      "type": "text",
      "required": true,
      "meta_class": "tin",
      "ui_width": null,
      "group_id": "recipient-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "validation": {
        "maxLength": 11
      },
      "compound": null
    },
    {
      "id": "recipient_name",
      "label": "Recipient name",
      "type": "text",
      "required": true,
      "meta_class": "name",
      "ui_width": null,
      "group_id": "recipient-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "recipient_street_address",
      "label": "Recipient street address",
      "type": "text",
      "required": true,
      "meta_class": "address",
      "ui_width": null,
      "group_id": "recipient-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "recipient_city_state_zip",
      "label": "Recipient city, state, ZIP",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "recipient-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "account_number",
      "label": "Account number",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "recipient-details",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "validation": {
        "maxLength": 24
      },
      "compound": null
    },
    {
      "id": "box_1_nonemployee_compensation",
      "label": "Total you paid the contractor (Box 1)",
      "type": "text",
      "required": true,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "compensation",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "box_2_direct_sales",
      "label": "Direct sales of $5,000 or more for resale (Box 2)",
      "type": "checkbox",
      "required": false,
      "meta_class": "plain_checkbox",
      "ui_width": null,
      "group_id": "compensation",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "box_3_excess_golden_parachute_payments",
      "label": "Excess golden parachute payments (Box 3)",
      "type": "text",
      "required": false,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "compensation",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "box_4_federal_income_tax_withheld",
      "label": "Federal income tax withheld (Box 4)",
      "type": "text",
      "required": false,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "compensation",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "report_state_info",
      "label": "I need to report state tax withholding or state income",
      "type": "checkbox",
      "required": false,
      "meta_class": "plain_checkbox",
      "ui_width": null,
      "group_id": "state-reporting",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "state_1_tax_withheld",
      "label": "State 1 tax withheld",
      "type": "text",
      "required": false,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "state-reporting",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "state_2_tax_withheld",
      "label": "State 2 tax withheld",
      "type": "text",
      "required": false,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "state-reporting",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "state_1_tax_withheld",
        "operator": "truthy"
      },
      "depends_on": [
        "state_1_tax_withheld"
      ],
      "compound": null
    },
    {
      "id": "state_1_payer_state_number",
      "label": "State 1 payer state number",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "state-reporting",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "state_2_payer_state_number",
      "label": "State 2 payer state number",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "state-reporting",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "state_1_tax_withheld",
        "operator": "truthy"
      },
      "depends_on": [
        "state_1_tax_withheld"
      ],
      "compound": null
    },
    {
      "id": "state_1_income",
      "label": "State 1 income",
      "type": "text",
      "required": false,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "state-reporting",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "state_2_income",
      "label": "State 2 income",
      "type": "text",
      "required": false,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "state-reporting",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "state_1_tax_withheld",
        "operator": "truthy"
      },
      "depends_on": [
        "state_1_tax_withheld"
      ],
      "compound": null
    }
  ],
  "attachments": [],
  "attachments_max_total_size_mb": 12,
  "machine_submission": {
    "payload_property": "form",
    "create_paths": {
      "x402": "/api/machine/orders",
      "mpp": "/api/machine/mpp/orders"
    }
  }
}
```

## Preview, payment and retries
Validation does not mail the document. For a human checkout, use MCP `postalform.create_form_order_draft` and present the returned preview, total and checkout URL. Machine API clients must handle the returned MPP or x402 challenge only within owner-approved spending authority. Preserve `request_id` and the exact payload for retries; changing the content requires a new request ID. After an uncertain payment, retrieve order status before creating another order. Provider handoff is not USPS delivery.


## Resources
- [All machine form schemas](/developers/forms)
- [Guided form](/forms/1099-nec)
- [Current JSON schema](/api/machine/forms/1099-nec/schema)
- [Machine order guide](/agents)
- [Pricing](/pricing)


## Ready to send it?
[Open guided form](/forms/1099-nec)
