---
title: "List available probe locations"
method: GET
path: "/api/{org_id}/synthetics/locations"
tags: ["Synthetics"]
---

# List available probe locations

`GET /api/{org_id}/synthetics/locations`

## Request

- Base URL: `https://api.openobserve.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openobserve.ai/api/{org_id}/synthetics/locations`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/:org_id/synthetics/locations/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `org_id` string, required

## Response `200`

Success

- SyntheticsCapabilitiesV2: Capabilities response sourced from the location registry.
  - `browsers` string[], required
  - `devices` SyntheticsDevice[], required
    - `height` integer, required
    - `id` string, required
    - `label` string, required
    - `width` integer, required
  - `locations` LocationEntry[], required
    - `agent_names` string[], required: Names of the live agents (most recently seen first) — shown as subtext in the check form's private-location rows.
    - `agents_total` integer, required: Total registered agents (live + stale).
    - `checks_count` integer, required: Synthetics in the caller's org that run from this location.
    - `checks_per_min` number, double, required: Σ 60/interval_secs over the enabled synthetics above.
    - `enabled` boolean, required
    - `id` string, required
    - `kind` string, required
    - `label` string, required: Display label — user/agent-chosen (private) or o2's friendly name (public).
    - `last_seen_at` integer, nullable: Most recent agent `last_seen_at` (epoch µs).
    - `live_agents` integer, required: Number of live agents serving this location.
    - `live_status_unknown` boolean: True when `status` is this region's best guess rather than an observation — see [`resolve_live_status`]. Additive on purpose. Widening `status` itself with a fourth value would break every client that switches on it: the locations table renders `t("synthetics.privateLocations.status." + status)`, so an unrecognised value shows the raw key path, and the check form's tier mapping treats "not online and not pending" as offline — the exact false alarm this exists to remove. An unknown field is ignored instead. Skipped when false, so a deployment without super cluster serves a byte-identical payload to the one it served before this field existed.
    - `pool` string, required
    - `provider` string, required
    - `region` string, required
    - `status` string, required: "online" (any live agent; public rows always), "offline" (agents registered but all stale), "pending" (private row, nothing registered).
    - `types` string[], required: Check types runnable at this location (computed: base set for public rows, live agents' self-reported capabilities for private rows).
    - `version` string, nullable: Binary version of the most recently seen agent.

---

[API](https://skmtc.dev/openobserve/apis/openobserve-api-http.md) - [All operations](https://skmtc.dev/openobserve/apis/openobserve-api-http/llms.txt) - [OpenAPI document](https://skmtc.dev/openobserve/apis/openobserve-api-http/revisions/0529b8a10252?raw)
