Skip to content

Observability

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.

GET/workspaces/{workspace}/projects/{project}/observability/overview

Narrow 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.

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}.
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.
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"

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
}
]
}

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.