REST API endpoints for self-hosted runner groups

Use the REST API to interact with self-hosted runner groups for GitHub Actions.

About self-hosted runner groups in GitHub Actions

You can use the REST API to manage groups of self-hosted runners in GitHub Actions. For more information, see Managing access to self-hosted runners using groups.

These endpoints are available for authenticated users, OAuth apps, and GitHub Apps. Access tokens require repo scope for private repositories and public_repo scope for public repositories. GitHub Apps must have the administration permission for repositories or the organization_self_hosted_runners permission for organizations. Authenticated users must have admin access to repositories or organizations, or the manage_runners:enterprise scope for enterprises to use these endpoints.

Note

Most endpoints use Authorization: Bearer <YOUR-TOKEN> and Accept: application/vnd.github+json headers, plus X-GitHub-Api-Version: 2026-03-10. Curl examples below omit these standard headers for brevity.

List self-hosted runner groups for an organization

GET /orgs/{org}/actions/runner-groups

Lists all self-hosted runner groups configured in an organization and inherited from an enterprise.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/actions/runner-groups

Response schema (Status: 200):

Create a self-hosted runner group for an organization

POST /orgs/{org}/actions/runner-groups

Creates a new self-hosted runner group for an organization.
OAuth tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

Body parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X POST \
  https://api.github.com/orgs/ORG/actions/runner-groups \
  -d '{
  "name": "Expensive hardware runners",
  "visibility": "selected",
  "selected_repository_ids": [
    32,
    91
  ],
  "runners": [
    9,
    2
  ]
}'

Response schema (Status: 201):

Get a self-hosted runner group for an organization

GET /orgs/{org}/actions/runner-groups/{runner_group_id}

Gets a specific self-hosted runner group for an organization.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID

Response schema (Status: 200):

Same response schema as Create a self-hosted runner group for an organization.

Update a self-hosted runner group for an organization

PATCH /orgs/{org}/actions/runner-groups/{runner_group_id}

Updates the name and visibility of a self-hosted runner group in an organization.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

Body parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X PATCH \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID \
  -d '{
  "name": "Expensive hardware runners",
  "visibility": "selected"
}'

Response schema (Status: 200):

Same response schema as Create a self-hosted runner group for an organization.

Delete a self-hosted runner group from an organization

DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}

Deletes a self-hosted runner group for an organization.
OAuth tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID

Response schema (Status: 204):

List GitHub-hosted runners in a group for an organization

GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners

Lists the GitHub-hosted runners in an organization group.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/hosted-runners

Response schema (Status: 200):

List repository access to a self-hosted runner group in an organization

GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories

Lists the repositories with access to a self-hosted runner group configured in an organization.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/repositories

Response schema (Status: 200):

Set repository access for a self-hosted runner group in an organization

PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories

Replaces the list of repositories that have access to a self-hosted runner group configured in an organization.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

Body parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X PUT \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/repositories \
  -d '{
  "selected_repository_ids": [
    32,
    91
  ]
}'

Response schema (Status: 204):

Add repository access to a self-hosted runner group in an organization

PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}

Adds a repository to the list of repositories that can access a self-hosted runner group. The runner group must have visibility set to selected. For more information, see "Create a self-hosted runner group for an organization."
OAuth tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X PUT \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/repositories/REPOSITORY_ID

Response schema (Status: 204):

Remove repository access to a self-hosted runner group in an organization

DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}

Removes a repository from the list of selected repositories that can access a self-hosted runner group. The runner group must have visibility set to selected. For more information, see "Create a self-hosted runner group for an organization."
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/repositories/REPOSITORY_ID

Response schema (Status: 204):

List self-hosted runners in a group for an organization

GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners

Lists self-hosted runners that are in a specific organization group.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/runners

Response schema (Status: 200):

Set self-hosted runners in a group for an organization

PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners

Replaces the list of self-hosted runners that are part of an organization runner group.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

Body parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X PUT \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/runners \
  -d '{
  "runners": [
    9,
    2
  ]
}'

Response schema (Status: 204):

Add a self-hosted runner to a group for an organization

PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id}

Adds a self-hosted runner to a runner group configured in an organization.
OAuth tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X PUT \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/runners/RUNNER_ID

Response schema (Status: 204):

Remove a self-hosted runner from a group for an organization

DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id}

Removes a self-hosted runner from a group configured in an organization. The runner is then returned to the default group.
OAuth app tokens and personal access tokens (classic) need the admin:org scope to use this endpoint.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/orgs/ORG/actions/runner-groups/RUNNER_GROUP_ID/runners/RUNNER_ID

Response schema (Status: 204):