Use the REST API to interact with GitHub-hosted runners in GitHub Actions.
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.
GET /orgs/{org}/actions/hosted-runners
Lists all GitHub-hosted runners configured in an organization.
OAuth app tokens and personal access tokens (classic) need the manage_runner:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners
Response schema (Status: 200):
total_count: required, integerrunners: required, array of GitHub-hosted hosted runner:
id: required, integername: required, stringrunner_group_id: integerimage_details: required, any of:
id: required, stringsize_gb: required, integerdisplay_name: required, stringsource: required, string, enum: github, partner, customversion: stringmachine_size_details: required, Github-owned VM details.:
id: required, stringcpu_cores: required, integermemory_gb: required, integerstorage_gb: required, integerstatus: required, string, enum: Ready, Provisioning, Shutdown, Deleting, Stuckplatform: required, stringmaximum_runners: integer, default: 10public_ip_enabled: required, booleanpublic_ips: array of Public IP for a GitHub-hosted larger runners.:
enabled: booleanprefix: stringlength: integerlast_active_on: string or null, format: date-timeimage_gen: booleanPOST /orgs/{org}/actions/hosted-runners
Creates a GitHub-hosted runner for an organization.
OAuth tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)name (string) (required)
Name of the runner. Must be between 1 and 64 characters and may only contain upper and lowercase letters a-z, numbers 0-9, '.', '-', and '_'.
image (object) (required)
The image of runner. To list all available images, use GET /actions/hosted-runners/images/github-owned or GET /actions/hosted-runners/images/partner.
id (string)source (string)github, partner, customversion (string or null)size (string) (required)
The machine size of the runner. To list available sizes, use GET actions/hosted-runners/machine-sizes
runner_group_id (integer) (required)
The existing runner group to add this runner to.
maximum_runners (integer)
The maximum amount of runners to scale up to. Runners will not auto-scale above this number. Use this setting to limit your cost.
enable_static_ip (boolean)
Whether this runner should be created with a static public IP. Note limit on account. To list limits on account, use GET actions/hosted-runners/limits
image_gen (boolean)
Whether this runner should be used to generate custom images.
Default: false
Request:
curl -L \
-X POST \
https://api.github.com/orgs/ORG/actions/hosted-runners \
-d '{
"name": "My Hosted runner",
"image": {
"id": "ubuntu-latest",
"source": "github"
},
"runner_group_id": 1,
"size": "4-core",
"maximum_runners": 50,
"enable_static_ip": false
}'
Response schema (Status: 201):
id: required, integername: required, stringrunner_group_id: integerimage_details: required, any of:
id: required, stringsize_gb: required, integerdisplay_name: required, stringsource: required, string, enum: github, partner, customversion: stringmachine_size_details: required, Github-owned VM details.:
id: required, stringcpu_cores: required, integermemory_gb: required, integerstorage_gb: required, integerstatus: required, string, enum: Ready, Provisioning, Shutdown, Deleting, Stuckplatform: required, stringmaximum_runners: integer, default: 10public_ip_enabled: required, booleanpublic_ips: array of Public IP for a GitHub-hosted larger runners.:
enabled: booleanprefix: stringlength: integerlast_active_on: string or null, format: date-timeimage_gen: booleanGET /orgs/{org}/actions/hosted-runners/images/custom
List custom images for an organization.
OAuth tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/custom
Response schema (Status: 200):
total_count: required, integerimages: required, array of GitHub-hosted runner custom image details:
id: required, integerplatform: required, stringtotal_versions_size: required, integername: required, stringsource: required, stringversions_count: required, integerlatest_version: required, stringstate: required, stringGET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}
Get a custom image definition for GitHub Actions Hosted Runners.
OAuth tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
image_definition_id (integer) (required)
Image definition ID of custom image
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/custom/IMAGE_DEFINITION_ID
Response schema (Status: 200):
id: required, integerplatform: required, stringtotal_versions_size: required, integername: required, stringsource: required, stringversions_count: required, integerlatest_version: required, stringstate: required, stringDELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}
Delete a custom image from the organization.
OAuth tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
image_definition_id (integer) (required)
Image definition ID of custom image
Request:
curl -L \
-X DELETE \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/custom/IMAGE_DEFINITION_ID
Response schema (Status: 204):
GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions
List image versions of a custom image for an organization.
OAuth tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.image_definition_id (integer) (required)
Image definition ID of custom image
org (string) (required)
The organization name. The name is not case sensitive.
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/custom/IMAGE_DEFINITION_ID/versions
Response schema (Status: 200):
total_count: required, integerimage_versions: required, array of GitHub-hosted runner custom image version details.:
version: required, stringstate: required, stringsize_gb: required, integercreated_on: required, stringstate_details: required, stringGET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}
Get an image version of a custom image for GitHub Actions Hosted Runners.
OAuth tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
image_definition_id (integer) (required)
Image definition ID of custom image
version (string) (required)
Version of a custom image
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/custom/IMAGE_DEFINITION_ID/versions/VERSION
Response schema (Status: 200):
version: required, stringstate: required, stringsize_gb: required, integercreated_on: required, stringstate_details: required, stringDELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}
Delete an image version of custom image from the organization.
OAuth tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
image_definition_id (integer) (required)
Image definition ID of custom image
version (string) (required)
Version of a custom image
Request:
curl -L \
-X DELETE \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/custom/IMAGE_DEFINITION_ID/versions/VERSION
Response schema (Status: 204):
GET /orgs/{org}/actions/hosted-runners/images/github-owned
Get the list of GitHub-owned images available for GitHub-hosted runners for an organization.
accept (string)application/vnd.github+json is recommended.org (string) (required)Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/github-owned
Response schema (Status: 200):
total_count: required, integerimages: required, array of GitHub-hosted runner image details.:
id: required, stringplatform: required, stringsize_gb: required, integerdisplay_name: required, stringsource: required, string, enum: github, partner, customGET /orgs/{org}/actions/hosted-runners/images/partner
Get the list of partner images available for GitHub-hosted runners for an organization.
accept (string)application/vnd.github+json is recommended.org (string) (required)Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/images/partner
Response schema (Status: 200):
Same response schema as Get GitHub-owned images for GitHub-hosted runners in an organization.
GET /orgs/{org}/actions/hosted-runners/limits
Get the GitHub-hosted runners limits for an organization.
accept (string)application/vnd.github+json is recommended.org (string) (required)Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/limits
Response schema (Status: 200):
public_ips: required, Static public IP Limits for GitHub-hosted Hosted Runners.:
maximum: required, integercurrent_usage: required, integerGET /orgs/{org}/actions/hosted-runners/machine-sizes
Get the list of machine specs available for GitHub-hosted runners for an organization.
accept (string)application/vnd.github+json is recommended.org (string) (required)Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/machine-sizes
Response schema (Status: 200):
total_count: required, integermachine_specs: required, array of Github-owned VM details.:
id: required, stringcpu_cores: required, integermemory_gb: required, integerstorage_gb: required, integerGET /orgs/{org}/actions/hosted-runners/platforms
Get the list of platforms available for GitHub-hosted runners for an organization.
accept (string)application/vnd.github+json is recommended.org (string) (required)Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/platforms
Response schema (Status: 200):
total_count: required, integerplatforms: required, array of stringGET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}
Gets a GitHub-hosted runner configured in an organization.
OAuth app tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
hosted_runner_id (integer) (required)
Unique identifier of the GitHub-hosted runner.
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/actions/hosted-runners/HOSTED_RUNNER_ID
Response schema (Status: 200):
Same response schema as Create a GitHub-hosted runner for an organization.
PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}
Updates a GitHub-hosted runner for an organization.
OAuth app tokens and personal access tokens (classic) need the manage_runners:org scope to use this endpoint.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
hosted_runner_id (integer) (required)
Unique identifier of the GitHub-hosted runner.
name (string)
Name of the runner. Must be between 1 and 64 characters and may only contain upper and lowercase letters a-z, numbers 0-9, '.', '-', and '_'.
runner_group_id (integer)
The existing runner group to add this runner to.
maximum_runners (integer)
The maximum amount of runners to scale up to. Runners will not auto-scale above this number. Use this setting to limit your cost.
enable_static_ip (boolean)
Whether this runner should be updated with a static public IP. Note limit on account. To list limits on account, use GET actions/hosted-runners/limits
size (string)
The machine size of the runner. To list available sizes, use GET actions/hosted-runners/machine-sizes
image_source (string)
The source type of the runner image to use. Must match the source of the image specified by image_id. Can be one of github, partner, or custom.
Can be one of: github, partner, custom
image_id (string)
The unique identifier of the runner image. To list available images, use GET /actions/hosted-runners/images/github-owned, GET /actions/hosted-runners/images/partner, or GET /actions/hosted-runners/images/custom.
image_version (string or null)
The version of the runner image to deploy. This is relevant only for runners using custom images.
image_gen (boolean)
Whether to enable image generation for this runner pool. When enabled, the runner pool is used to build and publish custom runner images.
Request:
curl -L \
-X PATCH \
https://api.github.com/orgs/ORG/actions/hosted-runners/HOSTED_RUNNER_ID \
-d '{
"name": "My larger runner",
"runner_group_id": 1,
"maximum_runners": 50,
"enable_static_ip": false
}'
Response schema (Status: 200):
Same response schema as Create a GitHub-hosted runner for an organization.
DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}
Deletes a GitHub-hosted runner for an organization.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
hosted_runner_id (integer) (required)
Unique identifier of the GitHub-hosted runner.
Request:
curl -L \
-X DELETE \
https://api.github.com/orgs/ORG/actions/hosted-runners/HOSTED_RUNNER_ID
Response schema (Status: 202):
Same response schema as Create a GitHub-hosted runner for an organization.