メインコンテンツへスキップ
Olostepの/v1/monitorsエンドポイントを通じて、固定スケジュールで実行される永続的なモニターを作成し、ページの変更を検出し、メール、Slack、SMS、または専用のWebhookを通じて通知を受け取ることができます。
  • 自然言語のqueryからモニターを作成
  • source_policyでソースをスコープ
  • 自然言語のスケジュールでチェックを実行(最小10分ごと、UTC)
  • notification.channelsとオプションのwebhook配信を設定
  • サーバー送信イベントでプロビジョニングの進行をストリーム(?stream=1
  • モニターを一覧表示、検査、更新、一時停止、再開、削除
  • スナップショットイベント、計画アーティファクト、実行ログ、ライブエージェントログを読む
デフォルトでは、各モニター実行は監視対象ページの完全なスナップショットをキャプチャします — その時点での現在の状態の完全な画像です。モニターが実行間で新しいものや変更されたもの(デルタ)のみを表面化するようにしたい場合は、queryでその意図を表現してください。

インストール

# pip install requests

import requests

モニターを作成

POST /v1/monitorsでモニターを作成します。APIは入力を検証し、モニターレコードを予約し、シャドウエージェントをプロビジョニングし、ワークフロースペックを生成し、DAG計画をキューに入れ、繰り返しスケジュールを作成します。
  • queryは必須です — 自然言語で監視内容を説明します。
  • frequencyはオプションで、デフォルトは毎時です。毎日午前9時のようなスケジューリングフレーズを使用します(スケジュールはUTCで実行されます; 最小間隔は10分です)。
  • source_policyは、include_urlsexclude_urlsinclude_domainsexclude_domainsをオプションで制約します。
  • notificationは、いつどのようにアラートを行うかを設定します(events + channels)。チャネル配信はモニターパイプラインによって実行時に解決されます — DAGに受信者を渡すことはありません。
  • webhookは、notification.channelsに加えてHTTPコールバック用の別のオブジェクト({ "url": "https://…" })です。
  • output_schemaは、構造化された抽出をオプションで強制します(有効なJSONスキーマ)。
作成の応答はHTTP 202で、status: provisioningです。モニターは計画がtrackedターゲットを解決した後にactiveに移行します。GET /v1/monitors/:monitor_idをポーリングするか、?stream=1(またはAccept: text/event-stream)を渡して、プロビジョニングフェーズとSSE上のスペック推論トークンを追跡します。

リクエスト例

必要なのはqueryfrequencyだけです。通知チャネルとWebhookは後でPOST /v1/monitors/:monitor_idで追加できます。
import requests
import json

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

payload = {
    "query": "Y Combinator Launchesで新しいスタートアップが立ち上がったら通知してください",
    "frequency": "20分ごと",
}

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))

応答

成功した作成(非ストリーミング)は、モニターオブジェクトを持つHTTP 202を返します。trackedは計画が終了するまで空です。GET /v1/monitors/:monitor_idをポーリングして、statusactiveになり、tracked.urlsが埋められるまで待ちます。
{
  "id": "monitor_biglavgvq3",
  "object": "monitor",
  "query": "Y Combinator Launchesで新しいスタートアップが立ち上がったら通知してください",
  "tracked": {
    "type": null,
    "urls": [],
    "web_query": null
  },
  "source_policy": {},
  "schedule": {
    "frequency": "20分ごと",
    "cron": "7/20 * * * ? *",
    "timezone": "UTC",
    "next_run_at": null
  },
  "notification": {
    "events": [],
    "channels": []
  },
  "webhook": null,
  "output_schema": {},
  "status": "provisioning",
  "error_message": null,
  "last_run": null,
  "agent": {
    "id": "agent_forward_deployed_0_fda_nlkxhr5kto"
  },
  "metadata": {},
  "created": 1780063068,
  "updated": 1780063071
}

構造化モニター出力

特定のJSON構造に従って抽出結果を取得したい場合は、output_schemaを設定します。スキーマは有効なJSONスキーマでなければなりません。

