---
title: "Create a single new accounting vendor"
method: POST
path: "/vendors"
tags: ["vendors"]
---

# Create a single new accounting vendor

`POST /vendors`

Creates a new vendor with the provided details. The `erp_vendor_id` is required and will be mapped to both `accounting_id` and `dd_unique_key`.

## Headers

- `Authorization` string, required
- `X-Api-Key` string, required
- `X-API-Version` string
- `Idempotency-Key` string

## Request body

- object
  - `ottimate_company_id` integer, required
  - `erp_vendor_name` string, required
  - `erp_vendor_id` string, required
  - `email` string
  - `phone` string
  - `net_terms` string
  - `payment_method` 'credit_card' | 'ach' | 'check' | 'wire_transfer' | 'unknown' — (Optional) Vendor payment method
  - `city` string — (Optional) Vendor city
  - `state` string — (Optional) Vendor state
  - `zipcode` string — (Optional) Vendor zipcode
  - `address_line_1` string — (Optional) Vendor address line 1
  - `address_line_2` string — (Optional) Vendor address line 2

## Response `201`

Successfully created

- VendorsPostVendorsRootResponse201
  - `version` string, required
  - `vendor` VendorsPostResponsesContentApplicationJsonSchemaVendor, required
    - `id` integer, required
    - `ottimate_company_id` integer, required
    - `erp_vendor_id` string, nullable
    - `erp_vendor_name` string, nullable
    - `email` string, nullable
    - `phone` string, nullable
    - `net_terms` string, nullable
    - `payment_method` 'credit_card' | 'ach' | 'check' | 'wire_transfer' | 'unknown'
    - `address_line_1` string, nullable
    - `address_line_2` string, nullable
    - `city` string, nullable
    - `state` string, nullable
    - `zipcode` string, nullable

## Other responses

- `400` — Bad request - Invalid parameters or request format
- `403` — Forbidden - Access denied or insufficient permissions

## Changes

- **2026-08-22** `75aab60eedc9` — 2 breaking, 1 warning
  - for the `header` request parameter `Idempotency-Key`, the minLength was increased from `0` to `1`
  - added the pattern `^[A-Za-z0-9._\-+=/]{1,128}$` to the `header` request parameter `Idempotency-Key`
  - for the `header` request parameter `Idempotency-Key`, the maxLength was set to `128`
- **2026-08-19** `c0b5cf6c7a72` — 1 info
  - added the non-success response with the status `403`
- **2026-08-17** `c231509a03cf` — 1 breaking, 2 info
  - the `message` response's property type/format changed from `string`/`` to ``/`` for status `400`
  - the response property `code` became required for the status `400`
  - the response property `message` became required for the status `400`
- **2026-08-13** `1f089f3e34d9` — 3 breaking
  - the response property `code` became optional for the status `400`
  - the response property `message` became optional for the status `400`
  - the `message` response's property type/format changed from ``/`` to `string`/`` for status `400`

[Change history](https://skmtc.dev/ottimate/apis/api-reference/changes/vendors/post.md)

---

[API](https://skmtc.dev/ottimate/apis/api-reference.md) · [All operations](https://skmtc.dev/ottimate/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ottimate/api-reference/revisions/ba91ff4c6969/schema)
