1099 & W-9 API

The Avalara 1099 and W-9 API automates collection, validation, and e-filing of IRS forms including 1099 variants, 1095 forms, W-2, and 1042-S, providing endpoints for creating, updating, and managing various IRS forms for US and foreign companies.

OpenAPI Specification

avalara-1099-w9-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Avalara 1099 & W-9 API
  description: >-
    The Avalara 1099 and W-9 API automates collection, validation, and e-filing
    of IRS forms including 1099 variants (1099-NEC, 1099-MISC, 1099-K, 1099-INT,
    1099-DIV), 1095 forms, W-2, and 1042-S. It provides endpoints for creating,
    updating, managing, and filing various IRS information returns.
  version: '1.0'
  contact:
    name: Avalara Developer Relations
    url: https://developer.avalara.com/
    email: [email protected]
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  termsOfService: https://legal.avalara.com/#siteterms
externalDocs:
  description: 1099 & W-9 API Documentation
  url: https://developer.avalara.com/api-reference/avalara1099/avalara1099/
servers:
- url: https://api.avalara.com/1099/v1
  description: 1099 API Production
- url: https://api.sbx.avalara.com/1099/v1
  description: 1099 API Sandbox
tags:
- name: 1099 Forms
  description: Create and manage 1099 information returns
- name: Companies
  description: Manage payer company records
- name: Filing
  description: E-file forms with the IRS
- name: W-9 Forms
  description: Collect and manage W-9 forms