プロビジョニングストリーム

モニターが作成される間にSSEイベントを受け取るために?stream=1を追加するか、Accept: text/event-streamを送信します:
イベント説明
phaseプロビジョニングステップ(runningdone、またはfailed
reasoning_tokenインクリメンタルなスペックデザインテキスト
reasoning_reset失敗したLLM試行後にバッファリングされた推論を切り捨てます
complete最終モニターオブジェクト(202応答と同じ形状)
error終端の失敗

通知とWebhook

アラートはモニターレコードに設定され、実行時に解決されます — モニタリングqueryにチャネルターゲットを埋め込まないでください。

notification

フィールド説明
eventsどの実行結果が配信をトリガーするかを指定します。下記の通知イベントを参照してください。channelsを設定してeventsを省略した場合、デフォルトはchangedfirst_snapshotの両方です。
channels{ "type", "target", "events"? }オブジェクトのリスト

通知イベント

いつ通知を受け取りたいかをeventsで指定します。許可される値:
イベント意味
changed前のスナップショットと比較して変更が検出されたときに通知します(例:新しいコンテンツ、更新された価格、またはパイプラインが変更として分類する差分)。
first_snapshotモニターが最初のスナップショットを取得したときに通知します — 後の比較の前に現在のコンテンツを保存する初期ベースライン実行。
1つまたは両方を含めることができます。例えば、["changed"]はベースライン後の更新のみをアラートします;["first_snapshot"]は差分を待たずにセットアップを確認します;["changed", "first_snapshot"]は両方をカバーします。 チャネルオブジェクトのeventsは同じ値を使用し、そのチャネルのみに対してトップレベルリストをオーバーライドします。 サポートされているチャネルタイプ:
typetargetフォーマット
email有効なメールアドレス
slackSlackのインカミングWebhook URL
smsE.164電話番号(例:+14155552671

webhook

notification.channelsとは別に、webhook.urlはモニターがコールバックURLを発火したときにHTTP POSTペイロードを受け取ります。同じモニターでWebhookとチャネル通知の両方を使用できます。

メールのみ:
{
  "query": "https://example.com/termsの変更を監視",
  "frequency": "毎日午前10時",
  "notification": {
    "events": ["changed"],
    "channels": [
      { "type": "email", "target": "legal@example.com" }
    ]
  }
}
Webhookコールバック:
{
  "query": "https://example.com/termsの変更を監視",
  "frequency": "毎日午前10時",
  "webhook": {
    "url": "https://hooks.example.com/olostep-monitor"
  }
}
SMS:
{
  "query": "https://status.example.comがインシデントを示したときに通知",
  "frequency": "毎時",
  "notification": {
    "channels": [
      { "type": "sms", "target": "+14155552671" }
    ]
  }
}

ソースポリシー

source_policyを使用して、プランナーが使用できるURLとドメインを制約します。
{
  "source_policy": {
    "include_urls": ["https://example.com/pricing"],
    "exclude_domains": ["ads.example.com"]
  }
}

頻度

自然言語でfrequencyを設定します。例えば:
  • 毎時(省略時のデフォルト)
  • 毎日午前9時
  • 毎週日午後2時30分
ルール:
  • スケジューリング言語として読み取れる必要があります(任意のモニター質問ではありません)。
  • 最小間隔:10分ごと
  • スケジュールはUTCで保存および実行されます(schedule.timezoneUTCです)。
  • 最大長:50文字。
APIはfrequencyテキストからcron式を導出し、schedule.cronで公開します。モニターがactiveの場合、schedule.next_run_atは次の実行をISO 8601で示します。

モニターを一覧表示

GET /v1/monitorsでチームのすべてのモニターを取得します。 デフォルトでは、削除されたモニターはフィルタリングされます。?include_deleted=trueを使用してそれらを含めます。
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 monitors: {result['count']}")
print(json.dumps(result, indent=2))

応答の形状

{
  "monitors": [
    {
      "id": "monitor_0wj35czpn7",
      "object": "monitor",
      "query": "AirOpsブログで新しいブログ投稿を監視",
      "tracked": {
        "type": "urls",
        "urls": ["https://www.airops.com/blog"],
        "web_query": null
      },
      "source_policy": {},
      "schedule": {
        "frequency": "毎時",
        "cron": "2 * * * ? *",
        "timezone": "UTC",
        "next_run_at": null
      },
      "notification": {
        "channels": [],
        "events": []
      },
      "webhook": null,
      "output_schema": {},
      "status": "paused",
      "error_message": null,
      "last_run": null,
      "agent": { "id": "agent_forward_deployed_0_fda_x4822l9h3i" },
      "metadata": {},
      "created": 1780062756,
      "updated": 1780063025
    },
    {
      "id": "monitor_biglavgvq3",
      "object": "monitor",
      "query": "Y Combinator Launchesで新しいスタートアップが立ち上がったら通知してください",
      "tracked": {
        "type": "urls",
        "urls": ["https://www.ycombinator.com/launches/"],
        "web_query": null
      },
      "source_policy": {},
      "schedule": {
        "frequency": "20分ごと",
        "cron": "7/20 * * * ? *",
        "timezone": "UTC",
        "next_run_at": "2026-05-29T14:27:00.000Z"
      },
      "notification": {
        "channels": [],
        "events": []
      },
      "webhook": null,
      "output_schema": {},
      "status": "active",
      "error_message": null,
      "last_run": null,
      "agent": { "id": "agent_forward_deployed_0_fda_nlkxhr5kto" },
      "metadata": {},
      "created": 1780063068,
      "updated": 1780063141
    }
  ],
  "count": 5
}

モニターを取得

GET /v1/monitors/:monitor_idで単一のモニターを取得します。 応答にはlast_run(最新のスナップショットの概要)とtotal_count(スナップショットの数)が含まれますが、include_total_count=falseを渡さない限り。include-diagram=trueを追加して、モニターDAGのmermaid_diagramを含めます。
import requests
import json

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

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

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

応答の形状

{
  "id": "monitor_biglavgvq3",
  "object": "monitor",
  "query": "Y Combinator Launchesで新しいスタートアップが立ち上がったら通知してください",
  "tracked": {
    "type": "urls",
    "urls": ["https://www.ycombinator.com/launches/"],
    "web_query": null
  },
  "source_policy": {},
  "schedule": {
    "frequency": "20分ごと",
    "cron": "7/20 * * * ? *",
    "timezone": "UTC",
    "next_run_at": "2026-05-29T14:27:00.000Z"
  },
  "notification": {
    "channels": [],
    "events": []
  },
  "webhook": null,
  "output_schema": {},
  "status": "active",
  "error_message": null,
  "last_run": {
    "id": "run_iwsoafcpyx",
    "status": "completed",
    "change_detected": false,
    "ran_at": "2026-05-29T14:03:15.963Z"
  },
  "agent": {
    "id": "agent_forward_deployed_0_fda_nlkxhr5kto"
  },
  "metadata": {},
  "created": 1780063068,
  "updated": 1780063141,
  "total_count": 1
}

モニターイベントを一覧表示

GET /v1/monitors/:monitor_id/eventsを使用して、モニターのスナップショットイベントを一覧表示します。 ページネーション:
  • limit(デフォルト25、最大100
  • cursornext_cursorからの不透明なトークン)
  • count_only=true{ "total_count": N }のみを返します
イベントは新しいものから順に返されます。各アイテムには短命の署名付きsnapshot_urlが含まれます。
import requests
import json

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

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))

