> ## Documentation Index
> Fetch the complete documentation index at: https://every.help/llms.txt
> Use this file to discover all available pages before exploring further.

# Create vendor

> Creates a vendor for the calling company. The vendor is payable once it has a banking account,
attached afterwards through the banking accounts endpoints.

W9 details can be supplied inline through `w9`. Omit it and the vendor is emailed a link to fill
in its own W9, the same onboarding Every runs from the dashboard; `w9_complete` reports whether
it has.




## OpenAPI

````yaml /api-reference/openapi.yaml post /v1/vendors
openapi: 3.0.0
info:
  title: Every Public API
  version: 1.0.0
  description: >
    The Every public API. Keys are issued per company and every response is
    scoped to the company

    that owns the calling key.


    Every response carries an `x-request-id` header, generated by Every for that
    request. Quote it

    when contacting support: it is the id the request is recorded under. A
    caller-supplied

    `x-request-id` is never echoed.
servers:
  - url: https://api.public.every.io/company
    description: Production
security:
  - apiKey: []
tags:
  - name: Company
    description: The company the calling key belongs to.
  - name: Vendors
    description: The people and businesses the company pays, and their W9 details.
  - name: Bank accounts
    description: A vendor's accounts at its own bank, the accounts payments are paid into.
  - name: Payments
    description: >-
      ACH payments from the company's Every account to a vendor, and where they
      are.
  - name: Reference data
    description: The categories and departments a payment is filed under.
paths:
  /v1/vendors:
    post:
      tags:
        - Vendors
      summary: Create vendor
      description: >
        Creates a vendor for the calling company. The vendor is payable once it
        has a banking account,

        attached afterwards through the banking accounts endpoints.


        W9 details can be supplied inline through `w9`. Omit it and the vendor
        is emailed a link to fill

        in its own W9, the same onboarding Every runs from the dashboard;
        `w9_complete` reports whether

        it has.
      operationId: createVendor
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateVendorRequest'
      responses:
        '201':
          description: The vendor created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VendorDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          description: The company already has a vendor with this display_name
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VendorConflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
        default:
          $ref: '#/components/responses/UnexpectedError'
