Skip to main content

Fake CI Pipeline Run API

MOCK DATA

Generate compact, coherent CI run fixtures with run-derived job conclusions, ordered steps, safe commits and exact lifecycle dates.

Generated test data for fixtures and development

Base URL
/api/ci-runs
Capabilities
1 route Seedable
Last updated
July 29, 2026

GET /api/ci-runs

Live requestRuns against the public API
No key required
GET/api/ci-runs?status=failure&pipeline=ci&trigger=pullRequest&count=5&seed=42

Request parameters

Pin every run to this exact lifecycle/result state.

Pin the job-name set to ci, release or docs.

Pin the fictional run trigger.

Use this resolved branch value in every record.

Minimum jobs per run, inclusive.

Maximum jobs per run, inclusive; must be ≥ minJobs.

Earliest creation time. With only from, to resolves 30 elapsed days later; with neither, defaults 30 UTC days before today.

Latest creation time. With only to, from resolves 30 elapsed days earlier; with neither, defaults to today's UTC end.

Advanced response options7 options

How many records to generate (1–100).

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Response format: json envelope, ndjson (one record per line) or csv.

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/ci-runs?pipeline=ci&trigger=pullRequest&status=failure&count=5&seed=42"
const res = await fetch("https://randomapi.dev/api/ci-runs?pipeline=ci&trigger=pullRequest&status=failure&count=5&seed=42");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/ci-runs?pipeline=ci&trigger=pullRequest&status=failure&count=5&seed=42").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/ci-runs?pipeline=ci&trigger=pullRequest&status=failure&count=5&seed=42"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 8
status enum

Pin every run to this exact lifecycle/result state.

allowed: queued | inProgress | success | failure | cancelled
example: status=failure
pipeline enum

Pin the job-name set to ci, release or docs.

allowed: ci | release | docs
example: pipeline=ci
trigger enum

Pin the fictional run trigger.

allowed: push | pullRequest | manual | schedule
example: trigger=pullRequest
branch string

Use this resolved branch value in every record.

allowed: 1 – 60
example: branch=feature/example-checkout
minJobs int

Minimum jobs per run, inclusive.

default: 2
allowed: 1 – 3
example: minJobs=2
maxJobs int

Maximum jobs per run, inclusive; must be ≥ minJobs.

default: 3
allowed: 1 – 3
example: maxJobs=3
from date

Earliest creation time. With only from, to resolves 30 elapsed days later; with neither, defaults 30 UTC days before today.

example: from=2026-03-01
to date

Latest creation time. With only to, from resolves 30 elapsed days earlier; with neither, defaults to today's UTC end.

example: to=2026-03-31T23:59:59.999Z
Universal parameters Shared response and formatting options 7
count int

How many records to generate (1–100).

default: 10
allowed: 1 – 100
example: count=3
seed int

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

example: seed=42
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=id,runNumber
exclude list

Return all fields except these (comma-separated).

example: exclude=artifacts
format enum

Response format: json envelope, ndjson (one record per line) or csv.

default: json
allowed: json | ndjson | csv
example: format=csv
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 13
id string

Distinct fictional run ID.

example: run_836f2c4ac196_00

runNumber integer

Synthetic display sequence number.

example: 1842

pipeline string

ci | release | docs.

example: ci

trigger string

push | pullRequest | manual | schedule.

example: pullRequest

branch string

Synthetic or explicitly requested branch.

example: feature/example-checkout

commit object

Synthetic sha, message, author name and reserved-domain email.

example: {"sha":"0123456789abcdef0123456789abcdef01234567","message":"test: cover checkout flow","authorName":"Avery Chen","authorEmail":"avery@example.com"}

status string

queued | inProgress | success | failure | cancelled.

example: failure

createdAt string (ISO 8601)

Run creation time inside from/to.

example: 2026-03-12T08:00:00.000Z

startedAt string (ISO 8601) nullable

First job start, null while queued.

example: 2026-03-12T08:00:04.000Z

completedAt string (ISO 8601) nullable

Terminal completion time only.

example: 2026-03-12T08:02:20.000Z

durationSeconds integer nullable

Exact terminal startedAt→completedAt duration, else null.

example: 136

jobs object[]

One to three jobs, each with exactly two status-coherent ordered steps.

example: [{"id":"run_demo_job1","name":"test","status":"completed","conclusion":"success","startedAt":"2026-03-12T08:00:04.000Z","completedAt":"2026-03-12T08:01:00.000Z","durationSeconds":56,"steps":[]}]

artifacts object[]

One fictional artifact only for successful runs; otherwise empty.

example: []

Documented examples

