Finance template

US Form 1099-NEC

Nonemployee Compensation form (IRS, for tax years 2020+). Recipient-distribution layout with payer/recipient blocks, Box 1–7 amounts, and state withholding.

Pro, Business & Scale plansCountry: USLanguage: enUS-IRS
slug: us-1099-necRendered with sample data
01

Quick start

Reference the template by its slug and pass your data. The same call works from any language; pick whichever fits your stack. Replace $KAMY_API_KEY with a key from the dashboard.

curl
curl https://kamy.dev/api/v1/render \
  -H "Authorization: Bearer $KAMY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateSlug": "us-1099-nec",
    "data": {
      "taxYear": 2025,
      "copyLabel": "Copy B — For Recipient",
      "payer": {
        "name": "Globex Holdings, Inc.",
        "tin": "91-7654321",
        "street": "500 Pine Avenue, Suite 200",
        "city": "Seattle",
        "state": "WA",
        "zip": "98101",
        "phone": "+1 (206) 555-0142"
      },
      "recipient": {
        "name": "Jordan T. Reyes (Reyes Studio LLC)",
        "tin": "88-1234567",
        "street": "1234 Market Street, Suite 410",
        "city": "San Francisco",
        "state": "CA",
        "zip": "94103"
      },
      "accountNumber": "VENDOR-2025-0418",
      "box1NonemployeeComp": 47500,
      "box2DirectSales": false,
      "box4FederalWithholding": 0,
      "state": {
        "code": "CA",
        "payerStateNo": "WA-9876543",
        "income": 47500,
      // …
    }
  }'
node.js
import { Kamy } from "@kamydev/sdk";

const kamy = new Kamy({ apiKey: process.env.KAMY_API_KEY! });

const { url } = await kamy.render({
  templateSlug: "us-1099-nec",
  data: {
    "taxYear": 2025,
    "copyLabel": "Copy B — For Recipient",
    "payer": {
      "name": "Globex Holdings, Inc.",
      "tin": "91-7654321",
      "street": "500 Pine Avenue, Suite 200",
      "city": "Seattle",
      "state": "WA",
      "zip": "98101",
      "phone": "+1 (206) 555-0142"
    },
    "recipient": {
      "name": "Jordan T. Reyes (Reyes Studio LLC)",
      "tin": "88-1234567",
      "street": "1234 Market Street, Suite 410",
      "city": "San Francisco",
      "state": "CA",
      "zip": "94103"
    },
    "accountNumber": "VENDOR-2025-0418",
    "box1NonemployeeComp": 47500,
    "box2DirectSales": false,
    "box4FederalWithholding": 0,
    "state": {
      "code": "CA",
      "payerStateNo": "WA-9876543",
      "income": 47500,
    // …
  },
});

console.log(url); // signed URL, valid for 1 hour
python
import os, requests

resp = requests.post(
    "https://kamy.dev/api/v1/render",
    headers={"Authorization": f"Bearer {os.environ['KAMY_API_KEY']}"},
    json={
        "templateSlug": "us-1099-nec",
        "data": {
          "taxYear": 2025,
          "copyLabel": "Copy B — For Recipient",
          "payer": {
            "name": "Globex Holdings, Inc.",
            "tin": "91-7654321",
            "street": "500 Pine Avenue, Suite 200",
            "city": "Seattle",
            "state": "WA",
            "zip": "98101",
            "phone": "+1 (206) 555-0142"
          },
          "recipient": {
            "name": "Jordan T. Reyes (Reyes Studio LLC)",
            "tin": "88-1234567",
            "street": "1234 Market Street, Suite 410",
            "city": "San Francisco",
            "state": "CA",
            "zip": "94103"
          },
          "accountNumber": "VENDOR-2025-0418",
          "box1NonemployeeComp": 47500,
          "box2DirectSales": false,
          "box4FederalWithholding": 0,
          "state": {
            "code": "CA",
            "payerStateNo": "WA-9876543",
            "income": 47500,
          // …
        },
    },
)
resp.raise_for_status()
print(resp.json()["url"])
02

Sample payload

The full sample data the live preview above renders from. Use it as a starting point for your own integration — every field is optional except those marked required in the schema below.

json
{
  "taxYear": 2025,
  "copyLabel": "Copy B — For Recipient",
  "payer": {
    "name": "Globex Holdings, Inc.",
    "tin": "91-7654321",
    "street": "500 Pine Avenue, Suite 200",
    "city": "Seattle",
    "state": "WA",
    "zip": "98101",
    "phone": "+1 (206) 555-0142"
  },
  "recipient": {
    "name": "Jordan T. Reyes (Reyes Studio LLC)",
    "tin": "88-1234567",
    "street": "1234 Market Street, Suite 410",
    "city": "San Francisco",
    "state": "CA",
    "zip": "94103"
  },
  "accountNumber": "VENDOR-2025-0418",
  "box1NonemployeeComp": 47500,
  "box2DirectSales": false,
  "box4FederalWithholding": 0,
  "state": {
    "code": "CA",
    "payerStateNo": "WA-9876543",
    "income": 47500,
    "taxWithheld": 0
  }
}
03

JSON Schema

The render endpoint validates your payload against this JSON Schema before queuing the render. Validation errors come back with HTTP 400 and a VALIDATION_FAILED code listing every offending path.

json
{
  "type": "object",
  "required": [
    "taxYear",
    "payer",
    "recipient",
    "box1NonemployeeComp"
  ],
  "properties": {
    "taxYear": {
      "type": "number"
    },
    "copyLabel": {
      "type": "string"
    },
    "payer": {
      "type": "object",
      "required": [
        "name",
        "tin",
        "street",
        "city",
        "state",
        "zip"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "tin": {
          "type": "string"
        },
        "street": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "zip": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        }
      }
    },
    "recipient": {
      "type": "object",
      "required": [
        "name",
        "tin",
        "street",
        "city",
        "state",
        "zip"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "tin": {
          "type": "string"
        },
        "street": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "zip": {
          "type": "string"
        }
      }
    },
    "accountNumber": {
      "type": "string"
    },
    "box1NonemployeeComp": {
      "type": "number"
    },
    "box2DirectSales": {
      "type": "boolean"
    },
    "box4FederalWithholding": {
      "type": "number"
    },
    "state": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "payerStateNo": {
          "type": "string"
        },
        "income": {
          "type": "number"
        },
        "taxWithheld": {
          "type": "number"
        }
      }
    }
  }
}
US Form 1099-NEC template — Kamy PDF API — Kamy