Omnist API
API Reference

Monitors

Save a search, run it on a schedule, and read the matching content.

Monitors run the same kind of search you can send to the content search endpoint, but the saved configuration is intentionally narrower. A monitor stores the standing query and filters. Omnist supplies the date window and result limit whenever the monitor runs.

Scheduled monitor runs use UTC content dates. Each scheduled run queues four dated jobs: the current UTC day and the trailing three UTC days. Each dated job uses an internal limit of 1000 results, writes into the monitor result store, and can be inspected through the monitor run APIs.

Create a Monitor

POST
/v1/monitors

Create a monitor with a saved search and an hourly or daily schedule. Monitors cannot be reconfigured after creation. To stop a monitor permanently, delete it.

await fetch('https://api.omnist.ai/v1/monitors', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer omni_live_...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'AI infrastructure',
    search: {
      query: 'AI infrastructure spending',
      media_types: ['news', 'wire'],
      include_domains: ['reuters.com', 'ft.com']
    },
    schedule: {
      frequency: 'daily',
      timezone: 'America/New_York',
      run_time: '07:30'
    }
  })
});
import requests

requests.post(
    'https://api.omnist.ai/v1/monitors',
    headers={
        'Authorization': 'Bearer omni_live_...',
        'Content-Type': 'application/json',
    },
    json={
        'name': 'AI infrastructure',
        'search': {
            'query': 'AI infrastructure spending',
            'media_types': ['news', 'wire'],
            'include_domains': ['reuters.com', 'ft.com'],
        },
        'schedule': {
            'frequency': 'daily',
            'timezone': 'America/New_York',
            'run_time': '07:30',
        },
    },
)

Request Body

FieldTypeNotes
namestringRequired. Display name for the monitor.
descriptionstringOptional short description.
searchobjectRequired. See Monitor search.
scheduleobjectOptional. Defaults to hourly in UTC at the creation minute.
statusstringOptional. active or disabled. Defaults to active.
FieldTypeNotes
querystringRequired. Natural-language query.
media_typesstring[]Optional. news, wire, and/or podcast.
include_domainsstring[]Optional. Up to 10 domains. Cannot be combined with exclude_domains.
exclude_domainsstring[]Optional. Up to 10 domains. Cannot be combined with include_domains.
entity_idsstring[]Optional. Restrict results to content linked to these entity IDs.

Monitors do not accept start_date, end_date, or limit. Date windows are computed at run time and each run uses an internal limit of 1000.

Schedule

FieldTypeNotes
frequencystringhourly or daily. Defaults to hourly.
timezonestringIANA timezone for schedule display and wall-clock timing. Defaults to UTC.
minuteintegerHourly schedules only. Minute of the hour, 0-59. Defaults to the creation minute.
run_timestringDaily schedules only. HH:MM in the configured timezone. Defaults to the creation time.

Response

{
  "id": "mon_01h...",
  "team_id": "team_01h...",
  "name": "AI infrastructure",
  "description": null,
  "status": "active",
  "search": {
    "query": "AI infrastructure spending",
    "media_types": ["news", "wire"],
    "include_domains": ["reuters.com", "ft.com"]
  },
  "schedule": {
    "frequency": "daily",
    "timezone": "America/New_York",
    "run_time": "07:30"
  },
  "next_run_at": "2026-05-13T11:30:00Z",
  "created_at": "2026-05-12T18:08:23Z",
  "updated_at": "2026-05-12T18:08:23Z"
}

List Monitors

GET
/v1/monitors

Returns active and disabled monitors for the workspace.

Query parameterTypeNotes
limitintegerOptional. Default 50, maximum 100.
offsetintegerOptional. Default 0.
statusstringOptional. Filter by active or disabled.

Get a Monitor

GET
/v1/monitors/{monitor_id}

Returns the saved search, schedule, status, and next scheduled run time for a monitor.

Update a Monitor

PATCH
/v1/monitors/{monitor_id}

Updates the monitor name or schedule. The saved search cannot be changed after creation.

FieldTypeNotes
namestringOptional. New display name.
scheduleobjectOptional. Same schedule shape as monitor creation.
{
  "name": "AI infrastructure",
  "schedule": {
    "frequency": "daily",
    "timezone": "America/New_York",
    "run_time": "07:30"
  }
}

Delete a Monitor

DELETE
/v1/monitors/{monitor_id}

Permanently disables the monitor. The monitor will not be scheduled again.

Run a Monitor Now

POST
/v1/monitors/{monitor_id}/run

Queues the same work as a scheduled run: UTC today and the trailing three UTC days. The response includes a parent task ID. Use the backfill status endpoint to inspect the child dated jobs.

{
  "task_id": "2e4efb9a-5e88-4658-9c5f-8e3ec3d56a0e",
  "status": "queued",
  "queued": [
    {
      "published_date": "2026-05-12",
      "run_id": "7d7c0c5f-7f40-4f7a-a93d-09499e4d8e29",
      "task_id": "7d7c0c5f-7f40-4f7a-a93d-09499e4d8e29",
      "already_complete": false,
      "latest_indexed_content": null
    }
  ],
  "summary": {
    "requested": 4,
    "queued": 4,
    "already_complete": 0,
    "already_running": 0,
    "failed": 0
  }
}

