DevelopersAPI reference

Pricebook API

REST endpoints for pricebook in SKUFlow: 20 operations with parameters, request and response fields, permissions and curl examples.

Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.

OperationEndpointRisk
List pricebook categoriesGET /organizations/{organizationId}/pricebook/categoriesread
Create a pricebook categoryPOST /organizations/{organizationId}/pricebook/categorieswrite
Update a pricebook categoryPATCH /organizations/{organizationId}/pricebook/categories/{categoryId}write
Delete a pricebook categoryDELETE /organizations/{organizationId}/pricebook/categories/{categoryId}sensitive
Start a category image uploadPOST /organizations/{organizationId}/pricebook/categories/{categoryId}/imagewrite
Remove a category's imageDELETE /organizations/{organizationId}/pricebook/categories/{categoryId}/imagesensitive
Confirm a category image uploadPOST /organizations/{organizationId}/pricebook/categories/{categoryId}/image/{attachmentId}/confirmwrite
Set a pricebook category's picture (content in the request)POST /organizations/{organizationId}/pricebook/categories/{categoryId}/image/contentwrite
List pricebook itemsGET /organizations/{organizationId}/pricebook/itemsread
Create a pricebook itemPOST /organizations/{organizationId}/pricebook/itemswrite
Get a pricebook item with its stockGET /organizations/{organizationId}/pricebook/items/{itemId}read
Update a pricebook itemPATCH /organizations/{organizationId}/pricebook/items/{itemId}write
Delete a pricebook itemDELETE /organizations/{organizationId}/pricebook/items/{itemId}sensitive
Duplicate a pricebook itemPOST /organizations/{organizationId}/pricebook/items/{itemId}/duplicatewrite
Start an item image uploadPOST /organizations/{organizationId}/pricebook/items/{itemId}/imagewrite
Remove an item's imageDELETE /organizations/{organizationId}/pricebook/items/{itemId}/imagesensitive
Confirm an item image uploadPOST /organizations/{organizationId}/pricebook/items/{itemId}/image/{attachmentId}/confirmwrite
Export the pricebook as CSVGET /organizations/{organizationId}/pricebook/exportread
Import pricebook items from CSV (with a dry run)POST /organizations/{organizationId}/pricebook/importwrite
Set a pricebook item's picture (content in the request)POST /organizations/{organizationId}/pricebook/items/{itemId}/image/contentwrite

List pricebook categories

GET /organizations/{organizationId}/pricebook/categories

Every category (a tree through parentId), with its path, item count and image. Read-only. Build the tree client-side from parentId and sortOrder.

Permissionpricebook.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpricebookCategories_list (toolset pricebook)

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields

An array of objects:

FieldTypeDescription
idstring
organizationIdstring
namestring
parentIdstring or null
sortOrderinteger
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
itemCountinteger
pathstringThe path from the root, e.g. "Apparel › T-shirts".
imageUrlstring or nullA 10-minute signed URL of the category's image.

Create a pricebook category

POST /organizations/{organizationId}/pricebook/categories

Adds a category, at the top level or under parentId. Returns it. Images: POST /pricebook/categories/{categoryId}/image.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookCategories_create (toolset pricebook)

Request body

FieldTypeRequiredDescription
namestringYesUp to 200 characters.
parentIdstring or nullNoThe parent category (a tree); null for a top-level category.
sortOrderintegerNo0–100000.
activebooleanNo

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Dana Whitfield"}'

Response

201: the answer's fields
FieldTypeDescription
idstring
organizationIdstring
namestring
parentIdstring or null
sortOrderinteger
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)

Update a pricebook category

PATCH /organizations/{organizationId}/pricebook/categories/{categoryId}

Renames, moves (parentId; a category cannot move inside itself, 400), reorders or retires a category. Returns it.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookCategories_update (toolset pricebook)

Parameters

NameInTypeRequiredDescription
categoryIdpathstringYes

Request body

FieldTypeRequiredDescription
namestringNoUp to 200 characters.
parentIdstring or nullNoThe parent category (a tree); null for a top-level category.
sortOrderintegerNo0–100000.
activebooleanNo

Example

curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories/{categoryId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Dana Whitfield","parentId":"parent_id","sortOrder":1}'

Response

200: the answer's fields
FieldTypeDescription
idstring
organizationIdstring
namestring
parentIdstring or null
sortOrderinteger
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)

Delete a pricebook category

DELETE /organizations/{organizationId}/pricebook/categories/{categoryId}

