---
title: "The es-python CI driver script"
method: GET
path: "/ci.sh"
tags: ["CI"]
---

# The es-python CI driver script

`GET /ci.sh`

## Request

- Base URL: `https://eyalsec.com`
- URL: `https://eyalsec.com/ci.sh`
- Auth: none required

A POSIX sh script that installs es-python on a CI runner with your API key (POST /api/ci/install/), runs your test command under it, then asks GET /api/ci/findings/ what the run reported and exits non-zero when anything is at or above your threshold. It is static text with no secret in it; the API key is read from EYALSEC_API_KEY at run time. Run it with sh, never source it. See the Run es-python in CI page of the guide.

Needs no authentication.

## Response `200`

OK.

## Other responses

- `429`: A rate limit was hit, or the account is locked after wrong passwords. Retry-After gives the seconds to wait.
- `default`: An error. Check the status first; the body carries a short message, as JSON ({"error": "..."}) on most endpoints and as plain text on some. 400: malformed JSON, an invalid regex, an unreadable cursor or date, or an unknown value. 401: the API key is missing, wrong, revoked or expired. 403: a failed CSRF check, a read-only key trying to write, a product or feature not enabled on your account, a wrong password, or a write on an account limited to reading. 404: not found, including things that belong to another account. 409: conflict with the current state. 422: a field is missing or invalid. 429: a rate limit was hit, or the account is locked after wrong passwords. 500: something failed on our side.

---

[API](https://skmtc.dev/eyalsec/apis/eyalsec-api.md) · [All operations](https://skmtc.dev/eyalsec/apis/eyalsec-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eyalsec/apis/eyalsec-api/revisions/dc7520689cf1?raw)
