---
title: "Bulk Upload Products"
method: POST
path: "/mgmt/connections/{connectionId}/products/upload"
tags: ["productCatalog"]
---

# Bulk Upload Products

`POST /mgmt/connections/{connectionId}/products/upload`

## Request

- Base URL: `https://api.v3.taxcloud.com`
- URL: `https://api.v3.taxcloud.com/mgmt/connections/{connectionId}/products/upload`
- Auth: HTTP bearer

Allows uploading multiple Products. This is an upsert operation.

## Path parameters

- `connectionId` string, required

## Request body

- MANAGEMENTAPIBulkProductRequest
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `products` MANAGEMENTAPIProductRequest[], required: Products to upload (upsert operation)
    - `$schema` string, uri: A URL to the JSON Schema for this object.
    - `channel` string, nullable: The type of channel the product comes from (e.g., amazon, walmart etc.). It accepts any string and attempts to snake_case the input.
    - `externalTaxCode` string, nullable: Tax code from the external platform, used as the lookup key in taxonomy mappings to derive a default TIC. Merchants may override the resulting TIC.
    - `productId` string, required: ID of the product in the given connection & channel
    - `productName` string, nullable: Name of the product for description purposes (not used in mapping)
    - `tic` integer, nullable: TIC number for the product

## Response `201`

Created

- MANAGEMENTAPIBulkProductResponse
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `products` MANAGEMENTAPIProductResponse[], required
    - `$schema` string, uri: A URL to the JSON Schema for this object.
    - `channel` string, nullable, required: The type of channel the product comes from (e.g., amazon, walmart etc.)
    - `connectionId` string, required
    - `externalTaxCode` string: Tax code from the external platform, used as the lookup key in taxonomy mappings to derive a default TIC. Merchants may override the resulting TIC.
    - `id` integer, required
    - `productId` string, required: ID of the product in the given connection & channel
    - `productName` string, nullable, required: Name of the product for description purposes (not used in mapping)
    - `tic` integer, nullable: TIC number for the product

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error

---

[API](https://skmtc.dev/taxcloud/apis/taxcloud-2.md) - [All operations](https://skmtc.dev/taxcloud/apis/taxcloud-2/llms.txt) - [OpenAPI document](https://skmtc.dev/taxcloud/apis/taxcloud-2/revisions/e0cd5a77728e?raw)