Backfill Monitor Dates

POST
/v1/monitors/{monitor_id}/backfills

Queues dated monitor runs for specific UTC published dates. You can submit up to 100 dates in one request.

By default, Omnist skips a date when that date already has a completed backfill whose run date was more than 72 hours after the published date. This keeps ordinary backfills from spending work on days that are already stable.

await fetch('https://api.omnist.ai/v1/monitors/mon_01h.../backfills', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer omni_live_...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    dates: ['2026-05-09', '2026-05-10', '2026-05-11'],
    skip_complete: true
  })
});
import requests

requests.post(
    'https://api.omnist.ai/v1/monitors/mon_01h.../backfills',
    headers={
        'Authorization': 'Bearer omni_live_...',
        'Content-Type': 'application/json',
    },
    json={
        'dates': ['2026-05-09', '2026-05-10', '2026-05-11'],
        'skip_complete': True,
    },
)

Request Body

FieldTypeNotes
datesstring[]Required. UTC published dates in YYYY-MM-DD format. Maximum 100.
skip_completebooleanOptional. Defaults to true.

Response

{
  "task_id": "be8c49a7-89ab-46b4-8a89-9f44442ceca9",
  "status": "queued",
  "queued": [
    {
      "published_date": "2026-05-10",
      "run_id": "75ca688d-8879-4a92-909d-fbd95720dc43",
      "task_id": "75ca688d-8879-4a92-909d-fbd95720dc43",
      "already_complete": false,
      "latest_indexed_content": "2026-05-11T03:12:22Z"
    }
  ],
  "skipped": [
    {
      "published_date": "2026-05-09",
      "already_complete": true,
      "latest_indexed_content": "2026-05-10T05:41:09Z"
    }
  ],
  "summary": {
    "requested": 3,
    "queued": 2,
    "already_complete": 1,
    "already_running": 0,
    "failed": 0
  }
}

latest_indexed_content is the high-water mark used for that date. It refers to the most recent enrichment completion timestamp already recorded in the monitor results for that published date.

List Backfill Status

GET
/v1/monitors/{monitor_id}/backfills

Returns the per-date backfill ledger for a monitor.

Query parameterTypeNotes
start_datestringOptional. Inclusive UTC published date in YYYY-MM-DD format.
end_datestringOptional. Inclusive UTC published date in YYYY-MM-DD format.
statusstringOptional. One of running, succeeded, failed, or skipped.
limitintegerOptional. Default 50, maximum 200.
offsetintegerOptional. Default 0.
{
  "monitor_id": "mon_01h...",
  "backfills": [
    {
      "date": "2026-05-10",
      "status": "succeeded",
      "run_id": "75ca688d-8879-4a92-909d-fbd95720dc43",
      "backfill_run_at": "2026-05-11T04:00:12Z",
      "backfill_run_date": "2026-05-11",
      "latest_indexed_content_at": "2026-05-11T03:12:22Z",
      "result_count": 18,
      "error_message": null
    }
  ],
  "summary": {
    "total": 3,
    "running": 0,
    "succeeded": 2,
    "failed": 0,
    "skipped": 1
  },
  "limit": 50,
  "offset": 0,
  "next_offset": null,
  "has_more": false
}

Get Backfill Task Status

GET
/v1/monitors/{monitor_id}/backfills/{task_id}

Returns the parent task and its child dated jobs.

{
  "task_id": "be8c49a7-89ab-46b4-8a89-9f44442ceca9",
  "status": "running",
  "summary": {
    "requested": 3,
    "queued": 0,
    "running": 1,
    "succeeded": 1,
    "failed": 0,
    "skipped": 1
  },
  "tasks": [
    {
      "published_date": "2026-05-10",
      "run_id": "75ca688d-8879-4a92-909d-fbd95720dc43",
      "task_id": "75ca688d-8879-4a92-909d-fbd95720dc43",
      "status": "running",
      "latest_indexed_content": "2026-05-11T03:12:22Z"
    }
  ]
}

List Monitor Runs

GET
/v1/monitors/{monitor_id}/runs

Returns scheduled, manual, parent, and dated backfill runs.

Query parameterTypeNotes
limitintegerOptional. Default 50, maximum 100.
offsetintegerOptional. Default 0.

List Monitor Results

GET
/v1/monitors/{monitor_id}/results

Returns content items captured by the monitor.

Query parameterTypeNotes
limitintegerOptional. Default 50, maximum 100.
offsetintegerOptional. Default 0.
start_datestringOptional published-date lower bound.
end_datestringOptional published-date upper bound.

Search Monitor Results

POST
/v1/monitors/{monitor_id}/search

Searches within the monitor result store. It accepts the same request shape as content search, including the same date behavior and maximum limit of 100.

On this page