DevelopersAPI reference

Suppliers API

REST endpoints for suppliers in SKUFlow: 14 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
Supplier kinds and what they needGET /organizations/{organizationId}/suppliers/kindsread
Supplier connectionsGET /organizations/{organizationId}/suppliersread
Connect a supplierPOST /organizations/{organizationId}/supplierssensitive
A supplier connectionGET /organizations/{organizationId}/suppliers/{supplierConnectionId}read
Change a supplier connectionPATCH /organizations/{organizationId}/suppliers/{supplierConnectionId}sensitive
Remove a supplier connectionDELETE /organizations/{organizationId}/suppliers/{supplierConnectionId}sensitive
Test a supplier connectionPOST /organizations/{organizationId}/suppliers/{supplierConnectionId}/testwrite
Sync nowPOST /organizations/{organizationId}/suppliers/{supplierConnectionId}/syncwrite
Upload a catalog filePOST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog-filewrite
Browse a supplier's catalogGET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalogread
A supplier styleGET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/{styleId}read
Live stock of a supplier styleGET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/{styleId}/stockread
Reload the supplier's catalogPOST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/refreshwrite
Import supplier stylesPOST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/importwrite

Supplier kinds and what they need

GET /organizations/{organizationId}/suppliers/kinds

Every supplier SKUFlow connects to, how it is read (REST, PromoStandards, file), the credential fields each needs (secret or not), whether it has live stock, and the PromoStandards directory (endpoints per supplier, with verified). mode is this server's SKUFLOW_SUPPLIERS (fake = demo catalogs). Call this before creating a connection. Read-only.

Permissionproducts.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolsuppliers_kinds (toolset catalog)

Example

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

Response

200: the answer's fields
FieldTypeDescription
modeenumOne of fake, live, off.
kindsarray of object
kinds[].kindenumSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
kinds[].namestring
directoryarray of object
directory[].keystring
directory[].namestring
directory[].verifiedboolean
directory[].notesstring
sanmarobjectSanMar connections: settings.sanmarApi (WEB_SERVICES = SanMar Web Services, recommended; PROMOSTANDARDS) and settings.sanmarEnvironment (PRODUCTION or TEST = EDEV), with the Web Services endpoints per environment. Credentials: account number = SanMar customer number, username / password = the SanMar.com login.
sanmar.apisarray of string
sanmar.environmentsarray of string

Supplier connections

GET /organizations/{organizationId}/suppliers

The business's supplier connections with status, last test, last sync and counts. Credentials are never included. Read-only.

Permissionproducts.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolsuppliers_list (toolset catalog)

Example

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

Response

200: the answer's fields
FieldTypeDescription
itemsarray of object
items[].idstring
items[].kindenumSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
items[].namestringThe supplier's name.
items[].displayNamestring
items[].accountNumberstring or null
items[].credentialKeysarray of stringWhich credential fields are stored. Their values are never returned.
items[].statusenumOne of PENDING, CONNECTED, ERROR, DISABLED.
items[].environmentstringfake or live: the SKUFLOW_SUPPLIERS mode it was saved in.
items[].usablebooleanSaved in this server's mode and not switched off.
items[].settingsobjectNon-secret settings (SupplierSettings).
items[].lastTestedAtstring (date-time) or null
items[].lastSyncAtstring (date-time) or null
items[].catalogIndexedAtstring (date-time) or null
items[].lastErrorstring or null
items[].catalogCountintegerStyles in the browse cache.
items[].productCountintegerProducts imported from it.
items[].createdAtstring (date-time)
items[].updatedAtstring (date-time)

Connect a supplier

POST /organizations/{organizationId}/suppliers

