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.
Get registered app installations for external custom properties
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.
Fine-grained access tokens for "Get registered app installations for external custom properties"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "External custom properties for repositories" organization permissions (admin)
Parameters for "Get registered app installations for external custom properties"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
HTTP response status codes for "Get registered app installations for external custom properties"
| Status code | Description |
|---|---|
200 | OK |
403 | Forbidden |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
Code samples for "Get registered app installations for external custom properties"
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/installationsResponse
Status: 200[
{
"value": {
"display_name": "Acme",
"installation": {
"id": 1
}
}
}
]Register an app installation for external custom properties
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.
Fine-grained access tokens for "Register an app installation for external custom properties"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "External custom properties for repositories" organization permissions (admin)
Parameters for "Register an app installation for external custom properties"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
| Name, Type, Description |
|---|
installation_id integer The unique identifier of the GitHub App installation to register for managing external custom properties. When authenticating as a GitHub App installation, this defaults to the authenticated installation and can be omitted. It is required for all other callers (users and fine-grained personal access tokens). |
display_name string RequiredThe display name for this app installation's external custom properties in the organization. Must be 1 to 15 characters and contain only letters and numbers. Capitalization is preserved as entered. This can't be changed after the app installation is registered. |
HTTP response status codes for "Register an app installation for external custom properties"
| Status code | Description |
|---|---|
201 | Created |
403 | Forbidden |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
Code samples for "Register an app installation for external custom properties"
Request example
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/installations \
-d '{"installation_id":67890,"display_name":"Acme"}'Response
Status: 201{
"display_name": "Acme",
"installation": {
"id": 1
}
}Get all external custom properties for a GitHub App installation in an organization
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.
Fine-grained access tokens for "Get all external custom properties for a GitHub App installation in an organization"
This endpoint works with the following fine-grained token types:
The fine-grained token must have the following permission set:
- "External custom properties for repositories" organization permissions (read)
Parameters for "Get all external custom properties for a GitHub App installation in an organization"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
HTTP response status codes for "Get all external custom properties for a GitHub App installation in an organization"
| Status code | Description |
|---|---|
200 | OK |
403 | Forbidden |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
Code samples for "Get all external custom properties for a GitHub App installation in an organization"
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/installations/schemaResponse
Status: 200[
{
"property_name": "environment"
},
{
"property_name": "business_unit"
}
]Create or update external custom property values for organization repositories
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.
Fine-grained access tokens for "Create or update external custom property values for organization repositories"
This endpoint works with the following fine-grained token types:
The fine-grained token must have the following permission set:
- "External custom properties for repositories" organization permissions (write)
Parameters for "Create or update external custom property values for organization repositories"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
| Name, Type, Description | |||
|---|---|---|---|
repository_names array of strings RequiredThe names of repositories that the external custom property values will be applied to. | |||
properties array of objects RequiredList of external custom property names and associated values to apply to the repositories. | |||
Properties of |
| Name, Type, Description |
|---|
property_name string RequiredThe name of the property |
value null or string or array RequiredThe value assigned to the property |
HTTP response status codes for "Create or update external custom property values for organization repositories"
| Status code | Description |
|---|---|
204 | No Content when external custom property values are successfully created or updated |
403 | Forbidden |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
Code samples for "Create or update external custom property values for organization repositories"
Request example
curl -L \
-X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
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"}]}'No Content when external custom property values are successfully created or updated
Status: 204Create or update external custom property values for a property across organization repositories
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.
Fine-grained access tokens for "Create or update external custom property values for a property across organization repositories"
This endpoint works with the following fine-grained token types:
The fine-grained token must have the following permission set:
- "External custom properties for repositories" organization permissions (write)
Parameters for "Create or update external custom property values for a property across organization repositories"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
property_name string RequiredThe name of the external custom property |
| Name, Type, Description | |||
|---|---|---|---|
repository_values array of objects RequiredThe names of repositories and the values that the named external custom property will be set to. | |||
Properties of |
| Name, Type, Description |
|---|
repository_name string RequiredThe name of the repository |
value string or null RequiredThe value assigned to the repository. Set to |
HTTP response status codes for "Create or update external custom property values for a property across organization repositories"
| Status code | Description |
|---|---|
204 | A header with no content is returned. |
403 | Forbidden |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
Code samples for "Create or update external custom property values for a property across organization repositories"
Request example
curl -L \
-X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
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}]}'A header with no content is returned.
Status: 204Remove all external custom property values for a property across all organization repositories
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.
Fine-grained access tokens for "Remove all external custom property values for a property across all organization repositories"
This endpoint works with the following fine-grained token types:
The fine-grained token must have the following permission set:
- "External custom properties for repositories" organization permissions (write)
Parameters for "Remove all external custom property values for a property across all organization repositories"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
property_name string RequiredThe name of the external custom property |
HTTP response status codes for "Remove all external custom property values for a property across all organization repositories"
| Status code | Description |
|---|---|
204 | A header with no content is returned. |
403 | Forbidden |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
Code samples for "Remove all external custom property values for a property across all organization repositories"
Request example
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/installations/values/PROPERTY_NAMEA header with no content is returned.
Status: 204Get all custom properties for an organization
Gets all custom properties defined for an organization. Organization members can read these properties.
Fine-grained access tokens for "Get all custom properties for an organization"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Custom properties" organization permissions (read)
Parameters for "Get all custom properties for an organization"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
HTTP response status codes for "Get all custom properties for an organization"
| Status code | Description |
|---|---|
200 | OK |
403 | Forbidden |
404 | Resource not found |
Code samples for "Get all custom properties for an organization"
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/schemaResponse
Status: 200[
{
"property_name": "environment",
"url": "https://api.github.com/orgs/github/properties/schema/environment",
"source_type": "organization",
"value_type": "single_select",
"required": true,
"default_value": "production",
"description": "Prod or dev environment",
"allowed_values": [
"production",
"development"
],
"values_editable_by": "org_actors",
"require_explicit_values": true
},
{
"property_name": "service",
"url": "https://api.github.com/orgs/github/properties/schema/service",
"source_type": "organization",
"value_type": "string"
},
{
"property_name": "team",
"url": "https://api.github.com/orgs/github/properties/schema/team",
"source_type": "organization",
"value_type": "string",
"description": "Team owning the repository"
}
]Create or update custom properties for an organization
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_managerin the organization.
Fine-grained access tokens for "Create or update custom properties for an organization"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Custom properties" organization permissions (admin)
Parameters for "Create or update custom properties for an organization"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
| Name, Type, Description | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
properties array of objects RequiredThe array of custom properties to create or update. | |||||||||||
Properties of |
| Name, Type, Description |
|---|
property_name string RequiredThe name of the property |
url string The URL that can be used to fetch, update, or delete info about this property via the API. |
source_type string The source type of the property Can be one of: |
value_type string RequiredThe type of the value for the property Can be one of: |
required boolean Whether the property is required. |
default_value null or string or array Default value of the property |
description string or null Short description of the property |
allowed_values array of strings or null An ordered list of the allowed values of the property. The property can have up to 200 allowed values. |
values_editable_by string or null Who can edit the values of the property Can be one of: |
require_explicit_values boolean Whether setting properties values is mandatory |
HTTP response status codes for "Create or update custom properties for an organization"
| Status code | Description |
|---|---|
200 | OK |
403 | Forbidden |
404 | Resource not found |
Code samples for "Create or update custom properties for an organization"
Request example
curl -L \
-X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
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
Status: 200[
{
"property_name": "environment",
"url": "https://api.github.com/orgs/github/properties/schema/environment",
"source_type": "organization",
"value_type": "single_select",
"required": true,
"default_value": "production",
"description": "Prod or dev environment",
"allowed_values": [
"production",
"development"
],
"values_editable_by": "org_actors",
"require_explicit_values": true
},
{
"property_name": "service",
"url": "https://api.github.com/orgs/github/properties/schema/service",
"source_type": "organization",
"value_type": "string"
},
{
"property_name": "team",
"url": "https://api.github.com/orgs/github/properties/schema/team",
"source_type": "organization",
"value_type": "string",
"description": "Team owning the repository"
}
]Get a custom property for an organization
Gets a custom property that is defined for an organization. Organization members can read these properties.
Fine-grained access tokens for "Get a custom property for an organization"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Custom properties" organization permissions (read)
Parameters for "Get a custom property for an organization"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
custom_property_name string RequiredThe custom property name |
HTTP response status codes for "Get a custom property for an organization"
| Status code | Description |
|---|---|
200 | OK |
403 | Forbidden |
404 | Resource not found |
Code samples for "Get a custom property for an organization"
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/schema/CUSTOM_PROPERTY_NAMEResponse
Status: 200{
"property_name": "environment",
"url": "https://api.github.com/orgs/github/properties/schema/environment",
"source_type": "organization",
"value_type": "single_select",
"required": true,
"default_value": "production",
"description": "Prod or dev environment",
"allowed_values": [
"production",
"development"
]
}Create or update a custom property for an organization
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_managerin the organization.
Fine-grained access tokens for "Create or update a custom property for an organization"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Custom properties" organization permissions (admin)
Parameters for "Create or update a custom property for an organization"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
custom_property_name string RequiredThe custom property name |
| Name, Type, Description |
|---|
value_type string RequiredThe type of the value for the property Can be one of: |
required boolean Whether the property is required. |
default_value null or string or array Default value of the property |
description string or null Short description of the property |
allowed_values array of strings or null An ordered list of the allowed values of the property. The property can have up to 200 allowed values. |
values_editable_by string or null Who can edit the values of the property Can be one of: |
require_explicit_values boolean Whether setting properties values is mandatory |
HTTP response status codes for "Create or update a custom property for an organization"
| Status code | Description |
|---|---|
200 | OK |
403 | Forbidden |
404 | Resource not found |
Code samples for "Create or update a custom property for an organization"
Request example
curl -L \
-X PUT \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
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
Status: 200{
"property_name": "environment",
"url": "https://api.github.com/orgs/github/properties/schema/environment",
"source_type": "organization",
"value_type": "single_select",
"required": true,
"default_value": "production",
"description": "Prod or dev environment",
"allowed_values": [
"production",
"development"
]
}Remove a custom property for an organization
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_managerin the organization.
Fine-grained access tokens for "Remove a custom property for an organization"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Custom properties" organization permissions (admin)
Parameters for "Remove a custom property for an organization"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
custom_property_name string RequiredThe custom property name |
HTTP response status codes for "Remove a custom property for an organization"
| Status code | Description |
|---|---|
204 | A header with no content is returned. |
403 | Forbidden |
404 | Resource not found |
Code samples for "Remove a custom property for an organization"
Request example
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/schema/CUSTOM_PROPERTY_NAMEA header with no content is returned.
Status: 204List custom property values for organization repositories
Lists organization repositories with all of their custom property values. Organization members can read these properties.
Fine-grained access tokens for "List custom property values for organization repositories"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Custom properties" organization permissions (read)
Parameters for "List custom property values for organization repositories"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
| Name, Type, Description |
|---|
per_page integer The number of results per page (max 100). For more information, see "Using pagination in the REST API." Default: |
page integer The page number of the results to fetch. For more information, see "Using pagination in the REST API." Default: |
repository_query string Finds repositories in the organization with a query containing one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as the web interface for GitHub. To learn more about the format of the query, see Constructing a search query. See "Searching for repositories" for a detailed list of qualifiers. |
HTTP response status codes for "List custom property values for organization repositories"
| Status code | Description |
|---|---|
200 | OK |
403 | Forbidden |
404 | Resource not found |
Code samples for "List custom property values for organization repositories"
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/properties/valuesResponse
Status: 200[
{
"repository_id": 1296269,
"repository_name": "Hello-World",
"repository_full_name": "octocat/Hello-World",
"properties": [
{
"property_name": "environment",
"value": "production"
},
{
"property_name": "service",
"value": "web"
},
{
"property_name": "team",
"value": "octocat"
}
]
}
]Create or update custom property values for organization repositories
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_editorin the organization.
Fine-grained access tokens for "Create or update custom property values for organization repositories"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Custom properties" organization permissions (write)
Parameters for "Create or update custom property values for organization repositories"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
| Name, Type, Description | |||
|---|---|---|---|
repository_names array of strings RequiredThe names of repositories that the custom property values will be applied to. | |||
properties array of objects RequiredList of custom property names and associated values to apply to the repositories. | |||
Properties of |
| Name, Type, Description |
|---|
property_name string RequiredThe name of the property |
value null or string or array RequiredThe value assigned to the property |
HTTP response status codes for "Create or update custom property values for organization repositories"
| Status code | Description |
|---|---|
204 | No Content when custom property values are successfully created or updated |
403 | Forbidden |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
Code samples for "Create or update custom property values for organization repositories"
Request example
curl -L \
-X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
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"}]}'No Content when custom property values are successfully created or updated
Status: 204