Continuous Integration — entry 004 of 5

CircleCI

Verified Jul 2026

CircleCI's REST API triggers and inspects pipelines, workflows, and jobs, and manages projects, contexts, and self-hosted runners. The stored v1-reference docs URL now 404s live — CircleCI has fully moved API documentation to v2, whose own v1 docs page carries a banner recommending migration to v2 endpoints — so the URL was corrected to the current v2 reference. Authentication is reconfirmed as a personal API token: an unauthenticated GET to api/v2/me returned 401, and that same response (plus its OPTIONS preflight) carried no access-control-allow-origin header at all despite a Vary: Origin header, resolving CORS to closed rather than open. CircleCI's pricing page offers a Free plan (30,000 monthly credits, more for open source) alongside paid Performance plans, making it freemium.

ci-cddevopsautomationpipelinesbuild-automation
AuthenticationAPI KeySign up with the provider to obtain credentials.
HTTPSSupportedTraffic is encrypted in transit.
CORSDisabledBrowser calls need a server-side proxy.
PricingFreemiumA usable free tier exists, with paid plans for more volume.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score81out of 100
Authentication15/25API key required
Pricing17/20Freemium tier available
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 81 on greatapis.com
<a href="https://greatapis.com/api/circleci/"><img src="https://greatapis.com/badge/circleci.svg" alt="Scored 81 on greatapis.com"></a>

Auth quickstart

  1. Get a key at the provider
  2. Send it on every request as a headerAuthorization: <key>
  3. The exact header isn't documented — Authorization is a common default; confirm in the provider's docs.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Servers
https://circleci.com/api/v2
Auth
api_key_headerbearer_authbasic_authapi_key_query
Context10