components:
  schemas:
    CreateVendorRequest:
      type: object
      additionalProperties: false
      required:
        - display_name
        - email
      properties:
        display_name:
          description: The vendor name, as shown in the Every dashboard
          type: string
          minLength: 1
        email:
          description: >-
            The vendor contact email. Also where the W9 onboarding link is sent
            when `w9` is omitted.
          type: string
          format: email
        w9:
          $ref: '#/components/schemas/CreateVendorW9'
    VendorDetail:
      description: >-
        A single vendor, with the W9 details it was created or updated with. The
        list omits them: a taxpayer id is not something to hand out a page at a
        time, and even here `tax_ein` is masked.
      allOf:
        - $ref: '#/components/schemas/Vendor'
        - type: object
          required:
            - w9
          properties:
            w9:
              $ref: '#/components/schemas/VendorW9Details'
    VendorConflict:
      description: >-
        The company already has a vendor with this display_name, compared
        ignoring case. `vendor_id` names it so the caller can use the vendor it
        already has instead of retrying.
      type: object
      required:
        - message
        - vendor_id
      properties:
        message:
          type: string
        vendor_id:
          $ref: '#/components/schemas/Id'
    CreateVendorW9:
      description: >-
        The vendor's W9 details. Supplying them completes the vendor's
        onboarding at once; omitting them emails the vendor a link to fill in
        the same details itself.
      allOf:
        - $ref: '#/components/schemas/VendorW9Fields'
        - type: object
          required:
            - entity_type
            - ein_type
            - tax_ein
            - address_street
            - address_city
            - address_state
            - address_postal_code
    Vendor:
      type: object
      required:
        - id
        - company_id
        - display_name
        - w9_complete
      properties:
        id:
          $ref: '#/components/schemas/Id'
        company_id:
          $ref: '#/components/schemas/Id'
        display_name:
          description: The vendor name, as shown in the Every dashboard
          type: string
        email:
          description: The vendor contact email
          type: string
          nullable: true
        created_at:
          description: The date the vendor was created
          type: string
          format: date
          nullable: true
        w9_complete:
          description: >-
            Whether the vendor's W9 details are on file. False while the vendor
            still has an onboarding form to fill in, whether it was asked
            through this API or in the Every dashboard.
          type: boolean
    VendorW9Details:
      description: >-
        The stored W9 details, in the shape `w9` is written in, so they can be
        read, completed and sent back. Null fields are the ones the vendor has
        not provided. `tax_ein` is the one field that does not round-trip: it is
        served masked, and an update that sends the mask back is refused.
      type: object
      required:
        - mandatory_w9_legal
      properties:
        entity_type:
          type: string
          nullable: true
        ein_type:
          type: string
          nullable: true
        tax_ein:
          description: >-
            The taxpayer identification number, masked to its last four digits
            (`*****6789`). The full number is never served. To change it, send
            all nine digits in `PUT /v1/vendors/{id}`; to keep it, omit it.
          type: string
          nullable: true
          example: '*****6789'
        address_street:
          type: string
          nullable: true
        address_street2:
          type: string
          nullable: true
        address_city:
          type: string
          nullable: true
        address_state:
          type: string
          nullable: true
        address_postal_code:
          type: string
          nullable: true
        address_country:
          type: string
          nullable: true
        mandatory_w9_legal:
          description: >-
            Whether the vendor provides legal services, which are reportable
            whatever the amount
          type: boolean
    Error:
      type: object
      properties:
        message:
          type: string
        errors:
          type: array
          items:
            type: object
    Id:
      type: string
      format: uuid
    VendorW9Fields:
      description: >-
        The W9 fields themselves, with nothing required. `PUT /v1/vendors/{id}`
        takes them as they are, so a caller can correct one field;
        `CreateVendorW9` is the same set with the create's required list. Every
        property is nullable: `VendorW9Details` nulls the fields a vendor hasn't
        filed, and this is the same shape a caller reads that response into and
        sends back, less the masked `tax_ein`.
      type: object
      additionalProperties: false
      properties:
        entity_type:
          description: The vendor's tax classification
          type: string
          nullable: true
          enum:
            - C_CORP
            - INDIVIDUAL
            - INTERNATIONAL_BUSINESS
            - INTERNATIONAL_INDIVIDUAL
            - LLC_C
            - LLC_PARTNERSHIP
            - LLC_S
            - LLC_SINGLE
            - PARTNERSHIP
            - S_CORP
        ein_type:
          description: >-
            Whether `tax_ein` is an employer identification number or a social
            security number
          type: string
          nullable: true
          enum:
            - EIN
            - SSN
        tax_ein:
          description: The 9-digit taxpayer identification number, without separators
          type: string
          nullable: true
          pattern: ^\d{9}$
        address_street:
          type: string
          nullable: true
          minLength: 1
        address_street2:
          type: string
          nullable: true
        address_city:
          type: string
          nullable: true
          minLength: 1
        address_state:
          description: The 2-letter state code
          type: string
          nullable: true
          pattern: ^[A-Za-z]{2}$
        address_postal_code:
          type: string
          nullable: true
          minLength: 1
        address_country:
          description: >-
            The 2-letter country code. Defaults to US, which is what a W9 is
            filed under.
          type: string
          nullable: true
          pattern: ^[A-Za-z]{2}$
        mandatory_w9_legal:
          description: >-
            Whether the vendor provides legal services, which are reportable
            whatever the amount
          type: boolean
          nullable: true
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        The `x-api-key` header is missing, or the key is unknown, revoked, or
        not enabled for this API. The body is `{"message":"Forbidden"}`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnexpectedError:
      description: Unexpected error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.