Price Monitor
Price Monitor tracks your products' prices across internal sources and competitor sites, giving you full visibility over pricing and margins.
The API is split across two routers:
- Per-product prices —
GET/POST/PATCH /api/v1/products/{product_id}/prices/…— read and write price entries attached to a specific product. - Price Monitor —
GET/POST/PATCH/DELETE /api/v1/prices/…— global dashboard, monitored-product list, price checks, competitors, alerts, and MAP enforcement.
Per-product prices
Get product prices
Returns all price entries (internal and competitor) associated with a product.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Request
curl https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/prices \
-H "Authorization: Bearer {api_key}"
Response
[
{
"id": "550e8400-e29b-41d4-a716-000000000001",
"source": "internal",
"price": 29.99,
"currency": "EUR",
"is_active": true,
"valid_until": null,
"created_at": "2026-01-01T00:00:00Z"
},
{
"id": "550e8400-e29b-41d4-a716-000000000002",
"source": "amazon_fr",
"price": 27.50,
"currency": "EUR",
"is_active": true,
"url": "https://amazon.fr/dp/B0123456789",
"created_at": "2026-05-10T00:00:00Z"
}
]
Record a competitor price
Manually records a competitor price entry for a product.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Body parameters
- Name
source- Type
- string
- Description
Source identifier (e.g.
amazon_fr,fnac,cdiscount).
- Name
price- Type
- number
- Description
Competitor price.
- Name
currency- Type
- string
- Description
ISO 4217 currency code (default:
EUR).
- Name
url- Type
- string
- Description
Direct URL to the product on the competitor's site (HTTPS required).
- Name
valid_until- Type
- string
- Description
ISO 8601 expiry datetime.
- Name
notes- Type
- string
- Description
Optional free-text notes (e.g.
"Promotion -10%").
Request
curl -X POST https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/prices \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"source": "amazon_fr",
"price": 27.50,
"currency": "EUR",
"url": "https://amazon.fr/dp/B0123456789",
"notes": "Prix observé le 14 mai 2026"
}'
Response
{
"id": "550e8400-e29b-41d4-a716-000000000003",
"source": "amazon_fr",
"price": 27.50,
"currency": "EUR",
"is_active": true,
"created_at": "2026-05-14T10:30:00Z"
}
Get best price
Returns the lowest active price across all sources for a product.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Request
curl https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/prices/best \
-H "Authorization: Bearer {api_key}"
Response
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"best_price": 27.50,
"source": "amazon_fr",
"url": "https://amazon.fr/dp/B0123456789",
"valid_until": null
}
Get price history (per-product)
Returns paginated price history for a product across all sources.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Query parameters
- Name
date_from- Type
- string
- Description
ISO 8601 start datetime.
- Name
date_to- Type
- string
- Description
ISO 8601 end datetime.
- Name
page- Type
- integer
- Description
Page number (default: 1).
- Name
per_page- Type
- integer
- Description
Items per page (default: 50).
Request
curl "https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/prices/history?date_from=2026-01-01T00:00:00Z&page=1&per_page=50" \
-H "Authorization: Bearer {api_key}"
Response
{
"items": [
{
"id": "550e8400-e29b-41d4-a716-000000000002",
"source": "amazon_fr",
"price": 27.50,
"currency": "EUR",
"created_at": "2026-05-10T00:00:00Z"
}
],
"total": 48,
"page": 1,
"per_page": 50
}
Get price stats
Returns aggregated price statistics for a product across all sources.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Request
curl https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/prices/stats \
-H "Authorization: Bearer {api_key}"
Response
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"lowest_price": 24.99,
"highest_price": 34.99,
"average_price": 29.50,
"sources_count": 3,
"sources": ["internal", "amazon_fr", "fnac"],
"last_updated": "2026-05-14T10:30:00Z"
}
Update a price entry
Updates an existing price entry attached to a product.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
- Name
price_id- Type
- string
- Description
The price entry UUID.
Body parameters
- Name
price- Type
- number
- Description
Updated price value.
- Name
is_active- Type
- boolean
- Description
Enable or disable this price entry.
- Name
valid_until- Type
- string
- Description
Updated expiry datetime (ISO 8601).
Request
curl -X PATCH https://api.pixeepim.com/api/v1/products/550e8400-e29b-41d4-a716-446655440000/prices/550e8400-e29b-41d4-a716-000000000002 \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{"price": 26.99, "is_active": true}'
Response
{
"id": "550e8400-e29b-41d4-a716-000000000002",
"price": 26.99,
"is_active": true,
"updated_at": "2026-05-14T11:00:00Z"
}
Price Monitor
Dashboard
Returns a global pricing dashboard: summary stats, top movers, recent alerts, and source breakdown.
Request
curl https://api.pixeepim.com/api/v1/prices/dashboard \
-H "Authorization: Bearer {api_key}"
Response
{
"monitored_products": 320,
"active_alerts": 5,
"map_violations": 2,
"last_check_at": "2026-05-14T08:00:00Z",
"top_movers": []
}
Monitored products
Returns the list of products enrolled in Price Monitor.
Query parameters
- Name
tier- Type
- string
- Description
Filter by monitoring tier (
hourly,daily,weekly).
- Name
active_only- Type
- boolean
- Description
Return only active monitors (default:
true).
- Name
page- Type
- integer
- Description
Page number (default: 1).
- Name
per_page- Type
- integer
- Description
Items per page (default: 50).
Request
curl "https://api.pixeepim.com/api/v1/prices/monitored?tier=daily&active_only=true" \
-H "Authorization: Bearer {api_key}"
Response
{
"items": [
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Produit exemple",
"ean": "3760000000001",
"tier": "daily",
"is_active": true,
"last_check_at": "2026-05-14T08:00:00Z"
}
],
"total": 320,
"page": 1,
"per_page": 50
}
Update monitoring
Updates the monitoring settings for a product.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Body parameters
- Name
is_active- Type
- boolean
- Description
Enable or disable monitoring for this product.
- Name
tier- Type
- string
- Description
Monitoring frequency:
hourly,daily, orweekly.
Request
curl -X PATCH https://api.pixeepim.com/api/v1/prices/monitored/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{"is_active": true, "tier": "daily"}'
Response
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"is_active": true,
"tier": "daily",
"updated_at": "2026-05-14T11:00:00Z"
}
Bulk activate monitoring
Enrolls multiple products in Price Monitor in a single call.
Body parameters
- Name
product_ids- Type
- array
- Description
List of product UUIDs to enroll.
- Name
tier- Type
- string
- Description
Monitoring frequency:
hourly,daily, orweekly.
Request
curl -X POST https://api.pixeepim.com/api/v1/prices/monitored/bulk \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"product_ids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
],
"tier": "daily"
}'
Response
{
"enrolled": 2,
"already_enrolled": 0,
"errors": []
}
Trigger a price check
Triggers an immediate price check for a single product across all configured sources (pixee-scrap hub → SerpAPI → SearXNG).
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Request
curl -X POST https://api.pixeepim.com/api/v1/prices/check/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer {api_key}"
Response
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued",
"task_id": "celery-task-abc123"
}
Bulk price check
Triggers a batch price check for multiple products filtered by tier.
Query parameters
- Name
tier- Type
- string
- Description
Only check products on this tier (
hourly,daily,weekly).
- Name
limit- Type
- integer
- Description
Maximum number of products to check in this run.
Request
curl -X POST "https://api.pixeepim.com/api/v1/prices/check/bulk?tier=daily&limit=100" \
-H "Authorization: Bearer {api_key}"
Response
{
"queued": 87,
"skipped": 13,
"tier": "daily"
}
Price history (monitor)
Returns the full price-check history collected by Price Monitor for a product, across all competitors.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Query parameters
- Name
days- Type
- integer
- Description
Number of past days to include (default: 30).
Request
curl "https://api.pixeepim.com/api/v1/prices/history/550e8400-e29b-41d4-a716-446655440000?days=30" \
-H "Authorization: Bearer {api_key}"
Response
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"days": 30,
"entries": [
{
"checked_at": "2026-05-14T08:00:00Z",
"competitor": "amazon_fr",
"price": 27.50,
"currency": "EUR"
}
]
}
List competitors
Returns the list of configured competitor sources used by Price Monitor.
Request
curl https://api.pixeepim.com/api/v1/prices/competitors \
-H "Authorization: Bearer {api_key}"
Response
[
{
"id": "comp-001",
"code": "amazon_fr",
"name": "Amazon France",
"base_url": "https://amazon.fr",
"created_at": "2026-01-01T00:00:00Z"
}
]
Add a competitor
Adds a new competitor source to Price Monitor.
Body parameters
- Name
code- Type
- string
- Description
Unique identifier (e.g.
cdiscount,fnac).
- Name
name- Type
- string
- Description
Display name.
- Name
base_url- Type
- string
- Description
Root URL of the competitor's site (HTTPS required).
Request
curl -X POST https://api.pixeepim.com/api/v1/prices/competitors \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{"code": "cdiscount", "name": "Cdiscount", "base_url": "https://www.cdiscount.com"}'
Response
{
"id": "comp-002",
"code": "cdiscount",
"name": "Cdiscount",
"base_url": "https://www.cdiscount.com",
"created_at": "2026-05-14T12:00:00Z"
}
Delete a competitor
Removes a competitor source. Existing price observations are retained.
Path parameters
- Name
competitor_id- Type
- string
- Description
The competitor ID.
Request
curl -X DELETE https://api.pixeepim.com/api/v1/prices/competitors/comp-002 \
-H "Authorization: Bearer {api_key}"
Response
{ "deleted": true }
Alerts & MAP
List alerts
Returns configured price alerts.
Query parameters
- Name
product_id- Type
- string
- Description
Filter by product UUID.
- Name
alert_type- Type
- string
- Description
Filter by type:
above,below, orchange_pct.
- Name
is_active- Type
- boolean
- Description
Return only active alerts.
Request
curl "https://api.pixeepim.com/api/v1/prices/alerts?is_active=true" \
-H "Authorization: Bearer {api_key}"
Response
[
{
"id": "alert-001",
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"alert_type": "below",
"threshold": 25.00,
"channels": ["in_app", "webhook"],
"cooldown_minutes": 60,
"is_active": true
}
]
Create an alert
Creates a new price alert for a product.
Body parameters
- Name
product_id- Type
- string
- Description
The product UUID to monitor.
- Name
alert_type- Type
- string
- Description
above— fires when any competitor price exceeds the threshold.below— fires when a competitor undercuts.change_pct— fires when the price changes by more than the threshold percentage.
- Name
threshold- Type
- number
- Description
Price value (for
above/below) or percentage (forchange_pct).
- Name
channels- Type
- array
- Description
Notification channels:
in_app,webhook,email(default:["in_app"]).
- Name
cooldown_minutes- Type
- integer
- Description
Minimum minutes between repeated notifications (default: 60).
Request
curl -X POST https://api.pixeepim.com/api/v1/prices/alerts \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"alert_type": "below",
"threshold": 25.00,
"channels": ["in_app", "webhook"],
"cooldown_minutes": 60
}'
Response
{
"id": "alert-001",
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"alert_type": "below",
"threshold": 25.00,
"is_active": true,
"created_at": "2026-05-14T12:00:00Z"
}
Update an alert
Updates an existing price alert.
Path parameters
- Name
alert_id- Type
- string
- Description
The alert ID.
Body parameters
- Name
threshold- Type
- number
- Description
New threshold value.
- Name
is_active- Type
- boolean
- Description
Enable or disable the alert.
- Name
channels- Type
- array
- Description
Updated notification channels.
- Name
cooldown_minutes- Type
- integer
- Description
Updated cooldown in minutes.
Request
curl -X PATCH https://api.pixeepim.com/api/v1/prices/alerts/alert-001 \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{"threshold": 24.00, "is_active": true}'
Response
{
"id": "alert-001",
"threshold": 24.00,
"is_active": true,
"updated_at": "2026-05-14T13:00:00Z"
}
Delete an alert
Deletes a price alert.
Path parameters
- Name
alert_id- Type
- string
- Description
The alert ID.
Request
curl -X DELETE https://api.pixeepim.com/api/v1/prices/alerts/alert-001 \
-H "Authorization: Bearer {api_key}"
Response
{ "deleted": true }
Triggered alerts
Returns recent alert trigger events, ordered by most recent first.
Request
curl https://api.pixeepim.com/api/v1/prices/alerts/triggered \
-H "Authorization: Bearer {api_key}"
Response
[
{
"alert_id": "alert-001",
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"alert_type": "below",
"triggered_price": 23.90,
"competitor": "cdiscount",
"triggered_at": "2026-05-14T09:15:00Z"
}
]
MAP violations
Returns products whose competitor prices fall below their configured Minimum Advertised Price (MAP).
Request
curl https://api.pixeepim.com/api/v1/prices/map/violations \
-H "Authorization: Bearer {api_key}"
Response
{
"violations": [
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Produit exemple",
"map_price": 25.00,
"competitor": "cdiscount",
"competitor_price": 22.50,
"gap": -2.50,
"detected_at": "2026-05-14T08:00:00Z"
}
],
"total": 2
}
MAP stats
Returns aggregated MAP compliance statistics across the catalog.
Request
curl https://api.pixeepim.com/api/v1/prices/map/stats \
-H "Authorization: Bearer {api_key}"
Response
{
"total_with_map": 150,
"violations": 2,
"compliance_rate": 98.7,
"avg_violation_gap": -3.20
}
Set MAP price
Sets or updates the Minimum Advertised Price for a product.
Path parameters
- Name
product_id- Type
- string
- Description
The product UUID.
Body parameters
- Name
map_price- Type
- number
- Description
The minimum advertised price to enforce.
Request
curl -X PATCH https://api.pixeepim.com/api/v1/prices/map/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{"map_price": 25.00}'
Response
{
"product_id": "550e8400-e29b-41d4-a716-446655440000",
"map_price": 25.00,
"updated_at": "2026-05-14T12:00:00Z"
}
Inject price observations
Injects price observations collected by an external source (e.g. PixeeCrawl scraper hub). Authenticated with a shared sync key rather than a user API key.
Headers
- Name
X-Pixee-Sync-Key- Type
- string
- Description
Server-to-server sync key (
PIXEE_SYNC_KEYenv var).
Body parameters
- Name
observations- Type
- array
- Description
Array of price observations. Each entry must include:
internal_sku— your product's SKUcompetitor_name— source identifierprice_ttc— price including tax- Additional optional fields:
currency,url,in_stock,scraped_at
Request
curl -X POST https://api.pixeepim.com/api/v1/prices/observations \
-H "X-Pixee-Sync-Key: {sync_key}" \
-H "Content-Type: application/json" \
-d '{
"observations": [
{
"internal_sku": "REF-001",
"competitor_name": "amazon_fr",
"price_ttc": 27.50,
"currency": "EUR",
"url": "https://amazon.fr/dp/B0123456789",
"in_stock": true,
"scraped_at": "2026-05-14T07:55:00Z"
}
]
}'
Response
{
"accepted": 1,
"rejected": 0,
"errors": []
}