StarSling
APILogs

Read job log lines

Ingested job-log lines for a completed attempt (sling logs), filtered SERVER-SIDE so an agent reads only what matters: grep (RE2), since (the log tail), job (narrow a run to one job). A run id reads all its jobs; a job/attempt id reads one attempt. Keyset-paginated via an opaque cursor. Authenticated; a run/job in another org 404s (opaque).

View Markdown
GET/api/logs/{id}

Authorization

bearerAuth
AuthorizationBearer <token>

Session token from sling login.

In: header

Path Parameters

id*string

Prefixed log target: run_, job_, or att_.. A malformed shape is a 400.

Length1 <= length

Query Parameters

org*string

GitHub organization login. Scopes the request to your membership.

Length1 <= length
job?string

Narrow a run to one job, by job name.

grep?string

RE2 regular expression. Only matching lines are returned.

since?string

Only the last N of the log, e.g. 5m or 2h.

timestamps?boolean

Include a per-line timestamp. Off by default.

cursor?string

Opaque keyset cursor from a prior page's next_cursor.

Length1 <= length
limit?|

Lines per page. Page with cursor.

Range1 <= value <= 5000

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/logs/run_1234567890?org=acme"
{  "lines": [    {      "job_id": "85933007091",      "job_name": "typecheck",      "line_number": 812,      "timestamp": "2026-07-22T09:15:40.118Z",      "log_data": "src/index.ts(42,7): error TS2322: Type 'string' is not assignable to type 'number'."    },    {      "job_id": "85933007091",      "job_name": "typecheck",      "line_number": 813,      "timestamp": "2026-07-22T09:15:40.119Z",      "log_data": "##[error]Process completed with exit code 2."    }  ],  "has_more": true,  "next_cursor": "eyJqb2JfaWQiOiI4NTkzMzAwNzA5MSIsImxpbmUiOjgxM30"}