Kōbō PLM API Documentation
The Kōbō PLM API provides programmatic access to your product lifecycle management data. Use it to integrate with ERPs, build custom workflows, or sync data with external systems.
Base URL
All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.
Authentication
All API requests require authentication using an API key. Include your API key in theX-API-Key header with every request.
curl -X GET "https://api.kobolabs.io/api/v1/styles" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json"Getting an API Key
- Log in to Kōbō PLM
- Go to Account Settings → API Keys
- Click Create API Key
- Select the scopes (permissions) you need
- Copy and securely store your key - it won't be shown again
API Key Scopes
| Scope | Description |
|---|---|
* | Full access to all resources |
styles:read | Read styles/products |
styles:write | Create, update, delete styles |
components:read | Read components/materials |
components:write | Create, update, delete components |
suppliers:read | Read suppliers |
suppliers:write | Create, update, delete suppliers |
purchase_orders:read | Read purchase orders |
purchase_orders:write | Create, update, delete purchase orders |
inventory:read | Read inventory levels |
inventory:write | Update inventory |
customers:read | Read customers |
customers:write | Create, update, delete customers |
customer_addresses:read | Read customer addresses |
customer_addresses:write | Create, update, delete customer addresses |
customer_contacts:read | Read customer contacts |
customer_contacts:write | Create, update, delete customer contacts |
colors:read | Read colors |
colors:write | Create, update, delete colors |
seasons:read | Read seasons |
sales_orders:read | Read sales orders |
sales_orders:write | Create, update, delete sales orders |
deliveries:read | Read deliveries |
bom:read | Read bill of materials |
bom:write | Manage bill of materials |
pom:read | Read points of measure |
pom:write | Manage points of measure |
tasks:read | Read tasks |
tasks:write | Create, update, delete tasks |
notes:read | Read notes |
notes:write | Create, update, delete notes |
projects:read | Read projects |
projects:write | Create, update, delete projects |
cancellations:read | Read cancellations |
cancellations:write | Manage cancellations |
returns:read | Read returns |
returns:write | Manage returns |
payments:read | Read payments |
payments:write | Create, update payments |
invoices:read | Read invoices |
invoices:write | Create, update, manage invoices |
credit_notes:read | Read credit notes |
credit_notes:write | Create, update, delete credit notes |
sales_order_payments:read | Read sales order payments |
sales_order_payments:write | Create, update, delete payments |
pick_tickets:read | Read pick tickets |
pick_tickets:write | Create, update, delete pick tickets |
shipments:read | Read sales shipments |
shipments:write | Create, update, manage shipments |
order_confirmations:read | Read order confirmations |
order_confirmations:write | Create, update, delete confirmations |
goods_receipts:read | Read goods receipts |
goods_receipts:write | Create, update, delete goods receipts |
range_plans:read | Read range plans |
range_plans:write | Create, update, delete range plans |
quotations:read | Read quotations |
quotations:write | Create, update, delete quotations |
linesheets:read | Read linesheets |
linesheets:write | Create, update, manage linesheets |
sample_reviews:read | Read sample reviews |
sample_reviews:write | Create, update sample reviews |
quality_control:read | Read QC inspections and reports |
tech_packs:read | Generate and read tech packs |
labdips:read | Read labdips |
labdips:write | Create, update, delete labdips |
moodboards:read | Read moodboards |
moodboards:write | Create, update, delete moodboards |
component_sourcing:read | Read component sourcing requests |
component_sourcing:write | Create, update, delete sourcing requests |
packing_lists:read | Read packing lists |
packing_lists:write | Create, update, delete packing lists |
delivery_notes:read | Read delivery notes |
delivery_notes:write | Create, update, delete delivery notes |
stock_takes:read | Read stock takes |
stock_takes:write | Manage stock takes |
workflows:read | Read workflows |
workflows:write | Manage workflows |
notifications:read | Read notifications |
notifications:write | Manage notifications |
webhooks:read | Read webhook configurations |
webhooks:write | Manage webhooks |
api_keys:read | Read API keys |
api_keys:write | Manage API keys |
locations:read | Read locations |
locations:write | Manage locations |
budgets:read | Read budgets |
budgets:write | Manage budgets |
library_constructions:read | Read library constructions |
library_constructions:write | Manage library constructions |
component_reservations:read | Read component reservations |
component_reservations:write | Manage component reservations |
lookups:read | Read lookup/reference data (categories, tags, markets, terms) |
files:read | Read file records and download URLs |
files:write | Upload, update, delete files |
Rate Limiting
API requests are rate limited based on your subscription tier:
| Tier | Requests per Minute |
|---|---|
| Basic | 100 |
| Professional | 500 |
| Enterprise | 2,000 |
Rate limit headers are included in every response:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1699574400429 Too Many Requests response. Implement exponential backoff to handle this gracefully.Pagination
List endpoints return paginated results. Use these query parameters:
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default: 1) |
per_page | integer | Items per page (default: 25, max: 100) |
Response includes pagination metadata:
{
"data": [...],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 10,
"per_page": 25,
"to": 25,
"total": 250
},
"links": {
"first": "https://api.kobolabs.io/api/v1/styles?page=1",
"last": "https://api.kobolabs.io/api/v1/styles?page=10",
"prev": null,
"next": "https://api.kobolabs.io/api/v1/styles?page=2"
}
}Filtering
Most list endpoints support filtering for incremental sync:
| Parameter | Type | Description |
|---|---|---|
updated_since | datetime | ISO 8601 datetime (e.g., 2024-01-01T00:00:00Z) |
created_since | datetime | ISO 8601 datetime (e.g., 2024-01-01T00:00:00Z) |
# Get styles updated in the last 24 hours
curl "https://api.kobolabs.io/api/v1/styles?updated_since=2024-01-14T00:00:00Z" \
-H "X-API-Key: your_api_key"Error Handling
The API uses standard HTTP status codes:
| Code | Description |
|---|---|
| 200 | Success |
| 201 | Created |
| 204 | No Content (successful delete) |
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Invalid or missing API key |
| 403 | Forbidden - Insufficient permissions |
| 404 | Not Found |
| 422 | Validation Error |
| 429 | Rate Limited |
| 500 | Server Error |
Error responses include details:
{
"message": "The given data was invalid.",
"errors": {
"name": ["The name field is required."],
"style_code": ["The style code has already been taken."]
}
}Styles
Styles represent your products/designs in Kōbō PLM.
/stylesList all styles with optional filtering and pagination
/styles/{id}Get a specific style by ID
/stylesCreate a new style
/styles/{id}Update an existing style
/styles/{id}Delete a style
/styles/{id}/duplicateDuplicate a style
/styles/{id}/restoreRestore an archived style
/styles/exportExport styles as CSV
/styles/trashedList soft-deleted styles
/styles/{id}/forcePermanently delete a style
/styles/{id}/deletion-impactPreview the impact of deleting a style (safety pre-check before delete)
/styles/importImport styles from CSV or JSON
/styles/bulk-actionsBulk update or delete up to 100 styles
/styles/{id}/collectionsSet the collections a style belongs to
/styles/{id}/production-statusUpdate a style's production status
/styles/{id}/production-readinessCheck whether a style is ready for production
/styles/{id}/production-historyProduction status transition history
List Styles
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page (max 100) |
updated_since | datetime | Filter by update time |
created_since | datetime | Filter by creation time |
status | string | Filter by status |
season_id | integer | Filter by season |
Example Request
curl "https://api.kobolabs.io/api/v1/styles?per_page=50&status=active" \
-H "X-API-Key: your_api_key"Example Response
{
"data": [
{
"id": 1,
"style_code": "SS24-001",
"name": "Classic Cotton Tee",
"description": "Premium cotton t-shirt",
"status": "active",
"category": {
"id": 1,
"name": "Tops"
},
"season": {
"id": 1,
"name": "Spring/Summer 2024"
},
"brand": {
"id": 1,
"name": "Main Brand"
},
"wholesale_price": "45.00",
"retail_price": "89.00",
"cost_price": "22.50",
"currency": "USD",
"sizes": ["XS", "S", "M", "L", "XL"],
"colors": [
{"id": 1, "name": "White", "hex": "#FFFFFF"},
{"id": 2, "name": "Black", "hex": "#000000"}
],
"images": [
{
"id": 1,
"url": "https://storage.koboplm.com/styles/1/main.jpg",
"type": "main"
}
],
"skus": [
{
"id": 1,
"sku": "SS24-001-WHT-S",
"size": "S",
"color": "White",
"barcode": "1234567890123"
}
],
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T14:45:00Z"
}
],
"meta": {
"current_page": 1,
"total": 150
}
}Create Style
curl -X POST "https://api.kobolabs.io/api/v1/styles" \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"style_code": "SS24-002",
"name": "Slim Fit Chinos",
"description": "Modern slim fit chinos",
"category_id": 2,
"season_id": 1,
"status": "development",
"wholesale_price": 65.00,
"retail_price": 129.00,
"cost_price": 32.50,
"currency": "USD",
"sizes": ["28", "30", "32", "34", "36"]
}'Components
Components represent materials, trims, and other items used in production.
/componentsList all components
/components/{id}Get a specific component
/componentsCreate a new component
/components/{id}Update an existing component
/components/{id}Delete a component
/components/{id}/duplicateDuplicate a component
/components/exportExport components as CSV
/components/trashedList soft-deleted components
/components/{id}/restoreRestore a soft-deleted component
/components/{id}/forcePermanently delete a trashed component
/components/importImport components from CSV
/components/{id}/transactionsInventory transactions for a component
List Components
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
type | string | Filter by component type |
supplier_id | integer | Filter by supplier |
Example Response
{
"data": [
{
"id": 1,
"code": "FAB-001",
"name": "Organic Cotton Jersey",
"type": "fabric",
"description": "180gsm organic cotton jersey",
"supplier": {
"id": 1,
"name": "Premium Textiles Ltd"
},
"unit": "meter",
"unit_price": "8.50",
"currency": "USD",
"minimum_order_quantity": 100,
"lead_time_days": 14,
"specifications": {
"weight": "180gsm",
"width": "150cm",
"composition": "100% Organic Cotton"
},
"created_at": "2024-01-10T09:00:00Z",
"updated_at": "2024-01-12T11:30:00Z"
}
]
}Suppliers
/suppliersList all suppliers
/suppliers/{id}Get a specific supplier
/suppliersCreate a new supplier
/suppliers/{id}Update an existing supplier
/suppliers/{id}Delete a supplier
/suppliers/exportExport suppliers as CSV
/suppliers/{id}/componentsList a supplier's components
/suppliers/{id}/stylesList styles sourced from a supplier
/suppliers/{id}/purchase-ordersList a supplier's purchase orders
/suppliers/{id}/contactsList supplier contacts
/suppliers/{id}/contactsAdd a supplier contact
/suppliers/{id}/contacts/{contactId}Update a supplier contact
/suppliers/{id}/contacts/{contactId}Delete a supplier contact
List Suppliers
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
country | string | Filter by country code |
type | string | Filter by supplier type |
Example Response
{
"data": [
{
"id": 1,
"name": "Premium Textiles Ltd",
"code": "SUP-001",
"type": "manufacturer",
"email": "contact@premiumtextiles.com",
"phone": "+1-555-0100",
"website": "https://premiumtextiles.com",
"address": {
"street": "123 Industrial Way",
"city": "Los Angeles",
"state": "CA",
"postal_code": "90001",
"country": "US"
},
"contacts": [
{
"name": "John Smith",
"email": "john@premiumtextiles.com",
"phone": "+1-555-0101",
"role": "Sales Manager"
}
],
"payment_terms": "Net 30",
"currency": "USD",
"rating": 4.5,
"certifications": ["GOTS", "OEKO-TEX"],
"created_at": "2024-01-05T08:00:00Z",
"updated_at": "2024-01-14T16:20:00Z"
}
]
}Purchase Orders
/purchase-ordersList all purchase orders
/purchase-orders/{id}Get a specific purchase order
/purchase-ordersCreate a new purchase order
/purchase-orders/{id}Update an existing purchase order
/purchase-orders/{id}Delete a draft purchase order
/purchase-orders/exportExport purchase orders as CSV
/purchase-orders/statusesList available purchase order statuses
/purchase-orders/{id}/itemsList purchase order line items
/purchase-orders/{id}/itemsAdd a line item to a purchase order
/purchase-orders/{id}/items/{itemId}Update a purchase order line item
/purchase-orders/{id}/items/{itemId}Remove a purchase order line item
/purchase-orders/{id}/confirmConfirm a purchase order
/purchase-orders/{id}/unconfirmRevert a confirmed purchase order to draft
/purchase-orders/{id}/cancelCancel a purchase order
/purchase-orders/{id}/check-in-quantitiesCheck-in quantities received per item
Status Values
draft, pending,confirmed, in_production,shipped, delivered,cancelled
Example Response
{
"data": [
{
"id": 1,
"po_number": "PO-2024-0001",
"status": "confirmed",
"supplier": {
"id": 1,
"name": "Premium Textiles Ltd"
},
"order_date": "2024-01-15",
"expected_delivery_date": "2024-02-15",
"ship_to": {
"name": "Main Warehouse",
"address": "789 Warehouse Blvd, Chicago, IL 60601"
},
"currency": "USD",
"subtotal": "5000.00",
"tax": "0.00",
"shipping": "250.00",
"total": "5250.00",
"line_items": [
{
"id": 1,
"style": {
"id": 1,
"style_code": "SS24-001",
"name": "Classic Cotton Tee"
},
"sku": "SS24-001-WHT-M",
"size": "M",
"color": "White",
"quantity": 100,
"unit_price": "22.50",
"total": "2250.00"
}
],
"notes": "Rush order - priority shipping required",
"created_at": "2024-01-15T10:00:00Z",
"updated_at": "2024-01-15T14:30:00Z"
}
]
}Inventory
/inventoryList inventory items
/inventory/{id}Get a specific inventory item
/inventory/{id}Update inventory levels
/component-inventory/bulk-updateBulk update inventory
/inventory/exportExport inventory as CSV
List Inventory
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
style_id | integer | Filter by style |
location_id | integer | Filter by location |
low_stock | boolean | Filter low stock items |
Bulk Update Example
{
"updates": [
{
"sku": "SS24-001-WHT-M",
"location_id": 1,
"qty_on_hand": 175
},
{
"sku": "SS24-001-WHT-L",
"location_id": 1,
"qty_on_hand": 200
}
]
}Customers
/customersList all customers
/customers/{id}Get a specific customer
/customersCreate a new customer
/customers/{id}Update an existing customer
/customers/{id}Delete a customer
/customers/exportExport customers as CSV
/customers/{id}/outstanding-invoicesGet outstanding invoices for a customer
/customers/{id}/overviewGet customer overview/summary
/customers/{id}/sales-ordersList a customer's sales orders
List Customers
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
type | string | Filter by type (wholesale, retail) |
Customer Addresses
Manage shipping, billing, and other addresses for customers.
/customers/{customerId}/addressesList all addresses for a customer
/customers/{customerId}/addresses/{id}Get a specific customer address
/customers/{customerId}/addressesCreate a new customer address
/customers/{customerId}/addresses/{id}Update an existing customer address
/customers/{customerId}/addresses/{id}Delete a customer address
/customers/{customerId}/addresses/{id}/set-defaultSet an address as the customer's default
Create Address
| Parameter | Type | Description |
|---|---|---|
address_typeRequired | string | Type of address (e.g. shipping, billing) |
address_name | string | Name/label for the address |
is_default | boolean | Whether this is the default address |
street_address | string | Street address |
city | string | City |
state | string | State or province |
country | string | Country |
postal_code | string | Postal/ZIP code |
contact_name | string | Contact person name |
contact_email | string | Contact email |
contact_phone | string | Contact phone number |
notes | string | Additional notes |
Example Response
{
"data": {
"id": 1,
"address_type": "shipping",
"address_name": "Main Warehouse",
"is_default": true,
"street_address": "456 Commerce Blvd",
"city": "New York",
"state": "NY",
"country": "US",
"postal_code": "10001",
"contact_name": "Jane Doe",
"contact_email": "jane@example.com",
"contact_phone": "+1-555-0200",
"notes": null,
"created_at": "2024-01-10T09:00:00Z",
"updated_at": "2024-01-10T09:00:00Z"
}
}Customer Contacts
Manage contact people associated with customers.
/customers/{customerId}/contactsList all contacts for a customer
/customers/{customerId}/contacts/{id}Get a specific customer contact
/customers/{customerId}/contactsCreate a new customer contact
/customers/{customerId}/contacts/{id}Update an existing customer contact
/customers/{customerId}/contacts/{id}Delete a customer contact
/customers/{customerId}/contacts/{id}/set-primarySet a contact as the customer's primary contact
Create Contact
| Parameter | Type | Description |
|---|---|---|
nameRequired | string | Contact person name |
email | string | Contact email address |
phone | string | Contact phone number |
role | string | Contact role (e.g. buyer, manager) |
is_primary | boolean | Whether this is the primary contact |
notes | string | Additional notes |
Example Response
{
"data": {
"id": 1,
"name": "Sarah Johnson",
"email": "sarah@example.com",
"phone": "+1-555-0300",
"role": "Buyer",
"is_primary": true,
"notes": null,
"created_at": "2024-01-10T09:00:00Z",
"updated_at": "2024-01-10T09:00:00Z"
}
}Customer Portal & Access
Customer actions, customer portal invitations and per-style access control for portal users.
Customer Actions
/customers/{customer}/copyDuplicate a customer (with addresses, contacts, and brand links)
/customers/{customer}/invoicesList the full invoice history for a customer
/customers/{customer}/stylesList styles associated with a customer through their sales orders
Portal Access
/customers/{customer}/portal-accessList customer portal users and pending invitations
/customers/{customer}/portal-invitationsInvite a user to the customer portal
/customers/{customer}/portal-invitations/{invitation}Cancel a pending portal invitation
/customers/{customer}/portal-access/{user}Remove a user's customer portal access
Style Access
/customers/{customer}/style-accessList style access grants for a customer
/customers/{customer}/style-accessGrant (or update) access to one or more styles
/customers/{customer}/style-access/{access}Update a single style access grant (access type + scheduling window)
/customers/{customer}/style-access/{access}Revoke a single style access grant
/customers/{customer}/style-access/bulk-revokeBulk revoke style access grants by ID
Colors
Manage the color library used across styles and products.
/colorsList all colors
/colors/{id}Get a specific color
/colors/{id}/usageUsage summary for a color (safe-delete pre-check)
/colorsCreate a new color
/colors/{id}Update an existing color
/colors/{id}Delete a color
List Colors
| Parameter | Type | Description |
|---|---|---|
search | string | Search by color name |
group_id | integer | Filter by color group |
per_page | integer | Items per page (max 100) |
sort_by | string | Sort field |
sort_dir | string | Sort direction (asc, desc) |
Create Color
| Parameter | Type | Description |
|---|---|---|
colour_nameRequired | string | Color name |
hex | string | Hex color code (e.g. #FF5733) |
pantone_ref | string | Pantone reference code |
starred | boolean | Whether the color is starred/favorited |
group_id | integer | Color group ID |
Example Response
{
"data": [
{
"id": 1,
"colour_name": "Midnight Blue",
"hex": "#191970",
"pantone_ref": "19-3933 TCX",
"starred": false,
"group": {
"id": 2,
"name": "Blues"
},
"created_at": "2024-01-10T09:00:00Z",
"updated_at": "2024-01-10T09:00:00Z"
}
],
"meta": {
"current_page": 1,
"total": 48
}
}Seasons
Retrieve seasons used for organizing styles and collections. This is a read-only endpoint.
/seasonsList all seasons
/seasons/{id}Get a specific season
List Seasons
| Parameter | Type | Description |
|---|---|---|
search | string | Search by season name |
per_page | integer | Items per page (max 100) |
sort_by | string | Sort field |
sort_dir | string | Sort direction (asc, desc) |
Example Response
{
"data": [
{
"id": 1,
"season_name": "Spring/Summer 2025",
"created_at": "2024-01-05T08:00:00Z",
"updated_at": "2024-01-05T08:00:00Z"
}
],
"meta": {
"current_page": 1,
"total": 12
}
}Files
Upload and manage files attached to records across the system — styles, components, purchase orders, sales orders, customers, suppliers, notes and sample review issues. Requires the files:read / files:write scopes.
/filesList files, filterable by any subject (style_id, component_id, ...)
/files/{id}Get a specific file record
/filesUpload a file (multipart) against exactly one subject record
/files/{id}Update file metadata (never the binary)
/files/{id}Partially update file metadata
/files/{id}Soft-delete a file
/files/{id}/download-urlResolve a download URL for the file
List Files
| Parameter | Type | Description |
|---|---|---|
style_id | integer | Filter by style |
component_id | integer | Filter by component |
purchase_order_id | integer | Filter by purchase order |
sales_order_id | integer | Filter by sales order |
customer_id | integer | Filter by customer |
supplier_id | integer | Filter by supplier |
note_id | integer | Filter by note |
sample_review_issue_id | integer | Filter by sample review issue |
variant_id | integer | Filter by style variant |
search | string | Search by original file name |
extension | string | Filter by file extension |
is_primary | boolean | Filter by primary flag |
visibility | string | Filter by visibility (company, everyone, private) |
per_page | integer | Items per page (max 100) |
Upload a File
Send a multipart/form-data request with the binary in thefile field plus exactly one subject foreign key (style_id, component_id,purchase_order_id, sales_order_id,customer_id, supplier_id,note_id or sample_review_issue_id).variant_id may only accompany style_id(variant imagery), and section_id may only accompanystyle_id.
| Parameter | Type | Description |
|---|---|---|
fileRequired | file | The file to upload (max 50 MB) |
style_id | integer | Subject: style |
component_id | integer | Subject: component |
purchase_order_id | integer | Subject: purchase order |
sales_order_id | integer | Subject: sales order |
customer_id | integer | Subject: customer |
supplier_id | integer | Subject: supplier |
note_id | integer | Subject: note |
sample_review_issue_id | integer | Subject: sample review issue |
variant_id | integer | Style variant (only with style_id) |
section_id | integer | Style file section (only with style_id) |
visibility | string | company, everyone or private (default: company) |
supplier_visible | boolean | Whether suppliers can see the file |
member_access_level | string | self_only, company_team or admins_only |
include_in_techpack | boolean | Include the file in tech pack exports |
is_primary | boolean | Mark as the subject's primary file/image |
tags | array | Tags for the file |
Example Request
curl -X POST "https://api.kobolabs.io/api/v1/files" \
-H "X-API-Key: your_api_key" \
-F "file=@techpack-sketch.png" \
-F "style_id=123" \
-F "is_primary=true"Download URL Response
{
"success": true,
"data": {
"url": "https://storage.googleapis.com/.../techpack-sketch.png",
"file_name": "techpack-sketch.png",
"mime_type": "image/png",
"size": 245120
}
}DELETE /files/{id} soft-deletes the record only — the underlying stored object is never removed, because file version-copies share storage blobs.Bill of Materials (BOM)
The BOM represents the list of components and materials used to manufacture a style.
/bom/{id}Get a specific BOM item
/bom/{id}Update a BOM item
/bom/{id}Delete a BOM item
/styles/{styleId}/bomGet BOM for a specific style
/styles/{styleId}/bomAdd component to style BOM
/styles/{styleId}/bom/bulkBulk-add multiple components to a style's BOM in one request
/bom/bulk-replaceReplace a component across multiple BOM rows in one request
/styles/{styleId}/bomClear ALL BOM entries for a style — requires confirm: true in the payload
/bom/{id}/colorsAssign a library colour to a BOM entry
/bom/{id}/colors/{colorId}Remove a library colour from a BOM entry
/bom/{id}/replaceReplace the component on a single BOM row
DELETE /styles/{styleId}/bom wipes every BOM row on the style and only proceeds when the request body includes {"confirm": true}.List BOM Items
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
style_id | integer | Filter by style ID |
component_id | integer | Filter by component ID |
Add BOM Item Example
{
"component_id": 123,
"quantity": 1.5,
"unit": "meter",
"placement": "Body",
"notes": "Main fabric"
}Points of Measure (POM)
Points of Measure define the measurement specifications for a style.
/pom/{id}Get a specific POM item
/pom/{id}Update a POM item
/pom/{id}Delete a POM item
/styles/{styleId}/pomGet POM for a specific style
/styles/{styleId}/pomAdd POM item to style
/styles/{styleId}/pom/positionsReorder a style's POM rows
/styles/{styleId}/pom/save-templateSave a style's POMs to the library as a new POM template
/styles/{styleId}/pom/diagram/{diagramId}Get a POM diagram linked to a style
/styles/{styleId}/pom/diagramLink a library POM diagram to a style
/styles/{styleId}/pom/diagramUnlink the POM diagram from a style
/styles/{styleId}/pomBulk update/replace all POMs for a style
List POM Items
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
style_id | integer | Filter by style ID |
Add POM Item Example
{
"name": "Chest Width",
"code": "A",
"tolerance_plus": 0.5,
"tolerance_minus": 0.5,
"measurements": {
"S": 48,
"M": 51,
"L": 54,
"XL": 57
}
}Colorway Propagation
Copy data between a style's colorway peers. The same three-endpoint pattern is available for BOM, POM, quality control and sample review issues:colorway-import lists the items available to import from peers,import-from-colorway imports selected items from a peer colorway, and apply-to-colorways pushes items out to all colorway peers.
BOM
/styles/{styleId}/bom/colorway-importList BOM items available for cross-colorway import
/styles/{styleId}/bom/import-from-colorwayImport selected BOM items from a peer colorway
/styles/{styleId}/bom/apply-to-colorwaysApply BOM items to all colorway peers
POM
/styles/{styleId}/pom/colorway-importList POMs available for cross-colorway import
/styles/{styleId}/pom/import-from-colorwayImport selected POMs from a peer colorway
/styles/{styleId}/pom/apply-to-colorwaysApply POMs to all colorway peers
Quality Control
/styles/{styleId}/quality-control/colorway-importList QC data available for cross-colorway import
/styles/{styleId}/quality-control/import-from-colorwayImport QC data from a peer colorway
/styles/{styleId}/quality-control/apply-to-colorwaysApply QC data to all colorway peers
Sample Review Issues
/styles/{styleId}/sample-review-issues/colorway-importList sample review issues available for cross-colorway import
/styles/{styleId}/sample-review-issues/import-from-colorwayImport sample review issues from a peer colorway
/styles/{styleId}/sample-review-issues/apply-to-colorwaysApply sample review issues to all colorway peers
Variants & SKUs
Manage style variants (color/size combinations), SKUs, and colorways.
Variants
/styles/{id}/variantsGet style variants
/styles/{id}/variantsCreate a style variant
/styles/{id}/variants/batchBulk-create variants in a single transaction (duplicate names skipped and reported)
/styles/{id}/variants/{variantId}Update a variant
/styles/{id}/variants/{variantId}Delete a variant
SKUs
/styles/{id}/skusGet style SKUs
/styles/{id}/skusCreate a SKU
/styles/{id}/skus/{skuId}Update a SKU
/styles/{id}/skus/{skuId}Delete a SKU
Colorways
/styles/{id}/colorwaysGet style colorways
Create Variant Example
{
"color_id": 5,
"size_range_id": 2,
"is_active": true
}Barcodes
Manage the barcode inventory pool and assign barcodes to SKUs. Supported barcode types:upc, ean,code39, code128.
/styles/{style}/skus/assign-barcodesBulk-assign available pool barcodes to specific SKUs of a style
/styles/barcodes/availableList available (unassigned) barcodes from the inventory pool
/styles/barcodes/usedList barcodes already assigned to SKUs
/styles/barcodes/validateValidate a barcode's format and check whether it is already in use
/styles/barcodes/{barcode}Look up a barcode and the SKU it is assigned to
Assign Barcodes to SKUs
| Parameter | Type | Description |
|---|---|---|
typeRequired | string | Barcode type: upc, ean, code39, code128 |
sku_idsRequired | array | SKU IDs on the style to assign barcodes to |
Validate Barcode
| Parameter | Type | Description |
|---|---|---|
barcodeRequired | string | The barcode value to validate |
typeRequired | string | Barcode type: upc, ean, code39, code128 |
Library Constructions
Manage reusable construction specifications and techniques stored in the product library.
/library-constructionsList constructions (paginated)
/library-constructions/{id}Get a construction
/library-constructionsCreate a construction
/library-constructions/{id}Update a construction
/library-constructions/{id}Delete a construction
List Constructions
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
created_since | datetime | Filter by creation time |
Create Construction Example
{
"name": "Flat Felled Seam",
"description": "A strong, flat seam commonly used in denim and workwear",
"category": "seams",
"notes": "Requires double-needle sewing machine"
}Sales Orders
/sales-ordersList all sales orders
/sales-orders/{id}Get a specific sales order
/sales-ordersCreate a new sales order
/sales-orders/{id}Update an existing sales order
/sales-orders/{id}Delete a sales order
/sales-orders/{id}/statusUpdate sales order status
/sales-orders/{id}/invoiceCreate invoice from sales order
/sales-orders/{id}/unconfirmUnconfirm a sales order
/sales-orders/{id}/itemsList sales order line items
/sales-orders/{id}/itemsAdd a line item to a sales order
/sales-orders/{id}/items/{itemId}Update a sales order line item
/sales-orders/{id}/items/{itemId}Remove a sales order line item
/sales-orders/{id}/stylesStyles on a sales order
/sales-orders/{id}/fulfilment-quantitiesFulfilment quantities per line
/sales-orders/{id}/confirmConfirm a sales order
/sales-orders/{id}/cancelCancel a sales order
/sales-orders/{id}/completeMark a sales order as completed
Status Values
draft, pending,confirmed, processing,shipped, delivered,cancelled
Update Status Example
{
"status": "confirmed",
"notes": "Order confirmed by warehouse"
}Invoices
Create and manage invoices linked to sales orders.
/invoicesList all invoices
/invoices/{id}Get a specific invoice
/invoicesCreate a new invoice
/invoices/{id}Update an invoice
/invoices/{id}/confirmConfirm a draft invoice
/invoices/{id}/cancelCancel an invoice
/invoices/{id}Delete an invoice
/invoices/{id}/itemsAdd a line item to an invoice
/invoices/{id}/items/{itemId}Update an invoice line item
/invoices/{id}/items/{itemId}Remove an invoice line item
/invoices/{id}/recalculate-totalsRecalculate invoice totals from its lines
/invoices/{id}/unconfirmRevert a confirmed invoice to draft
/invoices/{id}/restoreRestore a deleted invoice
/invoices/{id}/download-pdfDownload the invoice as a PDF
List Invoices
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status (draft, confirmed, cancelled) |
sales_order_id | integer | Filter by sales order |
customer_id | integer | Filter by customer |
Create Invoice Example
{
"sales_order_id": 123,
"invoice_number": "INV-2024-0001",
"due_date": "2024-02-15",
"notes": "Net 30 payment terms",
"line_items": [
{
"description": "Classic Cotton Tee - White - M",
"quantity": 50,
"unit_price": 45.00
}
]
}Credit Notes
Manage credit notes for returns, adjustments, and refunds.
/credit-notesList all credit notes
/credit-notes/{id}Get a specific credit note
/credit-notesCreate a credit note
/credit-notes/{id}Update a credit note
/credit-notes/{id}Delete a credit note
/credit-notes/{id}/issueIssue a credit note
/credit-notes/{id}/unissueRevert an issued credit note to draft
/credit-notes/{id}/applyApply a credit note against an invoice
/credit-notes/{id}/voidVoid a credit note
/credit-notes/{id}/unvoidRestore a voided credit note
List Credit Notes
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
Create Credit Note Example
{
"sales_order_id": 123,
"reason": "Damaged goods returned",
"amount": 225.00,
"notes": "5 units returned in defective condition"
}Sales Order Payments
Track payments received against sales orders.
/sales-order-paymentsList all sales order payments
/sales-order-payments/{id}Get a specific payment
/sales-order-paymentsRecord a payment
/sales-order-payments/{id}Update a payment
/sales-order-payments/{id}Delete a payment
/sales-order-payments/summaryPayment totals summary across sales orders
List Payments
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
sales_order_id | integer | Filter by sales order |
Record Payment Example
{
"sales_order_id": 123,
"amount": 2250.00,
"payment_method": "bank_transfer",
"payment_date": "2024-01-20",
"reference": "TT-SO-2024-001"
}Pick Tickets
Manage warehouse pick tickets for fulfilling sales orders.
/pick-ticketsList all pick tickets
/pick-tickets/{id}Get a specific pick ticket
/pick-ticketsCreate a pick ticket
/pick-tickets/{id}Update a pick ticket
/pick-tickets/{id}Delete a pick ticket
/pick-tickets/{id}/mark-pickedMark a pick ticket as picked
/pick-tickets/{id}/unmark-pickedRevert a pick ticket to unpicked
List Pick Tickets
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
Delivery Notes
Manage delivery notes linked to sales orders. Supports soft delete.
/delivery-notesList all delivery notes
/delivery-notes/{id}Get a specific delivery note (includes salesOrder, items)
/delivery-notesCreate a new delivery note
/delivery-notes/{id}Update an existing delivery note
/delivery-notes/{id}Delete a delivery note (soft delete)
List Delivery Notes
| Parameter | Type | Description |
|---|---|---|
search | string | Search delivery notes |
status | string | Filter by status |
sales_order_id | integer | Filter by sales order |
per_page | integer | Items per page (max 100) |
sort_by | string | Sort field |
sort_dir | string | Sort direction (asc, desc) |
Create Delivery Note
| Parameter | Type | Description |
|---|---|---|
sales_order_idRequired | integer | Associated sales order |
delivery_dateRequired | date | Delivery date |
status | string | Delivery note status |
notes | string | Additional notes |
tracking_number | string | Shipment tracking number |
carrier | string | Shipping carrier name |
Example Response
{
"data": {
"id": 1,
"sales_order": {
"id": 10,
"order_number": "SO-2024-010"
},
"items": [
{
"id": 1,
"sku": "SS24-001-WHT-M",
"quantity": 50
}
],
"delivery_date": "2024-03-15",
"status": "pending",
"notes": null,
"tracking_number": "1Z999AA10123456784",
"carrier": "UPS",
"created_at": "2024-03-10T09:00:00Z",
"updated_at": "2024-03-10T09:00:00Z"
}
}Packing Lists
Manage packing lists for transferring goods between locations.
/packing-listsList all packing lists
/packing-lists/{id}Get a specific packing list (includes fromLocation, toLocation, items)
/packing-listsCreate a new packing list
/packing-lists/{id}Update an existing packing list
/packing-lists/{id}Delete a packing list
List Packing Lists
| Parameter | Type | Description |
|---|---|---|
search | string | Search packing lists |
status | string | Filter by status |
per_page | integer | Items per page (max 100) |
sort_by | string | Sort field |
sort_dir | string | Sort direction (asc, desc) |
Create Packing List
| Parameter | Type | Description |
|---|---|---|
from_location_idRequired | integer | Source location ID |
to_location_idRequired | integer | Destination location ID |
status | string | Packing list status |
notes | string | Additional notes |
packed_date | date | Date packed |
Example Response
{
"data": {
"id": 1,
"from_location": {
"id": 1,
"name": "Main Warehouse"
},
"to_location": {
"id": 2,
"name": "Retail Store NYC"
},
"items": [
{
"id": 1,
"sku": "SS24-001-WHT-M",
"quantity": 25
}
],
"status": "packed",
"notes": null,
"packed_date": "2024-03-12",
"created_at": "2024-03-10T09:00:00Z",
"updated_at": "2024-03-12T14:00:00Z"
}
}Sales Shipments
Track outbound shipments for sales orders.
/sales-shipmentsList all shipments
/sales-shipments/{id}Get a specific shipment
/sales-shipmentsCreate a shipment
/sales-shipments/{id}Update a shipment
/sales-shipments/{id}Delete a shipment
/sales-shipments/{id}/update-statusUpdate shipment status
/sales-shipments/{id}/mark-shippedMark a shipment as shipped
/sales-shipments/{id}/unmark-shippedRevert a shipment to unshipped
/sales-shipments/{id}/mark-deliveredMark a shipment as delivered
/sales-shipments/{id}/unmark-deliveredRevert a shipment to undelivered
List Shipments
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status |
Update Status Example
{
"status": "in_transit",
"tracking_number": "1Z999AA10123456784",
"carrier": "UPS"
}Order Confirmations
Manage order confirmation documents for sales orders.
/order-confirmationsList all order confirmations
/order-confirmations/{id}Get a specific confirmation
/order-confirmationsCreate an order confirmation
/order-confirmations/{id}Update an order confirmation
/order-confirmations/{id}Delete an order confirmation
/order-confirmations/{id}/download-pdfDownload the order confirmation as a PDF
List Order Confirmations
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
Deliveries
Deliveries are read-only via the API.
/deliveriesList all deliveries
/deliveries/{id}Get a specific delivery
List Deliveries
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status |
purchase_order_id | integer | Filter by PO |
/deliveries/by-delivery-id/{deliveryId}Get delivery by delivery ID (not internal ID)
/deliveriesCreate a delivery against a purchase order
/deliveries/{id}Update a delivery
/deliveries/{id}Delete a delivery
/deliveries/{id}/receiveReceive a delivery into inventory
/deliveries/quantities/{poId}Delivered quantities per item for a purchase order
Goods Receipts
Record goods received against purchase orders and deliveries.
/goods-receiptsList all goods receipts
/goods-receipts/{id}Get a specific goods receipt
/goods-receiptsCreate a goods receipt
/goods-receipts/{id}Update a goods receipt
/goods-receipts/{id}Delete a goods receipt
List Goods Receipts
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
supplier_id | integer | Filter by supplier |
Create Goods Receipt Example
{
"order": "PO-2024-0001",
"delivery_name": "DEL-001",
"warehouse": "Main Warehouse",
"supplier_id": 1,
"date_received": "2024-02-15",
"pcs_received": 500,
"quantities": {"S": 100, "M": 150, "L": 150, "XL": 100}
}Cancellations
Manage purchase order cancellation requests with approval workflows.
/cancellationsList all cancellations
/cancellations/{id}Get a specific cancellation
/cancellationsCreate a cancellation request
/cancellations/{id}Update a cancellation
/cancellations/{id}Delete a cancellation
/cancellations/{id}/confirmConfirm a cancellation
/cancellations/{id}/undoUndo a confirmed cancellation
Status Values
draft, pending,approved, rejected
List Cancellations
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status |
purchase_order_id | integer | Filter by purchase order ID |
Returns
Manage purchase order returns for defective or incorrect goods.
/returnsList all returns
/returns/{id}Get a specific return
/returnsCreate a return
/returns/{id}Update a return
/returns/{id}Delete a return
/returns/{id}/confirmConfirm a return
Status Values
draft, confirmed,processing, completed
List Returns
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status |
purchase_order_id | integer | Filter by purchase order ID |
Payments
Track payments against purchase orders.
/paymentsList all payments
/payments/{id}Get a specific payment
/paymentsCreate a payment
/payments/{id}Update a payment
/payments/{id}Delete a payment
/payments/summary/{poId}Get payment summary for a PO
List Payments
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status |
purchase_order_id | integer | Filter by purchase order ID |
payment_method | string | Filter by payment method |
date_from | date | Filter payments from date |
date_to | date | Filter payments to date |
Create Payment Example
{
"purchase_order_id": 123,
"amount": 5000.00,
"currency": "USD",
"payment_method": "bank_transfer",
"payment_date": "2024-01-15",
"reference": "TT-2024-001",
"notes": "First payment - 30% deposit"
}Budgets
Create and manage budgets for purchasing, production, and development spend tracking.
/budgetsList budgets (paginated)
/budgets/{id}Get a budget
/budgetsCreate a budget
/budgets/{id}Update a budget
/budgets/{id}Delete a budget
/budgets/{id}/analyticsBudget analytics: overview, per-category breakdown, timeline, top suppliers, alerts
/budgets/{id}/comparisonBudget vs actual comparison, overall and per category
/budgets/{id}/tracking-entriesPaginated tracking entries for a budget
/budgets/{id}/allocationsBatch upsert per-category allocations
/budgets/{id}/duplicateDuplicate a budget with its category allocations (spending reset)
/budgets/{id}/categories/{categoryId}/allocationUpdate a budget category allocation
List Budgets
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
created_since | datetime | Filter by creation time |
Create Budget Example
{
"name": "SS25 Sourcing Budget",
"amount": 50000.00,
"currency": "USD",
"period_start": "2025-01-01",
"period_end": "2025-06-30",
"notes": "Spring/Summer 2025 component and fabric sourcing"
}Component Inventory
Track inventory levels for components and materials.
/component-inventoryList component inventory
/component-inventory/{id}Get a specific inventory item
/component-inventoryCreate a component inventory record
/component-inventory/bulk-updateBulk update component inventory
/component-inventory/{id}/check-inCheck in component inventory
List Component Inventory
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
component_id | integer | Filter by component |
Check In Example
{
"quantity": 500,
"reference": "PO-2024-0015",
"notes": "Received from supplier shipment"
}Style Inventory
Track finished goods inventory by style, size, and color.
/style-inventoryList style inventory
/style-inventory/{id}Get a specific inventory item
/style-inventory/{id}Update inventory levels
/style-inventory/{id}/check-inCheck in style inventory
/style-inventory/{id}/transferTransfer inventory between locations
List Style Inventory
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
style_id | integer | Filter by style |
location_id | integer | Filter by location |
Transfer Example
{
"to_location_id": 2,
"quantity": 50,
"notes": "Transfer to retail warehouse"
}Inventory Operations
Advanced inventory management operations including transfers, reservations, and check-ins.
/inventory/summaryGet inventory summary across all locations
/inventory/low-stockGet items below reorder threshold
/inventory/{id}/transactionsGet transaction history for an inventory item
/inventory/{id}/transferTransfer inventory between locations
/inventory/{id}/reserveReserve inventory for an order
/inventory/{id}/unreserveRelease reserved inventory
/inventory/{id}/check-inCheck in inventory from a delivery
Low Stock Query
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
threshold | integer | Low stock threshold (default: 10) |
Transfer Inventory Example
{
"to_location_id": 2,
"quantity": 50,
"notes": "Transfer to retail warehouse"
}Reserve Inventory Example
{
"quantity": 100,
"reference_type": "sales_order",
"reference_id": 456,
"notes": "Reserved for SO-2024-0050"
}Stock Takes
Manage physical inventory counts and reconciliation.
/stock-takesList all stock takes
/stock-takes/{id}Get a specific stock take
/stock-takesCreate a stock take
/stock-takes/{id}Update a stock take
/stock-takes/{id}Delete a stock take
/stock-takes/statusesGet available stock take statuses
/stock-takes/{id}/startStart a stock take
/stock-takes/{id}/completeComplete a stock take
/stock-takes/{id}/approveApprove a completed stock take and apply adjustments
/stock-takes/{id}/itemsGet stock take items
/stock-takes/{id}/cancelCancel a stock take
/stock-takes/{id}/variance-summaryVariance summary for a stock take
/stock-takes/{id}/items/batch-countRecord counts for multiple items at once
/stock-takes/{sessionId}/items/{itemId}/countRecord a count for a single item
Status Values
draft, in_progress,completed, cancelled
List Stock Takes
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status |
location_id | integer | Filter by location ID |
Add Stock Take Item Example
{
"inventory_id": 123,
"counted_quantity": 95,
"notes": "5 units damaged"
}Locations
Manage warehouse and storage locations used for inventory tracking and stock takes.
/locationsList locations (paginated)
/locations/{id}Get a location
/locationsCreate a location
/locations/{id}Update a location
/locations/{id}Delete a location
List Locations
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
created_since | datetime | Filter by creation time |
Create Location Example
{
"name": "Warehouse A - Shelf 3B",
"code": "WH-A-3B",
"description": "Main warehouse, aisle 3, shelf B",
"is_active": true
}Component Reservations
Manage reservations of component inventory for production orders and style development.
/component-reservationsList reservations (paginated)
/component-reservations/{id}Get a reservation
/component-reservationsCreate a reservation
/component-reservations/{id}Update a reservation
/component-reservations/{id}Delete a reservation
List Reservations
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
component_id | integer | Filter by component |
status | string | Filter by status (active, released, expired) |
Create Reservation Example
{
"component_id": 45,
"quantity": 500,
"reserved_for": "production_order",
"reference_id": 123,
"expires_at": "2025-03-31T00:00:00Z",
"notes": "Reserved for SS25 production run"
}Range Plans
Plan and manage seasonal ranges before converting to full styles.
/range-plansList all range plans
/range-plans/{id}Get a specific range plan
/range-plansCreate a range plan
/range-plans/{id}Update a range plan
/range-plans/{id}Delete a range plan
/range-plans/{id}/duplicateDuplicate a range plan
/range-plans/{id}/styles/{styleId}/convertConvert range plan item to a full style
List Range Plans
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
season_id | integer | Filter by season |
Create Range Plan Example
{
"name": "SS25 Core Range",
"season_id": 5,
"category_id": 1,
"target_price": 45.00,
"target_margin": 60,
"notes": "Core basics collection for Spring/Summer 2025"
}Quotations
Create and manage supplier quotations for production costing.
/quotationsList all quotations
/quotations/{id}Get a specific quotation
/quotationsCreate a quotation
/quotations/{id}Update a quotation
/quotations/{id}Delete a quotation
/quotations/{id}/reviseCreate a revision of a quotation
/quotations/style/{styleId}Quotations for a style
/quotations/supplier/{supplierId}Quotations from a supplier
/quotations/price-history/{styleId}Quoted price history for a style
List Quotations
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
supplier_id | integer | Filter by supplier |
style_id | integer | Filter by style |
Create Quotation Example
{
"supplier_id": 1,
"style_id": 123,
"unit_price": 22.50,
"currency": "USD",
"moq": 500,
"lead_time_days": 30,
"valid_until": "2024-03-01",
"notes": "Price includes packaging"
}Linesheets
Create and manage linesheets for wholesale buyers and showrooms.
/linesheetsList all linesheets
/linesheets/{id}Get a specific linesheet
/linesheetsCreate a linesheet
/linesheets/{id}Update a linesheet
/linesheets/{id}Delete a linesheet
/linesheets/{id}/duplicateDuplicate a linesheet
/linesheets/{id}/archiveArchive a linesheet
/linesheets/{id}/restoreRestore an archived linesheet
/linesheets/{id}/shareGenerate a shareable link
/linesheets/{id}/generateGenerate the linesheet document
/linesheets/{id}/reorderReorder linesheet entries
List Linesheets
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
season_id | integer | Filter by season |
Sample Reviews
Track and manage sample review workflows during product development.
/sample-reviewsList all sample reviews
/sample-reviews/{id}Get a specific sample review
/sample-reviewsCreate a sample review
/sample-reviews/{id}Update a sample review
/sample-reviews/{id}/change-statusChange review status (approved, rejected, revision needed)
/sample-reviews/{reviewId}/issuesAdd an issue to a sample review
/sample-reviews/{reviewId}/issues/{issueId}Update a sample review issue
/sample-reviews/{reviewId}/issues/{issueId}Delete a sample review issue
List Sample Reviews
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
style_id | integer | Filter by style |
status | string | Filter by status |
Change Status Example
{
"status": "approved",
"comments": "Sample meets all specifications. Ready for production."
}Quality Control
Access QC inspection reports for styles and production runs.
/quality-control/{id}Get a QC inspection
/quality-control/{id}/reportGenerate a QC inspection report
/quality-controlList QC inspections
/quality-controlCreate a QC inspection
/quality-control/{id}Update a QC inspection
/quality-control/{id}Delete a QC inspection
/quality-control/{id}/approveApprove a QC inspection
/quality-control/{id}/rejectReject a QC inspection
Inspection Categories
Each QC inspection covers these categories:fabric_inspection, dimensional_stability,garment_measurements, garment_construction,labeling_packaging, overall_appearance,compliance_safety, random_sampling
Example Response
{
"data": {
"id": 1,
"style": {"id": 123, "name": "Classic Cotton Tee"},
"inspector_name": "Jane Smith",
"inspection_date": "2024-02-10",
"fabric_inspection": {"status": "pass", "notes": "Fabric weight within tolerance"},
"garment_measurements": {"status": "fail", "notes": "Chest width 1cm over tolerance"},
"overall_result": "conditional_pass"
}
}Tech Packs
Generate comprehensive tech pack documents for styles, including BOM, POM, construction details, and specifications.
/tech-packs/styles/{styleId}Generate a tech pack for a style
Tech Pack Contents
The generated tech pack includes style details, bill of materials, points of measure, colorways, construction notes, and supplier information — all consolidated into a single response.
Labdips
Manage lab dip requests and submissions for color matching with suppliers.
/labdipsList all labdips
/labdips/{id}Get a specific labdip
/labdipsCreate a new labdip
/labdips/{id}Update an existing labdip
/labdips/{id}Delete a labdip
List Labdips
| Parameter | Type | Description |
|---|---|---|
search | string | Search by labdip name |
supplier_id | integer | Filter by supplier |
status | string | Filter by status |
per_page | integer | Items per page (max 100) |
sort_by | string | Sort field |
sort_dir | string | Sort direction (asc, desc) |
Create Labdip
| Parameter | Type | Description |
|---|---|---|
nameRequired | string | Labdip name |
supplier_idRequired | integer | Supplier ID |
status | string | Labdip status |
target_colour | string | Target colour reference |
notes | string | Additional notes |
Example Response
{
"data": {
"id": 1,
"name": "Navy Cotton Labdip",
"supplier": {
"id": 5,
"name": "Premium Textiles Ltd"
},
"status": "pending",
"target_colour": "Pantone 19-3933 TCX",
"notes": "Match to Spring collection navy",
"created_at": "2024-02-01T10:00:00Z",
"updated_at": "2024-02-01T10:00:00Z"
}
}Moodboards
Create and manage visual moodboards for design inspiration and collection planning.
/moodboardsList all moodboards
/moodboards/{id}Get a specific moodboard
/moodboardsCreate a new moodboard
/moodboards/{id}Update an existing moodboard
/moodboards/{id}Delete a moodboard
List Moodboards
| Parameter | Type | Description |
|---|---|---|
search | string | Search by moodboard name |
per_page | integer | Items per page (max 100) |
sort_by | string | Sort field |
sort_dir | string | Sort direction (asc, desc) |
Create Moodboard
| Parameter | Type | Description |
|---|---|---|
nameRequired | string | Moodboard name |
description | string | Moodboard description |
canvas_data | object | Canvas layout data (JSON) |
thumbnail | string | Thumbnail image URL |
Example Response
{
"data": {
"id": 1,
"name": "SS25 Color Palette",
"description": "Spring/Summer 2025 color inspiration",
"canvas_data": {},
"thumbnail": "https://storage.koboplm.com/moodboards/1/thumb.jpg",
"created_at": "2024-02-05T11:00:00Z",
"updated_at": "2024-02-05T11:00:00Z"
}
}Component Sourcing
Manage sourcing requests for components, including supplier submissions and pricing.
/component-sourcingList all sourcing requests
/component-sourcing/{id}Get a specific sourcing request (includes component, submissions)
/component-sourcingCreate a new sourcing request
/component-sourcing/{id}Update an existing sourcing request
/component-sourcing/{id}Delete a sourcing request
Submissions & Response Cycle
/component-sourcing/{id}/submissionsList submissions for a sourcing request
/component-sourcing/{id}/submissionsSubmit a sourcing option against a request (supplier quote or internal option)
/component-sourcing/{id}/submissions/compareCompare all submissions for a sourcing request
/component-sourcing/{id}/chaseRe-notify suppliers who haven't responded yet
/component-sourcing/submissions/{submissionId}/statusUpdate submission status (brand review: approve / reject / withdraw)
/component-sourcing/submissions/{submissionId}/purchase-orderCreate a draft purchase order from a supplier submission
List Sourcing Requests
| Parameter | Type | Description |
|---|---|---|
search | string | Search sourcing requests |
status | string | Filter by status |
component_id | integer | Filter by component |
per_page | integer | Items per page (max 100) |
sort_by | string | Sort field |
sort_dir | string | Sort direction (asc, desc) |
Create Sourcing Request
| Parameter | Type | Description |
|---|---|---|
component_idRequired | integer | Component ID to source |
requirements | string | Sourcing requirements description |
target_quantity | integer | Target quantity needed |
target_price | number | Target unit price |
currency | string | Currency code (e.g. USD) |
deadline_date | date | Sourcing deadline date |
status | string | Request status |
Example Response
{
"data": {
"id": 1,
"component": {
"id": 42,
"name": "Organic Cotton Jersey 180gsm"
},
"submissions": [
{
"id": 1,
"supplier_id": 5,
"unit_price": "3.50",
"currency": "USD",
"lead_time_days": 21
}
],
"requirements": "GOTS certified, minimum 180gsm",
"target_quantity": 5000,
"target_price": "3.00",
"currency": "USD",
"deadline_date": "2024-04-01",
"status": "open",
"created_at": "2024-02-15T09:00:00Z",
"updated_at": "2024-02-15T09:00:00Z"
}
}Tasks
Manage tasks and to-dos for team collaboration.
/tasksList all tasks
/tasks/{id}Get a specific task
/tasksCreate a task
/tasks/{id}Update a task
/tasks/{id}Delete a task
/tasks/{id}/completeMark task as completed
/tasks/bulkCreate multiple tasks in a single transaction
/tasks/bulkBulk update multiple tasks
/tasks/bulkBulk delete multiple tasks
/tasks/{id}/incompleteMark a task as not completed
/tasks/{id}/duplicateDuplicate a task
/tasks/{id}/attachmentsUpload attachments to a task
/tasks/{taskId}/attachments/{attachmentId}Delete a task attachment
List Tasks
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status (pending, in_progress, completed, cancelled) |
priority | string | Filter by priority (low, medium, high, urgent) |
assignee_id | integer | Filter by assignee user ID |
due_before | date | Filter tasks due before date |
due_after | date | Filter tasks due after date |
Create Task Example
{
"title": "Review fabric samples",
"description": "Check quality of cotton jersey samples from new supplier",
"priority": "high",
"due_date": "2024-01-20",
"assignee_id": 5,
"related_type": "style",
"related_id": 123
}Notes
Add notes and comments to any resource in the system.
/notesList all notes
/notes/{id}Get a specific note
/notesCreate a note
/notes/{id}Update a note
/notes/{id}Delete a note
/notes/{id}/duplicateDuplicate a note
/notes/{id}/favoriteToggle a note as favourite
List Notes
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
notable_type | string | Filter by resource type (style, component, supplier, customer, purchase_order, sales_order) |
notable_id | integer | Filter by resource ID |
Create Note Example
{
"notable_type": "style",
"notable_id": 123,
"content": "Customer requested wider fit for this style.",
"is_internal": false
}Projects
Organize styles and work into projects for better management.
/projectsList all projects
/projects/{id}Get a specific project
/projectsCreate a project
/projects/{id}Update a project
/projects/{id}Delete a project
/projects/{id}/tasksList tasks in a project
List Projects
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
status | string | Filter by status |
Create Project Example
{
"name": "Fall 2024 Collection",
"description": "Main fall collection development",
"start_date": "2024-03-01",
"end_date": "2024-06-30",
"status": "active"
}Notifications
Access and manage user notifications.
/notificationsList notifications
/notifications/{id}Get a specific notification
/notifications/{id}Delete a notification
/notifications/{id}/readMark notification as read
/notifications/mark-all-readMark all notifications as read
/notifications/{id}/unreadMark a notification as unread
/notificationsDelete all notifications (pass read_only=true to delete only read ones)
/notifications/unread-countGet unread notification count
/notificationsCreate a notification
/notifications/bulkCreate notifications for multiple users
/notifications/mark-readMark a set of notifications as read
List Notifications
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
is_read | boolean | Filter by read status |
type | string | Filter by notification type |
Workflows
Automate processes with workflow rules and triggers.
/workflowsList all workflows
/workflows/{id}Get a specific workflow
/workflowsCreate a workflow
/workflows/{id}Update a workflow
/workflows/{id}Delete a workflow
/workflows/{id}/executeManually execute a workflow
/workflows/{id}/executionsGet workflow execution history
/workflow-templatesGet available workflow templates
/workflows/trigger-typesList available workflow trigger types
/workflows/{id}/activateActivate a workflow
/workflows/{id}/deactivateDeactivate a workflow
/workflow-templates/{id}/createCreate a workflow from a template
/workflow-executionsList workflow execution runs
/workflow-executions/{id}Get a workflow execution run
List Workflows
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
updated_since | datetime | Filter by update time |
is_active | boolean | Filter by active status |
trigger_type | string | Filter by trigger type |
Execute Workflow Example
{
"context": {
"style_id": 123,
"action": "status_change"
}
}Supplier Scoring
Access supplier performance scores and metrics.
/suppliers/{id}/scoreGet supplier overall score
/suppliers/{id}/score/historyHistorical score snapshots for a supplier
/suppliers/{id}/score/breakdownFull score breakdown (grade, trend, per-metric breakdown, statistics)
/suppliers/{id}/metricsGet detailed supplier metrics
/supplier-metrics/{metricId}/verifyVerify a performance metric
/supplier-metrics/{metricId}Delete a performance metric
/supplier-scores/rankingsGet supplier rankings
/supplier-scoresList supplier scores
/supplier-scores/weightsGet the scoring weight configuration
/supplier-scores/calculate-allRecalculate scores for all suppliers
/suppliers/{id}/score/calculateRecalculate one supplier's score
/suppliers/{id}/metricsRecord a supplier metric
/supplier-metrics/typesList available supplier metric types
Supplier Metrics Query
| Parameter | Type | Description |
|---|---|---|
period | string | Metrics period: 30d, 90d, 1y, all (default: 90d) |
Supplier Rankings Query
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number |
per_page | integer | Items per page |
sort_by | string | Sort by: overall_score, quality_score, delivery_score, communication_score |
sort_dir | string | Sort direction: asc, desc |
Example Response
{
"data": {
"supplier_id": 1,
"overall_score": 4.2,
"quality_score": 4.5,
"delivery_score": 3.8,
"communication_score": 4.3,
"total_orders": 45,
"on_time_delivery_rate": 0.85,
"defect_rate": 0.02,
"average_lead_time_days": 21
}
}Lookups
Access reference data for use in forms and integrations.
/size-rangesGet available size ranges
/currenciesGet supported currencies
/component-categoriesGet component categories
Reference Data (lookups:read scope)
/style-categoriesGet style categories
/style-tagsGet style tags
/marketsGet markets
/sales-channelsGet sales channels
/payment-termsGet payment terms
/incotermsGet incoterms
/task-statusesGet task statuses
Account
/accountIdentify the authenticated account (company, brand and API key context)
/account/brandsList the company's brands, flagging the API key's own brand
/currencies/{id}Get a currency
/currencies/salesCurrencies enabled for sales documents
/size-ranges/{id}Get a size range
/component-categories/{id}Get a component category
Example Response - Currencies
{
"success": true,
"data": [
{ "code": "USD", "name": "US Dollar", "symbol": "$" },
{ "code": "EUR", "name": "Euro", "symbol": "€" },
{ "code": "GBP", "name": "British Pound", "symbol": "£" },
{ "code": "AUD", "name": "Australian Dollar", "symbol": "A$" }
]
}API Keys
Manage API keys programmatically (requires api_keys:write scope).
/api-keysList all API keys
/api-keys/{id}Get a specific API key
/api-keys/{id}/usageGet API key usage statistics
/api-keys/{id}/revokeRevoke an API key
Usage Statistics Response
{
"data": {
"api_key_id": 1,
"total_requests": 15420,
"requests_today": 342,
"requests_this_month": 8750,
"last_used_at": "2024-01-15T14:30:00Z",
"rate_limit_hits": 3
}
}Materials
Manage the material library (fibres & fabrics catalog). Global seeded materials are read-only; company materials are fully editable.
/materialsList all materials
/materialsCreate a new material
/materials/{id}Get a specific material
/materials/{id}Update a material
/materials/{id}Partially update a material
/materials/{id}Delete a material
Sketches
Manage technical sketches attached to a style.
/styles/{styleId}/sketchesList sketches for a style
/styles/{styleId}/sketchesAdd a sketch to a style
/sketches/{id}Get a specific sketch
/sketches/{id}Update a sketch
/sketches/{id}Partially update a sketch
/sketches/{id}Delete a sketch
Pages
Control the tech pack page status and visibility for a style.
/styles/{styleId}/pagesList a style's pages and their status
/styles/{styleId}/pages/{pageName}/statusUpdate a page's status
/styles/{styleId}/pages/{pageName}/visibilityToggle a page's visibility
File Sections
Organise a style's uploaded files into ordered sections.
/styles/{styleId}/file-sectionsList file sections for a style
/styles/{styleId}/file-sectionsCreate a file section
/styles/{styleId}/file-sections/orderReorder file sections
/file-sections/{id}Update a file section
/file-sections/{id}Delete a file section
Compliance
Read and update the compliance record for a style.
/styles/{styleId}/complianceGet a style's compliance data
/styles/{styleId}/complianceUpdate compliance data
/styles/{styleId}/compliancePartially update compliance data
Digital Product Passport
Generate, validate, and publish EU Digital Product Passports for your styles, manage brand-level passport theming, and read consumer scan analytics. Uses the compliance:read andcompliance:write scopes. The public passport page and QR scan events are unauthenticated by design.
/styles/{styleId}/dppGet the generated Digital Product Passport payload
/styles/{styleId}/dpp/generateGenerate or regenerate the passport (optionally stamping GTIN / serial number)
/styles/{styleId}/dppUpdate passport fields on the compliance record and regenerate
/styles/{styleId}/dpp/validateValidate the passport against EU DPP requirements
/styles/{styleId}/dpp/qr-codePassport QR code (base64 PNG) plus its public URL
/styles/{styleId}/dpp/export/{format}Export the passport as json, qr, or pdf
/styles/{styleId}/dpp/analyticsAggregated scan analytics for the passport
/brands/{brandId}/dpp-settingsBrand-level passport theming and visibility settings
/brands/{brandId}/dpp-settingsUpdate brand-level passport settings
Workflow Groups
Manage workflow task groups attached to a style.
/styles/{styleId}/workflow-groupsList workflow groups for a style
/styles/{styleId}/workflow-groupsCreate a workflow group
/workflow-groups/{id}Update a workflow group
/workflow-groups/{id}Delete a workflow group
Comments
Threaded comments on a style.
/styles/{styleId}/commentsList comments for a style
/styles/{styleId}/commentsAdd a comment
/comments/{id}Update a comment
/comments/{id}Partially update a comment
/comments/{id}Delete a comment
/comments/{id}/readMark a comment as read
/comments/mark-readMark multiple comments as read
/comments/{id}/reactionsAdd a reaction to a comment
/comments/{id}/reactions/{reaction}Remove a reaction from a comment
Style Pricing
Read, update and recalculate the cost sheet for a style.
/styles/{styleId}/pricingGet a style's pricing
/styles/{styleId}/pricingUpdate a style's pricing
/styles/{styleId}/pricingPartially update a style's pricing
/styles/{styleId}/pricing/calculateRecalculate pricing from the cost breakdown
/styles/{styleId}/pricing/sync-component-costsPull current BOM component costs into the costing sheet and recalculate
/style-pricing/bulkBulk pricing read across styles (style_ids[] query parameter)
Value-Added Services (VAS)
/styles/{styleId}/pricing/vasList VAS costing lines on the style's pricing
/styles/{styleId}/pricing/vasAdd a VAS costing line (library service or free-text custom line)
/styles/{styleId}/pricing/vas/{vasId}Update a VAS costing line's cost
/styles/{styleId}/pricing/vas/{vasId}Remove a VAS costing line
Component Pricing
Read and update pricing for a component.
/components/{componentId}/pricingGet a component's pricing
/components/{componentId}/pricingUpdate a component's pricing
/components/{componentId}/pricingPartially update a component's pricing
Channel Pricing
Manage per-sales-channel pricing for a style.
/styles/{styleId}/channel-pricingList channel pricing for a style
/channel-pricing/{id}Get a single channel pricing row
/styles/{styleId}/channel-pricingAdd channel pricing
/channel-pricing/{id}Update channel pricing
/channel-pricing/{id}Partially update channel pricing
/channel-pricing/{id}Delete channel pricing
Library Groups
Organise library items into groups.
/library-groupsList library groups
/library-groupsCreate a library group
/library-groups/{id}Get a library group
/library-groups/{id}Update a library group
/library-groups/{id}Partially update a library group
/library-groups/{id}Delete a library group
POM Diagrams
Manage reusable points-of-measure diagrams in the library.
/library-pom-diagramsList POM diagrams
/library-pom-diagramsCreate a POM diagram
/library-pom-diagrams/{id}Get a POM diagram
/library-pom-diagrams/{id}Update a POM diagram
/library-pom-diagrams/{id}Partially update a POM diagram
/library-pom-diagrams/{id}Delete a POM diagram
POM Templates
Manage reusable points-of-measure templates in the library.
/library-pom-templatesList POM templates
/library-pom-templatesCreate a POM template
/library-pom-templates/{id}Get a POM template
/library-pom-templates/{id}Update a POM template
/library-pom-templates/{id}Partially update a POM template
/library-pom-templates/{id}Delete a POM template
Issue Templates
Manage reusable sample-review issue templates in the library.
/library-issue-templatesList issue templates
/library-issue-templatesCreate an issue template
/library-issue-templates/{id}Get an issue template
/library-issue-templates/{id}Update an issue template
/library-issue-templates/{id}Partially update an issue template
/library-issue-templates/{id}Delete an issue template
Assignment & Usage
Assign library POM templates and diagrams to styles, track where they are used, and organise a style's workflows into groups.
POM Templates
/library-pom-templates/{id}/duplicateDuplicate a template, copying its current-version POM rows
/library-pom-templates/{id}/assignable-stylesList styles the template can be assigned to
/library-pom-templates/{id}/assign-stylesAssign the template to one or more styles (per-style outcomes reported)
/library-pom-templates/{id}/using-stylesList styles currently using the template
/library-pom-templates/{id}/poms/{pomId}Update a single POM row belonging to the template
/library-pom-templates/{id}/poms/{pomId}Delete a single POM row belonging to the template
POM Diagrams
/library-pom-diagrams/{id}/assigned-stylesList styles linked to the diagram (pass assigned_only=true to restrict)
/library-pom-diagrams/{id}/assign-stylesSync the diagram's style assignments to the given selection
/library-pom-diagrams/from-styleCreate a diagram from an existing style (clones the style's linked diagram if present)
Workflow Groups
/workflow-groups/{id}/add-workflowsAdd workflows to a group and recalculate its completion percentage
/workflow-groups/{id}/remove-workflowsRemove workflows from a group (they become ungrouped)
/styles/{styleId}/workflow-groups/move-workflowsMove workflows between groups on a style (null target = ungrouped)
Sales Cancellations
Cancellations against sales orders, with confirm / undo state transitions.
/sales-cancellationsList sales cancellations
/sales-cancellations/{id}Get a sales cancellation
/sales-cancellationsCreate a sales cancellation
/sales-cancellations/{id}Update a sales cancellation
/sales-cancellations/{id}Partially update a sales cancellation
/sales-cancellations/{id}Delete a sales cancellation
/sales-cancellations/{id}/confirmConfirm a sales cancellation
/sales-cancellations/{id}/undoUndo a confirmed sales cancellation
Sales Returns
Returns against sales orders, with confirm / undo state transitions.
/sales-returnsList sales returns
/sales-returns/{id}Get a sales return
/sales-returnsCreate a sales return
/sales-returns/{id}Update a sales return
/sales-returns/{id}Partially update a sales return
/sales-returns/{id}Delete a sales return
/sales-returns/{id}/confirmConfirm a sales return
/sales-returns/{id}/undoUndo a confirmed sales return
Production Batches
The sales-order → purchase-order MRP bridge. Preview, commit or cancel a batch.
/production-batchesList production batches
/production-batchesCreate a production batch
/production-batches/{id}Get a production batch
/production-batches/{id}Update a production batch
/production-batches/{id}Partially update a production batch
/production-batches/{id}Delete a production batch
/production-batches/{id}/previewPreview the POs a batch would generate
/production-batches/{id}/commitCommit the batch and generate POs
/production-batches/{id}/cancelCancel a production batch
Activity Log
Read-only audit trail of changes across your account.
/activitiesList activity log entries
/activities/{id}Get a specific activity entry
Scheduled Reports
Configure recurring reports, trigger ad-hoc runs and inspect execution history.
/scheduled-reportsList scheduled reports
/scheduled-reportsCreate a scheduled report
/scheduled-reports/{id}Get a scheduled report
/scheduled-reports/{id}Update a scheduled report
/scheduled-reports/{id}Partially update a scheduled report
/scheduled-reports/{id}Delete a scheduled report
/scheduled-reports/{id}/run-nowTrigger a report run immediately
/scheduled-reports/{id}/send-testSend a test delivery
/scheduled-reports/{id}/executionsList execution history for a report
Note Categories
Manage and reorder the categories used to organise notes.
/note-categoriesList note categories
/note-categoriesCreate a note category
/note-categories/reorderReorder note categories
/note-categories/{id}Get a note category
/note-categories/{id}Update a note category
/note-categories/{id}Partially update a note category
/note-categories/{id}Delete a note category
Budget Tracking
Record and query actual spend tracked against season budgets.
/budget-trackingList budget tracking entries
/budget-trackingCreate a budget tracking entry
/budget-tracking/{id}Get a budget tracking entry
Webhooks
Webhooks allow you to receive real-time notifications when events occur in Kōbō PLM. When you configure a webhook, Kōbō PLM will send an HTTP POST request to your specified URL whenever the subscribed events occur.
Available Events
Style Events
| Event | Description |
|---|---|
style.created | A new style was created |
style.updated | A style was updated |
style.deleted | A style was deleted |
style.status_changed | A style's status changed |
style.techpack_generated | A tech pack was generated for a style |
style.sample_review_generated | A sample review document was generated for a style |
Component Events
| Event | Description |
|---|---|
component.created | A new component was created |
component.updated | A component was updated |
component.deleted | A component was deleted |
Supplier Events
| Event | Description |
|---|---|
supplier.created | A new supplier was created |
supplier.updated | A supplier was updated |
supplier.deleted | A supplier was deleted |
Purchase Order Events
| Event | Description |
|---|---|
purchase_order.created | A new PO was created |
purchase_order.updated | A PO was updated |
purchase_order.deleted | A PO was deleted |
purchase_order.status_changed | A PO's status changed |
purchase_order.confirmed | A PO was confirmed |
purchase_order.cancelled | A PO was cancelled |
Inventory Events
| Event | Description |
|---|---|
inventory.updated | Inventory levels changed |
inventory.low_stock | Inventory fell below reorder point |
inventory.out_of_stock | Inventory reached zero |
inventory.transferred | Inventory was transferred between locations |
inventory.reserved | Inventory was reserved |
inventory.unreserved | An inventory reservation was released |
inventory.checked_in | Inventory was checked in |
Customer Events
| Event | Description |
|---|---|
customer.created | A new customer was created |
customer.updated | A customer was updated |
customer.deleted | A customer was deleted |
Sales Order Events
| Event | Description |
|---|---|
sales_order.created | A new sales order was created |
sales_order.updated | A sales order was updated |
sales_order.deleted | A sales order was deleted |
sales_order.status_changed | A sales order's status changed |
Delivery Events
| Event | Description |
|---|---|
delivery.created | A new delivery was created |
delivery.updated | A delivery was updated |
delivery.deleted | A delivery was deleted |
delivery.checked_in | A delivery was received |
delivery.status_changed | A delivery's status changed |
BOM Events
| Event | Description |
|---|---|
bom.created | A BOM item was added |
bom.updated | A BOM item was updated |
bom.deleted | A BOM item was removed |
Task Events
| Event | Description |
|---|---|
task.created | A new task was created |
task.updated | A task was updated |
task.deleted | A task was deleted |
task.completed | A task was marked complete |
task.status_changed | A task's status changed |
Project Events
| Event | Description |
|---|---|
project.created | A new project was created |
project.updated | A project was updated |
project.deleted | A project was deleted |
project.status_changed | A project's status changed |
Payment Events
| Event | Description |
|---|---|
payment.created | A new payment was recorded |
payment.updated | A payment was updated |
payment.deleted | A payment was deleted |
Stock Take Events
| Event | Description |
|---|---|
stock_take.created | A stock take was created |
stock_take.started | A stock take was started |
stock_take.completed | A stock take was completed |
stock_take.finalized | A stock take was finalized |
POM Events
| Event | Description |
|---|---|
pom.created | A point of measure was added |
pom.updated | A point of measure was updated |
pom.deleted | A point of measure was removed |
Note Events
| Event | Description |
|---|---|
note.created | A new note was created |
note.updated | A note was updated |
note.deleted | A note was deleted |
Notification Events
| Event | Description |
|---|---|
notification.created | A new notification was created |
notification.read | A notification was marked as read |
notification.deleted | A notification was deleted |
Invoice Events
| Event | Description |
|---|---|
invoice.created | A new invoice was created |
invoice.updated | An invoice was updated |
invoice.deleted | An invoice was deleted |
invoice.status_changed | An invoice's status changed |
Credit Note Events
| Event | Description |
|---|---|
credit_note.created | A new credit note was created |
credit_note.updated | A credit note was updated |
credit_note.deleted | A credit note was deleted |
credit_note.status_changed | A credit note's status changed |
Order Confirmation Events
| Event | Description |
|---|---|
order_confirmation.created | A new order confirmation was created |
order_confirmation.updated | An order confirmation was updated |
order_confirmation.deleted | An order confirmation was deleted |
order_confirmation.status_changed | An order confirmation's status changed |
Goods Receipt Events
| Event | Description |
|---|---|
goods_receipt.created | A new goods receipt was created |
goods_receipt.updated | A goods receipt was updated |
goods_receipt.deleted | A goods receipt was deleted |
Sales Shipment Events
| Event | Description |
|---|---|
sales_shipment.created | A new shipment was created |
sales_shipment.updated | A shipment was updated |
sales_shipment.deleted | A shipment was deleted |
sales_shipment.status_changed | A shipment's status changed |
Packing List Events
| Event | Description |
|---|---|
packing_list.created | A new packing list was created |
packing_list.updated | A packing list was updated |
packing_list.deleted | A packing list was deleted |
packing_list.status_changed | A packing list's status changed |
Delivery Note Events
| Event | Description |
|---|---|
delivery_note.created | A new delivery note was created |
delivery_note.updated | A delivery note was updated |
delivery_note.deleted | A delivery note was deleted |
Pick Ticket Events
| Event | Description |
|---|---|
pick_ticket.created | A new pick ticket was created |
pick_ticket.updated | A pick ticket was updated |
pick_ticket.deleted | A pick ticket was deleted |
pick_ticket.status_changed | A pick ticket's status changed |
Sales Order Payment Events
| Event | Description |
|---|---|
sales_order_payment.created | A new sales order payment was recorded |
sales_order_payment.updated | A sales order payment was updated |
sales_order_payment.deleted | A sales order payment was deleted |
sales_order_payment.status_changed | A sales order payment's status changed |
Cancellation Events
| Event | Description |
|---|---|
cancellation.created | A cancellation was requested (purchase or sales order) |
cancellation.approved | A cancellation was approved |
cancellation.rejected | A cancellation was rejected |
Return Events
| Event | Description |
|---|---|
return.created | A return was created (purchase or sales order) |
return.updated | A return was updated |
return.deleted | A return was deleted |
return.confirmed | A return was confirmed |
Quotation Events
| Event | Description |
|---|---|
quotation.created | A new quotation request was created |
quotation.updated | A quotation was updated |
quotation.deleted | A quotation was deleted |
quotation.status_changed | A quotation's status changed |
Variant Events
| Event | Description |
|---|---|
variant.created | A new variant (colourway) was created |
variant.updated | A variant was updated |
variant.deleted | A variant was deleted |
Colour Events
| Event | Description |
|---|---|
colour.created | A new colour library entry was created |
colour.updated | A colour was updated |
colour.deleted | A colour was deleted |
Material Events
| Event | Description |
|---|---|
material.created | A new material library entry was created |
material.updated | A material was updated |
material.deleted | A material was deleted |
Lab Dip Events
| Event | Description |
|---|---|
labdip.created | A new lab dip was created |
labdip.updated | A lab dip was updated |
labdip.deleted | A lab dip was deleted |
QC Inspection Events
| Event | Description |
|---|---|
qc_inspection.created | A new QC inspection was created |
qc_inspection.updated | A QC inspection was updated |
qc_inspection.deleted | A QC inspection was deleted |
Sample Review Events
| Event | Description |
|---|---|
sample_review.created | A new sample review was created |
sample_review.updated | A sample review was updated |
sample_review.deleted | A sample review was deleted |
Customer Contact Events
| Event | Description |
|---|---|
customer_contact.created | A new customer contact was created |
customer_contact.updated | A customer contact was updated |
customer_contact.deleted | A customer contact was deleted |
Brand Events
| Event | Description |
|---|---|
brand.created | A new brand was created |
brand.updated | A brand was updated |
brand.deleted | A brand was deleted |
Company Events
| Event | Description |
|---|---|
company.created | A new company was created |
company.updated | A company was updated |
company.deleted | A company was deleted |
User Events
| Event | Description |
|---|---|
user.created | A new user was created |
user.updated | A user was updated |
user.deleted | A user was deleted |
Workflow Events
| Event | Description |
|---|---|
workflow.created | A new workflow was created |
workflow.updated | A workflow was updated |
workflow.deleted | A workflow was deleted |
workflow.executed | A workflow was executed |
Style SKU Events
| Event | Description |
|---|---|
style_sku.created | A SKU was created |
style_sku.updated | A SKU was updated |
style_sku.deleted | A SKU was deleted |
Style Workflow Task Events
| Event | Description |
|---|---|
style_workflow_task.created | A workflow task was created on a style |
style_workflow_task.updated | A workflow task was updated |
style_workflow_task.status_changed | A workflow task changed status |
style_workflow_task.deleted | A workflow task was deleted |
Sample Review Issue Events
| Event | Description |
|---|---|
sample_review_issue.created | An issue was raised on a sample review |
sample_review_issue.updated | A sample review issue was updated |
sample_review_issue.status_changed | A sample review issue changed status |
sample_review_issue.deleted | A sample review issue was deleted |
File Events
| Event | Description |
|---|---|
file.uploaded | A file was uploaded |
file.updated | File metadata was updated |
file.deleted | A file was deleted |
Supplier Contact Events
| Event | Description |
|---|---|
supplier_contact.created | A supplier contact was added |
supplier_contact.updated | A supplier contact was updated |
supplier_contact.deleted | A supplier contact was deleted |
Component Sourcing Events
| Event | Description |
|---|---|
component_sourcing_request.created | A sourcing request was created |
component_sourcing_request.updated | A sourcing request was updated |
component_sourcing_request.status_changed | A sourcing request changed status |
component_sourcing_request.deleted | A sourcing request was deleted |
component_sourcing_submission.received | A supplier submission was received |
component_sourcing_submission.approved | A supplier submission was approved |
component_sourcing_submission.rejected | A supplier submission was rejected |
Purchase Order Payment Events
| Event | Description |
|---|---|
purchase_order_payment.created | A payment was recorded against a purchase order |
purchase_order_payment.updated | A purchase order payment was updated |
purchase_order_payment.deleted | A purchase order payment was deleted |
Purchase Credit Note Events
| Event | Description |
|---|---|
purchase_credit_note.created | A purchase credit note was created |
purchase_credit_note.updated | A purchase credit note was updated |
purchase_credit_note.status_changed | A purchase credit note changed status |
purchase_credit_note.deleted | A purchase credit note was deleted |
Parcel Shipment Events
| Event | Description |
|---|---|
parcel_shipment.created | A parcel shipment was created |
parcel_shipment.updated | A parcel shipment was updated |
parcel_shipment.status_changed | A parcel shipment changed status |
parcel_shipment.deleted | A parcel shipment was deleted |
Production Batch Events
| Event | Description |
|---|---|
production_batch.created | A production batch was created |
production_batch.updated | A production batch was updated |
production_batch.status_changed | A production batch changed status |
production_batch.deleted | A production batch was deleted |
Range Plan Events
| Event | Description |
|---|---|
range_plan.created | A range plan was created |
range_plan.updated | A range plan was updated |
range_plan.deleted | A range plan was deleted |
Milestone Events
| Event | Description |
|---|---|
milestone.created | A milestone was created |
milestone.updated | A milestone was updated |
milestone.completed | A milestone was completed |
milestone.deleted | A milestone was deleted |
Location Events
| Event | Description |
|---|---|
location.created | An inventory location was created |
location.updated | An inventory location was updated |
location.deleted | An inventory location was deleted |
Webhook Payload
All webhooks send a JSON payload with the following structure:
{
"event": "style.updated",
"created_at": "2024-01-15T14:30:00Z",
"data": {
"id": 1,
"type": "Style",
"attributes": {
"id": 1,
"style_code": "SS24-001",
"name": "Classic Cotton Tee",
"status": "active"
}
},
"meta": {
"api_version": "v1",
"change": {
"field": "status",
"previous_value": "development",
"new_value": "active"
}
}
}Webhook Headers
| Header | Description |
|---|---|
Content-Type | application/json |
User-Agent | KOBO-PLM-Webhooks/1.0 |
X-Webhook-Event | Event type (e.g., style.updated) |
X-Webhook-Event-Id | Unique event ID (UUID) |
X-Webhook-Timestamp | Unix timestamp |
X-Webhook-Signature | HMAC-SHA256 signature |
Signature Verification
To verify that a webhook came from Kobo PLM, validate the signature:
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, timestamp, secret) {
const signedPayload = `${timestamp}.${payload}`;
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(signedPayload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(`sha256=${expectedSignature}`)
);
}
// In your webhook handler:
app.post('/webhook', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const timestamp = req.headers['x-webhook-timestamp'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, timestamp, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Process the webhook
console.log('Received event:', req.body.event);
res.status(200).send('OK');
});import hmac
import hashlib
def verify_webhook_signature(payload, signature, timestamp, secret):
signed_payload = f"{timestamp}.{payload}"
expected_signature = hmac.new(
secret.encode(),
signed_payload.encode(),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(
signature,
f"sha256={expected_signature}"
)function verifyWebhookSignature($payload, $signature, $timestamp, $secret) {
$signedPayload = "{$timestamp}.{$payload}";
$expectedSignature = 'sha256=' . hash_hmac('sha256', $signedPayload, $secret);
return hash_equals($expectedSignature, $signature);
}Retry Policy
Failed webhook deliveries are automatically retried with exponential backoff:
| Attempt | Delay |
|---|---|
| 1 | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
Managing Webhooks
/webhooks/eventsList available webhook events
/webhooksList all webhooks
/webhooksCreate a new webhook
/webhooks/{id}Get a specific webhook
/webhooks/{id}Update a webhook
/webhooks/{id}Delete a webhook
/webhooks/{id}/rotate-secretRotate webhook signing secret
/webhooks/{id}/testSend a test event
/webhooks/{id}/resetReset webhook failure count
/webhooks/{id}/statsGet webhook delivery statistics
/webhooks/{id}/deliveriesGet delivery history
/webhooks/{id}/deliveries/{deliveryId}/retryRetry a failed delivery
Create Webhook
{
"name": "ERP Sync",
"url": "https://your-system.com/webhooks/kobo",
"events": ["style.created", "style.updated", "inventory.updated"],
"is_active": true
}Best Practices
Incremental Sync
For efficient data synchronization, use the updated_since filter:
# Store the last sync timestamp
LAST_SYNC="2024-01-15T00:00:00Z"
# Fetch only changed records
curl "https://api.kobolabs.io/api/v1/styles?updated_since=$LAST_SYNC" \
-H "X-API-Key: your_api_key"Pagination
Always paginate through results to avoid timeouts:
async function getAllStyles(apiKey) {
let allStyles = [];
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await fetch(
`https://api.kobolabs.io/api/v1/styles?page=${page}&per_page=100`,
{ headers: { 'X-API-Key': apiKey } }
);
const data = await response.json();
allStyles = allStyles.concat(data.data);
hasMore = page < data.meta.last_page;
page++;
}
return allStyles;
}Rate Limit Handling
Implement exponential backoff when rate limited:
async function apiRequest(url, options, retries = 3) {
for (let i = 0; i < retries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || 60;
await sleep(retryAfter * 1000 * Math.pow(2, i));
continue;
}
return response;
}
throw new Error('Rate limit exceeded after retries');
}Idempotency
Use idempotency keys for create operations to prevent duplicates:
curl -X POST "https://api.kobolabs.io/api/v1/purchase-orders" \
-H "X-API-Key: your_api_key" \
-H "Idempotency-Key: unique-request-id-12345" \
-H "Content-Type: application/json" \
-d '{"supplier_id": 1, ...}'SDK & Tools
Official Libraries
- Coming Soon: JavaScript/TypeScript SDK
- Coming Soon: Python SDK
- Coming Soon: PHP SDK
OpenAPI Specification
Download our OpenAPI 3.0 specification for use with code generators:
Postman Collection
Import our Postman collection to quickly test the API:
Support
- Email: api-support@koboplm.com
- Documentation: https://docs.koboplm.com
- Status Page: https://status.koboplm.com
Last updated: July 2026