REST API endpoints for custom properties

Use the REST API to create and manage custom properties for an organization.

About custom properties

You can use the REST API to create and manage custom properties for an organization. You can use custom properties to add metadata to repositories in your organization. For more information, see Managing custom properties for repositories in your organization.

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 registered app installations for external custom properties

GET /orgs/{org}/properties/installations

Gets the registered GitHub App installations used to read and write external custom properties for an organization.
A GitHub App installation token will only be able to see its own registration info, whereas an authenticated user will be able to see all registrations for the organization.
To use this endpoint, the authenticated caller must have the organization_external_properties_for_repos:admin permission.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/properties/installations

Response schema (Status: 200):

Array of Organization External Custom Property Installation:

Register an app installation for external custom properties

POST /orgs/{org}/properties/installations

Registers a GitHub App installation so it can read and write external custom properties for an organization, and assigns it a display name.
The display name must be 1 to 15 characters and contain only letters and numbers. Capitalization is preserved as entered.
An app installation can only be registered once, and its display name can't be changed afterward. Calling with an app installation that has already been registered returns a 422 response with an already_exists error code for installation_id. If the display name is already in use by another app installation in the organization, the response is 422 with an already_exists error code for display_name. An invalid display name also returns 422.
The app installation being registered must have write or admin permission for organization external custom properties for repositories. If it doesn't, the response is 422. This is the permission of the installation being registered, which isn't necessarily the caller.
Uninstalling the GitHub App unregisters it, and removes the external custom properties it created.
To use this endpoint, the authenticated caller must have the organization_external_properties_for_repos:admin permission.

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/properties/installations \
  -d '{
  "installation_id": 67890,
  "display_name": "Acme"
}'

Response schema (Status: 201):

Get all external custom properties for a GitHub App installation in an organization

GET /orgs/{org}/properties/installations/schema

Gets all external custom properties defined for the authenticated GitHub App installation on an organization.
To use this endpoint, the authenticated GitHub App must have the organization_external_properties_for_repos:read permission.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/properties/installations/schema

Response schema (Status: 200):

Array of External Property:

Create or update external custom property values for organization repositories

PATCH /orgs/{org}/properties/installations/values

Create new or update existing external custom property values for repositories in a batch that belong to an organization.
Each target repository will have its external custom property values updated to match the values provided in the request.
A maximum of 30 repositories can be updated in a single request.
Using a value of null for an external custom property will remove or 'unset' the property value from the repository.
To use this endpoint, the authenticated GitHub App must have the organization_external_properties_for_repos:write permission.

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/properties/installations/values \
  -d '{
  "repository_names": [
    "Hello-World",
    "octo-repo"
  ],
  "properties": [
    {
      "property_name": "environment",
      "value": "production"
    },
    {
      "property_name": "service",
      "value": "web"
    },
    {
      "property_name": "team",
      "value": "octocat"
    }
  ]
}'

Response schema (Status: 204):

Create or update external custom property values for a property across organization repositories

PATCH /orgs/{org}/properties/installations/values/{property_name}

Create new or update existing external custom property values for a single named property across repositories that belong to an organization.
Up to 100 repository values can be updated in a single request. Repositories not included in the request are left unchanged.
Using a value of null for a repository will remove or 'unset' the property value for that repository. A request that only contains null values for a property that does not yet exist is a no-op.
To use this endpoint, the authenticated GitHub App must have the organization_external_properties_for_repos:write permission.

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/properties/installations/values/PROPERTY_NAME \
  -d '{
  "repository_values": [
    {
      "repository_name": "Hello-World",
      "value": "production"
    },
    {
      "repository_name": "octo-repo",
      "value": null
    }
  ]
}'

Response schema (Status: 204):

Remove all external custom property values for a property across all organization repositories

DELETE /orgs/{org}/properties/installations/values/{property_name}

Removes all external custom property values for a specified property name across all repositories that belong to an organization.
To use this endpoint, the authenticated GitHub App must have the organization_external_properties_for_repos:write permission.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/orgs/ORG/properties/installations/values/PROPERTY_NAME

