openapi: 3.0.3 info: title: Develocity Auth Projects API description: 'The Develocity API allows programmatic interaction with various aspects of Develocity, from configuration to inspecting build data. ' version: 2026.2.0 license: name: Develocity License url: https://gradle.com/help/legal-gradle-software-license-agreement termsOfService: https://gradle.com/help/legal-terms-of-use contact: name: Gradle url: https://gradle.com x-logo: url: https://assets.gradle.com/logo/develocity-logo.svg altText: Develocity servers: - url: https://develocity.example.com description: Your Develocity instance. security: - DevelocityAccessKeyOrToken: [] tags: - name: Projects x-displayName: 'Projects (Beta) ' description: 'Endpoints related to the management of project-level access control in Develocity. To access these endpoints the user requires the `Administer Projects` permission. **Beta: _The Projects API is unstable and is likely to change in future._** ' paths: /api/project-groups: get: operationId: ListProjectGroups summary: Lists access control project groups. description: '**Beta:** Returns a list of all project groups configured for project-level access control. If there are a lot of project groups, then all pages will need to be retrieved in order to retrieve the full list of project groups. The default number of project groups per page is 100. ' tags: - Projects parameters: - in: query name: PageQuery explode: true description: The page to fetch. schema: $ref: '#/components/schemas/PageQuery' responses: '200': description: A list of project groups configured for project-level access control. content: application/json: schema: $ref: '#/components/schemas/ProjectGroupsPage' example: content: - id: some-project-group displayName: Some Project Group description: An example project group projects: - id: some-project - id: another-project - id: another-project-group displayName: Another Project Group description: Another example project group projects: - id: another-project page: number: 1 size: 50 totalPages: 4 totalElements: 151 '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/UnauthorizedOrNotFoundError' /api/project-groups/{projectGroupId}: parameters: - in: path name: projectGroupId example: a-project-group schema: $ref: '#/components/schemas/ProjectGroupId' required: true description: The ID of the project group configured for project-level access control. get: operationId: GetProjectGroup summary: Get an access control project group. description: '**Beta:** Gets a specific project group configured for project-level access control. ' tags: - Projects responses: '200': description: The requested project group configured for project-level access control. content: application/json: schema: $ref: '#/components/schemas/ProjectGroup' example: id: some-project-group displayName: Some Project Group description: An example project group projects: - id: some-project - id: another-project '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/UnauthorizedOrNotFoundError' put: operationId: CreateOrUpdateProjectGroup summary: Create or update an access control project group. description: '**Beta:** Create or update a project group configured for project-level access control in Develocity. When updating, any optional fields that are omitted from the request, but were previously set on the project group, will be unset/removed. An existing project group''s identifier cannot be updated. If the update contains a id that does not match the current id, then the operation will fail with a Bad Request response. ' tags: - Projects requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProjectGroup' example: id: some-project-group displayName: Some Project Group description: An example project group projects: - id: some-project - id: another-project responses: '200': description: The project group was created or updated successfully. content: application/json: schema: $ref: '#/components/schemas/ProjectGroup' example: id: some-project-group displayName: Some Project Group description: An example project group projects: - id: some-project - id: another-project '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/UnauthorizedOrNotFoundError' delete: operationId: DeleteProjectGroup summary: Delete an access control project group. description: '**Beta:** Delete a project group configured for project-level access control in Develocity. ' tags: - Projects responses: '200': description: The projectId referenced an existing project group and it was deleted. '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/UnauthorizedOrNotFoundError' /api/projects: get: operationId: ListProjects summary: Lists access control projects. description: '**Beta:** Returns a paged list of projects configured for project-level access control. If there are a lot of projects, then all pages will need to be retrieved in order to retrieve the full list of projects. The default number of projects per page is 1,000. ' tags: - Projects parameters: - in: query name: PageQuery explode: true description: The page to fetch. schema: $ref: '#/components/schemas/PageQuery' responses: '200': description: A list of projects configured for project-level access control in Develocity. content: application/json: schema: $ref: '#/components/schemas/ProjectsPage' example: content: - id: some-project displayName: Some Project description: An example project - id: another-project displayName: Another Project description: Another example project page: number: 1 size: 100 totalPages: 4 totalElements: 351 '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/UnauthorizedOrNotFoundError' /api/projects/{projectId}: parameters: - in: path name: projectId example: a-project schema: $ref: '#/components/schemas/ProjectId' required: true description: The ID of the access control project. get: operationId: GetProject summary: Get an access control project. description: '**Beta:** Gets a specific project configured for project-level access control. ' tags: - Projects responses: '200': description: The requested project configured for project-level access control. content: application/json: schema: $ref: '#/components/schemas/Project' example: id: some-project displayName: Some Project description: An example project '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/UnauthorizedOrNotFoundError' put: operationId: CreateOrUpdateProject summary: Create or update an access control project. description: '**Beta:** Create or update a project configured for project-level access control in Develocity. When updating, any optional fields that are omitted from the request, but were previously set on the project, will be unset/removed. An existing project''s identifier cannot be updated. If the update contains a id that does not match the current id, then the operation will fail with a Bad Request response. ' tags: - Projects requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Project' example: id: some-project displayName: Some Project description: An example project responses: '200': description: The project was created or updated successfully. content: application/json: schema: $ref: '#/components/schemas/Project' example: id: some-project displayName: Some Project description: An example project '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/UnauthorizedOrNotFoundError' components: schemas: ProjectsPage: type: object description: A paged list of projects configured for project-level access control in Develocity. required: - content - page properties: content: type: array description: A list of projects configured for project-level access control in Develocity. items: $ref: '#/components/schemas/Project' page: $ref: '#/components/schemas/PageMetadata' PageQuery: type: object properties: pageNumber: type: integer format: int32 description: 'The index of the page to retrieve. The first page''s index is zero. ' minimum: 0 default: 0 pageSize: type: integer format: in32 description: The maximum number of elements to include in the fetched page. minimum: 0 ProjectGroupsPage: type: object description: A paged list of project groups configured for project-level access control in Develocity. required: - content - page properties: content: type: array description: A list of project groups configured for project-level access control in Develocity. items: $ref: '#/components/schemas/ProjectGroup' page: $ref: '#/components/schemas/PageMetadata' ProjectGroup: type: object description: A group of projects that can be assigned to users. required: - id properties: id: $ref: '#/components/schemas/ProjectGroupId' displayName: type: string description: The label used when displaying the project group. maxLength: 266 description: type: string description: The description of the project group. maxLength: 1024 identityProviderAttributeValue: type: string description: 'The value of an identity provider attribute this project group is associated with. Users who have this value in the identity provider attribute will be assigned this project group. ' minLength: 1 maxLength: 256 projects: type: array items: $ref: '#/components/schemas/ProjectReference' Project: type: object description: A project configured for project-level access control in Develocity. required: - id properties: id: $ref: '#/components/schemas/ProjectId' displayName: type: string description: The label used when displaying the project. maxLength: 266 description: type: string description: The description of the project group. maxLength: 1024 ProjectReference: type: object description: A container for a project ID. required: - id properties: id: $ref: '#/components/schemas/ProjectId' PageMetadata: type: object description: 'Information about the current and available page of elements. Pages are returned from list operations which could contain a lot of elements. One page contains a subset of the available elements. API users can retrieve all pages in order to retrieve all of the available elements. ' required: - number - size - totalElements - totalPages properties: number: type: integer format: int32 description: The index of the current page. Page indexes start at zero. minimum: 0 size: type: integer format: int32 description: The number of elements in the current page. minimum: 0 totalPages: type: integer format: int32 description: The total number of pages. minimum: 0 totalElements: type: integer format: int32 description: The total number of elements across all pages. minimum: 0 ProjectGroupId: type: string description: The unique identifier for the project group configured for project-level access control in Develocity. Must not contain whitespace. minLength: 1 maxLength: 215 pattern: ^\S+$ ProjectId: type: string description: The unique identifier for the project. Must not contain whitespace. minLength: 1 maxLength: 256 pattern: ^\S+$ ApiProblem: type: object description: 'Response detailing why a request was rejected. Adheres to the [RFC-7807](https://datatracker.ietf.org/doc/html/rfc7807) standard (colloquially known as "Problem JSON") for the response format. ' required: - type - title - status properties: status: type: integer description: HTTP status code of the problem response. type: type: string description: A URN (Uniform Resource Name) identifying the type of the problem. title: type: string description: The underlying reason for the problem. detail: type: string description: A longer and comprehensive description of the problem. May be `null` if not available. nullable: true examples: ForbiddenUserExample: value: type: urn:gradle:enterprise:forbidden title: Insufficient permissions detail: User must have the Administer Projects permission to access this endpoint. status: 403 CapabilityValidationProblemExample: value: type: urn:gradle:enterprise:validation title: Invalid request parameters detail: One or more capabilities have an invalid format. status: 400 responses: BadRequest: description: The request body is malformed or contains invalid values for at least one of the properties. content: application/problem+json: schema: $ref: '#/components/schemas/ApiProblem' examples: CapabilityValidationProblemResponse: $ref: '#/components/examples/CapabilityValidationProblemExample' ForbiddenError: description: The authenticated user has insufficient permissions. content: application/problem+json: schema: $ref: '#/components/schemas/ApiProblem' examples: ForbiddenUserResponse: $ref: '#/components/examples/ForbiddenUserExample' UnauthorizedOrNotFoundError: description: No API key was specified in the request, the key has been revoked, or the user bearing the key lacks permissions for this operation. securitySchemes: DevelocityAccessKeyOrToken: type: http scheme: bearer bearerFormat: Bearer <> description: "All requests require a Develocity access key or token as a bearer token. \nGiven an access key of `l3an7wk3j4ze5v4mi7rvgjf2p7g44nvlswg4cpvdonjs7rzd4kmq`, the required header is `Authorization: Bearer l3an7wk3j4ze5v4mi7rvgjf2p7g44nvlswg4cpvdonjs7rzd4kmq`.\n\nPlease consult the [Develocity API User Manual](https://gradle.com/help/api-access-control) for guidance on how to provision access keys or tokens and check user permissions.\n"