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 pricesGET/POST/PATCH /api/v1/products/{product_id}/prices/… — read and write price entries attached to a specific product.
  • Price MonitorGET/POST/PATCH/DELETE /api/v1/prices/… — global dashboard, monitored-product list, price checks, competitors, alerts, and MAP enforcement.

/products/{product_id}/prices

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

GET
/products/{product_id}/prices
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

POST
/products/{product_id}/prices
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

GET
/products/{product_id}/prices/best
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

GET
/products/{product_id}/prices/history
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

GET
/products/{product_id}/prices/stats
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

PATCH
/products/{product_id}/prices/{price_id}
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"
}

/prices

Price Monitor

Dashboard

Returns a global pricing dashboard: summary stats, top movers, recent alerts, and source breakdown.

Request

GET
/prices/dashboard
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

GET
/prices/monitored
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, or weekly.

Request

PATCH
/prices/monitored/{product_id}
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, or weekly.

Request

POST
/prices/monitored/bulk
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

POST
/prices/check/{product_id}
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

POST
/prices/check/bulk
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

GET
/prices/history/{product_id}
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

GET
/prices/competitors
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

POST
/prices/competitors
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

DELETE
/prices/competitors/{competitor_id}
curl -X DELETE https://api.pixeepim.com/api/v1/prices/competitors/comp-002 \
  -H "Authorization: Bearer {api_key}"

Response

{ "deleted": true }

/prices/alerts · /prices/map

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, or change_pct.

  • Name
    is_active
    Type
    boolean
    Description

    Return only active alerts.

Request

GET
/prices/alerts
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 (for change_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

POST
/prices/alerts
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

PATCH
/prices/alerts/{alert_id}
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

DELETE
/prices/alerts/{alert_id}
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

GET
/prices/alerts/triggered
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

GET
/prices/map/violations
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

GET
/prices/map/stats
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

PATCH
/prices/map/{product_id}
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_KEY env var).

Body parameters

  • Name
    observations
    Type
    array
    Description

    Array of price observations. Each entry must include:

    • internal_sku — your product's SKU
    • competitor_name — source identifier
    • price_ttc — price including tax
    • Additional optional fields: currency, url, in_stock, scraped_at

Request

POST
/prices/observations
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": []
}

Was this page helpful?