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.
| Operation | Endpoint | Risk |
|---|---|---|
| Supplier kinds and what they need | GET /organizations/{organizationId}/suppliers/kinds | read |
| Supplier connections | GET /organizations/{organizationId}/suppliers | read |
| Connect a supplier | POST /organizations/{organizationId}/suppliers | sensitive |
| A supplier connection | GET /organizations/{organizationId}/suppliers/{supplierConnectionId} | read |
| Change a supplier connection | PATCH /organizations/{organizationId}/suppliers/{supplierConnectionId} | sensitive |
| Remove a supplier connection | DELETE /organizations/{organizationId}/suppliers/{supplierConnectionId} | sensitive |
| Test a supplier connection | POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/test | write |
| Sync now | POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/sync | write |
| Upload a catalog file | POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog-file | write |
| Browse a supplier's catalog | GET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog | read |
| A supplier style | GET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/{styleId} | read |
| Live stock of a supplier style | GET /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/{styleId}/stock | read |
| Reload the supplier's catalog | POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/refresh | write |
| Import supplier styles | POST /organizations/{organizationId}/suppliers/{supplierConnectionId}/catalog/import | write |
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.
| Permission | products.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | suppliers_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
| Field | Type | Description |
|---|---|---|
mode | enum | One of fake, live, off. |
kinds | array of object | |
kinds[].kind | enum | SS_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[].name | string | |
directory | array of object | |
directory[].key | string | |
directory[].name | string | |
directory[].verified | boolean | |
directory[].notes | string | |
sanmar | object | SanMar 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.apis | array of string | |
sanmar.environments | array 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.
| Permission | products.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | suppliers_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
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | string | |
items[].kind | enum | SS_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[].name | string | The supplier's name. |
items[].displayName | string | |
items[].accountNumber | string or null | |
items[].credentialKeys | array of string | Which credential fields are stored. Their values are never returned. |
items[].status | enum | One of PENDING, CONNECTED, ERROR, DISABLED. |
items[].environment | string | fake or live: the SKUFLOW_SUPPLIERS mode it was saved in. |
items[].usable | boolean | Saved in this server's mode and not switched off. |
items[].settings | object | Non-secret settings (SupplierSettings). |
items[].lastTestedAt | string (date-time) or null | |
items[].lastSyncAt | string (date-time) or null | |
items[].catalogIndexedAt | string (date-time) or null | |
items[].lastError | string or null | |
items[].catalogCount | integer | Styles in the browse cache. |
items[].productCount | integer | Products imported from it. |
items[].createdAt | string (date-time) | |
items[].updatedAt | string (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).
| Permission | suppliers.manage (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | suppliers_create (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
| Approval | Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
kind | enum | Yes | SS_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. |
displayName | string | Yes | Unique in the business, e.g. SanMar. Up to 200 characters. |
accountNumber | string or null | No | Your customer / account number with the supplier. Up to 100 characters. |
credentials | object | No | Credential 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. |
settings | object | No | Non-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.supplierKey | string or null | No | PromoStandards: the directory entry (GET /suppliers/kinds → directory). Up to 100 characters. |
settings.endpoints | object or null | No | PromoStandards endpoint URLs that replace the directory's. |
settings.endpoints.productData | string | No | Up to 2000 characters. |
settings.endpoints.inventory | string | No | Up to 2000 characters. |
settings.endpoints.pricing | string | No | Up to 2000 characters. |
settings.endpoints.media | string | No | Up to 2000 characters. |
settings.sanmarApi | enum or null | No | SanMar: 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.sanmarEnvironment | enum or null | No | SanMar: PRODUCTION (default) or TEST (SanMar's EDEV environment; separate credentials from SanMar). One of PRODUCTION, TEST. |
settings.ftpHost | string or null | No | SanMar FTP host (ftp.sanmar.com). Up to 255 characters. |
settings.ftpPort | integer or null | No | 1–65535. |
settings.ftpPath | string or null | No | SanMar flat file path on the FTP server. Up to 500 characters. |
settings.fileUrl | string or null | No | JDS / CSV: where the catalog file is downloaded from. Up to 2000 characters. |
settings.columnMapping | object or null | No | CSV / XLSX: field → column header. Fields: styleId, name, brand, styleNumber, category, description, color, colorHex, size, sku, gtin, cost, msrp, weight, imageUrl, stock. |
settings.sheet | string or null | No | Up to 200 characters. |
settings.syncIntervalHours | integer or null | No | 1–168. |
settings.pricingRuleId | string or null | No | Up 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
| Field | Type | Description |
|---|---|---|
id | string | |
kind | enum | SS_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. |
name | string | The supplier's name. |
displayName | string | |
accountNumber | string or null | |
credentialKeys | array of string | Which credential fields are stored. Their values are never returned. |
status | enum | One of PENDING, CONNECTED, ERROR, DISABLED. |
environment | string | fake or live: the SKUFLOW_SUPPLIERS mode it was saved in. |
usable | boolean | Saved in this server's mode and not switched off. |
settings | object | Non-secret settings (SupplierSettings). |
lastTestedAt | string (date-time) or null | |
lastSyncAt | string (date-time) or null | |
catalogIndexedAt | string (date-time) or null | |
lastError | string or null | |
catalogCount | integer | Styles in the browse cache. |
productCount | integer | Products imported from it. |
createdAt | string (date-time) | |
updatedAt | string (date-time) |
A supplier connection
GET /organizations/{organizationId}/suppliers/{supplierConnectionId}
One connection (no credentials). Read-only.
| Permission | products.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | suppliers_get (toolset catalog) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/suppliers/{supplierConnectionId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | |
kind | enum | SS_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. |
name | string | The supplier's name. |
displayName | string | |
accountNumber | string or null | |
credentialKeys | array of string | Which credential fields are stored. Their values are never returned. |
status | enum | One of PENDING, CONNECTED, ERROR, DISABLED. |
environment | string | fake or live: the SKUFLOW_SUPPLIERS mode it was saved in. |
usable | boolean | Saved in this server's mode and not switched off. |
settings | object | Non-secret settings (SupplierSettings). |
lastTestedAt | string (date-time) or null | |
lastSyncAt | string (date-time) or null | |
catalogIndexedAt | string (date-time) or null | |
lastError | string or null | |
catalogCount | integer | Styles in the browse cache. |
productCount | integer | Products imported from it. |
createdAt | string (date-time) | |
updatedAt | string (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.
| Permission | suppliers.manage (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | suppliers_update (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
| Approval | Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | No | Up to 200 characters. |
accountNumber | string or null | No | Up to 100 characters. |
credentials | object | No | Credential 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. |
settings | object | No | Non-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.supplierKey | string or null | No | PromoStandards: the directory entry (GET /suppliers/kinds → directory). Up to 100 characters. |
settings.endpoints | object or null | No | PromoStandards endpoint URLs that replace the directory's. |
settings.endpoints.productData | string | No | Up to 2000 characters. |
settings.endpoints.inventory | string | No | Up to 2000 characters. |
settings.endpoints.pricing | string | No | Up to 2000 characters. |
settings.endpoints.media | string | No | Up to 2000 characters. |
settings.sanmarApi | enum or null | No | SanMar: 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.sanmarEnvironment | enum or null | No | SanMar: PRODUCTION (default) or TEST (SanMar's EDEV environment; separate credentials from SanMar). One of PRODUCTION, TEST. |
settings.ftpHost | string or null | No | SanMar FTP host (ftp.sanmar.com). Up to 255 characters. |
settings.ftpPort | integer or null | No | 1–65535. |
settings.ftpPath | string or null | No | SanMar flat file path on the FTP server. Up to 500 characters. |
settings.fileUrl | string or null | No | JDS / CSV: where the catalog file is downloaded from. Up to 2000 characters. |
settings.columnMapping | object or null | No | CSV / XLSX: field → column header. Fields: styleId, name, brand, styleNumber, category, description, color, colorHex, size, sku, gtin, cost, msrp, weight, imageUrl, stock. |
settings.sheet | string or null | No | Up to 200 characters. |
settings.syncIntervalHours | integer or null | No | 1–168. |
settings.pricingRuleId | string or null | No | Up to 100 characters. |
enabled | boolean | No |
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
| Field | Type | Description |
|---|---|---|
id | string | |
kind | enum | SS_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. |
name | string | The supplier's name. |
displayName | string | |
accountNumber | string or null | |
credentialKeys | array of string | Which credential fields are stored. Their values are never returned. |
status | enum | One of PENDING, CONNECTED, ERROR, DISABLED. |
environment | string | fake or live: the SKUFLOW_SUPPLIERS mode it was saved in. |
usable | boolean | Saved in this server's mode and not switched off. |
settings | object | Non-secret settings (SupplierSettings). |
lastTestedAt | string (date-time) or null | |
lastSyncAt | string (date-time) or null | |
catalogIndexedAt | string (date-time) or null | |
lastError | string or null | |
catalogCount | integer | Styles in the browse cache. |
productCount | integer | Products imported from it. |
createdAt | string (date-time) | |
updatedAt | string (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).
| Permission | suppliers.manage (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | suppliers_delete (toolset catalog) |
| Approval | Over MCP, this tool always waits for your approval in SKUFlow. See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
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
| Field | Type | Description |
|---|---|---|
deleted | true | |
productsKept | integer |
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.
| Permission | suppliers.manage (Owner, Admin) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | suppliers_test (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
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
| Field | Type | Description |
|---|---|---|
ok | boolean | |
message | string or null | |
connection | object | |
connection.id | string | |
connection.kind | enum | SS_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.name | string | The supplier's name. |
connection.displayName | string | |
connection.accountNumber | string or null | |
connection.credentialKeys | array of string | Which credential fields are stored. Their values are never returned. |
connection.status | enum | One of PENDING, CONNECTED, ERROR, DISABLED. |
connection.environment | string | fake or live: the SKUFLOW_SUPPLIERS mode it was saved in. |
connection.usable | boolean | Saved in this server's mode and not switched off. |
connection.settings | object | Non-secret settings (SupplierSettings). |
connection.lastTestedAt | string (date-time) or null | |
connection.lastSyncAt | string (date-time) or null | |
connection.catalogIndexedAt | string (date-time) or null | |
connection.lastError | string or null | |
connection.catalogCount | integer | Styles in the browse cache. |
connection.productCount | integer | Products imported from it. |
connection.createdAt | string (date-time) | |
connection.updatedAt | string (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.
| Permission | suppliers.manage (Owner, Admin) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | suppliers_sync (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
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
| Field | Type | Description |
|---|---|---|
skipped | boolean | |
products | integer | |
refreshed | integer | |
failed | integer | |
errors | array 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).
| Permission | suppliers.manage (Owner, Admin) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | suppliers_uploadCatalog (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
fileName | string | Yes | Up to 500 characters. |
contentBase64 | string | Yes | The file's bytes as base64. |
mapping | object | No | Field → column header; the suggestion is used when absent. |
sheet | string | No | Xlsx: the sheet to read (first by default). Up to 200 characters. |
dryRun | boolean | No |
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
| Field | Type | Description |
|---|---|---|
dryRun | boolean | |
headers | array of string | |
sheets | array of string | |
rows | integer | |
mapping | object | |
mappingSource | string | USER, SAVED, AI or HEURISTIC. |
preview | array of object | |
index | object or null | |
index.styles | integer | |
index.added | integer | |
index.updated | integer | |
index.removed | integer |
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).
| Permission | products.manage (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | supplierCatalog_browse (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes | |
query | query | string | No | Up to 200 characters. |
brand | query | string | No | Up to 200 characters. |
category | query | string | No | Up to 200 characters. |
color | query | string | No | Up to 200 characters. |
limit | query | integer | No | 1–100. Default 24. |
offset | query | integer | No | Default 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
| Field | Type | Description |
|---|---|---|
connection | object | |
connection.id | string | |
connection.kind | enum | SS_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.displayName | string | |
indexedAt | string (date-time) or null | |
total | integer | |
items | array of object | |
items[].id | string | |
items[].supplierStyleId | string | Use as styleId to open or import it. |
items[].styleNumber | string or null | |
items[].name | string | |
items[].brand | string or null | |
items[].category | string or null | |
items[].colors | array of string | |
items[].thumbnailUrl | string or null | |
items[].costFromCents | integer or null | |
items[].variantCount | integer | |
items[].importedProductId | string or null | |
facets | object | |
facets.brands | array of object | |
facets.brands[].value | string | |
facets.brands[].count | integer | |
facets.categories | array of object | |
facets.categories[].value | string | |
facets.categories[].count | integer | |
facets.colors | array of object | |
facets.colors[].value | string | |
facets.colors[].count | integer |
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.
| Permission | products.manage (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | supplierCatalog_style (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes | |
styleId | path | string | Yes | supplierStyleId from the browse. Up to 200 characters. |
pricingRuleId | query | string | No | |
refresh | query | boolean or enum | No |
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
| Field | Type | Description |
|---|---|---|
styleId | string | |
styleNumber | string or null | |
name | string | |
brand | string or null | |
category | string or null | |
description | string or null | |
kind | enum | APPAREL (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. |
colors | array of string | |
images | array of object | Pictures per colour and view (FRONT, BACK, SIDE, DETAIL, OTHER). |
images[].url | string | |
images[].colorName | string or null | |
images[].view | enum | One of FRONT, BACK, SIDE, DETAIL, OTHER. |
variants | array of object | |
variants[].partId | string | |
variants[].sku | string or null | |
variants[].gtin | string or null | |
variants[].colorName | string or null | |
variants[].colorHex | string or null | |
variants[].size | string or null | |
variants[].costCents | integer or null | Present only for roles with costing.read. |
variants[].msrpCents | integer or null | |
variants[].priceCents | integer or null | What the pricing rule would charge. |
variants[].stockTotal | integer or null | |
variants[].stock | array of object or null | |
variants[].stock[].code | string | |
variants[].stock[].name | string or null | |
variants[].stock[].quantity | integer | |
features | array of string | Bullet points (features), when the supplier lists them. |
specs | array of object | Labelled facts the supplier gives: fabric, weight, fit, country of origin, case size… |
specs[].label | string | |
specs[].value | string | |
swatches | array of object | |
swatches[].colorName | string | |
swatches[].colorHex | string or null | |
swatches[].imageUrl | string or null | |
sizeChart | object or null | Measurements per size (one row per measurement), when published. |
sizeChart.sizes | array of string | |
sizeChart.rows | array of object | |
sizeChart.rows[].label | string | |
sizeChart.rows[].values | array of string | |
specSheetUrl | string or null | The supplier's spec sheet (PDF). |
fetchedAt | string (date-time) | When the supplier gave these numbers (cost, stock). |
liveStock | boolean | The supplier answers live stock (GET …/catalog/{styleId}/stock). |
pricingRule | object or null | |
pricingRule.id | string | |
importedProductId | string or null | The 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.
| Permission | products.manage (Owner, Admin, Staff) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | supplierCatalog_liveStock (toolset catalog) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes | |
styleId | path | string | Yes | supplierStyleId 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
| Field | Type | Description |
|---|---|---|
styleId | string | |
fetchedAt | string (date-time) | |
parts | array of object | |
parts[].partId | string | The variant's supplier part id (variants[].partId). |
parts[].stock | array of object or null | |
parts[].stock[].code | string | |
parts[].stock[].name | string or null | |
parts[].stock[].quantity | integer | |
parts[].stockTotal | integer or null | |
parts[].costCents | integer or null | The 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.
| Permission | products.manage (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | supplierCatalog_refreshIndex (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
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
| Field | Type | Description |
|---|---|---|
styles | integer | |
added | integer | |
updated | integer | |
removed | integer | |
indexedAt | string (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.
| Permission | products.manage (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | supplierCatalog_import (toolset catalog) |
| Plan | Supplier catalogs: the Connect plan and up. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
supplierConnectionId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
styles | array of object | Yes | Up to 25 items. |
styles[].styleId | string | Yes | Up to 200 characters. |
styles[].colors | array of string | No | Only these colours (all when absent). Up to 200 items. |
styles[].sizes | array of string | No | Only these sizes (all when absent). Up to 100 items. |
pricingRuleId | string | No | |
kind | enum | No | The 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
| Field | Type | Description |
|---|---|---|
imported | integer | |
created | integer | |
updated | integer | |
failed | integer | |
results | array of object | |
results[].styleId | string | |
results[].productId | string or null | |
results[].created | boolean | |
results[].variantsAdded | integer | |
results[].variantsUpdated | integer | |
results[].error | string or null |