応答の形状

{
  "data": [
    {
      "id": "run_iwsoafcpyx",
      "run_id": "run_iwsoafcpyx",
      "created": 1780063395,
      "changed": false,
      "summary": "このモニターの最初のスナップショットが撮影されました。現在のコンテンツをベースラインとして保存しました。",
      "snapshot_url": "https://olostep-monitor-snapshots.s3.amazonaws.com/monitor_biglavgvq3/run_iwsoafcpyx_snapshot.json?X-Amz-Expires=600&..."
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "total_count": 1
}

モニタープランニングを取得

GET /v1/monitors/:monitor_id/planningを使用して、プロビジョニング後のFDAワークフロースペックとプランナーDAGを検査します。
{
  "spec": {
    "saved_at": "2026-05-29T12:00:00.000000+00:00",
    "status": "complete",
    "goal": "example.comの価格を追跡",
    "reasoning": "...",
    "constraints": "...",
    "assumptions": "...",
    "input": { "query": "...", "urls": ["https://www.ycombinator.com/launches/"] },
    "output": { "type": "free_text" },
    "chat_history": []
  },
  "dag": {
    "user_query": "...",
    "graph": { "nodes": [], "edges": [] },
    "has_unresolved": false,
    "unresolved": [],
    "validation": { "is_valid": true, "attempts": 1, "history": [] }
  }
}

モニター実行を取得

GET /v1/monitors/:monitor_id/runs/:run_idを使用して、1回の実行(run_idrun_で始まる必要があります)のスナップショットメタデータと解析されたエージェントログイベントを取得します。
{
  "monitor_id": "monitor_biglavgvq3",
  "run_id": "run_v7k2p9m3",
  "snapshot": { "changed": true, "summary": "..." },
  "log_group": "/aws/ecs/olostep-agents/...",
  "events": [
    {
      "id": "...",
      "ts": 1777960800123,
      "message": "Run run_v7k2p9m3 completed. Files uploaded: 2",
      "event": { "type": "run_complete", "run_id": "run_v7k2p9m3", "files_uploaded": 2 }
    }
  ]
}

エージェントログをストリーム

GET /v1/monitors/:monitor_id/agent-logs?stream=1(またはAccept: text/event-stream)を使用して、モニターのエージェントのCloudWatchログをこのmonitor_idにフィルタリングして追跡します。 オプションのクエリパラメータsinceはミリ秒のタイムスタンプです(デフォルト:30分前)。 SSEイベントタイプ:readylogheartbeaterror

モニターを更新

POST /v1/monitors/:monitor_idでモニターを更新します。 サポートされているフィールド(変更したいものだけを含めてください):
  • metadata — 既存のキーとマージされます; 空の文字列値はキーを削除します
  • frequency — 内部スケジュールを再作成し、statusactiveに戻します
  • notification — 通知オブジェクト全体を置き換えます
  • webhook — 削除するにはnullを渡します
statusprovisioningの間は409を返します。 notification.channelseventsなしで追加すると、APIはデフォルトでevents["changed", "first_snapshot"]に設定します。

メール通知を追加

import requests
import json

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

payload = {
    "notification": {
        "channels": [
            {"type": "email", "target": "you@example.com"}
        ]
    }
}

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))
{
  "id": "monitor_biglavgvq3",
  "object": "monitor",
  "query": "Y Combinator Launchesで新しいスタートアップが立ち上がったら通知してください",
  "tracked": {
    "type": "urls",
    "urls": ["https://www.ycombinator.com/launches/"],
    "web_query": null
  },
  "source_policy": {},
  "schedule": {
    "frequency": "20分ごと",
    "cron": "7/20 * * * ? *",
    "timezone": "UTC",
    "next_run_at": "2026-05-29T14:27:00.000Z"
  },
  "notification": {
    "events": ["changed", "first_snapshot"],
    "channels": [
      { "type": "email", "target": "you@example.com" }
    ]
  },
  "webhook": null,
  "output_schema": {},
  "status": "active",
  "error_message": null,
  "last_run": null,
  "agent": { "id": "agent_forward_deployed_0_fda_nlkxhr5kto" },
  "metadata": {},
  "created": 1780063068,
  "updated": 1780064634
}

