Projects
Project Model
Fields
Field | Type | Description |
|---|---|---|
object | "project" | |
id | string | Project identifier prefixed with prj_. |
team_id | string | |
team_name | string | |
trial_expires_at | | null | This team's trial lifecycle window; promotional units are shared across its projects. |
name | string | |
start_at | | Metrics collection begins at this time. |
created_at | | |
updated_at | | |
deleted_at | | null | Scheduled deletion time; null when deletion is not scheduled. |
last_activity_at | | null | Most recent authenticated ingest time; null if none has occurred. |
late_data_window_minutes | number | How many minutes behind the completeness watermark an event with an overridden timestamp may arrive and still be included automatically. Later data is recorded and surfaced for manual re-backfill. 0 means the watermark is final as it advances. Data sent live is never affected. |
server_endpoint | string | null | Project-specific ingest endpoint; null while unavailable. |
queued_server_count | number | null | Server count a scale request asked for that is waiting to be applied, because a platform update
is in progress or the project has not finished updating to the current platform version. null
when nothing is queued. |
storage_gb | number | Stored data for this project, in gigabytes of uncompressed data: raw ingested files and
artifacts, plus view output and minute-level rollups. Recalculated hourly; billing_updated_at
is the last refresh. |
billing_period_server_months | number | Server-months this project's servers have accrued in the current calendar-month billing period, counted up to the last refresh. |
billing_updated_at | | null | Last billing-cache refresh; null before the first calculation. |
Late Data Model
Fields
Field | Type | Description |
|---|---|---|
object | "late_data_file" | |
id | string | Unique identifier, prefixed with ldf_. |
view_id | string | |
view_name | string | Display name of the view whose data carried the late events. |
excluded_count | number | How many events were kept out of charts because their timestamps fell behind the project's late data window. The events themselves are stored; only their aggregation waits. |
min_event_at | | The earliest event time among the excluded events. A re-backfill folds back to this instant. |
max_event_at | | The latest event time among the excluded events. |
exclusion_below | | The boundary the events fell behind. Events at or after it were included normally. |
refold_queued_at | | null | When a re-backfill was requested for these events; null until requested. |
refolded_at | | null | When the re-backfill finished folding the events into charts; null until complete. |
created_at | |
Live Pipeline Model
Fields
Field | Type | Description |
|---|---|---|
object | "project_pipeline_live" | |
observed_at | | |
pending_records | number | null | Valid spooled records awaiting write, including processing. Null when the queue is unknown. |
processing_records | number | null | Pending records currently being processed. |
pending_observed_at | | null | Oldest contributing queue observation, independent of the server heartbeat. |
pending_is_estimated | boolean | The queue changed during inspection; available counts are estimates from durable records. |
state | "fresh" | "stale" | "unavailable" | Queue freshness across all current project servers, including deployment surges. |
contributing_servers | number | |
fresh_servers | number | |
window_start_at | | Inclusive start of the last completed minute. |
window_end_at | | Exclusive end of the last completed minute. |
throughput_records | number | null | Records processed in the completed minute. Null when any contributor lacks telemetry. |
errors | number | null | Rejected requests and dropped frames in the completed minute, not a record count. |
pipeline_error_counts | Partial | null | Map from each PipelineErrorReason key to its error count for the completed minute. Omitted
keys had no errors; null means telemetry is incomplete. |
Usage Sample Model
Fields
Field | Type | Description |
|---|---|---|
object | "usage_sample" | |
sampled_at | | When the reading was taken. Readings are hourly, on the hour. With interval=day this is the
timestamp of the day's last reading, not midnight. |
collection_gb | number | Gigabytes of raw event data held in the project's collections, measured uncompressed, exactly as it is billed. |
artifact_gb | number | Gigabytes of artifacts extracted from the project's events, measured uncompressed. |
view_gb | number | Gigabytes of view records the project's views produced, measured uncompressed. |
rollup_gb | number | Gigabytes of rollup data behind the project's charts, measured uncompressed. Counts the minute tier only, matching what invoices charge for. |
total_gb | number | The four components added together: everything the project stored at this reading. |
Attention Item Model
Fields
Field | Type | Description |
|---|---|---|
object | "attention_item" | |
type | | |
tier | | |
resource_id | string | null | The resource to open to act on the condition: the metric behind a firing monitor, the view behind a failing transform, otherwise the check, view, metric, drain, pull or server itself. Null when the item covers the project as a whole, which is the case for refused requests. |
resource_name | string | null | The name shown for the condition, which can belong to a related resource: a firing monitor's
item names the monitor while resource_id opens its metric. Null whenever resource_id is
null. |
count | number | null | How much of the condition there is, in the unit that fits it: requests refused (not records) over the last 24 hours, or the last hour for capacity, series a monitor is firing on, a view's failing transforms, events waiting on a shape change, consecutive failures of a check, pull, or drain, or a hot server's average load in percent. Null when the condition has no quantity. |
since | | null | When the condition started, as accurately as Tailglow knows. Null when nothing on record marks a beginning: a check that has never once succeeded, or a server under sustained load, which is judged from an average rather than a start. |
ended_at | | null | When the condition stopped, for a resolved item: to the minute within the last hour, to the
end of the hour before that. Null while the condition is still true, including while a server
that was refusing has not reported since. |
detail | string | null | A short machine-readable qualifier that narrows the type: the refusal reason group, the firing
monitor's id, or cpu or mem for the load that made a server hot. A stable identifier meant
for branching in code, never a sentence to display. Null when the type needs no qualifier. |
List Projects
Endpoint
Retrieve a list of projects for the current team.
/v1/projects Query Parameters
Field | Type | Description |
|---|---|---|
order_by | string | Field used to order the projects. Defaults to "name". Accepted values: "created_at","name". |
limit | number | Maximum number of items to return. Defaults to 25. Minimum: 1. Maximum: 200. |
after | string | Cursor from pagination.next_cursor of a previous response. Returns the resources after that page. |
before | string | Cursor from pagination.prev_cursor of a previous response. Returns the resources before that page. |
sort | string | Sort direction for the result set. Defaults to "desc". Accepted values: "asc","desc". |
Comments
- When neither
sortnororder_byis provided, the route defaultssortto"asc". afterandbeforeare mutually exclusive.
Response
{
message: string;
data: Project[];
status: 200;
error: null;
pagination: Pagination;
endpoint: string;
} Retrieve Project
Endpoint
Retrieve a single project.
/v1/projects/:project_id Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Response
{
message: string;
data: Project;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Retrieve Project Pipeline
Endpoint
Retrieve ingest activity across all of a project's servers.
/v1/projects/:project_id/pipeline Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Query Parameters
Field | Type | Description |
|---|---|---|
start_at | | Start time (ISO format, default: 12 hours ago). |
end_at | | End time (ISO format, default: now). |
interval | string | Aggregation interval. Defaults to "minute". Accepted values: "minute","hour". |
Comments
- Includes temporary deployment servers and their archived history. Pending averages valid queued records; throughput counts drained records. Older pending history without record counts is unknown.
Response
{
message: string;
data: TimeseriesAggregation;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Retrieve Live Project Pipeline
Endpoint
Retrieve the current project queue and ingest totals for the last completed minute.
/v1/projects/:project_id/pipeline/live Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Comments
- Includes temporary deployment servers. Queue freshness is independent of heartbeat freshness. Observations taken while queues change return estimated counts from durable records; unreadable observations or unknown write outcomes return null counts.
- Throughput and error totals cover the last completed minute. Errors count requests or frames, and totals are null when telemetry is incomplete.
Response
{
message: string;
data: ProjectPipelineLive;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Create Project
Endpoint
Create a new project for the current team.
/v1/projects Request Body
Field | Type | Requirement | Description |
|---|---|---|---|
name | string | Required | Display name for the project. Minimum length: 1. Maximum length: 60. |
start_at | | Optional | Date and time when the project began collecting data. |
Response
{
message: string;
data: Project;
status: 201;
error: null;
pagination: null;
endpoint: string;
} Update Project
Endpoint
Update an existing project.
/v1/projects/:project_id Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Request Body
Field | Type | Requirement | Description |
|---|---|---|---|
name | string | Optional | Display name for the project. Minimum length: 1. Maximum length: 60. |
start_at | | Optional | Date and time when the project began collecting data. |
late_data_window_minutes | integer | Optional | How many minutes behind the completeness watermark an event with an overridden timestamp may arrive and still be included automatically. Later data is recorded and surfaced for manual re-backfill instead of being included. 0 means the watermark is final as it advances. Only events with overridden timestamps can be late; data sent live is never affected. Maximum 129600 (90 days). Minimum: 0. Maximum: 129600. |
deleted_at | null | Optional | Set to null to cancel a scheduled project deletion. |
Response
{
message: string;
data: Project;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Delete Project
Endpoint
Schedule a project for deletion.
/v1/projects/:project_id Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Comments
- The project is hidden immediately and permanently removed 7 days later. Restore it before then by updating it with
deleted_atset to null.
Response
{
message: string;
data: Project;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Force Delete Project
Endpoint
Delete a project permanently, without waiting out its restore window.
/v1/projects/:project_id/force Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Comments
- Works on a live project as well as one already scheduled for deletion.
- Every source, collection, view, metric and record in the project is destroyed immediately, and its servers are torn down. Nothing here can be restored.
Response
{
message: string;
data: null;
status: 200;
error: null;
pagination: null;
endpoint: string;
} List Late Data
Endpoint
Retrieve the events held out of charts by the project's late data window, grouped per data file.
/v1/projects/:project_id/late_data Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Query Parameters
Field | Type | Description |
|---|---|---|
order_by | string | Field used to order the late data records. Defaults to "created_at". Accepted values: "created_at","min_event_at". |
refolded | string | Filter by re-backfill state: false returns records whose events are still excluded from charts, true returns records a completed re-backfill has folded in. Accepted values: "true","false". |
limit | number | Maximum number of items to return. Defaults to 25. Minimum: 1. Maximum: 200. |
after | string | Cursor from pagination.next_cursor of a previous response. Returns the resources after that page. |
before | string | Cursor from pagination.prev_cursor of a previous response. Returns the resources before that page. |
sort | string | Sort direction for the result set. Defaults to "desc". Accepted values: "asc","desc". |
Comments
- Events with overridden timestamps beyond the late data window are stored and counted here instead of entering charts. Data sent live is never held.
- Records with
refolded_atset have already been folded into charts by a completed re-backfill; filter withrefolded=falsefor records still waiting. afterandbeforeare mutually exclusive.
Response
{
message: string;
data: LateDataFile[];
status: 200;
error: null;
pagination: Pagination;
endpoint: string;
} Re-backfill Late Data
Endpoint
Start a re-backfill that folds one late data record's events into charts.
/v1/projects/:project_id/late_data/:late_data_file_id/re_backfill Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
late_data_file_id | string | Unique identifier of the late data. |
Comments
- Idempotent: requesting a re-backfill that is already queued or complete returns the record unchanged.
- The fold is bounded to the excluded events, so data already in charts is never counted twice.
refolded_atis set once the fold's durable receipts land.
Response
{
message: string;
data: LateDataFile;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Retrieve Project Usage
Endpoint
Retrieve how much the project stored over a time range.
/v1/projects/:project_id/usage Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Query Parameters
Field | Type | Requirement | Description |
|---|---|---|---|
start_at | | Required | Start of the range, inclusive (ISO format). |
end_at | | Optional | End of the range, inclusive (ISO format, default: now). |
interval | string | Optional | Reading cadence returned: every hourly reading, or one reading per UTC day. Defaults to "hour". Accepted values: "hour","day". |
Comments
- Readings are taken hourly and are the same measurements the project is billed on. Gigabytes are logical (uncompressed) bytes.
interval=dayreturns the last reading of each UTC day rather than an average, so a row is what the project held when the day closed. Itssampled_atis that reading's own hour.- Readings start when Tailglow began recording them, so a range reaching further back returns nothing for the hours before that.
start_atmust be earlier thanend_at, and the range cannot be longer than 400 days.
Response
{
message: string;
data: UsageSample[];
status: 200;
error: null;
pagination: null;
endpoint: string;
} Retrieve Project Attention
Endpoint
Retrieve everything in the project that is asking for a human right now.
/v1/projects/:project_id/attention Path Parameters
Field | Type | Description |
|---|---|---|
project_id | string | Unique identifier of the project. |
Comments
- An item appears only when Tailglow entered a state on its own. Anything a project chose, such as a paused pull, a paused drain, or a paused monitor, is never reported here.
tierorders the list.losing_datameans requests are being refused right now, within the last 5 minutes: for a reason a retry cannot fix, or for capacity after at least 5 minutes of unbroken refusals.firingmeans a monitor or check the project set up is currently triggered, or a server has run under sustained heavy load.stalledmeans a pipeline stopped making progress and its data is going stale.suspendedmeans Tailglow switched something off and it stays off until it is fixed.resolvedmeans refusals that lost data have stopped;ended_atsays when.- Items disappear the moment their condition clears, with one exception so a loss is not missed: refusals that stop stay as
resolved, for up to 24 hours for a key or payload refusal and up to an hour for capacity. A refusal item'scountcovers that whole window, not only the current spell. Refusals only count as stopped once every running server that was refusing has reported since; until then the item stayslosing_data. Readings from the project's servers are cached briefly, so a condition that just started can take up to a minute to appear. - Items cover only resources the caller's key or role can read: without a resource's read permission, its conditions are left out. Refusal and server load items need
servers:read, and firing monitors needalerts:read. - Items are already ranked, most urgent first. One item covers each firing monitor, and each view's failing transforms, joins, or shape waits. The response is capped per condition so a project in a bad state returns a readable list rather than every affected resource.
Response
{
message: string;
data: AttentionItem[];
status: 200;
error: null;
pagination: null;
endpoint: string;
} Referenced Types
ISODateString
An ISO 8601 date-time string returned at the JSON API boundary.
PipelineErrorReason
AttentionItemType
The condition an attention item reports. Every value is a state Tailglow entered on its own, so nothing a project deliberately turned off is ever reported here.
AttentionTier
How urgent an attention item is, most urgent first. losing_data means requests are being
refused right now in a way that loses data unless the sender acts, or were until a server that
was refusing stopped reporting. firing means something the project asked to be told about is
currently true, or a server has run under sustained heavy load. stalled means a pipeline
stopped making progress and existing data is going stale. suspended means Tailglow switched
something off and it stays off until it is fixed. resolved means refusals that lost data have
stopped; the item stays for a while so the loss is still visible, and says when it ended.