Prices & price rules
Final prices
GET /prices (ability prices:read) returns the final selling price of each product and where it comes from.
curl -s "https://app.syncore.gr/api/v1/prices?sku=ABC-1001,ABC-1002" -H "Authorization: Bearer $SYNCORE_TOKEN"
{
"data": [
{
"product_id": 1201,
"sku": "ABC-1001",
"base_price": 12.4,
"final_price": 19.9,
"manual_price": false,
"price_rule_id": 3,
"updated_at": "2026-10-29T10:00:00+02:00"
}
],
"meta": { "current_page": 1, "per_page": 25, "total": 1, "last_page": 1 },
"links": { "next": null, "prev": null }
}
Filters: sku (comma separated), supplier_id, page, per_page. price_rule_id is the rule that applied; null when the price is manual or no rule matches.
To set a manual price on one product use PATCH /products/{id} with manual_price — see Products.
Price rules
| Endpoint | Ability |
|---|---|
GET /price-rules, GET /price-rules/{id} |
prices:read |
POST /price-rules, PATCH /price-rules/{id}, DELETE /price-rules/{id} |
prices:write |
Rule fields:
| Field | Values |
|---|---|
name, description |
text |
rule_type |
1 percentage, 2 fixed amount, 3 fixed price |
value |
number ≥ 0 |
price_rule_scope |
1 all, 2 supplier, 3 category, 4 product |
global_supplier_id / global_category_id / global_product_id |
depending on the scope |
rule_conditions, price_comparison, price_threshold |
optional condition: 1 lower than, 2 greater than the threshold |
is_enabled |
true / false |
Example: +25% on every product of one supplier.
curl -s -X POST "https://app.syncore.gr/api/v1/price-rules" \
-H "Authorization: Bearer $SYNCORE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Supplier A +25%", "rule_type": 1, "value": 25, "price_rule_scope": 2, "global_supplier_id": 7, "is_enabled": true}'
Answers 201 with the rule (id, the fields above, priority, updated_at). PATCH takes only the fields you change; DELETE answers 204.