Build-generated requests and complete responses
3
Failed pull-request CI runs
GET /api/ci-runs?pipeline=ci&trigger=pullRequest&status=failure&count=5&seed=42
{
  "data": [
    {
      "id": "run_958016cfb6a5c85e_00",
      "runNumber": 307525,
      "pipeline": "ci",
      "trigger": "pullRequest",
      "branch": "develop",
      "commit": {
        "sha": "5863c1d1cff8728448a0b56b87c24316010d1461",
        "message": "feat: add demo pipeline state",
        "authorName": "Kaylie Ziemann",
        "authorEmail": "fixture-df3629ff@example.com"
      },
      "status": "failure",
      "createdAt": "2026-07-19T23:52:47.748Z",
      "startedAt": "2026-07-19T23:53:07.748Z",
      "completedAt": "2026-07-19T23:54:54.748Z",
      "durationSeconds": 107,
      "jobs": [
        {
          "id": "run_958016cfb6a5c85e_00_job1",
          "name": "lint",
          "status": "completed",
          "conclusion": "success",
          "startedAt": "2026-07-19T23:53:07.748Z",
          "completedAt": "2026-07-19T23:53:49.748Z",
          "durationSeconds": 42,
          "steps": [
            {
              "number": 1,
              "name": "prepare",
              "status": "completed",
              "conclusion": "success",
              "startedAt": "2026-07-19T23:53:07.748Z",
              "completedAt": "2026-07-19T23:53:12.748Z"
            },
            {
              "number": 2,
              "name": "run lint",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Successful release runs
GET /api/ci-runs?pipeline=release&status=success&minJobs=3&maxJobs=3&count=8&seed=17
{
  "data": [
    {
      "id": "run_55abf24f73252bc1_00",
      "runNumber": 558175,
      "pipeline": "release",
      "trigger": "manual",
      "branch": "develop",
      "commit": {
        "sha": "fa6772197c4b91746615d4e9076dfe77920f6091",
        "message": "feat: add demo pipeline state",
        "authorName": "Miss Mary Hilpert-Welch",
        "authorEmail": "fixture-03d5a37e@example.com"
      },
      "status": "success",
      "createdAt": "2026-07-13T15:46:20.077Z",
      "startedAt": "2026-07-13T15:46:35.077Z",
      "completedAt": "2026-07-13T15:47:27.077Z",
      "durationSeconds": 52,
      "jobs": [
        {
          "id": "run_55abf24f73252bc1_00_job1",
          "name": "build",
          "status": "completed",
          "conclusion": "success",
          "startedAt": "2026-07-13T15:46:35.077Z",
          "completedAt": "2026-07-13T15:46:42.077Z",
          "durationSeconds": 7,
          "steps": [
            {
              "number": 1,
              "name": "prepare",
              "status": "completed",
              "conclusion": "success",
              "startedAt": "2026-07-13T15:46:35.077Z",
              "completedAt": "2026-07-13T15:46:39.077Z"
            },
            {
              "number": 2,
              "name": "run build",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
In-progress branch builds in March
GET /api/ci-runs?status=inProgress&branch=feature%2Fexample-checkout&from=2026-03-01&to=2026-03-31&count=6&seed=8
{
  "data": [
    {
      "id": "run_5a0ad10ec4981258_00",
      "runNumber": 265047,
      "pipeline": "release",
      "trigger": "schedule",
      "branch": "feature/example-checkout",
      "commit": {
        "sha": "e7ed05d64418bc8e6c2ed0e0e37de56feb78dd63",
        "message": "test: cover example workflow",
        "authorName": "Morris Ondricka",
        "authorEmail": "fixture-67d45aaa@example.com"
      },
      "status": "inProgress",
      "createdAt": "2026-03-23T13:46:44.932Z",
      "startedAt": "2026-03-23T13:47:23.932Z",
      "completedAt": null,
      "durationSeconds": null,
      "jobs": [
        {
          "id": "run_5a0ad10ec4981258_00_job1",
          "name": "build",
          "status": "inProgress",
          "conclusion": null,
          "startedAt": "2026-03-23T13:47:23.932Z",
          "completedAt": null,
          "durationSeconds": null,
          "steps": [
            {
              "number": 1,
              "name": "prepare",
              "status": "completed",
              "conclusion": "success",
              "startedAt": "2026-03-23T13:47:23.932Z",
              "completedAt": "2026-03-23T13:47:24.932Z"
            },
            {
              "number": 2,
              "name": "run build",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}

About this API

Coverage & behavior

Generates compact vendor-neutral continuous-integration run fixtures for pipeline dashboards and build-history tests. Each run owns one to three jobs, and every job owns exactly two ordered steps. The hierarchy agrees all the way up: a successful run has only successful jobs, a failed run contains a failure followed by skipped jobs, an in-progress run has one active job followed by queued jobs, and a cancelled run has one cancelled job.

status, pipeline, trigger, branch, minJobs/maxJobs and the creation-time from/to window are genuine constraints. Terminal runs have start/completion/duration values; queued and in-progress masks remain exact. Only successful runs expose one fictional build artifact.

Commit hashes and author identities are synthetic, author email uses reserved example.com, and the response intentionally avoids provider URLs, node IDs or proprietary fields. It is not a GitHub Actions, GitLab CI, CircleCI or other vendor wire schema. The three-job/two-step cap also keeps a 100-run response below the platform payload budget.

Use it for

  • Populate CI run, job and step dashboards
  • Test success, failure, cancellation and in-progress rendering
  • Create deterministic build-history fixtures for frontend and integration tests

Frequently asked questions

Do job conclusions determine the run status?

Yes. Failed and cancelled runs contain the matching terminal job, successful runs contain only successful jobs, and later jobs are skipped where appropriate.

Are job and step timestamps chronological?

Yes. Executed jobs are ordered, their two steps do not overlap, and each job's start/completion bounds its steps.

How large can one run become?

At most three jobs with two steps each. The bounded shape keeps even count=100 within the platform's response-size gate.

Does this match a specific CI provider API?

No. The model is intentionally generic and makes no compatibility claim for any hosted CI service.

Standards & references