Webhookを追加

import requests
import json

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

payload = {
    "webhook": { "url": "https://webhook.site/your-unique-id" }
}

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))
{
  "id": "monitor_biglavgvq3",
  "object": "monitor",
  "query": "Y Combinator Launchesで新しいスタートアップが立ち上がったら通知してください",
  "tracked": {
    "type": "urls",
    "urls": ["https://www.ycombinator.com/launches/"],
    "web_query": null
  },
  "source_policy": {},
  "schedule": {
    "frequency": "20分ごと",
    "cron": "7/20 * * * ? *",
    "timezone": "UTC",
    "next_run_at": "2026-05-29T14:47:00.000Z"
  },
  "notification": {
    "channels": [
      { "type": "email", "target": "you@example.com" }
    ],
    "events": ["changed", "first_snapshot"]
  },
  "webhook": {
    "url": "https://webhook.site/your-unique-id"
  },
  "output_schema": {},
  "status": "active",
  "error_message": null,
  "last_run": null,
  "agent": { "id": "agent_forward_deployed_0_fda_nlkxhr5kto" },
  "metadata": {},
  "created": 1780063068,
  "updated": 1780065538
}

モニターを一時停止

POST /v1/monitors/:monitor_id/pauseでモニターを一時停止します。 一時停止すると、基礎となるスケジュールが無効になり、statuspausedに設定されます。status: activeのモニターのみが一時停止できます。リクエストボディは空です。
import requests
import json

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

