> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://learning.postman.com/llms.txt.

# Get a service's CI runs

GET https://api.postman.com/api-catalog/services/{serviceId}/ci-runs

Gets a paginated list of CI collection runs for a service that includes summary statistics, pipeline details, and Git metadata.

Reference: https://learning.postman.com/api-docs/api-reference/api-catalog/get-api-catalog-service-ci-runs

## Authentication

- `x-api-key` header (required)

## Servers

- `https://api.postman.com` (https://api.postman.com, default)
- `https://api.eu.postman.com` (https://api.eu.postman.com)

## Request

### Path parameters

- `serviceId` (string, required) — The service's ID.

### Query parameters

- `systemEnvironmentId` (string, required) — The system environment's ID.
- `collectionId` (string, optional) — Filter results to only the given collection ID's runs.
- `environmentId` (string, optional) — Filter results to only the given environment ID runs.
- `status` (enum, optional) — Filter results by run status.
  - Allowed values: `passed`, `failed`
- `branch` (string, optional) — Filter results by the given Git branch name.
- `workflowName` (string, optional) — Filter results by the given CI workflow name.
- `actor` (string, optional) — Filter results by the given CI user that triggered the run.
- `repoName` (string, optional) — Filter results by the given repository name.
- `repoOwner` (string, optional) — Filter results by the given repository owner.
- `sort` (string, optional) — Sort the results in field:direction order format. Accepts the `timestamp` and `duration` fields. Supports the `asc` and `desc` directions.
- `limit` (integer, optional, default: 20) — The maximum number of rows to return in the response, up to a maximum value of 100. Any value greater than 100 returns a 400 Bad Request response.
- `cursor` (string, optional) — The pointer to the first record of the set of paginated results. To view the next response, use the `nextCursor` value for this parameter.

## Response

### 200

Successful Response

- `meta` (object, required) — The response's meta information for paginated results.
  - `nextCursor` (string, required) — The pagination cursor that points to the next record in the results set.
  - `limit` (integer, required) — The maximum number of records in the paginated response.
  - `filters` (object, required) — The filters applied to the request.
  - `timeRange` (object, required) — The time window for the returned data.
    - `start` (datetime, required) — The start of the time window.
    - `end` (datetime, required) — The end of the time window.
    - `label` (enum, required) — The time range's label.
      - Allowed values: `last_7_days`
  - `totalRuns` (integer, required) — The total number of runs that match the given filters.
  - `passedRuns` (integer, required) — The number of successful runs.
  - `failedRuns` (integer, required) — The number of runs with at least one failure.
  - `successRatePct` (double, required) — The percentage of runs that passed, rounded to two decimal places.
- `data` (list of object, required) — A list of CI collection runs.
  - `id` (string, required) — The CI run's ID.
  - `status` (enum, required) — Whether the CI run passed or failed.
    - Allowed values: `passed`, `failed`
  - `timestamp` (datetime, required) — The date and time at which the run completed.
  - `collection` (object, required) — Information about the collection.
    - `id` (string, required) — The collection's ID.
    - `name` (string, required, nullable) — The collection's name. If the collection was deleted, this returns a null value.
  - `environment` (object, required) — Information about the environment.
    - `id` (string, required) — The environment's ID.
    - `name` (string, required, nullable) — The environment's name. If the environment was deleted, this returns a null value.
  - `source` (object, required) — Information about the Git source control for the CI run.
    - `branch` (string, required, nullable) — The Git branch's name.
    - `commitSha` (string, required, nullable) — The full Git commit SHA.
    - `repo` (object, required) — Information about the source repository.
      - `name` (string, required, nullable) — The repository's name.
      - `owner` (string, required, nullable) — The repository owner or organization.
      - `url` (string, required, nullable) — The repository's URL.
    - `pullRequest` (object, required, nullable) — Information about the pull request. This returns null if the run wasn't triggered by a pull request.
      - `number` (integer, required) — The pull request number.
      - `title` (string, required, nullable) — The pull request's title.
      - `status` (string, required, nullable) — The pull request's status.
      - `author` (string, required, nullable) — The author of the pull request.
      - `baseBranch` (string, required, nullable) — The target branch of the pull request.
      - `headBranch` (string, required, nullable) — The pull request's source branch.
  - `pipeline` (object, required) — Information about the CI/CD pipeline.
    - `provider` (string, required, nullable) — The CI provider.
    - `workflowName` (string, required, nullable) — The workflow or pipeline name.
    - `workflowId` (string, required, nullable) — The workflow ID.
    - `jobName` (string, required, nullable) — The job name in the workflow.
    - `jobId` (string, required, nullable) — The job's ID.
    - `pipelineId` (string, required, nullable) — The pipeline run's ID.
    - `pipelineNumber` (string, required, nullable) — The pipeline run number.
    - `runAttempt` (integer, required, nullable) — The attempt number for this run.
    - `actor` (string, required, nullable) — The user or bot that triggered the run.
  - `execution` (object, required, nullable) — Information about the environment run.
    - `cliVersion` (string, required, nullable) — The Postman CLI version.
    - `system` (object, required) — The system information about the execution run. This returns as null if unavailable.
      - `os` (string, optional) — The operating system and kernel version.
      - `cpus` (integer, optional) — The number of CPU cores.
      - `memoryMb` (integer, optional) — The available memory, in megabytes.
  - `summary` (object, required) — Information about the CI run.
    - `totalRequests` (integer, required) — The total number of HTTP requests executed in the run.
    - `failedRequests` (integer, required) — The number of requests that failed.
    - `totalAssertions` (integer, required) — The total number of test assertions evaluated.
    - `failedAssertions` (integer, required) — The number of failed assertions.
    - `durationMs` (integer, required) — Total execution duration in milliseconds.
  - `performance` (object, required) — Information about the response time range across all requests in the run.
    - `minResponseMs` (double, required) — The fastest individual response time, in milliseconds.
    - `maxResponseMs` (double, required) — The slowest individual response time, in milliseconds.

## Examples

**Response**

```json
{
  "meta": {
    "nextCursor": null,
    "limit": 20,
    "filters": {
      "systemEnvironmentId": "23b554c1-c30c-483d-bf98-dbe9ab7b88a0"
    },
    "timeRange": {
      "start": "2026-04-14T15:05:48.296Z",
      "end": "2026-04-21T15:05:48.296Z",
      "label": "last_7_days"
    },
    "totalRuns": 7,
    "passedRuns": 4,
    "failedRuns": 3,
    "successRatePct": 57.14
  },
  "data": [
    {
      "id": "27ace2f7-5130-4405-8489-5ce1ebee322e",
      "status": "passed",
      "timestamp": "2026-04-16T03:56:54.372Z",
      "collection": {
        "id": "12345678-528df970-ceec-45a5-9f72-187ea19ff53b",
        "name": "[PROD] API Control Service"
      },
      "environment": {
        "id": "9b83df88-9b5c-445b-ac23-460c37897340",
        "name": "[PROD] API Control Service"
      },
      "source": {
        "branch": "develop",
        "commitSha": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
        "repo": {
          "name": "acs-catalog",
          "owner": "acs-team",
          "url": "https://github.com/acs-team/acs-catalog"
        },
        "pullRequest": null
      },
      "pipeline": {
        "provider": "github-actions",
        "workflowName": "E2E Tests",
        "workflowId": "30001",
        "jobName": "run-tests",
        "jobId": null,
        "pipelineId": "30001",
        "pipelineNumber": "100",
        "runAttempt": 1,
        "actor": "deploy-bot"
      },
      "execution": {
        "cliVersion": "1.29.5",
        "system": {
          "os": "linux 6.12.46-66.121.amzn2023.aarch64",
          "cpus": 8,
          "memoryMb": 31492
        }
      },
      "summary": {
        "totalRequests": 29,
        "failedRequests": 0,
        "totalAssertions": 97,
        "failedAssertions": 0,
        "durationMs": 12268
      },
      "performance": {
        "minResponseMs": 305.3381669999999,
        "maxResponseMs": 1951.075459
      }
    },
    {
      "id": "c23b8c02-540e-4428-8de7-5bb3db0d88e5",
      "status": "failed",
      "timestamp": "2026-04-16T03:56:37.757Z",
      "collection": {
        "id": "12345678-528df970-ceec-45a5-9f72-187ea19ff53b",
        "name": "[E2E] Access Control Service #E2ETesting"
      },
      "environment": {
        "id": "9b83df88-9b5c-445b-ac23-460c37897340",
        "name": "[PROD] API Control Service"
      },
      "source": {
        "branch": "feature/add-auth",
        "commitSha": "b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3",
        "repo": {
          "name": "api-catalog-service",
          "owner": "acs-team",
          "url": "https://github.com/acs-team/api-catalog-service"
        },
        "pullRequest": {
          "number": 42,
          "title": "Add OAuth2 authentication",
          "status": "open",
          "author": "john-dev",
          "baseBranch": "develop",
          "headBranch": "feature/add-auth"
        }
      },
      "pipeline": {
        "provider": "github-actions",
        "workflowName": "E2E Tests",
        "workflowId": "30002",
        "jobName": "run-tests",
        "jobId": null,
        "pipelineId": "30002",
        "pipelineNumber": "101",
        "runAttempt": 1,
        "actor": "john-dev"
      },
      "execution": {
        "cliVersion": "1.29.5",
        "system": {
          "os": "linux 5.15.0-1051-aws",
          "cpus": 4,
          "memoryMb": 15746
        }
      },
      "summary": {
        "totalRequests": 29,
        "failedRequests": 0,
        "totalAssertions": 97,
        "failedAssertions": 1,
        "durationMs": 12341
      },
      "performance": {
        "minResponseMs": 303.39554099999987,
        "maxResponseMs": 1959.3894169999999
      }
    },
    {
      "id": "661b381f-1a7a-4e00-a9f6-0458ce77ecb1",
      "status": "failed",
      "timestamp": "2026-04-16T03:56:05.307Z",
      "collection": {
        "id": "12345678-528df970-ceec-45a5-9f72-187ea19ff53b",
        "name": "[PROD] API Control Service"
      },
      "environment": {
        "id": "9b83df88-9b5c-445b-ac23-460c37897340",
        "name": "[PROD] API Control Service"
      },
      "source": {
        "branch": "feature/add-auth",
        "commitSha": "c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
        "repo": {
          "name": "acs-catalog",
          "owner": "acs-team",
          "url": "https://github.com/acs-team/acs-catalog"
        },
        "pullRequest": {
          "number": 42,
          "title": "Add OAuth2 authentication",
          "status": "open",
          "author": "john-dev",
          "baseBranch": "develop",
          "headBranch": "feature/add-auth"
        }
      },
      "pipeline": {
        "provider": "github-actions",
        "workflowName": "E2E Tests",
        "workflowId": "30003",
        "jobName": "run-tests",
        "jobId": null,
        "pipelineId": "30003",
        "pipelineNumber": "102",
        "runAttempt": 2,
        "actor": "john-dev"
      },
      "execution": {
        "cliVersion": "1.29.5",
        "system": {
          "os": "linux 5.15.0-1051-aws",
          "cpus": 4,
          "memoryMb": 15746
        }
      },
      "summary": {
        "totalRequests": 29,
        "failedRequests": 0,
        "totalAssertions": 97,
        "failedAssertions": 1,
        "durationMs": 13334
      },
      "performance": {
        "minResponseMs": 327.5639169999995,
        "maxResponseMs": 2275.2597920000003
      }
    }
  ]
}
```

**SDK Code**

```python Successful Response
import requests

url = "https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs"

querystring = {"systemEnvironmentId":"23b554c1-c30c-483d-bf98-dbe9ab7b88a0"}

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript Successful Response
const url = 'https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs?systemEnvironmentId=23b554c1-c30c-483d-bf98-dbe9ab7b88a0';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Successful Response
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs?systemEnvironmentId=23b554c1-c30c-483d-bf98-dbe9ab7b88a0"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Successful Response
require 'uri'
require 'net/http'

url = URI("https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs?systemEnvironmentId=23b554c1-c30c-483d-bf98-dbe9ab7b88a0")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java Successful Response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs?systemEnvironmentId=23b554c1-c30c-483d-bf98-dbe9ab7b88a0")
  .header("x-api-key", "<apiKey>")
  .asString();
```

```php Successful Response
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs?systemEnvironmentId=23b554c1-c30c-483d-bf98-dbe9ab7b88a0', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Successful Response
using RestSharp;

var client = new RestClient("https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs?systemEnvironmentId=23b554c1-c30c-483d-bf98-dbe9ab7b88a0");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Successful Response
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.postman.com/api-catalog/services/c6ec74e7-14f8-498c-9470-7a654173bed6/ci-runs?systemEnvironmentId=23b554c1-c30c-483d-bf98-dbe9ab7b88a0")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```