Response schema (Status: 204):

Get all custom properties for an organization

GET /orgs/{org}/properties/schema

Gets all custom properties defined for an organization.
Organization members can read these properties.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/properties/schema

Response schema (Status: 200):

Array of Organization Custom Property:

Create or update custom properties for an organization

PATCH /orgs/{org}/properties/schema

Creates new or updates existing custom properties defined for an organization in a batch.
If the property already exists, the existing property will be replaced with the new values.
Missing optional values will fall back to default values, previous values will be overwritten.
E.g. if a property exists with values_editable_by: org_and_repo_actors and it's updated without specifying values_editable_by, it will be updated to default value org_actors.
To use this endpoint, the authenticated user must be one of:

An administrator for the organization.
A user, or a user on a team, with the fine-grained permission of custom_properties_org_definitions_manager in the organization.

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/properties/schema \
  -d '{
  "properties": [
    {
      "property_name": "environment",
      "value_type": "single_select",
      "required": true,
      "default_value": "production",
      "description": "Prod or dev environment",
      "allowed_values": [
        "production",
        "development"
      ],
      "values_editable_by": "org_actors"
    },
    {
      "property_name": "service",
      "value_type": "string"
    },
    {
      "property_name": "team",
      "value_type": "string",
      "description": "Team owning the repository"
    }
  ]
}'

Response schema (Status: 200):

Same response schema as Get all custom properties for an organization.

Get a custom property for an organization

GET /orgs/{org}/properties/schema/{custom_property_name}

Gets a custom property that is defined for an organization.
Organization members can read these properties.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/properties/schema/CUSTOM_PROPERTY_NAME

Response schema (Status: 200):

Create or update a custom property for an organization

PUT /orgs/{org}/properties/schema/{custom_property_name}

Creates a new or updates an existing custom property that is defined for an organization.
To use this endpoint, the authenticated user must be one of:

An administrator for the organization.
A user, or a user on a team, with the fine-grained permission of custom_properties_org_definitions_manager in the organization.

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/properties/schema/CUSTOM_PROPERTY_NAME \
  -d '{
  "value_type": "single_select",
  "required": true,
  "default_value": "production",
  "description": "Prod or dev environment",
  "allowed_values": [
    "production",
    "development"
  ]
}'

Response schema (Status: 200):

Same response schema as Get a custom property for an organization.

Remove a custom property for an organization

DELETE /orgs/{org}/properties/schema/{custom_property_name}

Removes a custom property that is defined for an organization.
To use this endpoint, the authenticated user must be one of:

An administrator for the organization.
A user, or a user on a team, with the fine-grained permission of custom_properties_org_definitions_manager in the organization.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X DELETE \
  https://api.github.com/orgs/ORG/properties/schema/CUSTOM_PROPERTY_NAME

Response schema (Status: 204):

List custom property values for organization repositories

GET /orgs/{org}/properties/values

Lists organization repositories with all of their custom property values.
Organization members can read these properties.

Parameters

Headers

Path and query parameters

HTTP response status codes

Code examples

Example

Request:

curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/properties/values

Response schema (Status: 200):

Array of Organization Repository Custom Property Values:

Create or update custom property values for organization repositories

PATCH /orgs/{org}/properties/values

Create new or update existing custom property values for repositories in a batch that belong to an organization.
Each target repository will have its custom property values updated to match the values provided in the request.
A maximum of 30 repositories can be updated in a single request.
Using a value of null for a custom property will remove or 'unset' the property value from the repository.
To use this endpoint, the authenticated user must be one of:

An administrator for the organization.
A user, or a user on a team, with the fine-grained permission of custom_properties_org_values_editor in the organization.

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/properties/values \
  -d '{
  "repository_names": [
    "Hello-World",
    "octo-repo"
  ],
  "properties": [
    {
      "property_name": "environment",
      "value": "production"
    },
    {
      "property_name": "service",
      "value": "web"
    },
    {
      "property_name": "team",
      "value": "octocat"
    }
  ]
}'

Response schema (Status: 204):