response = requests.post(
    f"{API_URL}/monitors/{MONITOR_ID}/pause",
    headers={ "Authorization": f"Bearer {API_KEY}" },
)
print(response.status_code)
print(json.dumps(response.json(), indent=2))
成功すると、200とモニターが返され、status: pausedになります。schedule.next_run_atは一時停止中はnullです。

モニターを再開

POST /v1/monitors/:monitor_id/resumeで一時停止されたモニターを再開します。 再開すると、スケジュールが再び有効になり、statusactiveに戻ります。一時停止されたモニターのみが再開できます。
import requests
import json

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

response = requests.post(
    f"{API_URL}/monitors/{MONITOR_ID}/resume",
    headers={ "Authorization": f"Bearer {API_KEY}" },
)
print(response.status_code)
print(json.dumps(response.json(), indent=2))

モニターを削除

DELETE /v1/monitors/:monitor_idでモニターを削除します。 削除はモニターローをソフト削除し(status: deleted)、そのスケジュールとシャドウエージェントリソースを削除します。
import requests
import json

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

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

モニターステータス

ステータス意味
provisioningエージェント、スペック、プランナー、スケジュールが設定中
activeスケジュールが有効; schedule.frequencyで実行が行われる
paused/pauseでスケジュールが無効
failedプロビジョニングまたはスケジュール更新が失敗(error_messageが設定されている)
deletedDELETEでソフト削除

使用例

以下は一般的なモニターパターンです。各例は作成時にqueryfrequencyのみが必要です; 初回実行または変更時にアラートを受け取りたい場合は、後でnotificationwebhookを追加します。

Y Combinatorの新しいローンチ

Y Combinator Launchesで新しく公開されたスタートアップを監視します。計画後、tracked.typeurlsで、tracked.urlsはローンチページを指します。
import requests

API_URL = "https://api.olostep.com/v1"
headers = {
    "Authorization": "Bearer <YOUR_API_KEY>",
    "Content-Type": "application/json",
}

requests.post(
    f"{API_URL}/monitors",
    headers=headers,
    json={
        "query": "Y Combinator Launchesで新しいスタートアップが立ち上がったら通知してください",
        "frequency": "20分ごと",
    },
)
モニターがactiveになった後にメールとWebhook配信を追加:
curl -s -X POST "https://api.olostep.com/v1/monitors/monitor_biglavgvq3" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "notification": {
      "channels": [{ "type": "email", "target": "you@example.com" }]
    },
    "webhook": { "url": "https://webhook.site/your-unique-id" }
  }'
channelsが設定され、eventsが省略された場合、APIはデフォルトで["changed", "first_snapshot"]に設定されるため、ベースライン実行時と変更が検出されたときに通知されます。

競合他社のブログ投稿(AirOps、Profound)