Endpoints relating to [contexts](https://circleci.com/docs/contexts/). Use contexts to secure and share environment variables.

GET/contextList contexts
Parameters
NameInRequiredType
owner-idquerynostring
owner-slugquerynostring
owner-typequerynostring
page-tokenquerynostring
Responses
StatusDescriptionSchema
200A paginated list of contextscontext_list
401——
404——
429——
500——
POST/contextCreate a new context
Request body

application/json — context_created

Responses
StatusDescriptionSchema
200The new context—
401——
404——
429——
500——
GET/context/{context_id}Get a context
Parameters
NameInRequiredType
context_idpathyesstring
Responses
StatusDescriptionSchema
200The contextcontext
401——
404——
429——
500——
DELETE/context/{context_id}Delete a context
Parameters
NameInRequiredType
context_idpathyesstring
Responses
StatusDescriptionSchema
200A confirmation messagedelete_context_response
401——
404——
429——
500——
GET/context/{context_id}/environment-variableList environment variables
Parameters
NameInRequiredType
context_idpathyesstring
page-tokenquerynostring
Responses
StatusDescriptionSchema
200A paginated list of environment variablesenv_var_list
401——
404——
429——
500——
PUT/context/{context_id}/environment-variable/{env_var_name}Add or update an environment variable
Parameters
NameInRequiredType
context_idpathyesstring
env_var_namepathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200The new environment variableupdate_env_var
401——
404——
429——
500——
DELETE/context/{context_id}/environment-variable/{env_var_name}Remove an environment variable
Parameters
NameInRequiredType
context_idpathyesstring
env_var_namepathyesstring
Responses
StatusDescriptionSchema
200A confirmation messagedelete_env_var
401——
404——
429——
500——
GET/context/{context_id}/restrictionsGet context restrictions
Parameters
NameInRequiredType
context_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.context_project_restrictions_list
400——
401——
404——
429——
500——
POST/context/{context_id}/restrictionsCreate context restriction
Parameters
NameInRequiredType
context_idpathyesstring
Request body

application/json (required)

Responses
StatusDescriptionSchema
201Successful response.restriction_created
400Bad request.—
401——
404——
409Request conflict.—
429——
500——
DELETE/context/{context_id}/restrictions/{restriction_id}Delete context restriction
Parameters
NameInRequiredType
context_idpathyesstring
restriction_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.restriction_deleted
400——
401——
404——
429——
500——
Insights10

Endpoints relating to [Insights](https://circleci.com/docs/insights/). Use Insights to monitor credit and compute usage for your projects.

GET/insights/pages/{project-slug}/summaryGet summary metrics and trends for a project across it's workflows and branches
Parameters
NameInRequiredType
project-slugpathyesstring
reporting-windowquerynostring
branchesquerynoobject
workflow-namesquerynoobject
Responses
StatusDescriptionSchema
200Aggregated summary metrics and trends by workflow and branches—
defaultError response.—
GET/insights/time-series/{project-slug}/workflows/{workflow-name}/jobsJob timeseries data
Parameters
NameInRequiredType
project-slugpathyesstring
workflow-namepathyesstring
branchquerynostring
granularityquerynostring
start-datequerynostring
end-datequerynostring
Responses
StatusDescriptionSchema
200An array of timeseries data, one entry per job.—
defaultError response.—
GET/insights/{org-slug}/summaryGet summary metrics with trends for the entire org, and for each project.
Parameters
NameInRequiredType
org-slugpathyesstring
reporting-windowquerynostring
project-namesquerynoobject
Responses
StatusDescriptionSchema
200summary metrics with trends for an entire org and it's projects.—
defaultError response.—
GET/insights/{project-slug}/branchesGet all branches for a project
Parameters
NameInRequiredType
project-slugpathyesstring
workflow-namequerynostring
Responses
StatusDescriptionSchema
200A list of branches for a project—
defaultError response.—
GET/insights/{project-slug}/flaky-testsGet flaky tests for a project
Parameters
NameInRequiredType
project-slugpathyesstring
Responses
StatusDescriptionSchema
200A list of flaky tests for a project—
defaultError response.—
GET/insights/{project-slug}/workflowsGet summary metrics for a project's workflows
Parameters
NameInRequiredType
project-slugpathyesstring
page-tokenquerynostring
all-branchesquerynoboolean
branchquerynostring
reporting-windowquerynostring
Responses
StatusDescriptionSchema
200A paginated list of summary metrics by workflow—
defaultError response.—
GET/insights/{project-slug}/workflows/{workflow-name}Get recent runs of a workflow
Parameters
NameInRequiredType
project-slugpathyesstring
workflow-namepathyesstring
all-branchesquerynoboolean
branchquerynostring
page-tokenquerynostring
start-datequerynostring
end-datequerynostring
Responses
StatusDescriptionSchema
200A paginated list of recent workflow runs—
defaultError response.—
GET/insights/{project-slug}/workflows/{workflow-name}/jobsGet summary metrics for a project workflow's jobs.
Parameters
NameInRequiredType
project-slugpathyesstring
workflow-namepathyesstring
page-tokenquerynostring
all-branchesquerynoboolean
branchquerynostring
reporting-windowquerynostring
job-namequerynostring
Responses
StatusDescriptionSchema
200A paginated list of summary metrics by workflow job.—
defaultError response.—
GET/insights/{project-slug}/workflows/{workflow-name}/summaryGet metrics and trends for workflows
Parameters
NameInRequiredType
project-slugpathyesstring
workflow-namepathyesstring
all-branchesquerynoboolean
branchquerynostring
Responses
StatusDescriptionSchema
200Metrics and trends for a workflow—
defaultError response.—
GET/insights/{project-slug}/workflows/{workflow-name}/test-metricsGet test metrics for a project's workflows
Parameters
NameInRequiredType
project-slugpathyesstring
workflow-namepathyesstring
branchquerynostring
all-branchesquerynoboolean
Responses
StatusDescriptionSchema
200A list of test metrics by workflow—
defaultError response.—
User3

A set of endpoints you can use to get information about a specific user.

GET/meUser Information
Responses
StatusDescriptionSchema
200User login information.—
defaultError response.—
GET/me/collaborationsCollaborations
Responses
StatusDescriptionSchema
200Collaborations—
defaultError response.—
GET/user/{id}User Information
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200User login information.—
defaultError response.—
Pipeline11

Endpoints relating to [pipelines](https://circleci.com/docs/pipelines/). Get information about your pipelines. Trigger or continue a pipeline.

GET/pipelineGet a list of pipelines
Parameters
NameInRequiredType
org-slugquerynostring
page-tokenquerynostring
minequerynoboolean
Responses
StatusDescriptionSchema
200A sequence of pipelines.—
defaultError response.—
POST/pipeline/continueContinue a pipeline
Request body

application/json

Responses
StatusDescriptionSchema
200A confirmation message.—
defaultError response.—
GET/pipeline/{pipeline-id}Get a pipeline by ID
Parameters
NameInRequiredType
pipeline-idpathyesstring
Responses
StatusDescriptionSchema
200A pipeline object.—
defaultError response.—
GET/pipeline/{pipeline-id}/configGet a pipeline's configuration
Parameters
NameInRequiredType
pipeline-idpathyesstring
Responses
StatusDescriptionSchema
200The configuration strings for the pipeline.—
defaultError response.—
GET/pipeline/{pipeline-id}/workflowGet a pipeline's workflows
Parameters
NameInRequiredType
pipeline-idpathyesstring
page-tokenquerynostring
Responses
StatusDescriptionSchema
200A paginated list of workflow objects.—
defaultError response.—
GET/pipeline/{pipeline_id}/valuesGet pipeline values for a pipeline
Parameters
NameInRequiredType
pipeline_idpathyesstring
Responses
StatusDescriptionSchema
200A JSON object of pipeline values.pipelineValues
400——
401——
404——
500——
GET/project/{project-slug}/pipelineGet all pipelines
Parameters
NameInRequiredType
project-slugpathyesstring
branchquerynostring
page-tokenquerynostring
Responses
StatusDescriptionSchema
200A sequence of pipelines.—
defaultError response.—
POST/project/{project-slug}/pipelineTrigger a new pipeline
Parameters
NameInRequiredType
project-slugpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
201The created pipeline.—
defaultError response.—
GET/project/{project-slug}/pipeline/mineGet your pipelines
Parameters
NameInRequiredType
project-slugpathyesstring
page-tokenquerynostring
Responses
StatusDescriptionSchema
200A sequence of pipelines.—
defaultError response.—
GET/project/{project-slug}/pipeline/{pipeline-number}Get a pipeline by pipeline number
Parameters
NameInRequiredType
project-slugpathyesstring
pipeline-numberpathyes—
Responses
StatusDescriptionSchema
200A pipeline object.—
defaultError response.—
POST/project/{provider}/{organization}/{project}/pipeline/run[Recommended] Trigger a new pipeline
Parameters
NameInRequiredType
providerpathyesstring
organizationpathyesstring
projectpathyesstring
Request body

application/json — triggerPipelineRequest

Responses
StatusDescriptionSchema
200Successful response with no created pipeline.pipelineNotTriggeredResponse
201Successful response.pipelineTriggeredResponse
400——
401——
404——
Job3

Endpoints relating to [jobs](https://circleci.com/docs/jobs-steps/). Get information about your jobs, retrieve job assets, cancel a job.

POST/jobs/{job-id}/cancelCancel job by job ID
Parameters
NameInRequiredType
job-idpathyesstring
Responses
StatusDescriptionSchema
200Job cancelled successfully.—
400Bad request error.—
401Unauthorized error.—
403Forbidden error.—
404Job not found error.—
defaultError response.—
GET/jobs/{job_id}Get a job
Parameters
NameInRequiredType
job_idpathyesstring
Responses
StatusDescriptionSchema
200Job fetched successfullygetJobResponse
400——
401——
404——
429——
500——
POST/project/{project-slug}/job/{job-number}/cancelCancel job by job number
Parameters
NameInRequiredType
job-numberpathyes—
project-slugpathyesstring
Responses
StatusDescriptionSchema
200—
defaultError response.—
Workflow5

Endpoints relating to [workflows](https://circleci.com/docs/workflows/). Get information about your workflows, or interact with them to rerun, cancel or approve a job.

GET/workflow/{id}Get a workflow
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200A workflow object.workflow
400——
401——
404——
429——
500——
POST/workflow/{id}/approve/{approval_request_id}Approve a job
Parameters
NameInRequiredType
approval_request_idpathyesstring
idpathyesstring
Responses
StatusDescriptionSchema
202A confirmation message.—
defaultError response.—
POST/workflow/{id}/cancelCancel a workflow
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
202A confirmation message.—
defaultError response.—
GET/workflow/{id}/jobGet a workflow's jobs
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200A paginated sequence of jobs.—
defaultError response.—
POST/workflow/{id}/rerunRerun a workflow
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
202A confirmation message.—
defaultError response.—
OIDC Token Management6

Endpoints related to manage oidc identity tokens

GET/org/{orgID}/oidc-custom-claimsGet org-level claims
Parameters
NameInRequiredType
orgIDpathyesstring
Responses
StatusDescriptionSchema
200Claims successfully fetched.ClaimResponse
400——
403——
500——
PATCH/org/{orgID}/oidc-custom-claimsPatch org-level claims
Parameters
NameInRequiredType
orgIDpathyesstring
Request body

application/json — PatchClaimsRequest

Responses
StatusDescriptionSchema
200Claims successfully patched.ClaimResponse
400——
403——
500——
DELETE/org/{orgID}/oidc-custom-claimsDelete org-level claims
Parameters
NameInRequiredType
orgIDpathyesstring
claimsqueryyesstring
Responses
StatusDescriptionSchema
200Claims successfully deleted.ClaimResponse
400——
403——
500——
GET/org/{orgID}/project/{projectID}/oidc-custom-claimsGet project-level claims
Parameters
NameInRequiredType
orgIDpathyesstring
projectIDpathyesstring
Responses
StatusDescriptionSchema
200Claims successfully fetched.ClaimResponse
400——
403——
500——
PATCH/org/{orgID}/project/{projectID}/oidc-custom-claimsPatch project-level claims
Parameters
NameInRequiredType
orgIDpathyesstring
projectIDpathyesstring
Request body

application/json — PatchClaimsRequest

Responses
StatusDescriptionSchema
200Claims successfully patched.ClaimResponse
400——
403——
500——
DELETE/org/{orgID}/project/{projectID}/oidc-custom-claimsDelete project-level claims
Parameters
NameInRequiredType
orgIDpathyesstring
projectIDpathyesstring
claimsqueryyesstring
Responses
StatusDescriptionSchema
200Claims successfully deleted.ClaimResponse
400——
403——
500——
Policy Management9

Endpoints related to managing policies and making policy decisions

GET/owner/{ownerID}/context/{context}/decisionRetrieves the owner's decision audit logs.
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
statusquerynostring
afterquerynostring
beforequerynostring
branchquerynostring
project_idquerynostring
build_numberquerynostring
offsetquerynointeger
Responses
StatusDescriptionSchema
200Decision logs successfully retrieved.—
400——
401——
403——
500——
POST/owner/{ownerID}/context/{context}/decisionMakes a decision
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200Decision rendered by applying the policy against the provided data. Response will be modeled by the data and rego processed.Decision
400The request is malformed —
401The request is unauthorized —
500Something unexpected happened on the server.—
GET/owner/{ownerID}/context/{context}/decision/settingsGet the decision settings
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
Responses
StatusDescriptionSchema
200Decision settings successfully retrieved.DecisionSettings
400——
401——
403——
500——
PATCH/owner/{ownerID}/context/{context}/decision/settingsSet the decision settings
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
Request body

application/json — DecisionSettings

Responses
StatusDescriptionSchema
200Decision settings successfully set.DecisionSettings
400——
401——
403——
500——
GET/owner/{ownerID}/context/{context}/decision/{decisionID}Retrieves the owner's decision audit log by given decisionID
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
decisionIDpathyesstring
Responses
StatusDescriptionSchema
200Decision log successfully retrieved.DecisionLog
400——
401——
403——
404There was no decision log found for given decision_id, and owner_id. —
500——
GET/owner/{ownerID}/context/{context}/decision/{decisionID}/policy-bundleRetrieves Policy Bundle for a given decision log ID
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
decisionIDpathyesstring
Responses
StatusDescriptionSchema
200Policy-Bundle retrieved successfully for given decision log IDPolicyBundle
400——
401——
403——
404There was no decision log found for given decision_id, and owner_id. —
500——
GET/owner/{ownerID}/context/{context}/policy-bundleRetrieves Policy Bundle
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
Responses
StatusDescriptionSchema
200Policy-Bundle retrieved successfully.PolicyBundle
400——
401——
403——
500——
POST/owner/{ownerID}/context/{context}/policy-bundleCreates policy bundle for the context
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
dryquerynoboolean
Request body

application/json — BundlePayload

Responses
StatusDescriptionSchema
200Policy-Bundle diff successfully returned.BundleDiff
201Policy-Bundle successfully created.BundleDiff
400——
401——
403——
413The request exceeds the maximum payload size for policy bundles ~2.5Mib —
500——
GET/owner/{ownerID}/context/{context}/policy-bundle/{policyName}Retrieves a policy document
Parameters
NameInRequiredType
ownerIDpathyesstring
contextpathyesstring
policyNamepathyesstring
Responses
StatusDescriptionSchema
200Policy retrieved successfully.Policy
400——
401——
403——
404There was no policy that was found with the given owner_id and policy name. —
500——
Deploy5

Endpoints related to deploy management.

GET/deploy/componentsList Components
Parameters
NameInRequiredType
org-idqueryyesstring
project-idquerynostring
page-sizequeryyesinteger
page-tokenquerynostring
Responses
StatusDescriptionSchema
200Paginated components listpaginatedComponentList
400——
404——
500——
GET/deploy/components/{component_id}Get Component
Parameters
NameInRequiredType
component_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.component
400——
404——
500——
GET/deploy/components/{component_id}/versionsList Component Versions
Parameters
NameInRequiredType
component_idpathyesstring
environment-idquerynostring
Responses
StatusDescriptionSchema
200Paginated component versions listpaginatedComponentVersionList
400——
404——
500——
GET/deploy/environmentsList Environments
Parameters
NameInRequiredType
org-idqueryyesstring
page-sizequeryyesinteger
page-tokenquerynostring
Responses
StatusDescriptionSchema
200Paginated environments listpaginatedEnvironmentList
400——
404——
500——
GET/deploy/environments/{environment_id}Get Environment
Parameters
NameInRequiredType
environment_idpathyesstring
Responses
StatusDescriptionSchema
200Environmentenvironment
400——
404——
500——
OTel3

[__EXPERIMENTAL__] Endpoints related to managing OpenTelemetry exporter configurations.

GET/otel/exporters🧪 List OTLP exporters
Parameters
NameInRequiredType
org-idqueryyesstring
Responses
StatusDescriptionSchema
200List of OTLP exporters.exporterList
400——
401——
404——
500——
POST/otel/exporters🧪 Create an OTLP exporter
Request body

application/json — createExporterRequest (required)

Responses
StatusDescriptionSchema
201OTLP exporter created.exporter
400——
401——
404——
500——
DELETE/otel/exporters/{otel_exporter_id}🧪 Delete an OTLP exporter
Parameters
NameInRequiredType
otel_exporter_idpathyesstring
Responses
StatusDescriptionSchema
204OTLP exporter deleted.—
400——
401——
404——
500——
Pipeline Definition5

Endpoints related to creating and managing pipeline definitions.

GET/projects/{project_id}/pipeline-definitionsList pipeline definitions
Parameters
NameInRequiredType
project_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.pipelineDefinitionList
400——
401——
404——
500——
POST/projects/{project_id}/pipeline-definitionsCreate pipeline definition
Parameters
NameInRequiredType
project_idpathyesstring
Request body

application/json — createPipelineDefinitionRequest

Responses
StatusDescriptionSchema
200Successful response.pipelineDefinition
400——
401——
404——
500——
GET/projects/{project_id}/pipeline-definitions/{pipeline_definition_id}Get pipeline definition
Parameters
NameInRequiredType
project_idpathyesstring
pipeline_definition_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.pipelineDefinition
400——
401——
404——
500——
PATCH/projects/{project_id}/pipeline-definitions/{pipeline_definition_id}Update pipeline definition
Parameters
NameInRequiredType
project_idpathyesstring
pipeline_definition_idpathyesstring
Request body

application/json — updatePipelineDefinitionRequest

Responses
StatusDescriptionSchema
200Successful response.pipelineDefinition
400——
401——
404——
500——
DELETE/projects/{project_id}/pipeline-definitions/{pipeline_definition_id}Delete pipeline definition
Parameters
NameInRequiredType
project_idpathyesstring
pipeline_definition_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.pipelineDefinitionDeleted
400——
401——
404——
500——
Project13

Endpoints related to creating and managing a project.

POST/organization/{org-slug-or-id}/projectCreate a new project
Parameters
NameInRequiredType
org-slug-or-idpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200The new project—
defaultError response.—
GET/project/{project-slug}Get a project
Parameters
NameInRequiredType
project-slugpathyesstring
Responses
StatusDescriptionSchema
200A project object—
defaultError response.—
DELETE/project/{project-slug}Delete a project
Parameters
NameInRequiredType
project-slugpathyesstring
Responses
StatusDescriptionSchema
200A confirmation message.—
defaultError response.—
GET/project/{project-slug}/checkout-keyGet all checkout keys
Parameters
NameInRequiredType
project-slugpathyesstring
digestquerynostring
Responses
StatusDescriptionSchema
200A sequence of checkout keys.—
defaultError response.—
POST/project/{project-slug}/checkout-keyCreate a new checkout key
Parameters
NameInRequiredType
project-slugpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
201The checkout key.—
defaultError response.—
GET/project/{project-slug}/checkout-key/{fingerprint}Get a checkout key
Parameters
NameInRequiredType
project-slugpathyesstring
fingerprintpathyesstring
Responses
StatusDescriptionSchema
200The checkout key.—
defaultError response.—
DELETE/project/{project-slug}/checkout-key/{fingerprint}Delete a checkout key
Parameters
NameInRequiredType
project-slugpathyesstring
fingerprintpathyesstring
Responses
StatusDescriptionSchema
200A confirmation message.—
defaultError response.—
GET/project/{project-slug}/envvarList all environment variables
Parameters
NameInRequiredType
project-slugpathyesstring
Responses
StatusDescriptionSchema
200A sequence of environment variables.—
defaultError response.—
POST/project/{project-slug}/envvarCreate an environment variable
Parameters
NameInRequiredType
project-slugpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
201The environment variable.—
defaultError response.—
GET/project/{project-slug}/envvar/{name}Get a masked environment variable
Parameters
NameInRequiredType
project-slugpathyesstring
namepathyesstring
Responses
StatusDescriptionSchema
200The environment variable.—
defaultError response.—
DELETE/project/{project-slug}/envvar/{name}Delete an environment variable
Parameters
NameInRequiredType
project-slugpathyesstring
namepathyesstring
Responses
StatusDescriptionSchema
200A confirmation message.—
defaultError response.—
GET/project/{provider}/{organization}/{project}/settingsGet project settings
Parameters
NameInRequiredType
providerpathyesstring
organizationpathyesstring
projectpathyesstring
Responses
StatusDescriptionSchema
200Successful response.project_settings
401——
403——
404——
429——
500——
PATCH/project/{provider}/{organization}/{project}/settingsUpdate project settings
Parameters
NameInRequiredType
providerpathyesstring
organizationpathyesstring
projectpathyesstring
Request body

application/json — project_settings (required)

Responses
StatusDescriptionSchema
200Successful response. Always includes the full advanced settings object. Returned even when the provided updates match the existing settings, but can also be returned when `oss: true` fails to set.project_settings
400Request is malformed, e.g. with improperly encoded JSON—
401——
403——
404——
429——
500——
Rollback1

Endpoints related to creating and managing a rollback.

POST/projects/{project_id}/rollbackRollback a project
Parameters
NameInRequiredType
project_idpathyesstring
Request body

application/json — rollbackProjectRequest (required)

Responses
StatusDescriptionSchema
202Rollback request accepted.rollbackProjectResponse
400——
404——
409——
500——
Trigger5

Endpoints related to creating and managing triggers.

GET/projects/{project_id}/pipeline-definitions/{pipeline_definition_id}/triggersList pipeline definition triggers
Parameters
NameInRequiredType
project_idpathyesstring
pipeline_definition_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.triggerList
400——
401——
404——
500——
POST/projects/{project_id}/pipeline-definitions/{pipeline_definition_id}/triggersCreate trigger
Parameters
NameInRequiredType
project_idpathyesstring
pipeline_definition_idpathyesstring
Request body

application/json — createTriggerRequest

Responses
StatusDescriptionSchema
200Successful response.trigger
400——
401——
404——
500——
GET/projects/{project_id}/triggers/{trigger_id}Get trigger
Parameters
NameInRequiredType
project_idpathyesstring
trigger_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.trigger
400——
401——
404——
500——
PATCH/projects/{project_id}/triggers/{trigger_id}Update trigger
Parameters
NameInRequiredType
project_idpathyesstring
trigger_idpathyesstring
Request body

application/json — updateTriggerRequest

Responses
StatusDescriptionSchema
200Successful response.trigger
400——
401——
404——
500——
DELETE/projects/{project_id}/triggers/{trigger_id}Delete trigger
Parameters
NameInRequiredType
project_idpathyesstring
trigger_idpathyesstring
Responses
StatusDescriptionSchema
200Successful response.triggerDeleted
400——
401——
404——
500——
Usage2

Endpoints related to organization usage exports. The Usage API is an API provided by CircleCI to customers to access all of their usage data on CircleCI. It contains all the metadata (org, project, pipeline, workflow, and job dimensions) as well as credit consumption data. It is provided at the near lowest level of granularity (at the job run level). __Restrictions__ * Max result set size of 100MB * Query timeout of 4 hours. * Max date window of 32 days * 13 months of historical data is available * No PII is surfaced in the Usage API (e.g. email address, Github login name) * The POST endpoint can only be queried up to (i.e. is rate limited to) 10 times per hour per org * The GET endpoint can only be queried up to (i.e. is rate limited to) 10 times per hour per org * To increase performance the API can generate multiple CSV files that need to be merged after download __Requirements__ * organization ID - To get your organization ID go to to Organization Settings tab in the CircleCI app. ie https://app.circleci.com/settings/organization/<vcs>/<org name>/overview * API Personal Access Token - https://circleci.com/docs/managing-api-tokens/ __Report Fields__ | | Field | Description | |---------------------------------------|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | organization_id | The org ID | | | organization_name | The org name | | | organization_created_date | The date (UTC) that the org was created | | Project-level attributes | project_id | The project ID / token | | | project_name | The project name. For classic orgs, the project name is inherited from Github. For standalone, the org is set by the user. | | | project_created_date | The date (UTC) that the project was created. For classic orgs, this is the date that the repo was authorized on CircleCI. For standalone orgs, this is the date that the project was created on CircleCI | | | last_build_finished_at | The date (UTC) of the last pipeline run on this project | | Pipeline-level attributes | vcs_name | The name of the VCS connected to the project on which the pipeline was run | | | vcs_url | The URL of the VCS on which the pipeline was run | | | vcs_branch | The branch on which the pipeline was run | | | pipeline_id | The ID of the pipeline instance that was triggered. If a pipeline is re-run, it will share the same pipeline ID as the original pipeline instance | | | pipeline_created_at | The date (UTC) the pipeline instance was first triggered | | | pipeline_number | The pipeline number | | | is_unregistered_user | Y/N flag of whether the pipeline was triggered by a CircleCI user or a user not registered on CircleCI. Examples of the latter include users who commit on a connected VCS and consume credits on CircleCI. | | | pipeline_trigger_source | The source of the pipeline instance trigger (API, webhook, etc.) | | | pipeline_trigger_user_id | The user ID / token of the user who triggered the pipeline | | Workflow-level attributes | workflow_id | The ID of the workflow instance that was triggered | | | workflow_name | The name of the workflow | | | workflow_first_job_queued_at | The timestamp (UTC) of when the workflow instance started to queue | | | workflow_first_job_started_at | The timestamp (UTC) of when the workflow instance started to run | | | workflow_stopped_at | The timestamp (UTC) of when the workflow instance stopped | | | is_workflow_successful | Y/N flag of whether all jobs in the workflow were successfully ran | | Job-level attributes | job_name | The name of the job (the name the customer sees in the UI) | | | job_id | The ID of the job run instance that was triggered | | | job_run_number | The number of the job run instance that was triggered | | | job_run_date | The date (UTC) of the job run instance began | | | job_run_queued_at | The timestamp (UTC) of when the job started to queue | | | job_run_started_at | The timestamp (UTC) of when the job started to run | | | job_run_stopped_at | The timestamp (UTC) of when the job stopped | | | job_build_status | The status of the job run instance | | | resource_class | The resource class of the job run instance | | | operating_system | The operating system of the job run instance | | | executor | The executor of the job run instance | | | parallelism | The parallelism of the job run instance | | | job_run_seconds | The duration in seconds of the job run instance | | | median_cpu_utilization_pct | The median CPU utilization calculated over the course of the entire job run instance. CPU utilization is logged every 15 seconds. It will not be available for any jobs under 15 seconds and occasionally will not be available for jobs greater than 15 seconds. | | | max_cpu_utilization_pct | The max CPU utilization logged over the course of the entire job run instance. CPU utilization is logged every 15 seconds. It will not be available for any jobs under 15 seconds and occasionally will not be available for jobs greater than 15 seconds. | | | median_ram_utilization_pct | The median RAM utilization calculated over the course of the entire job run instance. RAM utilization is logged every 15 seconds. It will not be available for any jobs under 15 seconds and occasionally will not be available for jobs greater than 15 seconds. | | | max_ram_utilization_pct | The max RAM utilization logged over the course of the entire job run instance. RAM utilization is logged every 15 seconds. It will not be available for any jobs under 15 seconds and occasionally will not be available for jobs greater than 15 seconds. | | Credit consumption metrics | compute_credits | The compute credits consumed by this job run instance | | | dlc_credits | The docker-layer caching credits consumed by this job run instance | | | user_credits | The user credits consumed by this job run instance | | | storage_credits | The storage credits consumed by this job run instance. Note: When an organization is below its allocated storage threshold, a job that uses storage will have 0 storage credits applied. The organization's included storage threshold can be found on the [CircleCI web app](https://app.circleci.com/home) by navigating to **Plan > Plan Usage**. | | | network_credits | The network credits consumed by this job run instance | | | lease_credits | The lease credits consumed by this job run instance | | | lease_overage_credits | The lease overage credits consumed by this job run instance | | | ipranges_credits | The IP ranges credits consumed by this job run instance | | | total_credits | The total credits consumed by this job run instance |

POST/organizations/{org_id}/usage_export_jobCreate a usage export
Parameters
NameInRequiredType
org_idpathyesstring
Request body

application/json (required)

Responses
StatusDescriptionSchema
201Usage export created successfullyusage_export_job
400——
401——
404——
429——
500——
GET/organizations/{org_id}/usage_export_job/{usage_export_job_id}Get a usage export
Parameters
NameInRequiredType
org_idpathyesstring
usage_export_job_idpathyesstring
Responses
StatusDescriptionSchema
200Usage export fetched successfullyget_usage_export_job_status
400——
401——
404——
429——
500——
Webhook5

Endpoints related to creating and managing outbound webhooks.

GET/webhookList webhooks
Parameters
NameInRequiredType
scope-idqueryyesstring
scope-typequeryyesstring
Responses
StatusDescriptionSchema
200A list of webhooks.webhookList
400——
404——
500——
POST/webhookCreate an outbound webhook
Request body

application/json — createWebhookRequest (required)

Responses
StatusDescriptionSchema
201A webhook.webhook
400——
404——
500——
GET/webhook/{webhook_id}Get a webhook
Parameters
NameInRequiredType
webhook_idpathyesstring
Responses
StatusDescriptionSchema
200A webhook.webhook
400——
401——
404——
500——
PUT/webhook/{webhook_id}Update an outbound webhook
Parameters
NameInRequiredType
webhook_idpathyesstring
Request body

application/json — updateWebhookRequest (required)

Responses
StatusDescriptionSchema
200A webhook.webhook
400——
401——
404——
500——
DELETE/webhook/{webhook_id}Delete an outbound webhook
Parameters
NameInRequiredType
webhook_idpathyesstring
Responses
StatusDescriptionSchema
200A confirmation message.webhookDeleted
400——
401——
404——
500——
Groups4
GET/organizations/{org_id}/groupsGroups in an organization
Parameters
NameInRequiredType
org_idpathyesstring
limitquerynointeger
page-tokenquerynostring
Responses
StatusDescriptionSchema
200Successfully get all the groups in an organization. Results are paginated.groups
403——
404——
500——
POST/organizations/{org_id}/groupsCreate Groups
Parameters
NameInRequiredType
org_idpathyesstring
Request body

application/json (required)

Responses
StatusDescriptionSchema
201Successful creation of a group.group
400——
401——
403——
404——
409——
500——
GET/organizations/{org_id}/groups/{group_id}A group in an organization
Parameters
NameInRequiredType
org_idpathyesstring
group_idpathyesstring
Responses
StatusDescriptionSchema
200Successfully gets a group. Members not included.group
403——
404——
500——
DELETE/organizations/{org_id}/groups/{group_id}Delete a group
Parameters
NameInRequiredType
org_idpathyesstring
group_idpathyesstring
Responses
StatusDescriptionSchema
200Successful deletion of a group.—
401——
403——
404——
500——
Organization6
POST/organizationCreate a new organization
Request body

application/json

Responses
StatusDescriptionSchema
201The newly created organization—
defaultError response.—
GET/organization/{org-slug-or-id}Get an organization
Parameters
NameInRequiredType
org-slug-or-idpathyesstring
Responses
StatusDescriptionSchema
200An organization object—
defaultError response.—
DELETE/organization/{org-slug-or-id}Delete an organization
Parameters
NameInRequiredType
org-slug-or-idpathyesstring
Responses
StatusDescriptionSchema
202A confirmation message.—
defaultError response.—
GET/organization/{org-slug-or-id}/url-orb-allow-listList the entries in the org's URL Orb allow-list
Parameters
NameInRequiredType
org-slug-or-idpathyesstring
Responses
StatusDescriptionSchema
200URL Orb allow-list entries—
defaultError response.—
POST/organization/{org-slug-or-id}/url-orb-allow-listCreate a new URL Orb allow-list entry
Parameters
NameInRequiredType
org-slug-or-idpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200The ID of the new URL Orb allow-list entry—
defaultError response.—
DELETE/organization/{org-slug-or-id}/url-orb-allow-list/{allow-list-entry-id}Remove an entry from the org's URL orb allow-list
Parameters
NameInRequiredType
org-slug-or-idpathyesstring
allow-list-entry-idpathyesstring
Responses
StatusDescriptionSchema
200The ID of the removed URL Orb allow-list entry—
defaultError response.—
Schedule5
GET/project/{project-slug}/scheduleList schedule triggers
Parameters
NameInRequiredType
project-slugpathyesstring
page-tokenquerynostring
Responses
StatusDescriptionSchema
200A sequence of schedules.—
defaultError response.—
POST/project/{project-slug}/scheduleCreate a schedule
Parameters
NameInRequiredType
project-slugpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
201A schedule object.—
defaultError response.—
GET/schedule/{schedule-id}Get a schedule by ID. Available only on schedules associated with GitHub OAuth or Bitbucket Cloud pipeline definitions.
Parameters
NameInRequiredType
schedule-idpathyesstring
Responses
StatusDescriptionSchema
200A schedule object.—
defaultError response.—
PATCH/schedule/{schedule-id}Update a schedule
Parameters
NameInRequiredType
schedule-idpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200A schedule object.—
defaultError response.—
DELETE/schedule/{schedule-id}Delete a schedule
Parameters
NameInRequiredType
schedule-idpathyesstring
Responses
StatusDescriptionSchema
200A confirmation message.—
defaultError response.—

Try it

Developer reference

Base URLhttps://circleci.com/api/v2
Rate limit

CircleCI's API developer guide states it 'reserves the right to throttle the requests made by an individual user or to individual resources' to protect system stability, with different protections for different parts of the API — especially against sudden traffic bursts and sustained high-volume polling such as frequent status checks. A throttled request returns HTTP 429, usually accompanied by a Retry-After header giving the number of seconds to wait before retrying; CircleCI recommends handling this gracefully with exponential backoff rather than assuming a fixed per-endpoint quota.

Key endpoints
  • GET/me
  • GET/project/{project-slug}
  • POST/project/{project-slug}/pipeline
  • GET/project/{project-slug}/pipeline
  • GET/workflow/{id}/job

Changelog

Spec versionv2
Tracked paths76
  • Sep 2026content changed
  • Sep 2026content changed

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