{"meta":{"title":"사용자 지정 속성에 대한 REST API 엔드포인트","intro":"REST API를 사용하여 조직에 대한 사용자 지정 속성을 만들고 관리합니다.","product":"REST API","breadcrumbs":[{"href":"/ko/rest","title":"REST API"},{"href":"/ko/rest/orgs","title":"조직"},{"href":"/ko/rest/orgs/custom-properties","title":"사용자 지정 속성"}],"documentType":"article"},"body":"# 사용자 지정 속성에 대한 REST API 엔드포인트\n\nREST API를 사용하여 조직에 대한 사용자 지정 속성을 만들고 관리합니다.\n\n## 사용자 지정 속성 정보\n\nREST API를 사용하여 조직에 대한 사용자 속성을 만들고 관리할 수 있습니다. 사용자 지정 속성을 사용하여 조직의 리포지토리에 메타데이터를 추가할 수 있습니다. 자세한 내용은 [조직의 리포지토리에 대한 사용자 지정 속성 관리](/ko/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization)을(를) 참조하세요.\n\n> \\[!NOTE]\n> 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.\n\n## Get registered app installations for external custom properties\n\n```\nGET /orgs/{org}/properties/installations\n```\n\nGets the registered GitHub App installations used to read and write external custom properties for an organization.\nA 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.\nTo use this endpoint, the authenticated caller must have the organization\\_external\\_properties\\_for\\_repos:admin permission.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n### HTTP response status codes\n\n* **200** - OK\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n* **422** - Validation failed, or the endpoint has been spammed.\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X GET \\\n  https://api.github.com/orgs/ORG/properties/installations\n```\n\n**Response schema (Status: 200):**\n\nArray of `Organization External Custom Property Installation`:\n\n* `display_name`: required, string\n* `installation`: required, object:\n  * `id`: required, integer\n\n## Register an app installation for external custom properties\n\n```\nPOST /orgs/{org}/properties/installations\n```\n\nRegisters a GitHub App installation so it can read and write external custom properties for an organization, and assigns it a display name.\nThe display name must be 1 to 15 characters and contain only letters and numbers. Capitalization is preserved as entered.\nAn 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.\nThe 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.\nUninstalling the GitHub App unregisters it, and removes the external custom properties it created.\nTo use this endpoint, the authenticated caller must have the organization\\_external\\_properties\\_for\\_repos:admin permission.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n#### Body parameters\n\n* **`installation_id`** (integer)\n  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).\n\n* **`display_name`** (string) (required)\n  The 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.\n\n### HTTP response status codes\n\n* **201** - Created\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n* **422** - Validation failed, or the endpoint has been spammed.\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X POST \\\n  https://api.github.com/orgs/ORG/properties/installations \\\n  -d '{\n  \"installation_id\": 67890,\n  \"display_name\": \"Acme\"\n}'\n```\n\n**Response schema (Status: 201):**\n\n* `display_name`: required, string\n* `installation`: required, object:\n  * `id`: required, integer\n\n## Get all external custom properties for a GitHub App installation in an organization\n\n```\nGET /orgs/{org}/properties/installations/schema\n```\n\nGets all external custom properties defined for the authenticated GitHub App installation on an organization.\nTo use this endpoint, the authenticated GitHub App must have the organization\\_external\\_properties\\_for\\_repos:read permission.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n### HTTP response status codes\n\n* **200** - OK\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n* **422** - Validation failed, or the endpoint has been spammed.\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X GET \\\n  https://api.github.com/orgs/ORG/properties/installations/schema\n```\n\n**Response schema (Status: 200):**\n\nArray of `External Property`:\n\n* `property_name`: required, string\n\n## Create or update external custom property values for organization repositories\n\n```\nPATCH /orgs/{org}/properties/installations/values\n```\n\nCreate new or update existing external custom property values for repositories in a batch that belong to an organization.\nEach target repository will have its external custom property values updated to match the values provided in the request.\nA maximum of 30 repositories can be updated in a single request.\nUsing a value of null for an external custom property will remove or 'unset' the property value from the repository.\nTo use this endpoint, the authenticated GitHub App must have the organization\\_external\\_properties\\_for\\_repos:write permission.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n#### Body parameters\n\n* **`repository_names`** (array of strings) (required)\n  The names of repositories that the external custom property values will be applied to.\n\n* **`properties`** (array of objects) (required)\n  List of external custom property names and associated values to apply to the repositories.\n  * **`property_name`** (string) (required)\n    The name of the property\n  * **`value`** (null or string or array) (required)\n    The value assigned to the property\n\n### HTTP response status codes\n\n* **204** - No Content when external custom property values are successfully created or updated\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n* **422** - Validation failed, or the endpoint has been spammed.\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X PATCH \\\n  https://api.github.com/orgs/ORG/properties/installations/values \\\n  -d '{\n  \"repository_names\": [\n    \"Hello-World\",\n    \"octo-repo\"\n  ],\n  \"properties\": [\n    {\n      \"property_name\": \"environment\",\n      \"value\": \"production\"\n    },\n    {\n      \"property_name\": \"service\",\n      \"value\": \"web\"\n    },\n    {\n      \"property_name\": \"team\",\n      \"value\": \"octocat\"\n    }\n  ]\n}'\n```\n\n**Response schema (Status: 204):**\n\n## Create or update external custom property values for a property across organization repositories\n\n```\nPATCH /orgs/{org}/properties/installations/values/{property_name}\n```\n\nCreate new or update existing external custom property values for a single named property across repositories that belong to an organization.\nUp to 100 repository values can be updated in a single request. Repositories not included in the request are left unchanged.\nUsing 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.\nTo use this endpoint, the authenticated GitHub App must have the organization\\_external\\_properties\\_for\\_repos:write permission.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n* **`property_name`** (string) (required)\n  The name of the external custom property\n\n#### Body parameters\n\n* **`repository_values`** (array of objects) (required)\n  The names of repositories and the values that the named external custom property will be set to.\n  * **`repository_name`** (string) (required)\n    The name of the repository\n  * **`value`** (string or null) (required)\n    The value assigned to the repository. Set to null to unset the value for this repository.\n\n### HTTP response status codes\n\n* **204** - A header with no content is returned.\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n* **422** - Validation failed, or the endpoint has been spammed.\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X PATCH \\\n  https://api.github.com/orgs/ORG/properties/installations/values/PROPERTY_NAME \\\n  -d '{\n  \"repository_values\": [\n    {\n      \"repository_name\": \"Hello-World\",\n      \"value\": \"production\"\n    },\n    {\n      \"repository_name\": \"octo-repo\",\n      \"value\": null\n    }\n  ]\n}'\n```\n\n**Response schema (Status: 204):**\n\n## Remove all external custom property values for a property across all organization repositories\n\n```\nDELETE /orgs/{org}/properties/installations/values/{property_name}\n```\n\nRemoves all external custom property values for a specified property name across all repositories that belong to an organization.\nTo use this endpoint, the authenticated GitHub App must have the organization\\_external\\_properties\\_for\\_repos:write permission.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n* **`property_name`** (string) (required)\n  The name of the external custom property\n\n### HTTP response status codes\n\n* **204** - A header with no content is returned.\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n* **422** - Validation failed, or the endpoint has been spammed.\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X DELETE \\\n  https://api.github.com/orgs/ORG/properties/installations/values/PROPERTY_NAME\n```\n\n**Response schema (Status: 204):**\n\n## Get all custom properties for an organization\n\n```\nGET /orgs/{org}/properties/schema\n```\n\nGets all custom properties defined for an organization.\nOrganization members can read these properties.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n### HTTP response status codes\n\n* **200** - OK\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X GET \\\n  https://api.github.com/orgs/ORG/properties/schema\n```\n\n**Response schema (Status: 200):**\n\nArray of `Organization Custom Property`:\n\n* `property_name`: required, string\n* `url`: string, format: uri\n* `source_type`: string, enum: `organization`, `enterprise`\n* `value_type`: required, string, enum: `string`, `single_select`, `multi_select`, `true_false`, `url`\n* `required`: boolean\n* `default_value`: one of:\n  * **string**\n  * **array**\n* `description`: string or null\n* `allowed_values`: array of string or null\n* `values_editable_by`: string or null, enum: `org_actors`, `org_and_repo_actors`, `null`\n* `require_explicit_values`: boolean\n\n## Create or update custom properties for an organization\n\n```\nPATCH /orgs/{org}/properties/schema\n```\n\nCreates new or updates existing custom properties defined for an organization in a batch.\nIf the property already exists, the existing property will be replaced with the new values.\nMissing optional values will fall back to default values, previous values will be overwritten.\nE.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.\nTo use this endpoint, the authenticated user must be one of:\n\nAn administrator for the organization.\nA user, or a user on a team, with the fine-grained permission of custom\\_properties\\_org\\_definitions\\_manager in the organization.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n#### Body parameters\n\n* **`properties`** (array of objects) (required)\n  The array of custom properties to create or update.\n  * **`property_name`** (string) (required)\n    The name of the property\n  * **`url`** (string)\n    The URL that can be used to fetch, update, or delete info about this property via the API.\n  * **`source_type`** (string)\n    The source type of the property\n    Can be one of: `organization`, `enterprise`\n  * **`value_type`** (string) (required)\n    The type of the value for the property\n    Can be one of: `string`, `single_select`, `multi_select`, `true_false`, `url`\n  * **`required`** (boolean)\n    Whether the property is required.\n  * **`default_value`** (null or string or array)\n    Default value of the property\n  * **`description`** (string or null)\n    Short description of the property\n  * **`allowed_values`** (array of strings or null)\n    An ordered list of the allowed values of the property.\n    The property can have up to 200 allowed values.\n  * **`values_editable_by`** (string or null)\n    Who can edit the values of the property\n    Can be one of: `org_actors`, `org_and_repo_actors`, `null`\n  * **`require_explicit_values`** (boolean)\n    Whether setting properties values is mandatory\n\n### HTTP response status codes\n\n* **200** - OK\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X PATCH \\\n  https://api.github.com/orgs/ORG/properties/schema \\\n  -d '{\n  \"properties\": [\n    {\n      \"property_name\": \"environment\",\n      \"value_type\": \"single_select\",\n      \"required\": true,\n      \"default_value\": \"production\",\n      \"description\": \"Prod or dev environment\",\n      \"allowed_values\": [\n        \"production\",\n        \"development\"\n      ],\n      \"values_editable_by\": \"org_actors\"\n    },\n    {\n      \"property_name\": \"service\",\n      \"value_type\": \"string\"\n    },\n    {\n      \"property_name\": \"team\",\n      \"value_type\": \"string\",\n      \"description\": \"Team owning the repository\"\n    }\n  ]\n}'\n```\n\n**Response schema (Status: 200):**\n\nSame response schema as [Get all custom properties for an organization](#get-all-custom-properties-for-an-organization).\n\n## Get a custom property for an organization\n\n```\nGET /orgs/{org}/properties/schema/{custom_property_name}\n```\n\nGets a custom property that is defined for an organization.\nOrganization members can read these properties.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n* **`custom_property_name`** (string) (required)\n  The custom property name\n\n### HTTP response status codes\n\n* **200** - OK\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X GET \\\n  https://api.github.com/orgs/ORG/properties/schema/CUSTOM_PROPERTY_NAME\n```\n\n**Response schema (Status: 200):**\n\n* `property_name`: required, string\n* `url`: string, format: uri\n* `source_type`: string, enum: `organization`, `enterprise`\n* `value_type`: required, string, enum: `string`, `single_select`, `multi_select`, `true_false`, `url`\n* `required`: boolean\n* `default_value`: one of:\n  * **string**\n  * **array**\n* `description`: string or null\n* `allowed_values`: array of string or null\n* `values_editable_by`: string or null, enum: `org_actors`, `org_and_repo_actors`, `null`\n* `require_explicit_values`: boolean\n\n## Create or update a custom property for an organization\n\n```\nPUT /orgs/{org}/properties/schema/{custom_property_name}\n```\n\nCreates a new or updates an existing custom property that is defined for an organization.\nTo use this endpoint, the authenticated user must be one of:\n\nAn administrator for the organization.\nA user, or a user on a team, with the fine-grained permission of custom\\_properties\\_org\\_definitions\\_manager in the organization.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n* **`custom_property_name`** (string) (required)\n  The custom property name\n\n#### Body parameters\n\n* **`value_type`** (string) (required)\n  The type of the value for the property\n  Can be one of: `string`, `single_select`, `multi_select`, `true_false`, `url`\n\n* **`required`** (boolean)\n  Whether the property is required.\n\n* **`default_value`** (null or string or array)\n  Default value of the property\n\n* **`description`** (string or null)\n  Short description of the property\n\n* **`allowed_values`** (array of strings or null)\n  An ordered list of the allowed values of the property.\n  The property can have up to 200 allowed values.\n\n* **`values_editable_by`** (string or null)\n  Who can edit the values of the property\n  Can be one of: `org_actors`, `org_and_repo_actors`, `null`\n\n* **`require_explicit_values`** (boolean)\n  Whether setting properties values is mandatory\n\n### HTTP response status codes\n\n* **200** - OK\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X PUT \\\n  https://api.github.com/orgs/ORG/properties/schema/CUSTOM_PROPERTY_NAME \\\n  -d '{\n  \"value_type\": \"single_select\",\n  \"required\": true,\n  \"default_value\": \"production\",\n  \"description\": \"Prod or dev environment\",\n  \"allowed_values\": [\n    \"production\",\n    \"development\"\n  ]\n}'\n```\n\n**Response schema (Status: 200):**\n\nSame response schema as [Get a custom property for an organization](#get-a-custom-property-for-an-organization).\n\n## Remove a custom property for an organization\n\n```\nDELETE /orgs/{org}/properties/schema/{custom_property_name}\n```\n\nRemoves a custom property that is defined for an organization.\nTo use this endpoint, the authenticated user must be one of:\n\nAn administrator for the organization.\nA user, or a user on a team, with the fine-grained permission of custom\\_properties\\_org\\_definitions\\_manager in the organization.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n* **`custom_property_name`** (string) (required)\n  The custom property name\n\n### HTTP response status codes\n\n* **204** - A header with no content is returned.\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X DELETE \\\n  https://api.github.com/orgs/ORG/properties/schema/CUSTOM_PROPERTY_NAME\n```\n\n**Response schema (Status: 204):**\n\n## List custom property values for organization repositories\n\n```\nGET /orgs/{org}/properties/values\n```\n\nLists organization repositories with all of their custom property values.\nOrganization members can read these properties.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n* **`per_page`** (integer)\n  The number of results per page (max 100). For more information, see \"Using pagination in the REST API.\"\n  Default: `30`\n\n* **`page`** (integer)\n  The page number of the results to fetch. For more information, see \"Using pagination in the REST API.\"\n  Default: `1`\n\n* **`repository_query`** (string)\n  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.\n\n### HTTP response status codes\n\n* **200** - OK\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X GET \\\n  https://api.github.com/orgs/ORG/properties/values\n```\n\n**Response schema (Status: 200):**\n\nArray of `Organization Repository Custom Property Values`:\n\n* `repository_id`: required, integer\n* `repository_name`: required, string\n* `repository_full_name`: required, string\n* `properties`: required, array of `Custom Property Value`:\n  * `property_name`: required, string\n  * `value`: required, one of:\n    * **string or null**\n    * **array**\n\n## Create or update custom property values for organization repositories\n\n```\nPATCH /orgs/{org}/properties/values\n```\n\nCreate new or update existing custom property values for repositories in a batch that belong to an organization.\nEach target repository will have its custom property values updated to match the values provided in the request.\nA maximum of 30 repositories can be updated in a single request.\nUsing a value of null for a custom property will remove or 'unset' the property value from the repository.\nTo use this endpoint, the authenticated user must be one of:\n\nAn administrator for the organization.\nA user, or a user on a team, with the fine-grained permission of custom\\_properties\\_org\\_values\\_editor in the organization.\n\n### Parameters\n\n#### Headers\n\n* **`accept`** (string)\n  Setting to `application/vnd.github+json` is recommended.\n\n#### Path and query parameters\n\n* **`org`** (string) (required)\n  The organization name. The name is not case sensitive.\n\n#### Body parameters\n\n* **`repository_names`** (array of strings) (required)\n  The names of repositories that the custom property values will be applied to.\n\n* **`properties`** (array of objects) (required)\n  List of custom property names and associated values to apply to the repositories.\n  * **`property_name`** (string) (required)\n    The name of the property\n  * **`value`** (null or string or array) (required)\n    The value assigned to the property\n\n### HTTP response status codes\n\n* **204** - No Content when custom property values are successfully created or updated\n\n* **403** - Forbidden\n\n* **404** - Resource not found\n\n* **422** - Validation failed, or the endpoint has been spammed.\n\n### Code examples\n\n#### Example\n\n**Request:**\n\n```curl\ncurl -L \\\n  -X PATCH \\\n  https://api.github.com/orgs/ORG/properties/values \\\n  -d '{\n  \"repository_names\": [\n    \"Hello-World\",\n    \"octo-repo\"\n  ],\n  \"properties\": [\n    {\n      \"property_name\": \"environment\",\n      \"value\": \"production\"\n    },\n    {\n      \"property_name\": \"service\",\n      \"value\": \"web\"\n    },\n    {\n      \"property_name\": \"team\",\n      \"value\": \"octocat\"\n    }\n  ]\n}'\n```\n\n**Response schema (Status: 204):**"}