openapi: 3.2.0 info: contact: email: support@cockroachlabs.com name: Cockroach Labs Support url: https://support.cockroachlabs.com description: An API for managing CockroachDB Cloud resources title: CockroachDB Cloud Egress Private Endpoints API version: '2026-09-15' servers: - url: https://cockroachlabs.cloud security: - Bearer: [] tags: - name: Egress Private Endpoints paths: /api/v1/clusters/{cluster_id}/networking/egress-private-endpoints: get: operationId: CockroachCloud_ListEgressPrivateEndpoints summary: List egress private endpoints description: 'Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER - CLUSTER_DEVELOPER - AUDITOR' parameters: - name: cluster_id in: path description: cluster_id identifies the CockroachDB Cloud cluster whose egress private endpoints to list. required: true schema: type: string - name: pagination.page in: query schema: type: string - name: pagination.limit in: query schema: type: integer format: int32 - name: pagination.as_of_time in: query schema: type: string format: date-time - name: pagination.sort_order in: query description: " - ASC: Sort in ascending order. This is the default unless otherwise specified.\n - DESC: Sort in descending order." schema: type: string enum: - ASC - DESC responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/ListEgressPrivateEndpointsResponse' '400': description: Returned when a request field is invalid. content: application/json: schema: {} '401': description: Returned when the token bearer cannot be authenticated. content: application/json: schema: {} '403': description: Returned when the user does not have permission to access the resource. content: application/json: schema: {} '404': description: Returned when the resource does not exist. content: application/json: schema: {} '500': description: Server error content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: '#/components/schemas/Status' tags: - Egress Private Endpoints x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url 'https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-private-endpoints?pagination.page=SOME_STRING_VALUE&pagination.limit=SOME_INTEGER_VALUE&pagination.as_of_time=SOME_STRING_VALUE&pagination.sort_order=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'" post: operationId: CockroachCloud_CreateEgressPrivateEndpoint summary: Create an egress private endpoint description: 'Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER' parameters: - name: cluster_id in: path description: cluster_id identifies the cluster to which this egress private endpoint applies. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateEgressPrivateEndpointBody' responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/EgressPrivateEndpoint' '400': description: Returned when a request field is invalid. content: application/json: schema: {} '401': description: Returned when the token bearer cannot be authenticated. content: application/json: schema: {} '403': description: Returned when the user does not have permission to access the resource. content: application/json: schema: {} '404': description: Returned when the resource does not exist. content: application/json: schema: {} '500': description: Server error content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: '#/components/schemas/Status' tags: - Egress Private Endpoints x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-private-endpoints \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"region\":\"us-east-1\",\"target_service_identifier\":\"arn:aws:s3:::example-bucket\",\"target_service_type\":\"MSK_SASL_IAM\"}'" /api/v1/clusters/{cluster_id}/networking/egress-private-endpoints/{id}: delete: operationId: CockroachCloud_DeleteEgressPrivateEndpoint summary: Delete an egress private endpoint description: 'Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER' parameters: - name: cluster_id in: path description: cluster_id identifies the CockroachDB Cloud cluster owning the egress private endpoint. required: true schema: type: string - name: id in: path description: id is the UUID value of the egress private endpoint in CockroachDB Cloud. required: true schema: type: string responses: '200': description: A successful response. content: application/json: schema: type: object '400': description: Returned when a request field is invalid. content: application/json: schema: {} '401': description: Returned when the token bearer cannot be authenticated. content: application/json: schema: {} '403': description: Returned when the user does not have permission to access the resource. content: application/json: schema: {} '404': description: Returned when the resource does not exist. content: application/json: schema: {} '500': description: Server error content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: '#/components/schemas/Status' tags: - Egress Private Endpoints x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request DELETE \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-private-endpoints/{id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'" get: operationId: CockroachCloud_GetEgressPrivateEndpoint summary: Get egress private endpoint description: 'Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER - CLUSTER_DEVELOPER - AUDITOR' parameters: - name: cluster_id in: path description: cluster_id identifies the CockroachDB Cloud cluster owning the egress private endpoint. required: true schema: type: string - name: id in: path description: id is the UUID value of the egress private endpoint in CockroachDB Cloud. required: true schema: type: string responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/EgressPrivateEndpoint' '400': description: Returned when a request field is invalid. content: application/json: schema: {} '401': description: Returned when the token bearer cannot be authenticated. content: application/json: schema: {} '403': description: Returned when the user does not have permission to access the resource. content: application/json: schema: {} '404': description: Returned when the resource does not exist. content: application/json: schema: {} '500': description: Server error content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: '#/components/schemas/Status' tags: - Egress Private Endpoints x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-private-endpoints/{id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'" patch: operationId: CockroachCloud_UpdateEgressPrivateEndpoint summary: Update egress private endpoint description: 'Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER' parameters: - name: cluster_id in: path description: cluster_id identifies the CockroachDB Cloud cluster owning the egress private endpoint. required: true schema: type: string - name: id in: path description: id is the UUID value of the egress private endpoint in CockroachDB Cloud. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateEgressPrivateEndpointBody' responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/EgressPrivateEndpoint' '400': description: Returned when a request field is invalid. content: application/json: schema: {} '401': description: Returned when the token bearer cannot be authenticated. content: application/json: schema: {} '403': description: Returned when the user does not have permission to access the resource. content: application/json: schema: {} '404': description: Returned when the resource does not exist. content: application/json: schema: {} '500': description: Server error content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: '#/components/schemas/Status' tags: - Egress Private Endpoints x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request PATCH \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-private-endpoints/{id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"domain_names\":[\"example.com\",\"api.example.com\"]}'" /api/v1/clusters/{cluster_id}/networking/egress-private-endpoints/{id}/domain-names: patch: operationId: CockroachCloud_UpdateEgressPrivateEndpointDomainNames summary: Update egress private endpoint domain names. description: 'Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER' parameters: - name: cluster_id in: path description: cluster_id identifies the CockroachDB Cloud cluster owning the egress private endpoint. required: true schema: type: string - name: id in: path description: id is the UUID value of the egress private endpoint in CockroachDB Cloud. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateEgressPrivateEndpointDomainNamesBody' responses: '200': description: A successful response. content: application/json: schema: type: object '400': description: Returned when a request field is invalid. content: application/json: schema: {} '401': description: Returned when the token bearer cannot be authenticated. content: application/json: schema: {} '403': description: Returned when the user does not have permission to access the resource. content: application/json: schema: {} '404': description: Returned when the resource does not exist. content: application/json: schema: {} '500': description: Server error content: application/json: schema: {} default: description: An unexpected error response. content: application/json: schema: $ref: '#/components/schemas/Status' deprecated: true tags: - Egress Private Endpoints x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request PATCH \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-private-endpoints/{id}/domain-names \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"domain_names\":[\"example.com\",\"api.example.com\"]}'" components: schemas: CreateEgressPrivateEndpointBody: type: object properties: region: description: region represents the region that the endpoint will be created in. type: string target_service_identifier: description: 'target_service_identifier represents the identifier of the target service. User-visible in CRL and CSP consoles as the "thing" the user is telling us to connect to, i.e. Service Name for AWS, Service Attachment for GCP, or ARN for AWS MSK.' type: string target_service_type: $ref: '#/components/schemas/EgressPrivateEndpointTargetServiceType.Type' example: region: us-east-1 target_service_identifier: arn:aws:s3:::example-bucket target_service_type: MSK_SASL_IAM required: - region - target_service_identifier - target_service_type title: CreateEgressPrivateEndpointRequest Any: description: "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nIn its binary encoding, an `Any` is an ordinary message; but in other wire\nforms like JSON, it has a special encoding. The format of the type URL is\ndescribed on the `type_url` field.\n\nProtobuf APIs provide utilities to interact with `Any` values:\n\n- A 'pack' operation accepts a message and constructs a generic `Any` wrapper\n around it.\n- An 'unpack' operation reads the content of an `Any` message, either into an\n existing message or a new one. Unpack operations must check the type of the\n value they unpack against the declared `type_url`.\n- An 'is' operation decides whether an `Any` contains a message of the given\n type, i.e. whether it can 'unpack' that type.\n\nThe JSON format representation of an `Any` follows one of these cases:\n\n- For types without special-cased JSON encodings, the JSON format\n representation of the `Any` is the same as that of the message, with an\n additional `@type` field which contains the type URL.\n- For types with special-cased JSON encodings (typically called 'well-known'\n types, listed in https://protobuf.dev/programming-guides/json/#any), the\n JSON format representation has a key `@type` which contains the type URL\n and a key `value` which contains the JSON-serialized value.\n\nThe text format representation of an `Any` is like a message with one field\nwhose name is the type URL in brackets. For example, an `Any` containing a\n`foo.Bar` message may be written `[type.googleapis.com/foo.Bar] { a: 2 }`." type: object properties: '@type': description: 'Identifies the type of the serialized Protobuf message with a URI reference consisting of a prefix ending in a slash and the fully-qualified type name. Example: type.googleapis.com/google.protobuf.StringValue This string must contain at least one `/` character, and the content after the last `/` must be the fully-qualified name of the type in canonical form, without a leading dot. Do not write a scheme on these URI references so that clients do not attempt to contact them. The prefix is arbitrary and Protobuf implementations are expected to simply strip off everything up to and including the last `/` to identify the type. `type.googleapis.com/` is a common default prefix that some legacy implementations require. This prefix does not indicate the origin of the type, and URIs containing it are not expected to respond to any requests. All type URL strings must be legal URI references with the additional restriction (for the text format) that the content of the reference must consist only of alphanumeric characters, percent-encoded escapes, and characters in the following set (not including the outer backticks): `/-.~_!$&()*+,;=`. Despite our allowing percent encodings, implementations should not unescape them to prevent confusion with existing parsers. For example, `type.googleapis.com%2FFoo` should be rejected. In the original design of `Any`, the possibility of launching a type resolution service at these type URLs was considered but Protobuf never implemented one and considers contacting these URLs to be problematic and a potential security issue. Do not attempt to contact type URLs.' type: string additionalProperties: {} EgressPrivateEndpoint: type: object properties: domain_names: description: domain_names are the domain names associated with the egress private endpoint. type: array items: type: string domain_names_state: $ref: '#/components/schemas/EgressPrivateEndpointDomainNamesState.Type' endpoint_address: type: string title: 'endpoint_address is the cloud-provider generated address (either IP address or DNS name) through which the endpoint is accessible' endpoint_connection_id: description: 'endpoint_connection_id is the cloud-specific id for egress private endpoints. This connection ID is visible in CRL and CSP consoles as "VPC endpoint ID" and is used to uniquely identify the endpoint in external configurations.' type: string id: description: 'A generated ID that uniquely identifies the egress_private_endpoint for use with the CockroachDB Cloud API. This ID is generic and not specific to the cloud provider.' type: string region: description: region represents the cloud region that the endpoint was created in. type: string state: $ref: '#/components/schemas/EgressPrivateEndpointState.Type' target_service_identifier: description: 'target_service_identifier represents the identifier of the target service. User-visible in CRL and CSP consoles as the "thing" the user is telling us to connect to, i.e. Service Name for AWS, Service Attachment for GCP, or ARN for AWS MSK.' type: string target_service_type: $ref: '#/components/schemas/EgressPrivateEndpointTargetServiceType.Type' required: - id - endpoint_connection_id - region - target_service_identifier - target_service_type - endpoint_address - state - domain_names title: EgressPrivateEndpoint Status: type: object properties: code: type: integer format: int32 details: type: array items: $ref: '#/components/schemas/Any' message: type: string EgressPrivateEndpointTargetServiceType.Type: type: string enum: - PRIVATE_SERVICE - MSK_SASL_SCRAM - MSK_SASL_IAM - MSK_TLS title: "- PRIVATE_SERVICE: PRIVATE_SERVICE represents any private service, such as a GCP service attachment, or an AWS VPC endpoint service.\n - MSK_SASL_SCRAM: MSK_SASL_SCRAM represents the managed Kafka service in AWS, with SASL/SCRAM auth\n - MSK_SASL_IAM: MSK_SASL_IAM represents the managed Kafka service in AWS, with SASL/IAM auth\n - MSK_TLS: MSK_TLS represents the managed Kafka service in AWS, with TLS auth" ListEgressPrivateEndpointsResponse: type: object properties: egress_private_endpoints: description: egress_private_endpoints are the egress private endpoints associated with the given cluster. type: array items: $ref: '#/components/schemas/EgressPrivateEndpoint' pagination: $ref: '#/components/schemas/KeysetPaginationResponse' required: - egress_private_endpoints title: ListEgressPrivateEndpointsResponse UpdateEgressPrivateEndpointBody: type: object properties: domain_names: description: domain_names are the domain names to associate with the egress private endpoint. type: array items: type: string example: domain_names: - example.com - api.example.com required: - domain_names title: UpdateEgressPrivateEndpointRequest UpdateEgressPrivateEndpointDomainNamesBody: type: object properties: domain_names: description: domain_names are the domain names to associate with the egress private endpoint. type: array items: type: string example: domain_names: - example.com - api.example.com required: - domain_names title: UpdateEgressPrivateEndpointRequest KeysetPaginationResponse: type: object properties: next_page: type: string previous_page: type: string EgressPrivateEndpointDomainNamesState.Type: type: string enum: - EMPTY - PENDING - AVAILABLE - FAILED title: "- EMPTY: EMPTY indicates that there are no egress private endpoint domain names on the cluster\n - PENDING: PENDING indicates that the domain names are currently being applied on the cluster\n - AVAILABLE: AVAILABLE indicates that the domain names have been applied on the cluster\n - FAILED: FAILED indicates that the domain names have failed to apply on the cluster" EgressPrivateEndpointState.Type: type: string enum: - PENDING - PENDING_ACCEPTANCE - AVAILABLE - DELETING - DELETED - REJECTED - FAILED - EXPIRED securitySchemes: Bearer: type: http scheme: bearer externalDocs: description: Use the CockroachDB Cloud API url: https://www.cockroachlabs.com/docs/cockroachcloud/cloud-api.html