Skip to content

GET /api/v1/jobs

Lists the caller’s async jobs. Payload and artifact manifest are omitted — use GET /api/v1/forecasts/:id for full job state (forecasts only).

Query parameters

ParamDefaultNotes
page1
limit501200.
sortcreated_atid, created_at, settled_at, eur_cents_final.
orderdescasc / desc.
status(none)Optional: queued, running, completed, failed, canceled.
pipeline_type(none)Optional filter; forecast is the only emitted value.

Call the endpoint

bash
curl -sS -H "Authorization: Bearer $SYBILION_API_TOKEN" \
  "https://api.sybilion.dev/api/v1/jobs?page=1&limit=20&status=completed"
python
for page in client.iter_jobs_pages(limit=50, status="completed"):
    for job in page.jobs:
        print(job.job_id, job.status, job.eur_cents_final)
go
err := c.ForEachJobsPage(context.Background(), "created_at", "desc", 50,
	func(ctx context.Context, page *api.ApiV1JobsGet200Response) (bool, error) {
		for _, j := range page.GetJobs() {
			fmt.Println(j.GetJobId(), j.GetStatus(), j.GetEurCentsFinal())
		}
		return true, nil
	},
)
if err != nil {
	log.Fatal(err)
}
r
library(sybilion)

cl <- sybilion_client(token = Sys.getenv("SYBILION_API_TOKEN"))
cl$iter_jobs_pages(
  function(page) {
    for (j in page$jobs) cat(j$job_id, j$status, j$eur_cents_final, "\n")
    TRUE
  },
  status = "completed"
)
java
import com.sybilion.Client;
import com.sybilion.Options;

Client c = new Client(Options.builder().token(System.getenv("SYBILION_API_TOKEN")).build());
c.forEachJobsPage("created_at", "desc", 50, "completed", null, page -> {
    for (var j : page.getJobs()) {
        System.out.println(j.getJobId() + " " + j.getStatus() + " " + j.getEurCentsFinal());
    }
    return true;
});

Response

json
{
  "jobs": [
    {
      "job_id": "1f2a8b3e-4c5d-46d7-9a01-2b3c4d5e6f70",
      "pipeline_type": "forecast",
      "status": "completed",
      "created_at": "2026-04-30T10:00:00Z",
      "settled": true,
      "settled_at": "2026-04-30T10:05:42Z",
      "eur_cents_final": 3,
      "terminal_reason": null
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 8,
    "total_pages": 1,
    "sort": "created_at",
    "order": "desc"
  }
}

Field reference

jobs[]

FieldMeaning
job_idUUID of the job. Use with GET /api/v1/forecasts/:id for full state.
pipeline_typeAlways "forecast" currently.
statusOne of queued, running, completed, failed, canceled.
created_atRFC3339 timestamp of submission.
settledtrue once the job has reached a terminal state and billing settled.
settled_atRFC3339 timestamp of settlement, or null until then.
eur_cents_finalFinal charge in EUR cents, or null before settlement.
terminal_reasonFailure or cancellation reason string, or null.

workflow_id and run_id may appear as optional fields — they are opaque internal identifiers, not part of the public API contract.

pagination

FieldMeaning
pageCurrent 1-indexed page.
limitPage size used for this response.
totalTotal matching jobs across all pages.
total_pagesceil(total / limit).
sortSort field used.
orderSort direction used.

Visibility

When a post-settlement visibility window is in effect, older jobs are filtered out here as well as on the forecast detail endpoint — no row appears in the list if GET /api/v1/forecasts/:id would respond with 404.

Common errors

CodeCauseWhat to do
400Invalid query parameter.Check the query parameters table above.
401Missing or invalid bearer token.Check the API key.
429Rate limit exceeded.Wait before retrying. Check tier limits on /tiers.

[email protected] · Slack · Discord (links in Community page & header icons)