hosting
GET /v1/sites/{siteId}/apm
Ranked transactions, ranked hotspots and the hourly timeline for a site.
المصادقة
أرسل مفتاح واجهة برمجة التطبيقات (API key) كرمز حامل (bearer token). يجب أن يحمل المفتاح إذن sites.view؛ والمفتاح الذي لا يملكه يُرفض بالرمز 403 وليس 404.
لا يقبل هذا الطرف أي معرف للمؤسسة. يحدد مفتاحك بالفعل المؤسسة التي ينتمي إليها، وتكون الاستجابة محصورة في نطاقها.
جربه الآن
استبدل أي شيء بين أقواس زاوية بقيمك الخاصة، والعنصر النائب للمفتاح بمفتاح من لوحة تحكمك.
curl -X GET https://api.zinndigital.com/v1/sites/{siteId}/apm \
-H "Authorization: Bearer zdk_live_…"هل سجلت الدخول؟ تقوم وحدة تحكم واجهة برمجة التطبيقات في لوحة التحكم الخاصة بك بربط معرف مؤسستك الحقيقي ومفتاحك الخاص، وتنفذ الطلب مقابل واجهة برمجة التطبيقات المباشرة لتتمكن من رؤية الاستجابة الفعلية. افتح هذه النهاية الطرفية في وحدة تحكم API
التفاصيل
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.
المعلمات
| الاسم | النوع | مطلوب | ما هو هذا |
|---|---|---|---|
siteId (path) | Uuid | نعم | Site ID (UUIDv7). |
hours (query) | integer | لا | How 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) | integer | لا | How many ranked rows per table (1–50, default 10). |
الاستجابة
| الاسم | النوع | مطلوب | ما هو هذا |
|---|---|---|---|
tracing | boolean | نعم | Whether the server is currently profiling this site. |
enrolment_state | string<unknown, enrolled, refused, unsupported> | نعم | Why 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_detail | string | نعم | The server's own sentence when it refused; empty otherwise. |
last_collected_at | string | نعم | When we last harvested this site, or null if never. |
window_hours | integer | نعم | The period these aggregates cover. |
p95_duration_ms | integer | نعم | The 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_count | integer | نعم | How 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). |
transactions | SiteApmTransaction[] | نعم | Pages ranked by total PHP time, heaviest first. |
hotspots | SiteApmHotspot[] | نعم | Plugins, functions and queries ranked by total PHP time. |
timeline | SiteApmTimelinePoint[] | نعم | PHP execution time by hour, oldest first. |
الأخطاء التي يمكن أن تُرجعها نقطة النهاية هذه
401 · 403 · 404 · 422 · 429