Passer au contenu principal

Documentation Index

Fetch the complete documentation index at: https://docs.olostep.com/llms.txt

Use this file to discover all available pages before exploring further.

Grâce à l’endpoint Olostep /v1/monitors, tu peux créer des moniteurs persistants qui s’exécutent selon un calendrier fixe, détectent les changements de page et te notifient par email ou webhook.
  • Crée un moniteur à partir d’une query, d’une url, ou des deux
  • Exécute des vérifications toutes les heures, quotidiennement ou hebdomadairement
  • Envoie des alertes soit par email soit par webhook_url
  • Liste, inspecte, mets à jour et supprime des moniteurs
  • Lis les événements de capture instantanée des moniteurs à partir de captures privées

Installation

# pip install requests

import requests

Créer un moniteur

Crée un moniteur avec POST /v1/monitors. L’endpoint valide ton entrée, provisionne le moniteur, crée son calendrier interne et renvoie un objet moniteur actif. Au moins une query ou une url est requise. Un seul objectif de notification est requis : soit email soit webhook_url.

Exemple de requête

import requests
import json

API_KEY = "<YOUR_API_KEY>"
API_URL = "https://api.olostep.com/v1"

payload = {
    "query": "Suivre les changements de prix et d'informations de stock des produits",
    "url": "https://example.com/products/widget-pro",
    "frequency": "daily",
    "email": "alerts@example.com",
    "metadata": {
        "product_id": "widget-pro",
        "team": "growth"
    }
}

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

response = requests.post(f"{API_URL}/monitors", headers=headers, json=payload)
print(response.status_code)
print(json.dumps(response.json(), indent=2))

Réponse

La création réussie d’un moniteur renvoie un HTTP 202 avec un objet moniteur :
{
  "id": "monitor_n8q2x4m1ak",
  "object": "monitor",
  "status": "active",
  "schedule_id": "schedule_r4h9n2j7",
  "query": "Suivre les changements de prix et d'informations de stock des produits",
  "url": "https://example.com/products/widget-pro",
  "frequency": "daily",
  "cron_expression": "0 0 * * ? *",
  "notification_channel": "email",
  "notification_target": "alerts@example.com",
  "metadata": {
    "product_id": "widget-pro",
    "team": "growth"
  },
  "created": 1745673871,
  "updated": 1745673871
}

Canaux de notification

Les moniteurs prennent en charge un canal par moniteur :
  • email : définis un champ email
  • webhook : définis un champ webhook_url
Tu ne peux pas définir les deux dans une seule requête.

Exemple de Webhook

{
  "query": "Surveiller les changements dans les conditions légales",
  "url": "https://example.com/terms",
  "frequency": "weekly",
  "webhook_url": "https://hooks.example.com/olostep-monitor"
}

Fréquences

Les fréquences de moniteur prises en charge sont :
  • hourly
  • daily
  • weekly
L’API dérive automatiquement l’expression cron du calendrier à partir de la fréquence sélectionnée.

Lister les moniteurs

Récupère tous les moniteurs pour ton équipe avec GET /v1/monitors. Par défaut, les moniteurs supprimés sont filtrés. Utilise ?include_deleted=true pour les inclure.
import requests
import json

API_KEY = "<YOUR_API_KEY>"
API_URL = "https://api.olostep.com/v1"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

response = requests.get(f"{API_URL}/monitors", headers=headers)
result = response.json()
print(f"Total des moniteurs : {result['count']}")
print(json.dumps(result, indent=2))

Obtenir un moniteur

Récupère un moniteur unique avec GET /v1/monitors/:monitor_id.
import requests
import json

API_KEY = "<YOUR_API_KEY>"
API_URL = "https://api.olostep.com/v1"
MONITOR_ID = "monitor_n8q2x4m1ak"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

response = requests.get(f"{API_URL}/monitors/{MONITOR_ID}", headers=headers)
print(json.dumps(response.json(), indent=2))

Lister les événements de moniteur

Utilise GET /v1/monitors/:monitor_id/events pour lister les événements de capture instantanée pour un moniteur. Cet endpoint prend en charge la pagination :
  • limit (par défaut 25, max 100)
  • cursor (jeton de pagination opaque d’une réponse précédente)
Les événements sont retournés du plus récent au plus ancien. Chaque élément inclut une snapshot_url pré-signée de courte durée pour que tu puisses récupérer le contenu de la capture privée en toute sécurité.

Exemple

import requests
import json

API_KEY = "<YOUR_API_KEY>"
API_URL = "https://api.olostep.com/v1"
MONITOR_ID = "monitor_n8q2x4m1ak"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

response = requests.get(
    f"{API_URL}/monitors/{MONITOR_ID}/events?limit=10",
    headers=headers
)
print(json.dumps(response.json(), indent=2))

Forme de la réponse

{
  "data": [
    {
      "id": "run_v7k2p9m3",
      "run_id": "run_v7k2p9m3",
      "created": 1777960800,
      "changed": true,
      "summary": "Le prix est passé de 49 $ à 45 $ et le stock est passé à faible disponibilité.",
      "snapshot_url": "https://olostep-monitor-snapshot.s3.amazonaws.com/private/key?...signature..."
    }
  ],
  "has_more": false,
  "next_cursor": null
}
Si cursor est mal formé, l’endpoint renvoie :
{
  "error": "Curseur invalide."
}

Mettre à jour un moniteur

Mets à jour un moniteur avec POST /v1/monitors/:monitor_id. Mises à jour prises en charge :
  • metadata (fusionnée avec les métadonnées existantes ; passe des valeurs de chaîne vides pour supprimer les clés)
  • frequency (hourly, daily, weekly)
Si tu mets à jour frequency, l’API recrée le calendrier du moniteur en interne.

Exemple de requête

import requests
import json

API_KEY = "<YOUR_API_KEY>"
API_URL = "https://api.olostep.com/v1"
MONITOR_ID = "monitor_n8q2x4m1ak"

payload = {
    "frequency": "hourly",
    "metadata": {
        "owner": "ops-team",
        "deprecated_field": ""
    }
}

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

response = requests.post(
    f"{API_URL}/monitors/{MONITOR_ID}",
    headers=headers,
    json=payload
)
print(json.dumps(response.json(), indent=2))

Supprimer un moniteur

Supprime un moniteur avec DELETE /v1/monitors/:monitor_id. La suppression est douce pour la ligne du moniteur (status devient deleted) et supprime également les ressources internes de planification/agent fantôme liées à ce moniteur.
import requests
import json

API_KEY = "<YOUR_API_KEY>"
API_URL = "https://api.olostep.com/v1"
MONITOR_ID = "monitor_n8q2x4m1ak"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

response = requests.delete(f"{API_URL}/monitors/{MONITOR_ID}", headers=headers)
print(json.dumps(response.json(), indent=2))

Erreurs de validation courantes

Les endpoints des moniteurs renvoient des erreurs de validation claires pour les requêtes invalides courantes :
  • Absence de query et url
  • Absence de frequency, ou valeur de fréquence non prise en charge
  • Absence de email et webhook_url
  • Fourniture de email et webhook_url
  • Format d’email invalide
  • URL de webhook invalide (doit être http ou https)
  • Format de monitor_id invalide
Exemple d’erreur :
{
  "error": "'frequency' doit être l'un des suivants : hourly, daily, weekly."
}