---
title: "Location detail: stats + registered agents + assigned checks"
method: GET
path: "/api/{org_id}/synthetics/locations/{id}"
tags: ["Synthetics"]
---

# Location detail: stats + registered agents + assigned checks

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

## 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/{id}`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/:org_id/synthetics/locations/:id/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `org_id` string, required
- `id` string, required

## Response `200`

Success

- LocationDetail: `GET /{org}/synthetics/locations/{id}` — the location entry (same stats as the list) plus its agents and assigned checks.
  - `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.
  - `agents` LocationAgentInfo[], required
    - `capabilities` unknown
    - `created_at` integer, required
    - `id` string, required
    - `last_seen_at` integer, required
    - `live` boolean, required
    - `name` string, required
    - `version` string, nullable
  - `checks` LocationCheckSummary[], required
    - `enabled` boolean, required
    - `id` string, required
    - `interval_secs` integer, required
    - `last_check_status` 'passed' | 'warning' | 'failed' | 'unknown' | 'error', required
    - `name` string, required
    - `type` 'http' | 'tcp' | 'tls' | 'ssh' | 'browser', required
  - `install` string, nullable: Install command for private rows; withheld without PUT on the default folder.

## Other responses

- `404`: Not found

---

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