security:
- bearerAuth: []
paths:
  /w9/requests:
    post:
      operationId: createW9Request
      summary: Avalara Create a W-9 Collection Request
      description: >-
        Sends a W-9 collection request to a payee, allowing them to submit
        their taxpayer information electronically.
      tags:
      - W-9 Forms
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/W9Request'
      responses:
        '201':
          description: W-9 request created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/W9RequestResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
    get:
      operationId: listW9Requests
      summary: Avalara List W-9 Requests
      tags:
      - W-9 Forms
      parameters:
      - name: status
        in: query
        schema:
          type: string
          enum:
          - Pending
          - Completed
          - Expired
      - name: $top
        in: query
        schema:
          type: integer
      - name: $skip
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: List of W-9 requests
  /w9/{w9Id}:
    get:
      operationId: getW9
      summary: Avalara Get a Completed W-9 Form
      tags:
      - W-9 Forms
      parameters:
      - name: w9Id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: W-9 form details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/W9Form'
  /forms/1099:
    post:
      operationId: create1099Form
      summary: Avalara Create a 1099 Form
      description: >-
        Creates a new 1099 information return form with payee and
        payment information.
      tags:
      - 1099 Forms
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Form1099'
      responses:
        '201':
          description: 1099 form created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Form1099'
    get:
      operationId: list1099Forms
      summary: Avalara List 1099 Forms
      tags:
      - 1099 Forms
      parameters:
      - name: taxYear
        in: query
        schema:
          type: integer
      - name: formType
        in: query
        schema:
          type: string
          enum:
          - 1099-NEC
          - 1099-MISC
          - 1099-K
          - 1099-INT
          - 1099-DIV
          - 1099-R
          - 1099-B
      - name: status
        in: query
        schema:
          type: string
      - name: $top
        in: query
        schema:
          type: integer
      - name: $skip
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: List of 1099 forms
  /forms/1099/{formId}:
    get:
      operationId: get1099Form
      summary: Avalara Get a 1099 Form by ID
      tags:
      - 1099 Forms
      parameters:
      - name: formId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 1099 form details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Form1099'
    put:
      operationId: update1099Form
      summary: Avalara Update a 1099 Form
      tags:
      - 1099 Forms
      parameters:
      - name: formId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Form1099'
      responses:
        '200':
          description: 1099 form updated
    delete:
      operationId: delete1099Form
      summary: Avalara Delete a 1099 Form
      tags:
      - 1099 Forms
      parameters:
      - name: formId
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Form deleted
  /filing/submit:
    post:
      operationId: submitFiling
      summary: Avalara Submit Forms for E-filing
      description: >-
        Submits a batch of completed forms to the IRS for electronic filing.
        Validates all forms before submission.
      tags:
      - Filing
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilingSubmission'
      responses:
        '202':
          description: Filing submission accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FilingResponse'
  /filing/{filingId}/status:
    get:
      operationId: getFilingStatus
      summary: Avalara Get Filing Status
      description: Retrieves the status of an IRS e-filing submission.
      tags:
      - Filing
      parameters:
      - name: filingId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Filing status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FilingStatus'
  /companies:
    get:
      operationId: listPayerCompanies
      summary: Avalara List Payer Companies
      tags:
      - Companies
      responses:
        '200':
          description: List of payer companies
    post:
      operationId: createPayerCompany
      summary: Avalara Create a Payer Company
      tags:
      - Companies
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayerCompany'
      responses:
        '201':
          description: Company created
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth 2.0 bearer token
  responses:
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    W9Request:
      type: object
      required:
      - payeeEmail
      - payeeName
      properties:
        payeeEmail:
          type: string
          format: email
        payeeName:
          type: string
        companyId:
          type: string
        expirationDays:
          type: integer
          default: 30
        message:
          type: string
    W9RequestResponse:
      type: object
      properties:
        requestId:
          type: string
        status:
          type: string
        payeeEmail:
          type: string
        createdDate:
          type: string
          format: date-time
        expirationDate:
          type: string
          format: date-time
    W9Form:
      type: object
      properties:
        id:
          type: string
        payeeName:
          type: string
        businessName:
          type: string
        taxClassification:
          type: string
          enum:
          - Individual
          - C_Corporation
          - S_Corporation
          - Partnership
          - Trust
          - LLC
          - Other
        tin:
          type: string
          description: Taxpayer Identification Number (masked)
        tinType:
          type: string
          enum:
          - SSN
          - EIN
        address:
          type: object
          properties:
            line1:
              type: string
            city:
              type: string
            state:
              type: string
            postalCode:
              type: string
        signedDate:
          type: string
          format: date
        status:
          type: string
          enum:
          - Valid
          - Expired
          - Revoked
    Form1099:
      type: object
      properties:
        id:
          type: string
        formType:
          type: string
          enum:
          - 1099-NEC
          - 1099-MISC
          - 1099-K
          - 1099-INT
          - 1099-DIV
          - 1099-R
          - 1099-B
        taxYear:
          type: integer
        payerCompanyId:
          type: string
        payee:
          type: object
          properties:
            name:
              type: string
            tin:
              type: string
            address:
              type: object
              properties:
                line1:
                  type: string
                city:
                  type: string
                state:
                  type: string
                postalCode:
                  type: string
        amounts:
          type: object
          additionalProperties:
            type: number
            format: double
          description: Box amounts keyed by box number
        federalTaxWithheld:
          type: number
          format: double
        stateTaxWithheld:
          type: number
          format: double
        status:
          type: string
          enum:
          - Draft
          - Ready
          - Filed
          - Corrected
        createdDate:
          type: string
          format: date-time
        modifiedDate:
          type: string
          format: date-time
    FilingSubmission:
      type: object
      required:
      - taxYear
      - formIds
      properties:
        taxYear:
          type: integer
        formIds:
          type: array
          items:
            type: string
        corrected:
          type: boolean
          default: false
    FilingResponse:
      type: object
      properties:
        filingId:
          type: string
        status:
          type: string
          enum:
          - Accepted
          - Processing
          - Rejected
        formCount:
          type: integer
        submittedDate:
          type: string
          format: date-time
    FilingStatus:
      type: object
      properties:
        filingId:
          type: string
        status:
          type: string
          enum:
          - Processing
          - Accepted
          - AcceptedWithErrors
          - Rejected
        acceptedCount:
          type: integer
        rejectedCount:
          type: integer
        errors:
          type: array
          items:
            type: object
            properties:
              formId:
                type: string
              errorCode:
                type: string
              message:
                type: string
    PayerCompany:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        ein:
          type: string
          description: Employer Identification Number
        address:
          type: object
          properties:
            line1:
              type: string
            city:
              type: string
            state:
              type: string
            postalCode:
              type: string
        contactName:
          type: string
        contactPhone:
          type: string
        contactEmail:
          type: string
          format: email
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string