Monitoring & Analytics
Every deployed project gets uptime probes every five minutes, live server metrics from your own Render service, and optional privacy-friendly product analytics fed by a one-line beacon snippet. These endpoints expose all of it, plus the account-wide dashboard stats.
Monitoring is keyed by repository id (from GET /repos), not deployment id — a project's health outlives any single deployment. For the dashboard-level walkthrough, see the Monitoring & Analytics guide.
Project monitoring#
Returns the project's health snapshot: current status and 24-hour uptime series for the frontend and backend, live CPU/memory from the Render service (last hour), the last successful deployment, and the latest deployment attempt of any status. Returns 404 if the repository does not exist or belongs to another user.
| Field | Type | Description |
|---|---|---|
| project | object | { id, name, fullName } of the repository. |
| frontend / backend | object | Per-target health: url (nullable), current { ok, httpStatus, latencyMs, checkedAt } or null when no probe has run, uptime24h (percentage, one decimal, null without samples), and series of { t, ok, latencyMs } probe points over the last 24 hours. |
| server | object | null | Live Render metrics: state, plus cpu and memory arrays of { timestamp, value } for the last hour. Null when there is no Render service or metrics are unavailable. |
| lastDeployment | object | null | Latest COMPLETED deployment — { id, at, branch }. Defines the URLs being monitored. |
| latestAttempt | object | null | Latest deployment of any status — { id, status, error, branch, at, isNewerThanLive }. isNewerThanLive is true when this attempt is not the live deployment (in progress or failed after the last success). |
curl https://www.deplo.in/api/v1/projects/cm5xb2c3d0002njk8p4q5r6s7/monitoring \
-H "Authorization: Bearer $DEPLO_TOKEN"{
"project": {
"id": "cm5xb2c3d0002njk8p4q5r6s7",
"name": "acme-shop",
"fullName": "adalovelace/acme-shop"
},
"frontend": {
"url": "https://deplo-acme-shop-web.vercel.app",
"current": { "ok": true, "httpStatus": 200, "latencyMs": 84, "checkedAt": "2026-08-07T09:10:00.000Z" },
"uptime24h": 100,
"series": [
{ "t": "2026-08-07T08:55:00.000Z", "ok": true, "latencyMs": 91 },
{ "t": "2026-08-07T09:00:00.000Z", "ok": true, "latencyMs": 88 },
{ "t": "2026-08-07T09:05:00.000Z", "ok": true, "latencyMs": 79 },
{ "t": "2026-08-07T09:10:00.000Z", "ok": true, "latencyMs": 84 }
]
},
"backend": {
"url": "https://deplo-acme-shop-api.onrender.com",
"current": { "ok": true, "httpStatus": 200, "latencyMs": 132, "checkedAt": "2026-08-07T09:10:00.000Z" },
"uptime24h": 99.7,
"series": [
{ "t": "2026-08-07T09:05:00.000Z", "ok": true, "latencyMs": 141 },
{ "t": "2026-08-07T09:10:00.000Z", "ok": true, "latencyMs": 132 }
]
},
"server": {
"state": "deployed",
"cpu": [{ "timestamp": "2026-08-07T09:10:00Z", "value": 0.02 }],
"memory": [{ "timestamp": "2026-08-07T09:10:00Z", "value": 268435456 }]
},
"lastDeployment": {
"id": "cm5xc4d5e0003njk8t8u9v0w1",
"at": "2026-08-06T18:33:11.000Z",
"branch": "main"
},
"latestAttempt": {
"id": "cm5xc4d5e0003njk8t8u9v0w1",
"status": "COMPLETED",
"error": null,
"branch": "main",
"at": "2026-08-06T18:30:02.000Z",
"isNewerThanLive": false
}
}Product analytics#
Aggregated product analytics for the project over the requested window: totals, a daily views/visitors series, top pages, top referrers, and the ready-to-paste tracking snippet. Data comes from the public insights beacon below — no cookies, visitors are counted via a daily-rotating hash. Returns 404 for repositories you do not own.
| Query param | Type | Description |
|---|---|---|
| days | number | Optional. Window size in days, 1–30. Defaults to 7; out-of-range values are clamped. |
curl "https://www.deplo.in/api/v1/projects/cm5xb2c3d0002njk8p4q5r6s7/analytics?days=7" \
-H "Authorization: Bearer $DEPLO_TOKEN"{
"days": 7,
"totals": { "views": 1284, "visitors": 342 },
"daily": [
{ "day": "2026-08-01T00:00:00.000Z", "views": 158, "visitors": 49 },
{ "day": "2026-08-02T00:00:00.000Z", "views": 203, "visitors": 61 }
],
"topPaths": [
{ "path": "/", "views": 612 },
{ "path": "/pricing", "views": 231 }
],
"topReferrers": [
{ "referrer": "(direct)", "views": 540 },
{ "referrer": "https://news.ycombinator.com/", "views": 187 }
],
"snippet": "<script defer src=\"https://www.deplo.in/api/v1/public/insights.js\" data-deplo-key=\"cm5xb2c3d0002njk8p4q5r6s7\"></script>"
}The insights beacon#
Analytics is opt-in: add the snippet from the analytics response to your deployed site and the two public endpoints below do the rest. Neither requires authentication.
The tracking script (~500 bytes of vanilla JS, cached for one hour). It reads the repository id from the script tag's data-deplo-key attribute, sends a beacon on load, and hooks pushState/replaceState/popstate so SPA navigations are counted too.
<script defer src="https://www.deplo.in/api/v1/public/insights.js" data-deplo-key="cm5xb2c3d0002njk8p4q5r6s7"></script>Beacon ingest — the script calls this via navigator.sendBeacon (POST) or an image request (GET; both methods behave identically). Always responds 204 immediately, whatever happens: bot user agents and DNT: 1 requests are silently dropped, unknown repo ids are ignored, and ingest failures never surface. Visitors are deduplicated with a daily-rotating hash of IP + user agent + repo id — no cookies, no stored IPs.
| Query param | Type | Description |
|---|---|---|
| path | string | Page path being viewed. Defaults to /; truncated to 512 chars. |
| ref | string | Document referrer. Optional; truncated to 512 chars. |
curl -X POST "https://www.deplo.in/api/v1/public/insights/cm5xb2c3d0002njk8p4q5r6s7?path=%2Fpricing&ref=https%3A%2F%2Fnews.ycombinator.com%2F"HTTP/1.1 204 No Content
Access-Control-Allow-Origin: *Account stats#
Account-wide dashboard counters for the authenticated user. Active means any non-terminal status: PENDING, ANALYZING, WAITING_FOR_ENV, DEPLOYING_BACKEND, BACKEND_READY, or DEPLOYING_FRONTEND.
curl https://www.deplo.in/api/v1/stats \
-H "Authorization: Bearer $DEPLO_TOKEN"{
"totalDeployments": 27,
"activeDeployments": 1,
"failedDeployments": 3,
"connectedRepos": 42
}Platform-wide totals used by the marketing site. No authentication, cached for five minutes both in-process and via Cache-Control. avgMinutesToProduction is the mean time from deployment creation to completion across all successful deployments, rounded up to whole minutes; it is null until at least one deployment has completed.
curl https://www.deplo.in/api/v1/public/stats{
"deployments": 1284,
"avgMinutesToProduction": 3
}