CircleCI Agentic Access
CircleCI exposes 74 API operations that an AI agent could call, of which 30 are state-changing ‘acting’ operations. This is a recommended x-agentic-access execution contract — the scope, audience, consequence tier, short-lived token constraints, and escalation each action should carry before it is handed to an autonomous agent.
By consequence: 44 read, 26 write, and 4 physical.
Contracts are classified heuristically from the provider’s OpenAPI and refresh on every APIs.io network build; audience is bound per deployment. The model follows Curity’s Access Intelligence (apidays Munich 2026). Browse every provider’s agent contracts at agentic-access.apis.io.
By consequence
Highest-consequence actions
The physical and safety-critical operations an agent could invoke — the ones that most warrant scoped tokens, tight TTLs, and escalation. Full per-operation contracts are in the source below.
| Method | Path | Consequence | Human-in-loop |
|---|---|---|---|
| POST | /project/{project-slug}/checkout-key | physical | conditional |
| DELETE | /project/{project-slug}/checkout-key/{fingerprint} | physical | conditional |
| POST | /project/{vcs-type}/{username}/{project}/checkout-key | physical | conditional |
| DELETE | /project/{vcs-type}/{username}/{project}/checkout-key/{fingerprint} | physical | conditional |
Source
Agentic Access
generated: '2026-07-15'
method: generated
source: openapi/circleci-rest-api-v1-openapi.yml, openapi/circleci-rest-api-v2-openapi.yml,
openapi/circleci-runner-api-openapi.yml
description: Recommended x-agentic-access execution contracts, classified heuristically from
the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind
audience per deployment. See research/curity/agentic-governance/.
summary:
operations: 74
by_action_class:
connected: 44
acting: 30
by_consequence:
read: 44
write: 26
physical: 4
human_in_the_loop_required: 0
operations:
- path: /me
method: get
operationId: getCurrentUser
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /projects
method: get
operationId: listProjects
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}
method: get
operationId: listProjectBuilds
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}
method: post
operationId: triggerBuild
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{vcs-type}/{username}/{project}/tree/{branch}
method: post
operationId: triggerBranchBuild
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{vcs-type}/{username}/{project}/{build_num}
method: get
operationId: getBuild
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}/{build_num}/retry
method: post
operationId: retryBuild
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{vcs-type}/{username}/{project}/{build_num}/cancel
method: post
operationId: cancelBuild
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{vcs-type}/{username}/{project}/{build_num}/artifacts
method: get
operationId: listBuildArtifacts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}/latest/artifacts
method: get
operationId: listLatestArtifacts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}/{build_num}/tests
method: get
operationId: listBuildTests
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}/ssh-key
method: post
operationId: addSSHKey
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{vcs-type}/{username}/{project}/checkout-key
method: get
operationId: listCheckoutKeys
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}/checkout-key
method: post
operationId: createCheckoutKey
x-agentic-access:
action-class: acting
consequence: physical
subject: required
audience: null
token:
max-ttl: 300
exchange: true
purpose-required: true
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{vcs-type}/{username}/{project}/checkout-key/{fingerprint}
method: get
operationId: getCheckoutKey
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{vcs-type}/{username}/{project}/checkout-key/{fingerprint}
method: delete
operationId: deleteCheckoutKey
x-agentic-access:
action-class: acting
consequence: physical
subject: required
audience: null
token:
max-ttl: 300
exchange: true
purpose-required: true
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{vcs-type}/{username}/{project}/follow
method: post
operationId: followProject
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /recent-builds
method: get
operationId: listRecentBuilds
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /me
method: get
operationId: getCurrentUser
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /me/collaborations
method: get
operationId: getCollaborations
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /context
method: get
operationId: listContexts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /context
method: post
operationId: createContext
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /context/{context-id}
method: get
operationId: getContext
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /context/{context-id}
method: delete
operationId: deleteContext
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /context/{context-id}/environment-variable
method: get
operationId: listContextEnvironmentVariables
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /context/{context-id}/environment-variable/{env-var-name}
method: put
operationId: addOrUpdateContextEnvironmentVariable
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /context/{context-id}/environment-variable/{env-var-name}
method: delete
operationId: deleteContextEnvironmentVariable
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /pipeline
method: get
operationId: listPipelines
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /pipeline/continue
method: post
operationId: continuePipeline
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /pipeline/{pipeline-id}
method: get
operationId: getPipeline
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /pipeline/{pipeline-id}/config
method: get
operationId: getPipelineConfig
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /pipeline/{pipeline-id}/workflow
method: get
operationId: listPipelineWorkflows
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}
method: get
operationId: getProject
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/pipeline
method: get
operationId: listProjectPipelines
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/pipeline
method: post
operationId: triggerPipeline
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{project-slug}/pipeline/mine
method: get
operationId: listMyProjectPipelines
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/checkout-key
method: get
operationId: listCheckoutKeys
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/checkout-key
method: post
operationId: createCheckoutKey
x-agentic-access:
action-class: acting
consequence: physical
subject: required
audience: null
token:
max-ttl: 300
exchange: true
purpose-required: true
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{project-slug}/checkout-key/{fingerprint}
method: get
operationId: getCheckoutKey
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/checkout-key/{fingerprint}
method: delete
operationId: deleteCheckoutKey
x-agentic-access:
action-class: acting
consequence: physical
subject: required
audience: null
token:
max-ttl: 300
exchange: true
purpose-required: true
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{project-slug}/envvar
method: get
operationId: listProjectEnvironmentVariables
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/envvar
method: post
operationId: createProjectEnvironmentVariable
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{project-slug}/envvar/{name}
method: get
operationId: getProjectEnvironmentVariable
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/envvar/{name}
method: delete
operationId: deleteProjectEnvironmentVariable
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{project-slug}/job/{job-number}
method: get
operationId: getJob
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/job/{job-number}/cancel
method: post
operationId: cancelJob
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /project/{project-slug}/{job-number}/artifacts
method: get
operationId: listJobArtifacts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/{job-number}/tests
method: get
operationId: listJobTests
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /workflow/{id}
method: get
operationId: getWorkflow
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /workflow/{id}/approve/{approval_request_id}
method: post
operationId: approveWorkflowJob
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /workflow/{id}/cancel
method: post
operationId: cancelWorkflow
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /workflow/{id}/rerun
method: post
operationId: rerunWorkflow
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /workflow/{id}/job
method: get
operationId: listWorkflowJobs
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /insights/{project-slug}/workflows
method: get
operationId: getProjectWorkflowMetrics
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /insights/{project-slug}/workflows/{workflow-name}
method: get
operationId: getWorkflowRuns
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /insights/{project-slug}/workflows/{workflow-name}/jobs
method: get
operationId: getWorkflowJobMetrics
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /insights/{project-slug}/workflows/{workflow-name}/test-metrics
method: get
operationId: getWorkflowTestMetrics
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/schedule
method: get
operationId: listSchedules
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /project/{project-slug}/schedule
method: post
operationId: createSchedule
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /schedule/{schedule-id}
method: get
operationId: getSchedule
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /schedule/{schedule-id}
method: patch
operationId: updateSchedule
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /schedule/{schedule-id}
method: delete
operationId: deleteSchedule
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /webhook
method: get
operationId: listWebhooks
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /webhook
method: post
operationId: createWebhook
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /webhook/{webhook-id}
method: get
operationId: getWebhook
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /webhook/{webhook-id}
method: put
operationId: updateWebhook
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /webhook/{webhook-id}
method: delete
operationId: deleteWebhook
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /runner
method: get
operationId: listRunners
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /runner/tasks
method: get
operationId: getUnclaimedTaskCount
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /runner/tasks/running
method: get
operationId: getRunningTaskCount
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /runner/resource-class
method: get
operationId: listResourceClasses
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /runner/resource-class
method: post
operationId: createResourceClass
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /runner/resource-class/{resource-class}
method: get
operationId: getResourceClass
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /runner/resource-class/{resource-class}
method: delete
operationId: deleteResourceClass
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required