Stitchflow
CircleCI logo

CircleCI User Management API Guide

API workflow

How to automate user lifecycle operations through APIs with caveats that matter in production.

UpdatedMar 4, 2026

Summary and recommendation

CircleCI exposes user and org management through its v2 REST API (base URL: https://circleci.com/api/v2), authenticated via a personal API token passed as the Circle-Token header or HTTP Basic Auth username. Tokens inherit the full permissions of the creating user - there are no OAuth scopes or fine-grained token permissions.

Org-scoped endpoints require an org admin token and the org's UUID (not slug), which must be retrieved first via GET /api/v2/me/collaborations. For teams managing CircleCI alongside a broader SaaS portfolio, Stitchflow's MCP server with ~100 deep IT/identity integrations provides a unified layer over this API without requiring custom connector maintenance.

API quick reference

Has user APIYes
Auth methodAPI Token (HTTP header: Circle-Token or HTTP Basic Auth with token as username)
Base URLOfficial docs
SCIM availableNo
SCIM plan requiredScale (Enterprise)

Authentication

Auth method: API Token (HTTP header: Circle-Token or HTTP Basic Auth with token as username)

Setup steps

  1. Log in to CircleCI and navigate to User Settings > Personal API Tokens.
  2. Click 'Create New Token', provide a name, and copy the generated token.
  3. Include the token in API requests via the header: 'Circle-Token: ' or as the HTTP Basic Auth username with an empty password.
  4. For org-level automation, create an organization-level context or use a machine user's token.

Required scopes

Scope Description Required for
N/A (Personal API Token) CircleCI personal API tokens do not use OAuth scopes; they inherit the permissions of the creating user. All API operations on behalf of the token owner

User object / data model

Field Type Description On create On update Notes
id string (UUID) Unique identifier for the user. system-generated immutable Used to reference the user in API calls.
login string The user's VCS login/username (e.g., GitHub or Bitbucket username). derived from VCS immutable via API Tied to the connected VCS account.
name string Display name of the user. derived from VCS not updatable via API Pulled from the connected VCS provider.
avatar_url string (URL) URL to the user's avatar image. derived from VCS not updatable via API

Core endpoints

Get current user (authenticated token owner)

  • Method: GET
  • URL: https://circleci.com/api/v2/me
  • Watch out for: Returns info for the token owner only; cannot retrieve arbitrary users by ID via this endpoint.

Request example

GET /api/v2/me
Circle-Token: <token>

Response example

{
  "id": "uuid-...",
  "login": "jdoe",
  "name": "Jane Doe",
  "avatar_url": "https://..."
}

Get collaborations (orgs the user belongs to)

  • Method: GET
  • URL: https://circleci.com/api/v2/me/collaborations
  • Watch out for: Lists orgs the authenticated user is a member of; not a full org member roster.

Request example

GET /api/v2/me/collaborations
Circle-Token: <token>

Response example

[
  {
    "id": "uuid-...",
    "vcs_type": "github",
    "name": "my-org",
    "avatar_url": "https://...",
    "slug": "gh/my-org"
  }
]

List org members

  • Method: GET
  • URL: https://circleci.com/api/v2/org/{orgID}/members
  • Watch out for: Requires org admin permissions. Use the org UUID (not slug) in the path.

Request example

GET /api/v2/org/{orgID}/members
Circle-Token: <token>

Response example

{
  "items": [
    {"id": "uuid-...", "login": "jdoe", "name": "Jane Doe"}
  ],
  "next_page_token": "token123"
}

Get org member details

  • Method: GET
  • URL: https://circleci.com/api/v2/org/{orgID}/members/{userID}
  • Watch out for: Role values are CircleCI-internal roles (admin, contributor, etc.), not VCS roles.

Request example

GET /api/v2/org/{orgID}/members/{userID}
Circle-Token: <token>

Response example

{
  "id": "uuid-...",
  "login": "jdoe",
  "name": "Jane Doe",
  "role": "contributor"
}

Remove org member

  • Method: DELETE
  • URL: https://circleci.com/api/v2/org/{orgID}/members/{userID}
  • Watch out for: Irreversible via API; the user must be re-invited. Requires org admin token.

Request example

DELETE /api/v2/org/{orgID}/members/{userID}
Circle-Token: <token>

Response example

HTTP 204 No Content

List org groups (roles/teams)

  • Method: GET
  • URL: https://circleci.com/api/v2/org/{orgID}/groups
  • Watch out for: Groups/roles feature availability may depend on plan tier.

Request example

GET /api/v2/org/{orgID}/groups
Circle-Token: <token>

Response example

{
  "items": [
    {"id": "uuid-...", "name": "developers", "member_count": 5}
  ],
  "next_page_token": null
}

Get user by ID

  • Method: GET
  • URL: https://circleci.com/api/v2/user/{id}
  • Watch out for: Only returns basic profile info. The token owner must have visibility of the user.

Request example

GET /api/v2/user/{id}
Circle-Token: <token>

Response example

{
  "id": "uuid-...",
  "login": "jdoe",
  "name": "Jane Doe",
  "avatar_url": "https://..."
}

List project users (followers)

  • Method: GET
  • URL: https://circleci.com/api/v1.1/project/{vcs-type}/{username}/{project}/users
  • Watch out for: This is a v1.1 endpoint (legacy). CircleCI v1.1 is deprecated but still functional. Prefer v2 endpoints where available.

Request example

GET /api/v1.1/project/github/my-org/my-repo/users
Circle-Token: <token>

Response example

[
  {"login": "jdoe", "avatar_url": "https://..."}
]

Rate limits, pagination, and events

  • Rate limits: CircleCI enforces rate limits on API v2 endpoints. The documented limit is 1,000 requests per minute per user token for most endpoints. Some endpoints may have lower limits.
  • Rate-limit headers: Yes
  • Retry-After header: No
  • Rate-limit notes: When rate limited, the API returns HTTP 429. CircleCI recommends exponential backoff. Specific header names for rate limit state are not publicly documented.
  • Pagination method: token
  • Default page size: 20
  • Max page size: 100
  • Pagination pointer: page-token
Plan Limit Concurrent
All plans 1,000 requests/minute per token 0
  • Webhooks available: Yes
  • Webhook notes: CircleCI supports outbound webhooks that fire on pipeline/workflow/job events. There are no user-management-specific webhook events (e.g., no event for user added/removed).
  • Alternative event strategy: Poll the org members API to detect membership changes, or use an IdP (Okta, Entra ID, OneLogin) with SSO to manage user lifecycle events.
  • Webhook events: workflow-completed, job-completed

SCIM API status

  • SCIM available: No
  • SCIM version: Not documented
  • Plan required: Scale (Enterprise)
  • Endpoint: Not documented

Limitations:

  • CircleCI does not offer a native SCIM 2.0 endpoint as of the current documentation.
  • User provisioning/deprovisioning must be handled via SSO (SAML/OIDC) with supported IdPs (Okta, Entra ID, OneLogin) or via the REST API.
  • The Scale/Enterprise plan is required for SSO-based user management.
  • No automated SCIM provisioning; users are created on first SSO login (JIT provisioning).

Common scenarios

Three automation scenarios are well-supported by the v2 API. First, org membership audits: paginate GET /api/v2/org/{orgID}/members using the cursor-based page-token parameter until next_page_token is null, collecting id, login, name, and role per member.

Second, offboarding: call DELETE /api/v2/org/{orgID}/members/{userID} with an org admin token, then confirm removal with a follow-up GET expecting a 404 - but note this does not revoke the user's personal API tokens, which must be handled separately.

Third, cross-org membership discovery: use GET /api/v2/me/collaborations scoped to the target user's own token, as no admin endpoint exists to enumerate orgs for an arbitrary user. Some project-user endpoints remain on the legacy v1.

1 API and should be treated as stable-but-deprecated.

Audit all members of a CircleCI organization

  1. Authenticate with a personal API token belonging to an org admin.
  2. Call GET /api/v2/me/collaborations to retrieve the org UUID for the target organization.
  3. Call GET /api/v2/org/{orgID}/members to list all members, paginating with 'page-token' until 'next_page_token' is null.
  4. Record each member's id, login, name, and role for the audit report.

Watch out for: The token must belong to an org admin; non-admin tokens will receive a 403. Use the UUID from collaborations, not the slug.

Remove a departed employee from a CircleCI org

  1. Obtain the user's CircleCI user UUID (from the org members list or HR system mapping).
  2. Call DELETE /api/v2/org/{orgID}/members/{userID} with an org admin token.
  3. Verify removal by calling GET /api/v2/org/{orgID}/members/{userID} and confirming a 404 response.
  4. If SSO is enabled, also deprovision the user in the IdP (Okta/Entra/OneLogin) to prevent re-login.

Watch out for: Removing via API does not revoke any personal API tokens the user created. Those must be revoked separately through the UI or by the user.

Identify which orgs a user belongs to (self-service)

  1. Have the user generate a personal API token in CircleCI User Settings.
  2. Call GET /api/v2/me to confirm identity.
  3. Call GET /api/v2/me/collaborations to list all orgs and VCS accounts the token owner is a member of.
  4. Use the returned org slugs and IDs for further org-scoped API calls.

Watch out for: This only works for the token owner; there is no admin endpoint to list all orgs for an arbitrary user.

Why building this yourself is a trap

Several API behaviors create silent failure modes worth flagging explicitly. User invitation is not available via the API at all - invites must be sent through the web UI or via SSO. SCIM 2.0 is not natively supported; user lifecycle management falls back to SSO JIT provisioning (Scale plan required) or direct REST API calls.

Rate limits cap at 1,000 requests per minute per token with HTTP 429 responses, but retry-after headers are not documented - exponential backoff must be implemented defensively. Finally, DELETE /api/v2/org/{orgID}/members/{userID} is immediate and irreversible through the API; re-adding the user requires a manual re-invite through the UI.

Automate CircleCI workflows without one-off scripts

Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.

Every app coverage, including apps without APIs
60+ app integrations plus browser automation for apps without APIs
IT graph reconciliation across apps and your IdP
Less than a week to launch, maintained as APIs and admin consoles change
SOC 2 Type II. ~2 hours of your team's time

UpdatedMar 4, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

Abnormal Security logo

Abnormal Security

API Only
AutomationAPI only
Last updatedMar 2026

Abnormal Security is an enterprise email security platform focused on detecting and investigating threats such as phishing, account takeover (ATO), and vendor email compromise. It does not support SCIM provisioning, which means every app in your stack

ActiveCampaign logo

ActiveCampaign

API Only
AutomationAPI only
Last updatedFeb 2026

ActiveCampaign uses a group-based permission model: every user belongs to exactly one group, and all feature-area access (Contacts, Campaigns, Automations, Deals, Reports, Templates) is configured at the group level, not per individual. The default Adm

ADP logo

ADP

API Only
AutomationAPI only
Last updatedFeb 2026

ADP Workforce Now is a mid-market to enterprise HCM platform that serves as the HR source of record for employee data — payroll, benefits, time, and talent. User access is governed by a hybrid permission model: predefined security roles (Security Maste