Create product

POST/api/v1/createProduct

Create or update a product

When productId identifies a product in the company, that product is updated.

Permission

An OAuth access token with this scope. How to get a token

products:create
Create or update products.

Parameters

Not sure what to enter? Here’s where to find IDs.

client_idquery · stringrequired
The Client ID of your OAuth client. It’s public, and goes on every request alongside your access token. Find it in QuoteCloud under Settings → API dashboard → Manage Integrations → OAuth Clients.Length at least 1.

Request body

Sent as application/json.

productIdstring or null
folderNamestringrequired
subfolderstring or null
subfolder2string or null
skustring or null
costvaries
Fields

Exactly one of these:

Option 1number
Option 2string
Matches ^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$.
internalNamestringrequired
pricevariesrequired
Fields

Exactly one of these:

Option 1number
Option 2string
Matches ^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$.
lineItemNamestringrequired
descriptionNotesstring or null
descriptionNotestring or null
Deprecated.
statusvariesrequired
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
recipientCanEditQtyvaries
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
receipientCanEditQtyvaries
Boolean coercion accepted by the v1 compatibility routes.Deprecated.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
recipientCanEditTermvaries
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
receipientCanEditTermvaries
Boolean coercion accepted by the v1 compatibility routes.Deprecated.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
termBasedPricingvariesrequired
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
termvaries
Fields

Exactly one of these:

Option 1number
Option 2string
Matches ^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$.
defaultQtyvaries
Fields

Exactly one of these:

Option 1number
Option 2string
Matches ^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$.
lockPricingLabelvariesrequired
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
lockPricingValuevariesrequired
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
lockTermValuevariesrequired
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
lockPricingNotesvariesrequired
Boolean coercion accepted by the v1 compatibility routes.
Fields

Exactly one of these:

Option 1boolean
Option 2number
One of 0, 1.
Option 3string
One of true, false, 1, 0, yes, no, y, n.
imageUrl1string (uri) or null
imageUrl2string (uri) or null
imageUrl3string (uri) or null
imageUrl4string (uri) or null
imageUrl5string (uri) or null
^customfield\d+$keys matching · any

Needs one of recipientCanEditQty, receipientCanEditQty.

Needs one of recipientCanEditTerm, receipientCanEditTerm.

Responses

200Product created or updated.
dataobjectrequired
Fields
statusstringrequired
Always success.
messagestringrequired
productobjectrequired
Fields
idstringrequired
namestringrequired
skustringrequired
lineItemNamestringrequired
descriptionNotesstringrequired
pricenumberrequired
costnumber or nullrequired
defaultQtynumberrequired
termnumberrequired
termBasedPricingboolean
statusbooleanrequired
folderNamestring
imageImportobject
Fields
requestedintegerrequired
Value 0 to 5.
uploadedintegerrequired
Value 0 to 5.
failedintegerrequired
Value 0 to 5.
appliedbooleanrequired
400Invalid request or validation failure.
dataobjectrequired
Fields
statusstringrequired
Always error.
messagestringrequired
codestring
documentRefstring
assetGenerationIdstring
errorsarray of object
Item fields
fieldstringrequired
messagestringrequired
401Missing or invalid bearer token or client ID.
errorstringrequired
error_descriptionstring
403Insufficient scope, missing add-on, usage limit, or permission denial.

Exactly one of these:

OAuthError
errorstringrequired
error_descriptionstring
ApiErrorEnvelope
dataobjectrequired
Fields
statusstringrequired
Always error.
messagestringrequired
codestring
documentRefstring
assetGenerationIdstring
errorsarray of object
Item fields
fieldstringrequired
messagestringrequired
429Shared company API request quota exceeded. Wait before retrying.
Retry-Afterheader · integer
Minimum seconds to wait before retrying.Value at least 1.
dataobjectrequired
Fields
statusstringrequired
Always error.
messagestringrequired
retryAfterSecondsintegerrequired
Value at least 1.

Rate limit

120 requests a minute per company, shared across REST, Zapier and MCP. On a 429, wait for Retry-After.