Welcome to the Price API reference
The single source of truth for all API endpoints, request schemas, response formats, and integration examples.
Explore pricing workflows, understand request structures, and integrate customer-specific pricing into your applications with confidence.
Pricing modes
Choose the shape that matches the integration pattern you want to support.
Single Resolve
Pick this mode when you need single-customer pricing and the default api flow.
- Request shape
- A flat products array with an optional customer_id and default mode behavior.
- Response shape
- A single flat priced item list under data.items.
- Best use case
- single-customer pricing and the default API flow
- Business
- Use when you price one customer at a time.
- Best price
- Not used for multi-customer batch comparisons.
Bulk Resolve
Pick this mode when you need batch pricing across several customers in one call.
- Request shape
- A requests[] batch where each entry can carry its own customer_id and products.
- Response shape
- A grouped result set keyed by customerId.
- Best use case
- batch pricing across several customers in one call
- Business
- Not the default shape, but supported when you want a single-customer response model.
- Best price
- Best for quoting multiple accounts and comparing outcomes.
Security
Authentication
All requests require a bearer token in the Authorization header.
Bearer token
Use a live key from your workspace to authenticate every request.
Authorization: Bearer sk_live_xxxxx/api/v1/pricing/resolve1. Resolve pricing
Resolve product pricing using active pricing rules.
- Authentication
- Bearer Token
- Response
- JSON
- Version
- v1
- Rate limit
- 1000 req/min
https://pricerules.app/api/v1/pricing/resolvecurl -X POST \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"customer_id": "10",
"products": [
{
"sku": "123-000-987-654",
"quantity": 21
}
]
}' \
https://pricerules.app/api/v1/pricing/resolvePayload
Request body
The schema explorer below stays aligned with the JSON example that follows it.
Prices one customer's products as a flat list. This is the shape used when mode is omitted or set to business.
customer_idstringOptional- Example
"101"
- Example
[{ sku: "32599", quantity: 1 }]
products[] · 2 fieldsproducts[].skustringRequired- Example
"32599"
products[].quantityintegerOptional- Default
1- Constraint
- Minimum 1
- Example
1
mode"business"|"best_price"Optional- Default
"business"- Example
"business"
Notes
A couple of request-shape details that are easy to miss in a code sample.
- Use business mode for a single customer payload.
- Quantity defaults to 1 when omitted.
Limits
Limits
The endpoint remains fast, but there are hard caps to keep batch runs predictable.
Maximum products
500
Across the entire request payload.
Recommended payload
< 2 MB
Keep request bodies small for faster processing and reliable retries.
Timeout
15 sec
Large batches may still complete faster, but this is the ceiling.
Warning for Single Call Limit Exceeded
Output
Response
Inspect the returned schema first, then switch to the live example payload below.
data.items is a flat array — one entry per product you submitted.
mode"business"|"best_price"- Example
"business"
successboolean- Example
true
warningstring- Example
"Only first 500 SKUs were processed."
data · 2 fieldsdata.customer_idstring- Example
"cust_123456"
items[] · 7 fieldsitems[].skustring- Example
"ORRATINUQ"
items[].base_pricenumber|null- Example
90
items[].quantityinteger- Example
10
items[].final_pricenumber|null- Example
90
applied_rule · 5 fieldsapplied_rule.idstring- Example
"1cd75890-9f8c-4a65-972d-d2e675f4f27d"
applied_rule.namestring- Example
"TEST"
applied_rule.type"fixed"|"discount"- Example
"fixed"
applied_rule.valuenumber- Example
1
constraints · 1 fieldconstraints.minimum_quantityinteger|null- Example
41
items[].match_reason"LOWEST_PRICE_WINS"|"MOST_SPECIFIC_RULE"|"SKU_LEVEL_RULE"|"CUSTOMER_LEVEL_RULE"|"DEFAULT_RULE"|"PRODUCT_NOT_FOUND"|"NO_RULE"- Example
"MOST_SPECIFIC_RULE"
pricing_summary · 2 fieldspricing_summary.savingsnumber- Example
100.00
pricing_summary.messagestring- Example
"Customer saved 100.00 due to active pricing rules"
billing · 3 fieldsbilling.limitinteger- Example
10000
billing.usageinteger- Example
193
billing.remaininginteger- Example
9807
meta · 2 fieldsmeta.request_idstring- Example
"req_d82d6fa5-040d-4bf9-8b64-fd330f274d23"
meta.processing_msnumber- Example
2072.0881
Response notes
A short checklist for the fields that matter most when integrating the endpoint.
- data.items mirrors the request order.
- billing and meta stay at the top level for every response.
Errors
Response status
These tabs summarize the common HTTP statuses returned by the endpoint.
Request processed
Description
The request was authenticated, validated, and processed successfully. Individual products may still have no pricing rule or may not exist.
Possible causes
- Valid bearer token
- Valid request body
- Pricing request processed successfully
Diagnostics
Error codes
Use these codes to map API failures to actionable client messages or retries.
VALIDATION_ERRORThe request body is malformed or does not match the expected schema.
Suggested fix
Check the required fields, field types, enum values, and nested objects against the API schema before resubmitting.
UNAUTHORIZEDThe API key is missing, invalid, expired, or no longer active.
Suggested fix
Verify the Authorization header uses a valid Bearer token and that the API key is active.
RATE_LIMIT_EXCEEDEDThe workspace has exceeded its allowed request rate for the current rate-limit window.
Suggested fix
Wait until the rate limit resets, respect the Retry-After header, or reduce request bursts and unnecessary retries.
MONTHLY_LIMIT_REACHEDThe workspace has reached its request quota for the current billing period.
Suggested fix
Wait for the current billing period to reset, or upgrade the workspace plan if additional requests are required.
MAX_PRODUCTS_EXCEEDEDThe request contains more products than the maximum number processed per request. The API processes only the first 500 products.
Suggested fix
Split the products into smaller requests containing no more than 500 products each.
PRODUCT_NOT_FOUNDThe requested product SKU does not exist in the workspace.
Suggested fix
Verify the SKU matches an imported product in the workspace and check for differences in spelling, casing, or formatting.
NO_RULEThe product exists, but no applicable pricing rule matched the request.
Suggested fix
Check the customer's code, product SKU, rule scope, minimum quantity, and rule priority.
INTERNAL_ERRORThe API encountered an unexpected server error while processing the request.
Suggested fix
Retry the request. If the issue persists, provide the request ID to support so the failure can be investigated.
/api/v1/pricing/resolve/bulk2. Resolve bulk pricing
Resolve pricing across multiple customer requests in a single call.
- Authentication
- Bearer Token
- Response
- JSON
- Version
- v1
- Rate limit
- 1000 req/min
https://pricerules.app/api/v1/pricing/resolve/bulkcurl -X POST \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"requests": [
{
"customer_id": "101",
"products": [
{ "sku": "ORRATINUQ", "quantity": 99 },
{ "sku": "123-000-987-654" }
]
},
{
"customer_id": "10",
"products": [
{ "sku": "123-000-987-654", "quantity": 50 }
]
}
] ,
"mode": "best_price"
}' \
https://pricerules.app/api/v1/pricing/resolve/bulkPayload
Request body
The schema explorer below stays aligned with the JSON example that follows it.
Prices products across one or more customers in a single call, and returns results grouped per customer.
- Example
[{ customer_id: '101', products: [...] }]
requests[] · 2 fieldsrequests[].customer_idstringOptional- Example
"101"
- Example
[{ sku: "32599", quantity: 1 }]
products[] · 2 fieldsproducts[].skustringRequired- Example
"32599"
products[].quantityintegerOptional- Default
1- Constraint
- Minimum 1
- Example
1
mode"best_price"Required- Example
"best_price"
Notes
A couple of request-shape details that are easy to miss in a code sample.
- Set mode to best_price when sending requests[] batches.
- Each nested request can carry its own customer_id and products array.
Limits
Limits
The endpoint remains fast, but there are hard caps to keep batch runs predictable.
Maximum products
500
Across the entire request payload.
Recommended payload
< 2 MB
Keep request bodies small for faster processing and reliable retries.
Timeout
15 sec
Large batches may still complete faster, but this is the ceiling.
Warning for Bulk Call Limit Exceeded
Output
Response
Inspect the returned schema first, then switch to the live example payload below.
data is an array grouped by customer — each entry has its own nested list of priced items.
mode"business"|"best_price"- Example
"business"
successboolean- Example
true
warningstring- Example
"Only first 500 SKUs were processed.", "Only first 10 requests were processed."
data[] · 2 fieldsdata[].customerIdstring- Example
"101"
items[] · 7 fieldsitems[].skustring- Example
"ORRATINUQ"
items[].base_pricenumber|null- Example
90
items[].quantityinteger- Example
10
items[].final_pricenumber|null- Example
90
applied_rule · 5 fieldsapplied_rule.idstring- Example
"1cd75890-9f8c-4a65-972d-d2e675f4f27d"
applied_rule.namestring- Example
"TEST"
applied_rule.type"fixed"|"discount"- Example
"fixed"
applied_rule.valuenumber- Example
1
constraints · 1 fieldconstraints.minimum_quantityinteger|null- Example
41
items[].match_reason"LOWEST_PRICE_WINS"|"MOST_SPECIFIC_RULE"|"SKU_LEVEL_RULE"|"CUSTOMER_LEVEL_RULE"|"DEFAULT_RULE"|"PRODUCT_NOT_FOUND"|"NO_RULE"- Example
"MOST_SPECIFIC_RULE"
pricing_summary · 2 fieldspricing_summary.savingsnumber- Example
100.00
pricing_summary.messagestring- Example
"Customer saved 100.00 due to active pricing rules"
billing · 3 fieldsbilling.limitinteger- Example
10000
billing.usageinteger- Example
193
billing.remaininginteger- Example
9807
meta · 2 fieldsmeta.request_idstring- Example
"req_d82d6fa5-040d-4bf9-8b64-fd330f274d23"
meta.processing_msnumber- Example
2072.0881
Response notes
A short checklist for the fields that matter most when integrating the endpoint.
- Each data[] entry maps back to a requested customer.
- Nested data[].items[] items use the same pricing shape as business mode.
Errors
Response status
These tabs summarize the common HTTP statuses returned by the endpoint.
Request processed
Description
The bulk request was authenticated, validated, and processed successfully. Individual products or customers may still have no applicable pricing result.
Possible causes
- Valid bearer token
- Valid bulk request body
- Bulk pricing requests processed successfully
Diagnostics
Error codes
Use these codes to map API failures to actionable client messages or retries.
VALIDATION_ERRORThe request body is malformed or does not match the expected schema.
Suggested fix
Check the required fields, field types, enum values, and nested objects against the API schema before resubmitting.
UNAUTHORIZEDThe API key is missing, invalid, expired, or no longer active.
Suggested fix
Verify the Authorization header uses a valid Bearer token and that the API key is active.
RATE_LIMIT_EXCEEDEDThe workspace has exceeded its allowed request rate for the current rate-limit window.
Suggested fix
Wait until the rate limit resets, respect the Retry-After header, or reduce request bursts and unnecessary retries.
MONTHLY_LIMIT_REACHEDThe workspace has reached its request quota for the current billing period.
Suggested fix
Wait for the current billing period to reset, or upgrade the workspace plan if additional requests are required.
MAX_PRODUCTS_EXCEEDEDThe request contains more products than the maximum number processed per request. The API processes only the first 500 products.
Suggested fix
Split the products into smaller requests containing no more than 500 products each.
PRODUCT_NOT_FOUNDThe requested product SKU does not exist in the workspace.
Suggested fix
Verify the SKU matches an imported product in the workspace and check for differences in spelling, casing, or formatting.
NO_RULEThe product exists, but no applicable pricing rule matched the request.
Suggested fix
Check the customer's code, product SKU, rule scope, minimum quantity, and rule priority.
INTERNAL_ERRORThe API encountered an unexpected server error while processing the request.
Suggested fix
Retry the request. If the issue persists, provide the request ID to support so the failure can be investigated.