Skip to main content
For AI agents: a documentation index is available at https://docs.parallel.ai/llms.txt. The full text of all docs is at https://docs.parallel.ai/llms-full.txt. You may also fetch any page as Markdown by appending .md to its URL or sending Accept: text/markdown.For Search and Extract, use /v1/search and /v1/extract for all new integrations and agent tool calls. Use /v1beta/search and /v1beta/extract only when maintaining an existing integration that already uses them. Do not substitute /v1 for the documented FindAll or Ingest endpoint paths.
V1 is the same Monitor product on a new HTTP contract. Alpha-created monitors keep their IDs, schedule, webhook URL, and execution history — retrieve them at GET /v1/monitors/{id} as type: "event_stream". Replacing v1alpha with v1 in a URL is not enough: request shapes, response fields, pagination, and event JSON all changed.
All ongoing development targets V1. The Alpha endpoints remain reachable but receive no new features:
  • Capabilities introduced after Alpha — snapshot monitors, structured output with basis, advanced_settings.location, and processor selection — are V1-only.
  • The Python and TypeScript SDKs expose typed bindings (client.monitor.*) only for V1. Alpha is reachable solely via the low-level HTTP client (client.post("/v1alpha/monitors", ...)).
  • The Parallel CLI targets V1 endpoints exclusively.

What stays the same

  • Monitor IDs, event group IDs, frequency, webhook URL, and metadata.
  • The execution backend. Detection quality does not change because a client switches paths.
  • Webhook event types (monitor.event.detected, monitor.execution.completed, monitor.execution.failed) and the envelope (type, timestamp, data.monitor_id, data.event.event_group_id, data.metadata).
  • You do not need to recreate monitors or re-register webhooks.
Processor (lite / base), geo location, and snapshot monitors apply to new V1 creates. Alpha create has no processor field.

Highlights

  • Not a drop-in path swap — same monitors, breaking client contract. Update parsers, pagination, and field paths.
  • Required type discriminant"event_stream" (Alpha behavior) or "snapshot". See Snapshot Quickstart.
  • Nested settings / advanced_settingsquery, output_schema, include_backfill move under settings; source_policy and location move under settings.advanced_settings.
  • Unified events endpointGET /v1/monitors/{id}/events replaces both Alpha /events and /event_groups/{id}, with cursor pagination and an optional event_group_id filter.
  • Restructured event payloadevent_id, event_type, and typed output with basis replace the string output, result, and source_urls.
  • simulate_event removed — closest analogue is POST /{id}/trigger, which enqueues a real run rather than a synthetic webhook.
  • V1-only SDKs and CLI — typed client.monitor.* bindings and the Parallel CLI.

Pick your migration path

Most Alpha traffic is fetch-after-webhook or lookback polling, not create. Effort depends on which endpoints you call: Webhook-then-fetch clients keep the webhook, swap the GET URL, and remap result / source_urlsoutput / basis. Lookback pollers also have to page instead of dumping a 10-day window. simulate_event is a product gap, not a rename.

Endpoints

Events

V1 unifies Alpha /events and /event_groups/{id} on GET /v1/monitors/{id}/events. Changing the URL is not enough — each event is a different JSON object. A client that only checks events.length may not notice; anything that renders text or citations will break until field paths change.

List events (lookback pollers)

This is the largest break for clients that poll a window of history. There is no V1 equivalent of “give me the last 10 days.” Page with next_cursor until you have enough history.
Pass include_completions=true if you relied on Alpha’s completion placeholders to audit runs that detected nothing.

Fetch by event group (webhook-then-fetch)

Webhooks still fire with event_group_id. Resolve it on the unified events endpoint:
Pagination params are ignored when event_group_id is set. The response is only detected events for that run — no completion placeholder, and no Alpha simulate_event dummy payload.

Event JSON rewrite

Same run, same event_group_id. The object inside events[] changed.
Clients that filter or display event_date as “when the news happened” will see different values after migrating. Completion and error rows in a list-events response also renamed: See Events and Research Basis for the full V1 schemas.

