Observability
Get a project's observability overview
A project's numbers over a period (the last 24 hours unless you say): totals (requests, errors, error_rate, and latency and CPU percentiles p50, p75, p95 and p99 in milliseconds) and the same for the period before it, to compare; points, one per step (step_s seconds), with requests, errors, counts by status class and percentiles; routes, by requests; deployments, each one's numbers newest first, so a regression points at the deployment it began with; services and regions. from and to are RFC 3339 times or Unix milliseconds.
/workspaces/{workspace}/projects/{project}/observability/overviewNarrow it by environment, service or deployment_id. Needs a role on the project’s repository.
totals is the period and previous the period of the same length before it, to compare. Latency and CPU are in milliseconds. deployments lists each deployment that answered in the period, newest first: when the error rate or latency rose, the deployment it began with is usually the first one with the higher numbers. Points are one per step_s seconds, chosen from the period unless step says. See Observability.
- Authentication: Required. Send an access token as
Authorization: Bearer. - MCP tool:
observabilitywithactionoverview, and the same inputs - Scope: An access token needs
observability:read.
Path parameters
Section titled “Path parameters”| Name | Type | Required | Description |
|---|---|---|---|
workspace |
string | Yes | The workspace’s slug, e.g. “flagon-io”. |
project |
string | Yes | The project’s slug, as in g1t.sh/{workspace}/{project}. |
Query parameters
Section titled “Query parameters”| Name | Type | Required | Description |
|---|---|---|---|
from |
string | No | The start of the period: an RFC 3339 time or Unix milliseconds. 24 hours before to unless you say. |
to |
string | No | The end of the period: an RFC 3339 time or Unix milliseconds. Now unless you say. |
environment |
string | No | Only what ran in this environment, such as production or preview; several comma-separated. |
service |
string | No | Only what this service sent (OpenTelemetry’s service.name; an app on g1t.page is its project’s name); several comma-separated. |
deployment_id |
string | No | Only this deployment’s (dpl_…). |
step |
integer | No | Seconds per point of the charts; chosen from the period unless you say. |
Example request
Section titled “Example request”curl "https://api.g1t.sh/workspaces/flagon-io/projects/g1t/observability/overview?from=2026-10-12T13%3A00%3A00Z&to=2026-10-12T14%3A00%3A00Z&environment=production" \ -H "Authorization: Bearer $G1T_TOKEN"Example response
Section titled “Example response”A successful request answers 200 with:
{ "from_us": 1791810000000000, "to_us": 1791813600000000, "step_s": 60, "totals": { "requests": 18204, "errors": 41, "error_rate": 0.0023, "latency": { "p50": 38.2, "p75": 71.5, "p95": 212, "p99": 640 }, "cpu": { "p50": 4.1, "p75": 6.8, "p95": 14.2, "p99": 29.5 } }, "previous": { "requests": 17650, "errors": 3, "error_rate": 0.0002, "latency": { "p50": 35.9, "p75": 66, "p95": 188, "p99": 402 }, "cpu": { "p50": 3.9, "p75": 6.5, "p95": 13, "p99": 22.1 } }, "points": [ { "time_us": 1791810000000000, "requests": 302, "errors": 0, "status_2xx": 288, "status_3xx": 9, "status_4xx": 5, "status_5xx": 0, "latency": { "p50": 36, "p75": 68, "p95": 190, "p99": 410 }, "cpu": { "p50": 4, "p75": 6.6, "p95": 13.1, "p99": 22 } } ], "routes": [ { "route": "/:workspace/:repo/pulls/:number", "method": "GET", "requests": 2210, "errors": 37, "latency": { "p50": 61, "p75": 120, "p95": 480, "p99": 842 } } ], "deployments": [ { "deployment_id": "dpl_01kq9a2c4e6g8j0m2p4r6t8v0x", "environment": "production", "commit_sha": "7c1e9a4b2d6f80135ac9e2b7d4f6a8c0e1b3d5f7", "first_us": 1791813041000000, "requests": 2904, "errors": 39, "latency": { "p50": 40.1, "p75": 77, "p95": 260, "p99": 720 } } ], "services": [ { "service": "g1t-web", "source": "cloudflare", "requests": 18204, "errors": 41, "last_us": 1791813599000000 } ], "regions": [ { "region": "IAD", "requests": 9120 }, { "region": "AMS", "requests": 4410 } ]}Errors
Section titled “Errors”A failed request answers with one of these statuses and a body like {"error": {"code": "not_found", "message": "Repository not found."}}. See errors.
| Status | Code | When |
|---|---|---|
| 401 | unauthenticated |
A token is required, or the one sent is not valid. |
| 403 | forbidden |
The token is valid but not allowed to do this, such as a member-only change, or a token without the scope it needs. |
| 404 | not_found |
It does not exist, or you cannot see it. |
| 422 | invalid |
The input is not valid. message says which field and why. |