Portals API
The portals API endpoint lets you create and manage portals in your Buildkite organization.
Portals
Portals provide restricted GraphQL API access to the Buildkite platform by defining stored GraphQL operations accessible through authenticated URL endpoints.
Portal data model
uuid |
UUID of the portal |
|---|---|
slug |
Slug of the portal, used in API URLs |
organization_uuid |
UUID of the organization |
name |
Name of the portal |
description |
Description of the portal |
query |
GraphQL query that the portal executes |
allowed_ip_addresses |
Space-separated list of allowed IP addresses in CIDR notation |
user_invokable |
Whether users can invoke the portal |
created_at |
When the portal was created |
created_by |
User who created the portal |
token |
Plaintext portal token. Only returned when creating a portal. |
The token field is only present in the response when creating a portal. Store it securely, as it cannot be retrieved again.
List portals
Returns a paginated list of an organization's portals.
curl -H "Authorization: Bearer $TOKEN" \
-X GET "https://api.buildkite.com/v2/organizations/{org.slug}/portals"
[
{
"uuid": "01234567-89ab-cdef-0123-456789abcdef",
"slug": "trigger-main-build",
"organization_uuid": "f02d6a6f-7a0e-481d-9d6d-89b427aec48d",
"name": "Trigger main build",
"description": "Triggers a build on the main branch",
"query": "mutation triggerBuild { buildCreate(input: { branch: \"main\", commit: \"HEAD\", pipelineID: \"UGlwZWxpbmUtLS0x\" }) { build { url } } }",
"created_at": "2024-08-26T03:22:45.555Z",
"created_by": {
"id": "3d3c3bf0-7d58-4afe-8fe7-b3017d5504de",
"graphql_id": "VXNlci0tLTNkM2MzYmYwLTdkNTgtNGFmZS04ZmU3LWIzMDE3ZDU1MDRkZQo=",
"name": "Sam Kim",
"email": "sam@example.com",
"avatar_url": "https://www.gravatar.com/avatar/example",
"created_at": "2013-08-29T10:10:03.000Z"
},
"allowed_ip_addresses": "192.0.2.1/32 198.51.100.0/24",
"user_invokable": false
}
]
Required scope: read_portals
Success response: 200 OK
Get a portal
curl -H "Authorization: Bearer $TOKEN" \
-X GET "https://api.buildkite.com/v2/organizations/{org.slug}/portals/{portal.slug}"
{
"uuid": "01234567-89ab-cdef-0123-456789abcdef",
"slug": "trigger-main-build",
"organization_uuid": "f02d6a6f-7a0e-481d-9d6d-89b427aec48d",
"name": "Trigger main build",
"description": "Triggers a build on the main branch",
"query": "mutation triggerBuild { buildCreate(input: { branch: \"main\", commit: \"HEAD\", pipelineID: \"UGlwZWxpbmUtLS0x\" }) { build { url } } }",
"created_at": "2024-08-26T03:22:45.555Z",
"created_by": {
"id": "3d3c3bf0-7d58-4afe-8fe7-b3017d5504de",
"graphql_id": "VXNlci0tLTNkM2MzYmYwLTdkNTgtNGFmZS04ZmU3LWIzMDE3ZDU1MDRkZQo=",
"name": "Sam Kim",
"email": "sam@example.com",
"avatar_url": "https://www.gravatar.com/avatar/example",
"created_at": "2013-08-29T10:10:03.000Z"
},
"allowed_ip_addresses": "192.0.2.1/32 198.51.100.0/24",
"user_invokable": false
}
Required scope: read_portals
Success response: 200 OK
Create a portal
curl -H "Authorization: Bearer $TOKEN" \
-X POST "https://api.buildkite.com/v2/organizations/{org.slug}/portals" \
-H "Content-Type: application/json" \
-d '{
"name": "Trigger main build",
"query": "mutation triggerBuild { buildCreate(input: { branch: \"main\", commit: \"HEAD\", pipelineID: \"UGlwZWxpbmUtLS0x\" }) { build { url } } }"
}'
{
"uuid": "01234567-89ab-cdef-0123-456789abcdef",
"slug": "trigger-main-build",
"organization_uuid": "f02d6a6f-7a0e-481d-9d6d-89b427aec48d",
"name": "Trigger main build",
"description": null,
"query": "mutation triggerBuild { buildCreate(input: { branch: \"main\", commit: \"HEAD\", pipelineID: \"UGlwZWxpbmUtLS0x\" }) { build { url } } }",
"created_at": "2024-08-26T03:22:45.555Z",
"created_by": {
"id": "3d3c3bf0-7d58-4afe-8fe7-b3017d5504de",
"graphql_id": "VXNlci0tLTNkM2MzYmYwLTdkNTgtNGFmZS04ZmU3LWIzMDE3ZDU1MDRkZQo=",
"name": "Sam Kim",
"email": "sam@example.com",
"avatar_url": "https://www.gravatar.com/avatar/example",
"created_at": "2013-08-29T10:10:03.000Z"
},
"allowed_ip_addresses": null,
"user_invokable": false,
"token": "xxx-yyy-zzz"
}
Required request body properties:
name |
Name for the portal. Example: "Trigger main build"
|
|---|---|
query |
GraphQL query that the portal executes. Example: "mutation triggerBuild { buildCreate(input: { branch: \"main\", pipelineID: \"abc123\" }) { build { url } } }"
|
slug |
Slug for the portal. Auto-generated from the name if not provided. Example: "trigger-main-build"
|
|---|---|
description |
Description for the portal. Example: "Triggers a build on the main branch"
|
allowed_ip_addresses |
Space-separated list of allowed IP addresses in CIDR notation. Example: "192.0.2.1/32 198.51.100.0/24"
|
user_invokable |
Whether users can invoke the portal. Example: false
|
Required scope: write_portals
Success response: 201 Created
Error responses:
422 Unprocessable Entity |
{ "message": "Validation failed: Reason for failure" } |
|---|
Update a portal
curl -H "Authorization: Bearer $TOKEN" \
-X PUT "https://api.buildkite.com/v2/organizations/{org.slug}/portals/{portal.slug}" \
-H "Content-Type: application/json" \
-d '{ "name": "Trigger main build" }'
{
"uuid": "01234567-89ab-cdef-0123-456789abcdef",
"slug": "trigger-main-build",
"organization_uuid": "f02d6a6f-7a0e-481d-9d6d-89b427aec48d",
"name": "Trigger main build",
"description": "Triggers a build on the main branch",
"query": "mutation triggerBuild { buildCreate(input: { branch: \"main\", commit: \"HEAD\", pipelineID: \"UGlwZWxpbmUtLS0x\" }) { build { url } } }",
"created_at": "2024-08-26T03:22:45.555Z",
"created_by": {
"id": "3d3c3bf0-7d58-4afe-8fe7-b3017d5504de",
"graphql_id": "VXNlci0tLTNkM2MzYmYwLTdkNTgtNGFmZS04ZmU3LWIzMDE3ZDU1MDRkZQo=",
"name": "Sam Kim",
"email": "sam@example.com",
"avatar_url": "https://www.gravatar.com/avatar/example",
"created_at": "2013-08-29T10:10:03.000Z"
},
"allowed_ip_addresses": "192.0.2.1/32 198.51.100.0/24",
"user_invokable": false
}
Optional request body properties:
name |
Name for the portal. Example: "Trigger main build"
|
|---|---|
slug |
Slug for the portal. Example: "trigger-main-build"
|
description |
Description for the portal. Example: "Triggers a build on the main branch"
|
query |
GraphQL query that the portal executes. Example: "mutation triggerBuild { buildCreate(input: { branch: \"main\", pipelineID: \"abc123\" }) { build { url } } }"
|
allowed_ip_addresses |
Space-separated list of allowed IP addresses in CIDR notation. Example: "192.0.2.1/32 198.51.100.0/24"
|
user_invokable |
Whether users can invoke the portal. Example: false
|
Required scope: write_portals
Success response: 200 OK
Error responses:
422 Unprocessable Entity |
{ "message": "Validation failed: Reason for failure" } |
|---|
Delete a portal
Delete a portal.
curl -H "Authorization: Bearer $TOKEN" \
-X DELETE "https://api.buildkite.com/v2/organizations/{org.slug}/portals/{portal.slug}"
Required scope: write_portals
Success response: 204 No Content
Error responses:
422 Unprocessable Entity |
{ "message": "Reason the portal couldn't be deleted" } |
|---|