競合他社のブログインデックスを新しい投稿のために監視します。プランナーはtracked.urlsをブログURL(例:https://www.airops.com/blogまたはhttps://www.tryprofound.com/blog)に解決します。
curl -sS -X POST "https://api.olostep.com/v1/monitors" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "AirOpsブログで新しいブログ投稿を監視",
    "frequency": "毎時"
  }'
作成後、このファミリーのモニターは次のようになります:
{
  "id": "monitor_588ck513zd",
  "object": "monitor",
  "query": "Profoundブログで新しいブログ投稿を監視",
  "tracked": {
    "type": "urls",
    "urls": ["https://www.tryprofound.com/blog"],
    "web_query": null
  },
  "schedule": {
    "frequency": "20分ごと",
    "cron": "15/20 * * * ? *",
    "timezone": "UTC",
    "next_run_at": "2026-05-29T15:15:00.000Z"
  },
  "status": "active"
}
notificationevents: ["changed"]を使用すると、新しい投稿が表示されたときだけアラートを受け取り、最初のベースラインスナップショットではアラートを受け取りません。

株価の閾値(テスラ)

ページの差分ではなく、条件が数値である場合に構造化データソースを監視します。プランナーはtracked.typedata_apiに設定し、tracked.urlsを空にします。
curl -sS -X POST "https://api.olostep.com/v1/monitors" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "テスラの株価が436ドルを下回ったら通知してください",
    "frequency": "12分ごと"
  }'
{
  "id": "monitor_7609p3191t",
  "object": "monitor",
  "query": "テスラの株価が436ドルを下回ったら通知してください",
  "tracked": {
    "type": "data_api",
    "urls": [],
    "web_query": null
  },
  "schedule": {
    "frequency": "12分ごと",
    "cron": "2/12 * * * ? *",
    "timezone": "UTC",
    "next_run_at": "2026-05-29T15:02:00.000Z"
  },
  "status": "active"
}

OpenAI APIの変更履歴

OpenAIのAPI変更履歴に新しい機能、モデルリリース、または廃止がリストされると通知を受け取ります。queryで変更履歴URLを言及するか、source_policy.include_urlsで固定します。
curl -sS -X POST "https://api.olostep.com/v1/monitors" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "OpenAI APIの変更履歴に新しい更新や機能が追加されたら通知してください https://developers.openai.com/api/docs/changelog",
    "frequency": "毎時",
    "notification": {
      "events": ["changed"],
      "channels": [{ "type": "email", "target": "you@example.com" }]
    }
  }'
events["changed"]に設定して、変更履歴の内容が変わったときに通知を受け取り、最初のスナップショットが保存されたときだけではありません。

複数のモニターを管理

チームのすべてのモニターを一覧表示して、ステータス、スケジュール、および解決されたターゲットを一か所で確認します:
curl -s -X GET "https://api.olostep.com/v1/monitors" \
  -H "Authorization: Bearer $OLOSTEP_API_KEY"
上記の例を実行しているチームは、異なるケイデンスのブログウォッチ、data_api価格ウォッチ、メールとWebhookが設定されたYCローンチモニターなど、いくつかのモニターを並べて見ることができ、応答には"count": 4(またはそれ以上)が含まれるかもしれません。

一般的な検証エラー

モニターエンドポイントは、一般的な無効なリクエストに対して明確な検証エラーを返します:
  • queryが欠落しているか空
  • スケジューリング言語ではないfrequency、10分未満の頻度で解決する、または50文字を超える
  • 無効なsource_policyエントリ(URL配列には有効なhttp/https文字列が含まれている必要があります)
  • 無効なnotification形状、未知のevents、または無効なチャネルtype / target
  • 無効なwebhook.urlhttpまたはhttpsである必要があります)
  • 無効なoutput_schema(有効なJSONスキーマである必要があります)
  • 無効なmonitor_idまたはrun_id形式
  • statusprovisioningの間に更新(409
  • ステータスがactive / pausedでないときに一時停止/再開
エラーの例:
{
  "error": "Could not interpret 'frequency': \"check every second\". Use scheduling language such as \"every hour\" or \"every day at 9am\"."
}