- Overview
- Introduction
- Getting Started
- API Guide
- Customizations
- Data Onboarding Checklist
- API Resources

Supply Chain & Retail Solutions API guide
Getting Started
Prerequisites
UiPath's Supply Chain & Retail Solutions should already have the API end points ready for you to ingest data. If this is not the case please submit a support ticket.
Creating an authorization token
To submit data via the ingestion API an authorization token must be created. To do this:
-
Access platform.peak.ai.
-
Log in to your organization.
-
Click your icon in the lower-left corner, and select Access Tokens.

-
Select GENERATE TOKEN.
-
Create a Personal Access Token (PAT) and save the generated token into your environment.

Using the API
This section describes how to upload data to a single object within the data warehouse. For guidance on the data required by the API, including supported fields and formats, see the API Resources section.
- Markdown & Promotions, modules in Merchandising
- Quote Pricing, a module in Commercial Pricing
- Inventory Management
Ingesting Objects
All ingestion requests follow this pattern:
POST https://service.peak.ai/ingestion-api/api/v2/objects/{prefix}{OBJECT_NAME}{suffix}
POST https://service.peak.ai/ingestion-api/api/v2/objects/{prefix}{OBJECT_NAME}{suffix}
Where:
{prefix}- Solution-specific prefix (e.g.,QP_){OBJECT_NAME}- Object name as defined in your data model (e.g.,PRODUCTS){suffix}- Solution-specific suffix (e.g.,_OOTB)
Example Request
curl -X POST \
'https://service.peak.ai/ingestion-api/api/v2/object/QP_PRODUCTS_OOTB' \
-H 'Authorization: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"solutionName": "QP_OOTB",
"data": [
{
"PRODUCT_ID": "PROD-001",
"UPDATED_AT": "2024-01-15 10:30:00",
"BESPOKE_PRODUCT": false,
"PRODUCT_NAME": "Industrial Steel Beam",
"PRODUCT_CATEGORY": "Construction",
"PRODUCT_SUBCATEGORY": "Structural"
}
],
"operationType": "UPSERT"
}'
curl -X POST \
'https://service.peak.ai/ingestion-api/api/v2/object/QP_PRODUCTS_OOTB' \
-H 'Authorization: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"solutionName": "QP_OOTB",
"data": [
{
"PRODUCT_ID": "PROD-001",
"UPDATED_AT": "2024-01-15 10:30:00",
"BESPOKE_PRODUCT": false,
"PRODUCT_NAME": "Industrial Steel Beam",
"PRODUCT_CATEGORY": "Construction",
"PRODUCT_SUBCATEGORY": "Structural"
}
],
"operationType": "UPSERT"
}'
Request Components
Headers:
Authorization- Your Personal Access Token (PAT) from platform.peak.aiContent-Type: application/json- Required for JSON payloads
Payload:
solutionName- Matches your solution configuration (e.g.,QP_OOTB)data- Array of records to ingest (can contain multiple records)operationType- Operation type for data ingestion:UPSERT- Insert new records or update existing ones based on primary keyAPPEND- Insert new records only (does not update existing records)
Response
Success (200 OK):
{
"message": "Data ingested successfully",
"recordsProcessed": 1
}
{
"message": "Data ingested successfully",
"recordsProcessed": 1
}
Error (4xx/5xx):
When validation fails, the response contains a structured list of errors. Each error includes a code, the affected field, severity, category, and a human-readable message. See the API Guide for the full list of error codes and their meanings.
{
"errors": [
{
"code": "DI_E_23N01",
"field": "product_id",
"severity": "ERROR",
"category": "BUSINESS",
"message": "field is required",
"description": "The 'product_id' field is required but was not provided in the request."
},
{
"code": "DI_E_22001",
"field": "product_name",
"severity": "ERROR",
"category": "BUSINESS",
"message": "length must be <= 255 (got 312)",
"description": "The 'product_name' value exceeds the maximum allowed length of 255 characters."
},
{
"code": "DI_E_22023",
"field": "status",
"severity": "ERROR",
"category": "BUSINESS",
"message": "must be one of ['active', 'inactive', 'pending'] (got 'enabled')",
"description": "The 'status' value 'enabled' is not in the list of allowed values."
},
{
"code": "DI_E_23505",
"field": "product_id",
"severity": "ERROR",
"category": "SYSTEM_DATA",
"message": "duplicate primary key (product_id)",
"description": "Two or more rows in this batch share the same primary key value."
}
]
}
{
"errors": [
{
"code": "DI_E_23N01",
"field": "product_id",
"severity": "ERROR",
"category": "BUSINESS",
"message": "field is required",
"description": "The 'product_id' field is required but was not provided in the request."
},
{
"code": "DI_E_22001",
"field": "product_name",
"severity": "ERROR",
"category": "BUSINESS",
"message": "length must be <= 255 (got 312)",
"description": "The 'product_name' value exceeds the maximum allowed length of 255 characters."
},
{
"code": "DI_E_22023",
"field": "status",
"severity": "ERROR",
"category": "BUSINESS",
"message": "must be one of ['active', 'inactive', 'pending'] (got 'enabled')",
"description": "The 'status' value 'enabled' is not in the list of allowed values."
},
{
"code": "DI_E_23505",
"field": "product_id",
"severity": "ERROR",
"category": "SYSTEM_DATA",
"message": "duplicate primary key (product_id)",
"description": "Two or more rows in this batch share the same primary key value."
}
]
}
Deleting Objects
All delete requests follow this pattern:
DELETE https://service.peak.ai/ingestion-api/api/v2/object/{prefix}{OBJECT_NAME}{suffix}
DELETE https://service.peak.ai/ingestion-api/api/v2/object/{prefix}{OBJECT_NAME}{suffix}
Where:
{prefix}- Solution-specific prefix (e.g.,QP_){OBJECT_NAME}- Object name as defined in your data model (e.g.,PRODUCTS){suffix}- Solution-specific suffix (e.g.,_OOTB)
Example Request
curl -X DELETE \
'https://service.peak.ai/ingestion-api/api/v2/object/QP_PRODUCTS_OOTB' \
-H 'Authorization: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"solutionName": "QP_OOTB",
"primaryKey": {
"product_id": "PROD-001"
}
}'
curl -X DELETE \
'https://service.peak.ai/ingestion-api/api/v2/object/QP_PRODUCTS_OOTB' \
-H 'Authorization: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"solutionName": "QP_OOTB",
"primaryKey": {
"product_id": "PROD-001"
}
}'
Request Components
Headers:
Authorization- Your Personal Access Token (PAT) from platform.peak.aiContent-Type: application/json- Required for JSON payloads
Payload:
solutionName- Matches your solution configuration (e.g.,QP_OOTB)primaryKey- Key-value pair identifying the record to delete, using the primary key column name and value
Response
Success (200 OK):
{
"requestId": "abc123-def456-ghi789",
"message": "Object deleted successfully",
"deletedRows": 1
}
{
"requestId": "abc123-def456-ghi789",
"message": "Object deleted successfully",
"deletedRows": 1
}
Error (4xx/5xx):
{
"title": "Bad Request",
"type": "",
"message": "primaryKey contains columns not found in table schema: invalid_column"
}
{
"title": "Bad Request",
"type": "",
"message": "primaryKey contains columns not found in table schema: invalid_column"
}