Skip to main content
POST
/
products
Create a product
curl --request POST \
  --url https://api.arcuserp.com/v1/products \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "title": "Riser Kit",
  "product_type": "variant_parent",
  "description": "Modular riser kit with dome or flat options",
  "variants": [
    {
      "title": "Dome Riser Kit",
      "sku": "RISER-DOME",
      "product_type": "kit",
      "components": [
        {
          "component_product_id": "prod_stone_uuid",
          "quantity": 2
        },
        {
          "component_product_id": "prod_dome_lid_uuid",
          "quantity": 1
        }
      ],
      "pricing": [
        {
          "pricing_level_id": "pl_default_uuid",
          "min_quantity": 1,
          "list_price": 49.99
        },
        {
          "pricing_level_id": "pl_default_uuid",
          "min_quantity": 5,
          "list_price": 44.99
        },
        {
          "pricing_level_id": "pl_default_uuid",
          "min_quantity": 10,
          "list_price": 39.99
        }
      ],
      "vendors": [
        {
          "vendor_id": "acct_acme_uuid",
          "vendor_sku": "RD-001",
          "default_unit_cost": 18
        }
      ]
    },
    {
      "title": "Flat Riser Kit",
      "sku": "RISER-FLAT",
      "product_type": "kit",
      "components": [
        {
          "component_product_id": "prod_stone_uuid",
          "quantity": 2
        },
        {
          "component_product_id": "prod_flat_lid_uuid",
          "quantity": 1
        }
      ],
      "pricing": [
        {
          "pricing_level_id": "pl_default_uuid",
          "min_quantity": 1,
          "list_price": 44.99
        },
        {
          "pricing_level_id": "pl_default_uuid",
          "min_quantity": 5,
          "list_price": 39.99
        },
        {
          "pricing_level_id": "pl_default_uuid",
          "min_quantity": 10,
          "list_price": 34.99
        }
      ]
    }
  ],
  "vendors": [
    {
      "vendor_id": "acct_acme_uuid",
      "vendor_sku": "RISER-PARENT",
      "default_unit_cost": 15,
      "purchase_policies": [
        {
          "qty_break": 1,
          "purchase_price": 15,
          "is_default": true
        },
        {
          "qty_break": 100,
          "purchase_price": 13.5
        }
      ]
    }
  ]
}
'
import requests

url = "https://api.arcuserp.com/v1/products"

payload = {
"title": "Riser Kit",
"product_type": "variant_parent",
"description": "Modular riser kit with dome or flat options",
"variants": [
{
"title": "Dome Riser Kit",
"sku": "RISER-DOME",
"product_type": "kit",
"components": [
{
"component_product_id": "prod_stone_uuid",
"quantity": 2
},
{
"component_product_id": "prod_dome_lid_uuid",
"quantity": 1
}
],
"pricing": [
{
"pricing_level_id": "pl_default_uuid",
"min_quantity": 1,
"list_price": 49.99
},
{
"pricing_level_id": "pl_default_uuid",
"min_quantity": 5,
"list_price": 44.99
},
{
"pricing_level_id": "pl_default_uuid",
"min_quantity": 10,
"list_price": 39.99
}
],
"vendors": [
{
"vendor_id": "acct_acme_uuid",
"vendor_sku": "RD-001",
"default_unit_cost": 18
}
]
},
{
"title": "Flat Riser Kit",
"sku": "RISER-FLAT",
"product_type": "kit",
"components": [
{
"component_product_id": "prod_stone_uuid",
"quantity": 2
},
{
"component_product_id": "prod_flat_lid_uuid",
"quantity": 1
}
],
"pricing": [
{
"pricing_level_id": "pl_default_uuid",
"min_quantity": 1,
"list_price": 44.99
},
{
"pricing_level_id": "pl_default_uuid",
"min_quantity": 5,
"list_price": 39.99
},
{
"pricing_level_id": "pl_default_uuid",
"min_quantity": 10,
"list_price": 34.99
}
]
}
],
"vendors": [
{
"vendor_id": "acct_acme_uuid",
"vendor_sku": "RISER-PARENT",
"default_unit_cost": 15,
"purchase_policies": [
{
"qty_break": 1,
"purchase_price": 15,
"is_default": True
},
{
"qty_break": 100,
"purchase_price": 13.5
}
]
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Riser Kit',
product_type: 'variant_parent',
description: 'Modular riser kit with dome or flat options',
variants: [
{
title: 'Dome Riser Kit',
sku: 'RISER-DOME',
product_type: 'kit',
components: [
{component_product_id: 'prod_stone_uuid', quantity: 2},
{component_product_id: 'prod_dome_lid_uuid', quantity: 1}
],
pricing: [
{pricing_level_id: 'pl_default_uuid', min_quantity: 1, list_price: 49.99},
{pricing_level_id: 'pl_default_uuid', min_quantity: 5, list_price: 44.99},
{pricing_level_id: 'pl_default_uuid', min_quantity: 10, list_price: 39.99}
],
vendors: [{vendor_id: 'acct_acme_uuid', vendor_sku: 'RD-001', default_unit_cost: 18}]
},
{
title: 'Flat Riser Kit',
sku: 'RISER-FLAT',
product_type: 'kit',
components: [
{component_product_id: 'prod_stone_uuid', quantity: 2},
{component_product_id: 'prod_flat_lid_uuid', quantity: 1}
],
pricing: [
{pricing_level_id: 'pl_default_uuid', min_quantity: 1, list_price: 44.99},
{pricing_level_id: 'pl_default_uuid', min_quantity: 5, list_price: 39.99},
{pricing_level_id: 'pl_default_uuid', min_quantity: 10, list_price: 34.99}
]
}
],
vendors: [
{
vendor_id: 'acct_acme_uuid',
vendor_sku: 'RISER-PARENT',
default_unit_cost: 15,
purchase_policies: [
{qty_break: 1, purchase_price: 15, is_default: true},
{qty_break: 100, purchase_price: 13.5}
]
}
]
})
};

