---
title: "Uploads a vendor document"
method: POST
path: "/api/v1/vendors/{id}/upload"
tags: ["vendors"]
---

# Uploads a vendor document

`POST /api/v1/vendors/{id}/upload`

## Request

- Base URL: `https://demo.invoiceninja.com`
- URL: `https://demo.invoiceninja.com/api/v1/vendors/{id}/upload`
- Auth: none declared. Required headers: `X-API-TOKEN`, `X-Requested-With`
- TypeScript: <https://skmtc.dev/invoiceninja/apis/invoice-ninja-api-reference/docs/api/v1/vendors/:id/upload/post.ts> (a function with typed inputs; its response is checked against the schema)

Handles the uploading of a document to a vendor

## Path parameters

- `id` string, string, required

## Query parameters

- `include` string

## Headers

- `X-API-TOKEN` string, required
- `X-Requested-With` string, required

## Request body `multipart/form-data`

- object
  - `_method` string
  - `documents` string[]

## Response `200`

Returns the Vendor object

- Vendor
  - `id` string: The hashed id of the vendor. This is a unique identifier for the vendor.
  - `user_id` string: The hashed id of the user who created the vendor. This is a unique identifier for the user.
  - `assigned_user_id` string: The hashed id of the assigned user to this vendor. This is a unique identifier for the user.
  - `contacts` VendorContact[]: An array of contacts associated with the vendor.
    - `id` string: The hashed id of the vendor contact
    - `user_id` string: The hashed id of the user id
    - `vendor_id` string: The hashed id of the vendor
    - `first_name` string: The first name of the contact
    - `last_name` string: The last name of the contact
    - `contact_key` string: A unique identifier for the contact
    - `confirmation_code` string: The confirmation code used to authenticate the contacts email address
    - `phone` string: The contacts phone number
    - `custom_value1` string: A custom value
    - `custom_value2` string: A custom value
    - `custom_value3` string: A custom value
    - `custom_value4` string: A custom value
    - `email` string: The contact email address
    - `email_verified_at` number: The date which the contact confirmed their email
    - `password` string: The hashed password of the contact
    - `is_primary` boolean: Boolean flag determining if the contact is the primary contact for the vendor
    - `created_at` number: Timestamp
    - `updated_at` number: Timestamp
    - `deleted_at` number: Timestamp
    - `send_email` boolean: Flag indicating whether to send emails to this contact
    - `cc_only` boolean: When true this contact is only included as a CC recipient on outgoing emails and is not addressed directly.
    - `can_sign` boolean: When true this contact is permitted to electronically sign purchase order invitations.
  - `name` string: The name of the vendor.
  - `classification` string: The classification of the vendor.
  - `website` string: The website of the vendor.
  - `private_notes` string: The private notes of the vendor. These notes are only visible to users with appropriate permissions.
  - `industry_id` string: The industry id of the vendor. This is a unique identifier for the industry.
  - `size_id` string: The size id of the vendor. This is a unique identifier for the size of the vendor.
  - `address1` string: The first line of the vendor's address.
  - `address2` string: The second line of the vendor's address.
  - `city` string: The city of the vendor's address.
  - `state` string: The state of the vendor's address.
  - `postal_code` string: The postal code of the vendor's address.
  - `phone` string: The phone number of the vendor.
  - `country_id` string: The country id of the vendor. This is a unique identifier for the country.
  - `currency_id` string: The currency id of the vendor. This is a unique identifier for the currency.
  - `custom_value1` string: The value of the first custom field for the vendor.
  - `custom_value2` string: The value of the second custom field for the vendor.
  - `custom_value3` string: The value of the third custom field for the vendor.
  - `custom_value4` string: The value of the fourth custom field for the vendor.
  - `vat_number` string: The VAT number of the vendor.
  - `id_number` string: The ID number of the vendor.
  - `number` string: The number of the vendor
  - `is_deleted` boolean: Boolean flag determining if the vendor has been deleted
  - `language_id` string: The language id of the vendor. This is a unique identifier for the language.
  - `vendor_hash` string: The vendor hash of the vendor. This is a unique identifier for the vendor.
  - `transaction_name` string: The transaction name of the vendor.
  - `last_login` number: Timestamp
  - `created_at` number: Timestamp
  - `updated_at` number: Timestamp
  - `display_name` string: The display name of the vendor.
  - `is_tax_exempt` boolean: Flag indicating whether the vendor is exempt from taxes
  - `public_notes` string: Notes that are visible to the vendor
  - `routing_id` string: The routing identifier for e-invoicing

## Other responses

- `401`: Authentication error
- `403`: Authorization error
- `422`: Validation error
- `429`: Rate Limit Exceeded
- `5XX`: Server error
- `default`: Unexpected Error

## Changes

- **2026-04-20** `69a36036d334`: 2 info
  - added the optional property `contacts/items/can_sign` to the response with the `200` status
  - added the optional property `contacts/items/cc_only` to the response with the `200` status
- **2025-11-22** `00ad5cc89fad`: 4 info
  - added the optional property `contacts/items/send_email` to the response with the `200` status
  - added the optional property `is_tax_exempt` to the response with the `200` status
  - added the optional property `public_notes` to the response with the `200` status
  - added the optional property `routing_id` to the response with the `200` status
- **2024-06-06** `8e82a2bd77e0`: 2 breaking, 35 info
  - the response's body type changed from no type to `object` for status `200`
  - the response's body type changed from no type to `object` for status `default`
  - added the optional property `address1` to the response with the `200` status
  - added the optional property `address2` to the response with the `200` status
  - …33 more
- **2024-06-05** `e61df65649e2`: 2 breaking, 35 warning
  - the response's body type changed from `object` to no type for status `200`
  - the response's body type changed from `object` to no type for status `default`
  - removed the optional property `address1` from the response with the `200` status
  - removed the optional property `address2` from the response with the `200` status
  - …33 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/invoiceninja/apis/invoice-ninja-api-reference/changes/api/v1/vendors/:id/upload/post.md)

---

[API](https://skmtc.dev/invoiceninja/apis/invoice-ninja-api-reference.md) - [All operations](https://skmtc.dev/invoiceninja/apis/invoice-ninja-api-reference/llms.txt) - [OpenAPI document](https://skmtc.dev/invoiceninja/apis/invoice-ninja-api-reference/revisions/bcda1f823746?raw)