Destructive: deletes the category and its image; its items and sub-categories move up to its parent. No item is deleted.

Permissionpricebook.manage (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolpricebookCategories_delete (toolset pricebook)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Parameters

NameInTypeRequiredDescription
categoryIdpathstringYes

Example

curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories/{categoryId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
oktrue

Start a category image upload

POST /organizations/{organizationId}/pricebook/categories/{categoryId}/image

Step 1 of 2: returns uploadUrl; PUT the image there within 5 minutes, then POST …/image/{attachmentId}/confirm. Images only.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookCategories_uploadImage (toolset pricebook)

Parameters

NameInTypeRequiredDescription
categoryIdpathstringYes

Request body

FieldTypeRequiredDescription
fileNamestringYesUp to 500 characters.
contentTypestringYesAn image/* type, e.g. image/jpeg. Up to 200 characters.
sizeBytesintegerYesUp to 25 MB.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories/{categoryId}/image" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"string","contentType":"string","sizeBytes":1}'

Response

201: the answer's fields
FieldTypeDescription
attachmentobject
attachment.idstring
attachment.fileNamestring
attachment.contentTypestring
attachment.sizeBytesinteger
attachment.uploadedAtstring (date-time) or null
attachment.createdAtstring (date-time)
uploadUrlstringPUT the bytes here (same Content-Type) within 5 minutes.

Remove a category's image

DELETE /organizations/{organizationId}/pricebook/categories/{categoryId}/image

Destructive: deletes the category's image file.

Permissionpricebook.manage (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolpricebookCategories_deleteImage (toolset pricebook)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Parameters

NameInTypeRequiredDescription
categoryIdpathstringYes

Example

curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories/{categoryId}/image" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
oktrue

Confirm a category image upload

POST

/organizations/{organizationId}/pricebook/categories/{categoryId}/image/{attachmentId}/confirm

Step 2 of 2: the uploaded image becomes the category's image (replacing the previous one). Returns it with a 10-minute URL.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookCategories_confirmImage (toolset pricebook)

Parameters

NameInTypeRequiredDescription
categoryIdpathstringYes
attachmentIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories/{categoryId}/image/{attachmentId}/confirm" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
fileNamestring
contentTypestring
sizeBytesinteger
uploadedAtstring (date-time) or null
createdAtstring (date-time)
urlstring

Set a pricebook category's picture (content in the request)

POST /organizations/{organizationId}/pricebook/categories/{categoryId}/image/content

Sets the picture of a pricebook category in one call, replacing the old one: send contentBase64 or a public sourceUrl (an image, up to 10 MB). Shown on quotes and in the pricebook. Returns the image with a 10-minute URL.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookCategories_setImage (toolset pricebook)

Parameters

NameInTypeRequiredDescription
categoryIdpathstringYes

Request body

FieldTypeRequiredDescription
fileNamestringNoThe file's name, e.g. receipt.jpg (default: from the URL, else 'file'). Up to 500 characters.
contentTypestringNoMIME type, e.g. image/jpeg or application/pdf. Optional: taken from a data: URL, the URL's answer or the file's first bytes. Up to 200 characters.
contentBase64stringNoThe file's bytes as base64 (a data: URL is accepted too). Up to 10 MB. Give this or sourceUrl.
sourceUrlstring (uri)NoA public http(s) URL SKUFlow downloads the file from (up to 10 MB, 20 s, 3 redirects; private and internal addresses are refused). Give this or contentBase64. Up to 2000 characters.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/categories/{categoryId}/image/content" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"string","contentType":"string","contentBase64":"string"}'

Response

201: the answer's fields
FieldTypeDescription
idstringThe attachment id.
fileNamestring
contentTypestring
sizeBytesinteger
uploadedAtstring (date-time) or null
createdAtstring (date-time)
urlstringView URL, valid for 10 minutes.

List pricebook items

GET /organizations/{organizationId}/pricebook/items

Items with price, stock on hand and image (and, with costing.read, cost and margin), filtered by text (name, code, description, vendor part number), category (sub-categories included), kind or vendor; active only unless includeInactive. Paged with a total. Read-only.

Permissionpricebook.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpricebookItems_list (toolset pricebook, in the default set)

Parameters

NameInTypeRequiredDescription
queryquerystringNoFree-text search over the list's names, numbers and contact details. Up to 200 characters.
categoryIdquerystringNo
kindqueryenumNoSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
vendorIdquerystringNo
includeInactivequeryboolean or enumNo
limitqueryintegerNoPage size, 1–200. Default 50.
offsetqueryintegerNoRows to skip; the answer's total counts every match. Default 0.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
itemsarray of object
items[].idstring
items[].organizationIdstring
items[].kindenumSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
items[].codestring or null
items[].namestring
items[].descriptionstring or null
items[].internalNotesstring or null
items[].categoryIdstring or null
items[].unitstring
items[].costCentsintegerOur unit cost. Present only for roles with costing.read.
items[].priceCentsintegerInteger cents.
items[].taxableboolean
items[].vendorIdstring or null
items[].vendorPartNumberstring or null
items[].activeboolean
items[].createdAtstring (date-time)
items[].updatedAtstring (date-time)
items[].categoryobject or null
items[].category.idstring
items[].category.namestring
items[].category.parentIdstring or null
items[].vendorobject or null
items[].vendor.idstring
items[].vendor.namestring
items[].imageUrlstring or nullA 10-minute signed URL of the item's image.
items[].marginCentsintegerPrice − cost. Present only for roles with costing.read.
items[].marginPercentnumber or nullMargin as a percent of the price. Present only for roles with costing.read.
items[].onHandnumberStock on hand across every location (stocked kinds).
items[].lowStockbooleanAt or below a reorder point somewhere.
totalinteger

Create a pricebook item

POST /organizations/{organizationId}/pricebook/items

Adds an item. A duplicate code is 409. Documents already written are never changed by pricebook edits (their lines keep snapshots). Returns the item.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookItems_create (toolset pricebook)

Request body

FieldTypeRequiredDescription
kindenumYesSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
codestring or nullNoCode / SKU, unique in the organization when set. Up to 100 characters.
namestringYesUp to 500 characters.
descriptionstring or nullNoCustomer-facing: printed on quotes and invoices.
internalNotesstring or nullNoStaff only.
categoryIdstring or nullNoFrom GET /pricebook/categories.
unitstringNoea, hr, ft…; blank means "ea". Up to 50 characters.
costCentsintegerNoOur unit cost in cents (purchase receipts update it by moving average). 0–100000000.
priceCentsintegerNoThe unit price in cents. 0–100000000.
taxablebooleanNo
vendorIdstring or nullNoFrom GET /vendors.
vendorPartNumberstring or nullNoUp to 200 characters.
activebooleanNoRetired items (false) leave the pickers.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"SERVICE","name":"Dana Whitfield"}'

Response

201: the answer's fields
FieldTypeDescription
idstring
organizationIdstring
kindenumSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
codestring or null
namestring
descriptionstring or null
internalNotesstring or null
categoryIdstring or null
unitstring
costCentsintegerOur unit cost. Present only for roles with costing.read.
priceCentsintegerInteger cents.
taxableboolean
vendorIdstring or null
vendorPartNumberstring or null
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
categoryobject or null
category.idstring
category.namestring
category.parentIdstring or null
vendorobject or null
vendor.idstring
vendor.namestring
imageUrlstring or nullA 10-minute signed URL of the item's image.
marginCentsintegerPrice − cost. Present only for roles with costing.read.
marginPercentnumber or nullMargin as a percent of the price. Present only for roles with costing.read.
onHandnumberStock on hand across every location (stocked kinds).
lowStockbooleanAt or below a reorder point somewhere.

Get a pricebook item with its stock

GET /organizations/{organizationId}/pricebook/items/{itemId}

One item with its stock at each location (on hand, reorder point and quantity). Read-only.

Permissionpricebook.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpricebookItems_get (toolset pricebook)

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
organizationIdstring
kindenumSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
codestring or null
namestring
descriptionstring or null
internalNotesstring or null
categoryIdstring or null
unitstring
costCentsintegerOur unit cost. Present only for roles with costing.read.
priceCentsintegerInteger cents.
taxableboolean
vendorIdstring or null
vendorPartNumberstring or null
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
categoryobject or null
category.idstring
category.namestring
category.parentIdstring or null
vendorobject or null
vendor.idstring
vendor.namestring
imageUrlstring or nullA 10-minute signed URL of the item's image.
marginCentsintegerPrice − cost. Present only for roles with costing.read.
marginPercentnumber or nullMargin as a percent of the price. Present only for roles with costing.read.
onHandnumberStock on hand across every location (stocked kinds).
lowStockbooleanAt or below a reorder point somewhere.
stockarray of object
stock[].locationIdstring
stock[].locationobject
stock[].location.idstring
stock[].location.namestring
stock[].onHandnumber
stock[].reorderPointnumber or null
stock[].reorderQtynumber or null
stock[].lowboolean

Update a pricebook item

PATCH /organizations/{organizationId}/pricebook/items/{itemId}

Changes the fields sent. Quotes and invoices already written keep their own prices and costs. Returns the item.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookItems_update (toolset pricebook)

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes

Request body

FieldTypeRequiredDescription
kindenumNoSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
codestring or nullNoCode / SKU, unique in the organization when set. Up to 100 characters.
namestringNoUp to 500 characters.
descriptionstring or nullNoCustomer-facing: printed on quotes and invoices.
internalNotesstring or nullNoStaff only.
categoryIdstring or nullNoFrom GET /pricebook/categories.
unitstringNoea, hr, ft…; blank means "ea". Up to 50 characters.
costCentsintegerNoOur unit cost in cents (purchase receipts update it by moving average). 0–100000000.
priceCentsintegerNoThe unit price in cents. 0–100000000.
taxablebooleanNo
vendorIdstring or nullNoFrom GET /vendors.
vendorPartNumberstring or nullNoUp to 200 characters.
activebooleanNoRetired items (false) leave the pickers.

Example

curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"SERVICE","code":"string","name":"Dana Whitfield"}'

Response

200: the answer's fields
FieldTypeDescription
idstring
organizationIdstring
kindenumSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
codestring or null
namestring
descriptionstring or null
internalNotesstring or null
categoryIdstring or null
unitstring
costCentsintegerOur unit cost. Present only for roles with costing.read.
priceCentsintegerInteger cents.
taxableboolean
vendorIdstring or null
vendorPartNumberstring or null
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
categoryobject or null
category.idstring
category.namestring
category.parentIdstring or null
vendorobject or null
vendor.idstring
vendor.namestring
imageUrlstring or nullA 10-minute signed URL of the item's image.
marginCentsintegerPrice − cost. Present only for roles with costing.read.
marginPercentnumber or nullMargin as a percent of the price. Present only for roles with costing.read.
onHandnumberStock on hand across every location (stocked kinds).
lowStockbooleanAt or below a reorder point somewhere.

Delete a pricebook item

DELETE /organizations/{organizationId}/pricebook/items/{itemId}

Destructive: deletes an item that was never stocked or ordered (409 otherwise: retire it with active: false). Quote and invoice lines that used it keep their text and prices.

Permissionpricebook.manage (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolpricebookItems_delete (toolset pricebook)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes

Example

curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
oktrue

Duplicate a pricebook item

POST /organizations/{organizationId}/pricebook/items/{itemId}/duplicate

Copies an item as "<name> (copy)" with the same category, price, cost, unit, vendor and notes; no code, no stock, no image. Returns the new item; rename it with update.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookItems_duplicate (toolset pricebook)

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}/duplicate" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

201: the answer's fields
FieldTypeDescription
idstring
organizationIdstring
kindenumSERVICE (decoration, setup, artwork, labour), MATERIAL (blank goods and supplies, kept in stock) or FEE (rush, shipping, screen or digitizing charges). One of SERVICE, MATERIAL, FEE.
codestring or null
namestring
descriptionstring or null
internalNotesstring or null
categoryIdstring or null
unitstring
costCentsintegerOur unit cost. Present only for roles with costing.read.
priceCentsintegerInteger cents.
taxableboolean
vendorIdstring or null
vendorPartNumberstring or null
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
categoryobject or null
category.idstring
category.namestring
category.parentIdstring or null
vendorobject or null
vendor.idstring
vendor.namestring
imageUrlstring or nullA 10-minute signed URL of the item's image.
marginCentsintegerPrice − cost. Present only for roles with costing.read.
marginPercentnumber or nullMargin as a percent of the price. Present only for roles with costing.read.
onHandnumberStock on hand across every location (stocked kinds).
lowStockbooleanAt or below a reorder point somewhere.

Start an item image upload

POST /organizations/{organizationId}/pricebook/items/{itemId}/image

Step 1 of 2: returns uploadUrl; PUT the image there within 5 minutes, then POST …/image/{attachmentId}/confirm. Images only, up to 25 MB.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookItems_uploadImage (toolset pricebook)

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes

Request body

FieldTypeRequiredDescription
fileNamestringYesUp to 500 characters.
contentTypestringYesAn image/* type, e.g. image/jpeg. Up to 200 characters.
sizeBytesintegerYesUp to 25 MB.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}/image" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"string","contentType":"string","sizeBytes":1}'

Response

201: the answer's fields
FieldTypeDescription
attachmentobject
attachment.idstring
attachment.fileNamestring
attachment.contentTypestring
attachment.sizeBytesinteger
attachment.uploadedAtstring (date-time) or null
attachment.createdAtstring (date-time)
uploadUrlstringPUT the bytes here (same Content-Type) within 5 minutes.

Remove an item's image

DELETE /organizations/{organizationId}/pricebook/items/{itemId}/image

Destructive: deletes the item's image file.

Permissionpricebook.manage (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolpricebookItems_deleteImage (toolset pricebook)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes

Example

curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}/image" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
oktrue

Confirm an item image upload

POST /organizations/{organizationId}/pricebook/items/{itemId}/image/{attachmentId}/confirm

Step 2 of 2: the uploaded image becomes the item's image (replacing the previous one), shown in the pricebook browser. Returns it with a 10-minute URL.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookItems_confirmImage (toolset pricebook)

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes
attachmentIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}/image/{attachmentId}/confirm" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
fileNamestring
contentTypestring
sizeBytesinteger
uploadedAtstring (date-time) or null
createdAtstring (date-time)
urlstring

Export the pricebook as CSV

GET /organizations/{organizationId}/pricebook/export

Every item (active or not) as CSV: code, name, kind, category path, unit, cost, price, taxable, vendor, vendor part number, description, internal notes, active. Money in dollars (12.50). The same format POST /pricebook/import reads. Includes costs, so it needs pricebook.manage (owners and admins). Read-only.

Permissionpricebook.manage (Owner, Admin)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolpricebookItems_export (toolset pricebook)

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/export" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
fileNamestring
csvstring
countinteger

Import pricebook items from CSV (with a dry run)

POST /organizations/{organizationId}/pricebook/import

Reads the export's CSV format (only name is required). Rows whose code matches an item update it; others create items. Missing categories (by path, e.g. Apparel › T-shirts) are created; vendors must exist (by name). dryRun: true (do this first) writes nothing and returns what would be created or updated and every problem with its line and column. Applying writes the valid rows in one transaction and reports the skipped ones.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookItems_import (toolset pricebook)

Request body

FieldTypeRequiredDescription
csvstringYesThe file's text (UTF-8).
dryRunbooleanNotrue: only check and report. Default true.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/import" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"csv":"string"}'

Response

200: the answer's fields
FieldTypeDescription
dryRunboolean
rowsarray of object
rows[].lineinteger
rows[].actionenumOne of create, update.
rows[].codestring or null
rows[].namestring
createdinteger
updatedinteger
categoriesCreatedarray of string
skippedinteger
problemsarray of object
problems[].lineinteger1-based line in the file; the header is line 1.
problems[].columnstring or null
problems[].messagestring
problems[].severityenumErrors skip the row; warnings are only reported. One of error, warning.

Set a pricebook item's picture (content in the request)

POST /organizations/{organizationId}/pricebook/items/{itemId}/image/content

Sets the picture of a pricebook item in one call, replacing the old one: send contentBase64 or a public sourceUrl (an image, up to 10 MB). Shown on quotes and in the pricebook. Returns the image with a 10-minute URL.

Permissionpricebook.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolpricebookItems_setImage (toolset pricebook)

Parameters

NameInTypeRequiredDescription
itemIdpathstringYes

Request body

FieldTypeRequiredDescription
fileNamestringNoThe file's name, e.g. receipt.jpg (default: from the URL, else 'file'). Up to 500 characters.
contentTypestringNoMIME type, e.g. image/jpeg or application/pdf. Optional: taken from a data: URL, the URL's answer or the file's first bytes. Up to 200 characters.
contentBase64stringNoThe file's bytes as base64 (a data: URL is accepted too). Up to 10 MB. Give this or sourceUrl.
sourceUrlstring (uri)NoA public http(s) URL SKUFlow downloads the file from (up to 10 MB, 20 s, 3 redirects; private and internal addresses are refused). Give this or contentBase64. Up to 2000 characters.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/pricebook/items/{itemId}/image/content" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"string","contentType":"string","contentBase64":"string"}'

Response

201: the answer's fields
FieldTypeDescription
idstringThe attachment id.
fileNamestring
contentTypestring
sizeBytesinteger
uploadedAtstring (date-time) or null
createdAtstring (date-time)
urlstringView URL, valid for 10 minutes.

On this page