SENSITIVE (stores the business's supplier credentials): saves a connection with its credentials encrypted. It starts PENDING; call POST /suppliers/{supplierConnectionId}/test next. Fields per kind: GET /suppliers/kinds. Needs the Supplier catalogs plan feature (Connect and up).

Permissionsuppliers.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 toolsuppliers_create (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals.

Request body

FieldTypeRequiredDescription
kindenumYesSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
displayNamestringYesUnique in the business, e.g. SanMar. Up to 200 characters.
accountNumberstring or nullNoYour customer / account number with the supplier. Up to 100 characters.
credentialsobjectNoCredential fields by key (GET /suppliers/kinds lists each kind's fields). Write-only: stored encrypted, never returned. On a change, a field sent replaces the stored one, an empty string clears it, a field left out is kept.
settingsobjectNoNon-secret settings: PromoStandards supplierKey and endpoint overrides, SanMar FTP host and path, a catalog fileUrl, the CSV columnMapping, syncIntervalHours (default 6) and the default pricingRuleId.
settings.supplierKeystring or nullNoPromoStandards: the directory entry (GET /suppliers/kinds → directory). Up to 100 characters.
settings.endpointsobject or nullNoPromoStandards endpoint URLs that replace the directory's.
settings.endpoints.productDatastringNoUp to 2000 characters.
settings.endpoints.inventorystringNoUp to 2000 characters.
settings.endpoints.pricingstringNoUp to 2000 characters.
settings.endpoints.mediastringNoUp to 2000 characters.
settings.sanmarApienum or nullNoSanMar: where details, cost and stock come from. WEB_SERVICES = SanMar Web Services (its own SOAP API; recommended for new connections), PROMOSTANDARDS = SanMar's PromoStandards endpoints (also when absent). Both use the SanMar.com login. One of WEB_SERVICES, PROMOSTANDARDS.
settings.sanmarEnvironmentenum or nullNoSanMar: PRODUCTION (default) or TEST (SanMar's EDEV environment; separate credentials from SanMar). One of PRODUCTION, TEST.
settings.ftpHoststring or nullNoSanMar FTP host (ftp.sanmar.com). Up to 255 characters.
settings.ftpPortinteger or nullNo1–65535.
settings.ftpPathstring or nullNoSanMar flat file path on the FTP server. Up to 500 characters.
settings.fileUrlstring or nullNoJDS / CSV: where the catalog file is downloaded from. Up to 2000 characters.
settings.columnMappingobject or nullNoCSV / XLSX: field → column header. Fields: styleId, name, brand, styleNumber, category, description, color, colorHex, size, sku, gtin, cost, msrp, weight, imageUrl, stock.
settings.sheetstring or nullNoUp to 200 characters.
settings.syncIntervalHoursinteger or nullNo1–168.
settings.pricingRuleIdstring or nullNoUp to 100 characters.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"SS_ACTIVEWEAR","displayName":"string"}'

Response

200: the answer's fields
FieldTypeDescription
idstring
kindenumSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
namestringThe supplier's name.
displayNamestring
accountNumberstring or null
credentialKeysarray of stringWhich credential fields are stored. Their values are never returned.
statusenumOne of PENDING, CONNECTED, ERROR, DISABLED.
environmentstringfake or live: the SKUFLOW_SUPPLIERS mode it was saved in.
usablebooleanSaved in this server's mode and not switched off.
settingsobjectNon-secret settings (SupplierSettings).
lastTestedAtstring (date-time) or null
lastSyncAtstring (date-time) or null
catalogIndexedAtstring (date-time) or null
lastErrorstring or null
catalogCountintegerStyles in the browse cache.
productCountintegerProducts imported from it.
createdAtstring (date-time)
updatedAtstring (date-time)

A supplier connection

GET /organizations/{organizationId}/suppliers/{supplierConnectionId}

One connection (no credentials). Read-only.

Permissionproducts.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolsuppliers_get (toolset catalog)

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Example

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

Response

200: the answer's fields
FieldTypeDescription
idstring
kindenumSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
namestringThe supplier's name.
displayNamestring
accountNumberstring or null
credentialKeysarray of stringWhich credential fields are stored. Their values are never returned.
statusenumOne of PENDING, CONNECTED, ERROR, DISABLED.
environmentstringfake or live: the SKUFLOW_SUPPLIERS mode it was saved in.
usablebooleanSaved in this server's mode and not switched off.
settingsobjectNon-secret settings (SupplierSettings).
lastTestedAtstring (date-time) or null
lastSyncAtstring (date-time) or null
catalogIndexedAtstring (date-time) or null
lastErrorstring or null
catalogCountintegerStyles in the browse cache.
productCountintegerProducts imported from it.
createdAtstring (date-time)
updatedAtstring (date-time)

Change a supplier connection

PATCH /organizations/{organizationId}/suppliers/{supplierConnectionId}

Sensitive: renames, changes the account number, credentials (merged: sent fields replace, empty clears, others kept) or settings, or switches the connection off (enabled: false: no browsing, imports or sync) and on. A change of credentials or settings sets it PENDING until tested again.

Permissionsuppliers.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 toolsuppliers_update (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Request body

FieldTypeRequiredDescription
displayNamestringNoUp to 200 characters.
accountNumberstring or nullNoUp to 100 characters.
credentialsobjectNoCredential fields by key (GET /suppliers/kinds lists each kind's fields). Write-only: stored encrypted, never returned. On a change, a field sent replaces the stored one, an empty string clears it, a field left out is kept.
settingsobjectNoNon-secret settings: PromoStandards supplierKey and endpoint overrides, SanMar FTP host and path, a catalog fileUrl, the CSV columnMapping, syncIntervalHours (default 6) and the default pricingRuleId.
settings.supplierKeystring or nullNoPromoStandards: the directory entry (GET /suppliers/kinds → directory). Up to 100 characters.
settings.endpointsobject or nullNoPromoStandards endpoint URLs that replace the directory's.
settings.endpoints.productDatastringNoUp to 2000 characters.
settings.endpoints.inventorystringNoUp to 2000 characters.
settings.endpoints.pricingstringNoUp to 2000 characters.
settings.endpoints.mediastringNoUp to 2000 characters.
settings.sanmarApienum or nullNoSanMar: where details, cost and stock come from. WEB_SERVICES = SanMar Web Services (its own SOAP API; recommended for new connections), PROMOSTANDARDS = SanMar's PromoStandards endpoints (also when absent). Both use the SanMar.com login. One of WEB_SERVICES, PROMOSTANDARDS.
settings.sanmarEnvironmentenum or nullNoSanMar: PRODUCTION (default) or TEST (SanMar's EDEV environment; separate credentials from SanMar). One of PRODUCTION, TEST.
settings.ftpHoststring or nullNoSanMar FTP host (ftp.sanmar.com). Up to 255 characters.
settings.ftpPortinteger or nullNo1–65535.
settings.ftpPathstring or nullNoSanMar flat file path on the FTP server. Up to 500 characters.
settings.fileUrlstring or nullNoJDS / CSV: where the catalog file is downloaded from. Up to 2000 characters.
settings.columnMappingobject or nullNoCSV / XLSX: field → column header. Fields: styleId, name, brand, styleNumber, category, description, color, colorHex, size, sku, gtin, cost, msrp, weight, imageUrl, stock.
settings.sheetstring or nullNoUp to 200 characters.
settings.syncIntervalHoursinteger or nullNo1–168.
settings.pricingRuleIdstring or nullNoUp to 100 characters.
enabledbooleanNo

Example

curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"displayName":"string","accountNumber":"string","credentials":{}}'

Response

200: the answer's fields
FieldTypeDescription
idstring
kindenumSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
namestringThe supplier's name.
displayNamestring
accountNumberstring or null
credentialKeysarray of stringWhich credential fields are stored. Their values are never returned.
statusenumOne of PENDING, CONNECTED, ERROR, DISABLED.
environmentstringfake or live: the SKUFLOW_SUPPLIERS mode it was saved in.
usablebooleanSaved in this server's mode and not switched off.
settingsobjectNon-secret settings (SupplierSettings).
lastTestedAtstring (date-time) or null
lastSyncAtstring (date-time) or null
catalogIndexedAtstring (date-time) or null
lastErrorstring or null
catalogCountintegerStyles in the browse cache.
productCountintegerProducts imported from it.
createdAtstring (date-time)
updatedAtstring (date-time)

Remove a supplier connection

DELETE /organizations/{organizationId}/suppliers/{supplierConnectionId}

Destructive: deletes the connection, its stored credentials and its browse cache. Products imported from it stay (no longer synced).

Permissionsuppliers.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 toolsuppliers_delete (toolset catalog)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Example

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

Response

200: the answer's fields
FieldTypeDescription
deletedtrue
productsKeptinteger

Test a supplier connection

POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/test

Logs in to the supplier with the stored credentials (a small read) and sets the status: CONNECTED, or ERROR with the supplier's reason in message. Nothing is imported.

Permissionsuppliers.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolsuppliers_test (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/test" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
okboolean
messagestring or null
connectionobject
connection.idstring
connection.kindenumSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
connection.namestringThe supplier's name.
connection.displayNamestring
connection.accountNumberstring or null
connection.credentialKeysarray of stringWhich credential fields are stored. Their values are never returned.
connection.statusenumOne of PENDING, CONNECTED, ERROR, DISABLED.
connection.environmentstringfake or live: the SKUFLOW_SUPPLIERS mode it was saved in.
connection.usablebooleanSaved in this server's mode and not switched off.
connection.settingsobjectNon-secret settings (SupplierSettings).
connection.lastTestedAtstring (date-time) or null
connection.lastSyncAtstring (date-time) or null
connection.catalogIndexedAtstring (date-time) or null
connection.lastErrorstring or null
connection.catalogCountintegerStyles in the browse cache.
connection.productCountintegerProducts imported from it.
connection.createdAtstring (date-time)
connection.updatedAtstring (date-time)

Sync now

POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/sync

Refreshes every imported product of this connection from the supplier now (cost, stock per warehouse, new pictures; owner edits kept) and reprices. The same runs every six hours on its own.

Permissionsuppliers.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolsuppliers_sync (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/sync" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
skippedboolean
productsinteger
refreshedinteger
failedinteger
errorsarray of string

Upload a catalog file

POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog-file

For JDS and CSV connections: a CSV or XLSX price list as base64 (up to 15 MB). With dryRun: true nothing is written: the answer has the headers, preview rows and a suggested column mapping (header names, then AI; fields: styleId, name, brand, styleNumber, category, description, color, colorHex, size, sku, gtin, cost, msrp, weight, imageUrl, stock). Without it the mapping is saved and the file becomes the connection's browse catalog (styles are rows grouped by the style column).

Permissionsuppliers.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolsuppliers_uploadCatalog (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Request body

FieldTypeRequiredDescription
fileNamestringYesUp to 500 characters.
contentBase64stringYesThe file's bytes as base64.
mappingobjectNoField → column header; the suggestion is used when absent.
sheetstringNoXlsx: the sheet to read (first by default). Up to 200 characters.
dryRunbooleanNo

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/catalog-file" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"string","contentBase64":"string"}'

Response

200: the answer's fields
FieldTypeDescription
dryRunboolean
headersarray of string
sheetsarray of string
rowsinteger
mappingobject
mappingSourcestringUSER, SAVED, AI or HEURISTIC.
previewarray of object
indexobject or null
index.stylesinteger
index.addedinteger
index.updatedinteger
index.removedinteger

Browse a supplier's catalog

GET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog

A page of the supplier's styles from SKUFlow's browse cache (rebuilt from the supplier at most daily), with brand, category and colour facets and whether each is already imported. query matches style numbers, names, brands and categories. PromoStandards styles fill in names and pictures as pages are browsed. Read-only (calls the supplier when the cache is old).

Permissionproducts.manage (Owner, Admin, Staff)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolsupplierCatalog_browse (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes
queryquerystringNoUp to 200 characters.
brandquerystringNoUp to 200 characters.
categoryquerystringNoUp to 200 characters.
colorquerystringNoUp to 200 characters.
limitqueryintegerNo1–100. Default 24.
offsetqueryintegerNoDefault 0.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/catalog" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
connectionobject
connection.idstring
connection.kindenumSS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS (any other supplier on the standard) or CSV (a catalog file). One of SS_ACTIVEWEAR, SANMAR, ALPHABRODER, JDS, MOMENTEC, PROMOSTANDARDS, CSV.
connection.displayNamestring
indexedAtstring (date-time) or null
totalinteger
itemsarray of object
items[].idstring
items[].supplierStyleIdstringUse as styleId to open or import it.
items[].styleNumberstring or null
items[].namestring
items[].brandstring or null
items[].categorystring or null
items[].colorsarray of string
items[].thumbnailUrlstring or null
items[].costFromCentsinteger or null
items[].variantCountinteger
items[].importedProductIdstring or null
facetsobject
facets.brandsarray of object
facets.brands[].valuestring
facets.brands[].countinteger
facets.categoriesarray of object
facets.categories[].valuestring
facets.categories[].countinteger
facets.colorsarray of object
facets.colors[].valuestring
facets.colors[].countinteger

A supplier style

GET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/{styleId}

One style live from the supplier (cached an hour; refresh=true asks again): description, features, specs (fabric, weight, fit, origin…), swatches, size chart and spec sheet when the supplier has them, pictures per colour and view, colours × sizes with cost and stock per warehouse per variant, and the price each variant would get under the pricing rule (the one named, else the matching one). importedProductId is set when it is already a product. Use it to preview an import. Read-only.

Permissionproducts.manage (Owner, Admin, Staff)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolsupplierCatalog_style (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes
styleIdpathstringYessupplierStyleId from the browse. Up to 200 characters.
pricingRuleIdquerystringNo
refreshqueryboolean or enumNo

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/catalog/{styleId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
styleIdstring
styleNumberstring or null
namestring
brandstring or null
categorystring or null
descriptionstring or null
kindenumAPPAREL (garments: colour × size), PROMO (promotional items), LARGE_FORMAT (banners and signs priced per square foot from a material) or OTHER. One of APPAREL, PROMO, LARGE_FORMAT, OTHER.
colorsarray of string
imagesarray of objectPictures per colour and view (FRONT, BACK, SIDE, DETAIL, OTHER).
images[].urlstring
images[].colorNamestring or null
images[].viewenumOne of FRONT, BACK, SIDE, DETAIL, OTHER.
variantsarray of object
variants[].partIdstring
variants[].skustring or null
variants[].gtinstring or null
variants[].colorNamestring or null
variants[].colorHexstring or null
variants[].sizestring or null
variants[].costCentsinteger or nullPresent only for roles with costing.read.
variants[].msrpCentsinteger or null
variants[].priceCentsinteger or nullWhat the pricing rule would charge.
variants[].stockTotalinteger or null
variants[].stockarray of object or null
variants[].stock[].codestring
variants[].stock[].namestring or null
variants[].stock[].quantityinteger
featuresarray of stringBullet points (features), when the supplier lists them.
specsarray of objectLabelled facts the supplier gives: fabric, weight, fit, country of origin, case size…
specs[].labelstring
specs[].valuestring
swatchesarray of object
swatches[].colorNamestring
swatches[].colorHexstring or null
swatches[].imageUrlstring or null
sizeChartobject or nullMeasurements per size (one row per measurement), when published.
sizeChart.sizesarray of string
sizeChart.rowsarray of object
sizeChart.rows[].labelstring
sizeChart.rows[].valuesarray of string
specSheetUrlstring or nullThe supplier's spec sheet (PDF).
fetchedAtstring (date-time)When the supplier gave these numbers (cost, stock).
liveStockbooleanThe supplier answers live stock (GET …/catalog/{styleId}/stock).
pricingRuleobject or null
pricingRule.idstring
importedProductIdstring or nullThe product already imported from this style (open it instead).

Live stock of a supplier style

GET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/{styleId}/stock

Asks the supplier now for the stock per warehouse (and cost) of every colour × size of a style, with the time it answered; the cached style takes the new numbers. Only suppliers with live stock (not catalog files: 409). Read-only; counts against the supplier rate limit.

Permissionproducts.manage (Owner, Admin, Staff)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolsupplierCatalog_liveStock (toolset catalog)

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes
styleIdpathstringYessupplierStyleId from the browse. Up to 200 characters.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/catalog/{styleId}/stock" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
styleIdstring
fetchedAtstring (date-time)
partsarray of object
parts[].partIdstringThe variant's supplier part id (variants[].partId).
parts[].stockarray of object or null
parts[].stock[].codestring
parts[].stock[].namestring or null
parts[].stock[].quantityinteger
parts[].stockTotalinteger or null
parts[].costCentsinteger or nullThe supplier's cost now. Present only for roles with costing.read.

Reload the supplier's catalog

POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/refresh

Rebuilds the browse cache from the supplier now (the style list, or the file at the connection's URL; SanMar with an FTP login reads the flat file). Styles the supplier dropped leave the cache; imported products are not changed.

Permissionproducts.manage (Owner, Admin, Staff)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolsupplierCatalog_refreshIndex (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/catalog/refresh" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
stylesinteger
addedinteger
updatedinteger
removedinteger
indexedAtstring (date-time)

Import supplier styles

POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/import

Creates products from up to 25 styles (optionally only some colours and sizes) with variants, pictures (copied into SKUFlow in the background) and supplier stock, priced by the pricing rule (the one named, else the connection's, else the matching one). Importing a style again updates it: cost, stock, new parts and pictures, never the owner's edits or prices; colours asked for are added. Per-style errors are reported, not thrown.

Permissionproducts.manage (Owner, Admin, Staff)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolsupplierCatalog_import (toolset catalog)
PlanSupplier catalogs: the Connect plan and up.

Parameters

NameInTypeRequiredDescription
supplierConnectionIdpathstringYes

Request body

FieldTypeRequiredDescription
stylesarray of objectYesUp to 25 items.
styles[].styleIdstringYesUp to 200 characters.
styles[].colorsarray of stringNoOnly these colours (all when absent). Up to 200 items.
styles[].sizesarray of stringNoOnly these sizes (all when absent). Up to 100 items.
pricingRuleIdstringNo
kindenumNoThe product kind (else the supplier's: garments are APPAREL). One of APPAREL, PROMO, LARGE_FORMAT, OTHER.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}/catalog/import" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"styles":[{"styleId":"style_id"}]}'

Response

200: the answer's fields
FieldTypeDescription
importedinteger
createdinteger
updatedinteger
failedinteger
resultsarray of object
results[].styleIdstring
results[].productIdstring or null
results[].createdboolean
results[].variantsAddedinteger
results[].variantsUpdatedinteger
results[].errorstring or null

On this page