hosting

GET /v1/sites/{siteId}/apm

Ranked transactions, ranked hotspots and the hourly timeline for a site.

Todos os endpoints de hosting

Autenticação

Envie uma chave de API como um token de portador. A chave deve ter a permissão sites.view; uma chave sem ela é recusada com 403, e não 404.

Este endpoint não requer um ID de organização. Sua chave já identifica a organização à qual pertence, e a resposta é delimitada a ela.

Experimente

Substitua qualquer item entre colchetes por seus próprios valores e o espaço reservado para a chave por uma chave do seu painel.

curl -X GET https://api.zinndigital.com/v1/sites/{siteId}/apm \
  -H "Authorization: Bearer zdk_live_…"

Conectado? O console da API no seu painel preenche o ID da sua organização real e a sua própria chave, e executa a requisição contra a API de produção para que você possa ver a resposta real. Abra este endpoint no console da API

Detalhes

Stored, aggregated PHP profiling: which **pages** cost the most server time, which **plugin, PHP function or SQL query** is eating it, and how the site's PHP execution time has moved hour by hour. ⭐ Read from rows, not from the machine. The sibling `…/performance/slow-requests` surface opens an SSH session to the worker box on every call; this one is a database query, which is why it can be rendered on a customer-facing tab without a §2.16 problem. ⛔ **An empty payload is a `200` WITH A REASON.** `enrolment_state` says which of four things happened — `unknown` (not collected yet), `enrolled` (collected, and the site was genuinely quiet), `refused` (the server would not start tracing), `unsupported` (hosting that cannot trace). A surface that cannot tell a quiet site from a feature that is switched off was the live state of the fleet on 2026-09-03: one of two boxes had zero sites enrolled and every screen said "nothing traced yet". Requires `sites.view` and the `request_profiling` entitlement, which is included on every product line. No visitor IP addresses appear in the response — the field does not exist at any layer beneath this one.

Parâmetros

NomeTipoObrigatórioO que é
siteId (path)UuidSimSite ID (UUIDv7).
hours (query)integerNãoHow far back to aggregate (1–2160, default 24). Clamped rather than refused: a junk value answers the question that was asked with the default period.
limit (query)integerNãoHow many ranked rows per table (1–50, default 10).

Resposta

NomeTipoObrigatórioO que é
tracingbooleanSimWhether the server is currently profiling this site.
enrolment_statestring<unknown, enrolled, refused, unsupported>SimWhy there may be no data. `unknown` — not collected yet. `enrolled` — collected, and the site was genuinely quiet. `refused` — the server would not start profiling. `unsupported…
enrolment_detailstringSimThe server's own sentence when it refused; empty otherwise.
last_collected_atstringSimWhen we last harvested this site, or null if never.
window_hoursintegerSimThe period these aggregates cover.
p95_duration_msintegerSimThe 95th percentile of PHP time across EVERY request traced for this site in the window, in milliseconds. ⚠️ This is the customer's OWN traffic. It is a different quantity from…
p95_sample_countintegerSimHow many requests `p95_duration_ms` was computed over. Shipped WITH it, always: a p95 over 30 requests and one over 30,000 are indistinguishable on screen otherwise (§2.44).
transactionsSiteApmTransaction[]SimPages ranked by total PHP time, heaviest first.
hotspotsSiteApmHotspot[]SimPlugins, functions and queries ranked by total PHP time.
timelineSiteApmTimelinePoint[]SimPHP execution time by hour, oldest first.

Erros que este endpoint pode retornar

401 · 403 · 404 · 422 · 429