API

Pegas el URL de un producto. Vigilamos el precio. Te llega un POST cuando dispara una alerta. El mismo loop que la app.

Base https://pricesaurus.com/api/v1. IDs are UUIDs. JSON in, JSON out.

SDK y CLI

Paquete oficial en npm: pricesaurus. Extrae, vigila, lista alertas, pausa, reanuda y borra. La misma Watch API que esta página.

npx pricesaurus extract https://www.amazon.com/dp/B00CH9QWOU

Auth

Crea un token en Plus o Max, Cuenta → API. Mándalo como Authorization: Bearer. El token de la app no es el de desarrollador.

Los mismos topes de productos y alertas que tu plan. 60 pedidos por minuto.

curl https://pricesaurus.com/api/v1/me \
  -H "Authorization: Bearer ps_live_xxxxxxxx"

Errores

{
  "error": {
    "code": "no_price",
    "message": "We could not read a price on that page.",
    "retryable": false,
    "driver": "scrapingbee"
  }
}
NameTypeNotas
401HTTPToken ausente o inválido
403HTTPEsencial, o el recurso no es tuyo
404HTTPId desconocido
422HTTPno_price | unavailable | invalid body
429HTTPMás de 60/min
503HTTPblocked | quota | timeout (retryable)
GET/me

Cuenta

Plan, cupo de productos y si hay webhook.

{
  "data": {
    "email": "dev@example.com",
    "plan": "plus",
    "products_used": 3,
    "products_limit": 15,
    "webhook_configured": true
  }
}
POST/extract

Leer una página (no guarda)

NameTypeNotas
url*stringhttps, max 2048
countrystringISO 3166-1 alpha-2, e.g. US, MX
currencystringISO 4217, e.g. USD, MXN
curl https://pricesaurus.com/api/v1/extract \
  -H "Authorization: Bearer ps_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.amazon.com/dp/B00CH9QWOU"}'
GET/products

Listar productos

NameTypeNotas
pageintegerdefault 1
per_pageintegerdefault 20, max 100
POST/products

Vigilar un URL

NameTypeNotas
url*stringCuenta para el tope del plan
namestringoptional, max 255
countrystringISO 3166-1 alpha-2
currencystringISO 4217

201. status: watching | pending | failing

curl https://pricesaurus.com/api/v1/products \
  -H "Authorization: Bearer ps_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.amazon.com/dp/B00CH9QWOU"}'
GET/products/{id}

Ver un producto

id es UUID.

PATCH/products/{id}

Renombrar o pausar

NameTypeNotas
namestringmax 255
is_activebooleanfalse pausa y libera un cupo sin borrar historial
DELETE/products/{id}

Borrar

204

POST/products/{id}/checks

Revisar ahora

Devuelve product + snapshot.

GET/products/{id}/prices

Historial de precios

NameTypeNotas
pageintegerdefault 1
per_pageintegerdefault 50, max 200
GET/products/{id}/alerts

Listar alertas

POST/products/{id}/alerts

Crear alerta

NameTypeNotas
condition*drops | below | abovedrops = baja (repetible). below/above = umbral, una vez
thresholdnumberObligatorio en below y above
namestringoptional
curl https://pricesaurus.com/api/v1/products/2c4e0a1b-9f3d-4e8a-a111-0b9c8d7e6f55/alerts \
  -H "Authorization: Bearer ps_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"condition":"below","threshold":500}'
PATCH/alerts/{id}

Renombrar o apagar

NameTypeNotas
namestringmax 255
is_activebooleanfalse deja de disparar
curl -X PATCH https://pricesaurus.com/api/v1/alerts/8a91b2c3-d4e5-4f60-a1b2-c3d4e5f60718 \
  -H "Authorization: Bearer ps_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"is_active":false}'
DELETE/alerts/{id}

Borrar alerta

204

Webhook

Mandamos POST { event, occurred_at, data } a tu URL. Firma HMAC-SHA256. Header X-Pricesaurus-Signature: sha256=…

POST https://example.com/hooks/pricesaurus
X-Pricesaurus-Event: price.alert
X-Pricesaurus-Signature: sha256=…
{
  "event": "price.alert",
  "occurred_at": "2026-09-11T12:00:00+00:00",
  "data": {
    "product": { "id": "2c4e0a1b-9f3d-4e8a-a111-0b9c8d7e6f55", "name": "Kettle", "url": "https://www.amazon.com/dp/B00CH9QWOU" },
    "price": 42.5,
    "alerts": [{ "id": "8a91b2c3-d4e5-4f60-a1b2-c3d4e5f60718", "name": "When the price drops" }]
  }
}

HMAC-SHA256 of the raw body. Events: price.alert, webhook.test.