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
limit501–200.
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)
}
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)