fetch('https://api.arcuserp.com/v1/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcuserp.com/v1/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Riser Kit',
'product_type' => 'variant_parent',
'description' => 'Modular riser kit with dome or flat options',
'variants' => [
[
'title' => 'Dome Riser Kit',
'sku' => 'RISER-DOME',
'product_type' => 'kit',
'components' => [
[
'component_product_id' => 'prod_stone_uuid',
'quantity' => 2
],
[
'component_product_id' => 'prod_dome_lid_uuid',
'quantity' => 1
]
],
'pricing' => [
[
'pricing_level_id' => 'pl_default_uuid',
'min_quantity' => 1,
'list_price' => 49.99
],
[
'pricing_level_id' => 'pl_default_uuid',
'min_quantity' => 5,
'list_price' => 44.99
],
[
'pricing_level_id' => 'pl_default_uuid',
'min_quantity' => 10,
'list_price' => 39.99
]
],
'vendors' => [
[
'vendor_id' => 'acct_acme_uuid',
'vendor_sku' => 'RD-001',
'default_unit_cost' => 18
]
]
],
[
'title' => 'Flat Riser Kit',
'sku' => 'RISER-FLAT',
'product_type' => 'kit',
'components' => [
[
'component_product_id' => 'prod_stone_uuid',
'quantity' => 2
],
[
'component_product_id' => 'prod_flat_lid_uuid',
'quantity' => 1
]
],
'pricing' => [
[
'pricing_level_id' => 'pl_default_uuid',
'min_quantity' => 1,
'list_price' => 44.99
],
[
'pricing_level_id' => 'pl_default_uuid',
'min_quantity' => 5,
'list_price' => 39.99
],
[
'pricing_level_id' => 'pl_default_uuid',
'min_quantity' => 10,
'list_price' => 34.99
]
]
]
],
'vendors' => [
[
'vendor_id' => 'acct_acme_uuid',
'vendor_sku' => 'RISER-PARENT',
'default_unit_cost' => 15,
'purchase_policies' => [
[
'qty_break' => 1,
'purchase_price' => 15,
'is_default' => true
],
[
'qty_break' => 100,
'purchase_price' => 13.5
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.arcuserp.com/v1/products"

payload := strings.NewReader("{\n \"title\": \"Riser Kit\",\n \"product_type\": \"variant_parent\",\n \"description\": \"Modular riser kit with dome or flat options\",\n \"variants\": [\n {\n \"title\": \"Dome Riser Kit\",\n \"sku\": \"RISER-DOME\",\n \"product_type\": \"kit\",\n \"components\": [\n {\n \"component_product_id\": \"prod_stone_uuid\",\n \"quantity\": 2\n },\n {\n \"component_product_id\": \"prod_dome_lid_uuid\",\n \"quantity\": 1\n }\n ],\n \"pricing\": [\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 1,\n \"list_price\": 49.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 5,\n \"list_price\": 44.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 10,\n \"list_price\": 39.99\n }\n ],\n \"vendors\": [\n {\n \"vendor_id\": \"acct_acme_uuid\",\n \"vendor_sku\": \"RD-001\",\n \"default_unit_cost\": 18\n }\n ]\n },\n {\n \"title\": \"Flat Riser Kit\",\n \"sku\": \"RISER-FLAT\",\n \"product_type\": \"kit\",\n \"components\": [\n {\n \"component_product_id\": \"prod_stone_uuid\",\n \"quantity\": 2\n },\n {\n \"component_product_id\": \"prod_flat_lid_uuid\",\n \"quantity\": 1\n }\n ],\n \"pricing\": [\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 1,\n \"list_price\": 44.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 5,\n \"list_price\": 39.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 10,\n \"list_price\": 34.99\n }\n ]\n }\n ],\n \"vendors\": [\n {\n \"vendor_id\": \"acct_acme_uuid\",\n \"vendor_sku\": \"RISER-PARENT\",\n \"default_unit_cost\": 15,\n \"purchase_policies\": [\n {\n \"qty_break\": 1,\n \"purchase_price\": 15,\n \"is_default\": true\n },\n {\n \"qty_break\": 100,\n \"purchase_price\": 13.5\n }\n ]\n }\n ]\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.arcuserp.com/v1/products")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Riser Kit\",\n \"product_type\": \"variant_parent\",\n \"description\": \"Modular riser kit with dome or flat options\",\n \"variants\": [\n {\n \"title\": \"Dome Riser Kit\",\n \"sku\": \"RISER-DOME\",\n \"product_type\": \"kit\",\n \"components\": [\n {\n \"component_product_id\": \"prod_stone_uuid\",\n \"quantity\": 2\n },\n {\n \"component_product_id\": \"prod_dome_lid_uuid\",\n \"quantity\": 1\n }\n ],\n \"pricing\": [\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 1,\n \"list_price\": 49.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 5,\n \"list_price\": 44.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 10,\n \"list_price\": 39.99\n }\n ],\n \"vendors\": [\n {\n \"vendor_id\": \"acct_acme_uuid\",\n \"vendor_sku\": \"RD-001\",\n \"default_unit_cost\": 18\n }\n ]\n },\n {\n \"title\": \"Flat Riser Kit\",\n \"sku\": \"RISER-FLAT\",\n \"product_type\": \"kit\",\n \"components\": [\n {\n \"component_product_id\": \"prod_stone_uuid\",\n \"quantity\": 2\n },\n {\n \"component_product_id\": \"prod_flat_lid_uuid\",\n \"quantity\": 1\n }\n ],\n \"pricing\": [\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 1,\n \"list_price\": 44.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 5,\n \"list_price\": 39.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 10,\n \"list_price\": 34.99\n }\n ]\n }\n ],\n \"vendors\": [\n {\n \"vendor_id\": \"acct_acme_uuid\",\n \"vendor_sku\": \"RISER-PARENT\",\n \"default_unit_cost\": 15,\n \"purchase_policies\": [\n {\n \"qty_break\": 1,\n \"purchase_price\": 15,\n \"is_default\": true\n },\n {\n \"qty_break\": 100,\n \"purchase_price\": 13.5\n }\n ]\n }\n ]\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.arcuserp.com/v1/products")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Riser Kit\",\n \"product_type\": \"variant_parent\",\n \"description\": \"Modular riser kit with dome or flat options\",\n \"variants\": [\n {\n \"title\": \"Dome Riser Kit\",\n \"sku\": \"RISER-DOME\",\n \"product_type\": \"kit\",\n \"components\": [\n {\n \"component_product_id\": \"prod_stone_uuid\",\n \"quantity\": 2\n },\n {\n \"component_product_id\": \"prod_dome_lid_uuid\",\n \"quantity\": 1\n }\n ],\n \"pricing\": [\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 1,\n \"list_price\": 49.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 5,\n \"list_price\": 44.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 10,\n \"list_price\": 39.99\n }\n ],\n \"vendors\": [\n {\n \"vendor_id\": \"acct_acme_uuid\",\n \"vendor_sku\": \"RD-001\",\n \"default_unit_cost\": 18\n }\n ]\n },\n {\n \"title\": \"Flat Riser Kit\",\n \"sku\": \"RISER-FLAT\",\n \"product_type\": \"kit\",\n \"components\": [\n {\n \"component_product_id\": \"prod_stone_uuid\",\n \"quantity\": 2\n },\n {\n \"component_product_id\": \"prod_flat_lid_uuid\",\n \"quantity\": 1\n }\n ],\n \"pricing\": [\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 1,\n \"list_price\": 44.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 5,\n \"list_price\": 39.99\n },\n {\n \"pricing_level_id\": \"pl_default_uuid\",\n \"min_quantity\": 10,\n \"list_price\": 34.99\n }\n ]\n }\n ],\n \"vendors\": [\n {\n \"vendor_id\": \"acct_acme_uuid\",\n \"vendor_sku\": \"RISER-PARENT\",\n \"default_unit_cost\": 15,\n \"purchase_policies\": [\n {\n \"qty_break\": 1,\n \"purchase_price\": 15,\n \"is_default\": true\n },\n {\n \"qty_break\": 100,\n \"purchase_price\": 13.5\n }\n ]\n }\n ]\n}"

response = http.request(request)
puts response.read_body
{
  "data": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "object": "product",
    "entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "title": "<string>",
    "description": "<string>",
    "sku": "<string>",
    "part_number": "<string>",
    "barcode": "<string>",
    "category_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "list_price": 123,
    "cost": 123,
    "is_active": true,
    "is_serialized": true,
    "charge_tax": true,
    "track_inventory": true,
    "weight": 123,
    "weight_uom": "<string>",
    "length": 123,
    "width": 123,
    "height": 123,
    "length_uom": "<string>",
    "quantity_uom": "<string>",
    "product_tax_code": "<string>",
    "reorder_point": 123,
    "reorder_qty": 123,
    "safety_stock": 123,
    "packaging_classification": "over_box",
    "has_variants": true,
    "metadata": {},
    "created_at": "2023-11-07T05:31:56Z",
    "updated_at": "2023-11-07T05:31:56Z"
  }
}
{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}
{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}
{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}
{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}

Authorizations

Authorization
string
header
required

API key issued per entity via Settings > Developers > API Keys. Each key carries scopes (e.g. orders:read, products:write). Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.

Headers

Idempotency-Key
string

Client-generated unique key for idempotent POST/PATCH/DELETE operations. Alias for the Idempotency parameter. Max 255 chars. On retry with the same key, the original response is returned without re-executing the operation. Keys expire after 24 hours.

Maximum string length: 255

Body

application/json
title
string
required
Example:

"Riser Kit"

product_type
enum<string>
required
Available options:
physical,
kit,
box,
service,
variant_parent
Example:

"variant_parent"

description
string
Example:

"Modular riser kit with dome or flat options"

sku
string
list_price
number
packaging_classification
enum<string>
default:over_box

Amazon-FBA packaging classification. Defaults to over_box (standard PackPilot path). Set to sioc or sipp for single-item ship-ready packaging (label tapes on product, no over-box, no prep -- cannot co-pack). Set to prep_free when an over-box is still required but the prep step is skipped (no bubble wrap / bagging / labels-on-product). PackPilot reads this on every pack-order call. See the Product schema for full enum semantics.

Available options:
over_box,
sioc,
sipp,
prep_free
Example:

"over_box"

components
object[]

Kit/box component assemblies (product_type=kit or box only). Each element references a component product and the quantity required to build one unit of this kit.

variants
object[]

Inline variants (product_type=variant_parent only). Each variant can itself carry kit components[], qty-break pricing[], and vendors[] that are wired atomically in the same transaction.

pricing
object[]

Sell-side pricing policies for the parent product (any product_type). Each element defines one qty-break tier on a pricing level. Use min_quantity to set the minimum order quantity that activates this tier (maps to qty_break internally). All money fields are returned as JS numbers (float).

vendors
object[]

Vendor relationships on the parent product (any product_type)

Response

Product created

data
object

Arcus ERP product (physical/kit/box/service/variant_parent).