List monitors

GET /v1alpha/monitors/listGET /v1/monitors. Still cursor-paginated, newest first. Alpha also had GET /v1alpha/monitors (no /list), which returned a bare JSON array of every status. That shape does not exist on V1 — always read monitors from the paginated object. Status spelling is cancelled (two L’s) on V1, vs Alpha canceled.

Simulate event

POST /v1alpha/monitors/{id}/simulate_event is gone. It dispatched a synthetic webhook (and a dummy event group you could GET) without running the monitor. POST /v1/monitors/{id}/trigger enqueues a real off-schedule execution. A webhook fires only if that run detects a change, completes with no detections, or fails — not a canned payload. Cancelled monitors cannot be triggered. If your integration tests depended on dummy event_group_id payloads, stub the webhook yourself or trigger a real run against a test monitor. See the Alpha-only Simulate Event page for the old contract.

Create, update, and retrieve

Existing monitors do not need to be recreated. Create mappings are below; updates have a distinct shape and are not the nested create body with a different URL.

Create request

Update request

Alpha POST /{id} accepted top-level query, source_policy, frequency, webhook, and metadata. V1 POST /{id}/update only changes fields you include; omit a field to leave it unchanged. Empty updates fail validation. null clears only webhook, metadata, and settings.advanced_settings. Every other field rejects null — omit it instead. Updating a query without type returns a validation error:
Frequency, webhook, or metadata updates do not need type:

Response

SDK and CLI surface

V1 exposes typed bindings in both the Python and TypeScript SDKs and is the only version supported by the Parallel CLI. Alpha has no typed or CLI surface — it is reachable only via the low-level HTTP client.

Migration example: create

Before (Alpha)

After (V1)

Migration checklist

Required changes

  • Keep existing monitor IDs; do not recreate monitors solely to move to V1.
  • Update the base path from /v1alpha/monitors to /v1/monitors.
  • Add the type discriminant ("event_stream" or "snapshot") to every CreateMonitorRequest.
  • Move query, output_schema, and include_backfill from top-level into settings.
  • Move source_policy from top-level into settings.advanced_settings.source_policy.
  • Migrate Update calls from POST /{id} to POST /{id}/update.
  • When an update includes settings (query or source policy), also send type: "event_stream". Omit type when you are only changing frequency, webhook, or metadata.
  • Migrate Cancel calls from DELETE /{id} to POST /{id}/cancel.
  • Replace GET /{id}/event_groups/{event_group_id} with GET /{id}/events?event_group_id=....
  • Replace lookback_period with cursor pagination (cursor, limit). Do not assume a single response covers 10 days.
  • Treat completions as opt-in (include_completions=true); Alpha always returned them.
  • Remap list responses from data to monitors. Pass status if you need cancelled monitors.
  • Update the status enum check from "canceled" to "cancelled" (double l).
  • Replace reads of result.content and source_urls with output.content and output.basis[].citations[].url.
  • Drop the deprecated top-level string output field on event records.
  • Stop treating event_date as the extracted real-world date; V1 uses the run date.
  • Remove simulate_event calls. POST /{id}/trigger is a real run, not a fake webhook.

Optional enhancements

  • Set processor: "base" for harder queries that need higher recall and breadth.
  • Set settings.advanced_settings.location to scope retrieval to a single country.
  • Replace low-level client.post(...) calls with client.monitor.* SDK bindings.
  • Use event_id for idempotent client-side dedup across pagination and webhook retries.
  • Consume output.basis for per-field citations, reasoning, and confidence.
  • Issue POST /{id}/trigger for off-schedule one-off executions.
  • Pass include_completions=true to enumerate executions that produced no events (useful for audit traces).
  • Adopt type=snapshot for field-level diffing of structured Task Run outputs (see Snapshot Quickstart).

Additional resources

Questions? Contact support@parallel.ai.