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 Rules API version: '2026-09-15' servers: - url: https://cockroachlabs.cloud security: - Bearer: [] tags: - name: Egress Rules paths: /api/v1/clusters/{cluster_id}/networking/egress-rules: get: operationId: CockroachCloud_ListEgressRules summary: List all egress rules associated with a cluster description: 'Sort order: Name Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER - AUDITOR' parameters: - name: cluster_id in: path description: 'cluster_id identifies the CockroachDB cluster owning the set of returned egress rules.' 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/ListEgressRulesResponse' '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 Rules x-badges: - color: blue label: PREVIEW x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url 'https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-rules?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_AddEgressRule summary: Add an egress rule 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 rule applies. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddEgressRuleBody' responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/AddEgressRuleResponse' '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 Rules x-badges: - color: blue label: PREVIEW x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-rules \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"cluster_id\":\"35c4abb2-bb66-46d7-afed-25ebef5ed100\",\"description\":\"egress for GCP storage buckets\",\"destination\":\"storage.googleapis.com\",\"name\":\"roach-buckets\",\"ports\":[443,80],\"type\":\"FQDN\"}'" /api/v1/clusters/{cluster_id}/networking/egress-rules/egress-traffic-policy: post: operationId: CockroachCloud_SetEgressTrafficPolicy summary: Outbound traffic management 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 whose egress policy will be updated. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SetEgressTrafficPolicyBody' 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 Rules x-badges: - color: blue label: PREVIEW x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-rules/egress-traffic-policy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"allow_all\":true,\"idempotency_key\":\"string\"}'" /api/v1/clusters/{cluster_id}/networking/egress-rules/{rule_id}: delete: operationId: CockroachCloud_DeleteEgressRule summary: Delete an existing egress rule 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 uniquely identifies the cluster owning the egress rule. required: true schema: type: string - name: rule_id in: path description: rule_id is the UUID of an existing egress rule. This field is required. required: true schema: type: string - name: idempotency_key in: query description: 'idempotency_key uniquely identifies this request. If not set, it will be set by the server.' schema: type: string responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/DeleteEgressRuleResponse' '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 Rules x-badges: - color: blue label: PREVIEW x-codeSamples: - lang: Shell + Curl source: "curl --request DELETE \\\n --url 'https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-rules/{rule_id}?idempotency_key=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'" get: operationId: CockroachCloud_GetEgressRule summary: Get an existing egress rule description: 'Can be used by the following roles assigned at the organization, folder or cluster scope: - CLUSTER_ADMIN - CLUSTER_OPERATOR_WRITER - AUDITOR' parameters: - name: cluster_id in: path description: cluster_id uniquely identifies the cluster owning the egress rule. required: true schema: type: string - name: rule_id in: path description: rule_id is the UUID of an existing egress rule. required: true schema: type: string responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/GetEgressRuleResponse' '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 Rules x-badges: - color: blue label: PREVIEW x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-rules/{rule_id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'" patch: operationId: CockroachCloud_EditEgressRule summary: Edit an existing egress rule 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 uniquely identifies the cluster owning the egress rule. required: true schema: type: string - name: rule_id in: path description: rule_id is the UUID of an existing egress rule. This field is required. required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EditEgressRuleBody' responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/EditEgressRuleResponse' '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 Rules x-badges: - color: blue label: PREVIEW x-codeSamples: - lang: Shell + Curl source: "curl --request PATCH \\\n --url https://cockroachlabs.cloud/api/v1/clusters/{cluster_id}/networking/egress-rules/{rule_id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"cluster_id\":\"35c4abb2-bb66-46d7-afed-25ebef5ed100\",\"ports\":[443,80],\"rule_id\":\"35c4abb2-bb66-46d7-afed-25ebef5ed2aa\"}'" components: schemas: 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: {} AddEgressRuleBody: type: object properties: description: description: description is text that serves to document the rules purpose. type: string destination: description: 'destination is the endpoint (or subnetwork if CIDR) to which traffic is allowed.' type: string idempotency_key: description: 'idempotency_key uniquely identifies this request. If not set, it will be set by the server.' type: string name: description: name is the name of the egress rule. type: string paths: description: 'Deprecated: This field is ignored and will be removed in the next version. paths are the allowed URL paths. If empty, all paths are allowed. Only valid if Type="FQDN".' type: array items: type: string ports: description: 'ports are the allowed ports for TCP protocol. If Empty, all ports are allowed.' type: array items: format: int32 type: integer type: description: 'type classifies the Destination field. Valid types include: "FQDN", "CIDR".' type: string example: cluster_id: 35c4abb2-bb66-46d7-afed-25ebef5ed100 description: egress for GCP storage buckets destination: storage.googleapis.com name: roach-buckets ports: - 443 - 80 type: FQDN required: - name - type - destination - description title: AddEgressRuleRequest SetEgressTrafficPolicyBody: type: object properties: allow_all: description: 'allow_all, if true results in unrestricted egress traffic. If false, egress traffic is set to default-deny and is managed via the Egress Rule Management API.' type: boolean idempotency_key: description: 'idempotency_key uniquely identifies this request. If not set, it will be set by the server.' type: string required: - allow_all title: SetEgressTrafficPolicyRequest EditEgressRuleResponse: type: object properties: Rule: $ref: '#/components/schemas/EgressRule' required: - rule title: EditEgressRuleResponse Status: type: object properties: code: type: integer format: int32 details: type: array items: $ref: '#/components/schemas/Any' message: type: string EgressRule: description: EgressRule represents a network egress rule. type: object properties: cluster_id: description: cluster_id identifies the cluster to which this egress rule applies. type: string created_at: description: 'created_at is the time at which the time at which the egress rule was created.' type: string format: date-time crl_managed: description: 'crl_managed indicates this egress rule is managed by CockroachDB Cloud services. This field is set by the server.' type: boolean description: description: description is a longer that serves to document the rules purpose. type: string destination: description: 'destination is the endpoint (or subnetwork if CIDR) to which traffic is allowed.' type: string id: description: id uniquely identifies this egress rule. type: string name: description: name is the name of the egress rule. type: string paths: description: 'Deprecated: This field is ignored and will be removed in the next version. paths are the allowed URL paths. Only valid if Type="FQDN".' type: array items: type: string ports: description: 'ports are the allowed ports for TCP protocol. If Empty, all ports are allowed.' type: array items: format: int32 type: integer state: description: state indicates the state of the egress rule. type: string type: description: 'type classifies the destination field. Valid types include: "FQDN", "CIDR".' type: string required: - name - id - cluster_id - type - state - crl_managed - destination - description title: EgressRule AddEgressRuleResponse: type: object properties: Rule: $ref: '#/components/schemas/EgressRule' required: - rule title: AddEgressRuleResponse ListEgressRulesResponse: type: object properties: pagination: $ref: '#/components/schemas/KeysetPaginationResponse' rules: description: rules are the egress rules associated with the given CockroachDB cluster. type: array items: $ref: '#/components/schemas/EgressRule' title: ListEgressRulesResponse DeleteEgressRuleResponse: type: object properties: Rule: $ref: '#/components/schemas/EgressRule' required: - rule title: DeleteEgressRuleResponse GetEgressRuleResponse: type: object properties: rule: $ref: '#/components/schemas/EgressRule' required: - rule title: GetEgressRuleResponse KeysetPaginationResponse: type: object properties: next_page: type: string previous_page: type: string EditEgressRuleBody: type: object properties: description: description: description is text that serves to document the rules purpose. type: string destination: description: 'destination is a CIDR range or fully-qualified domain name to which outgoing traffic should be allowed. This field is required.' type: string idempotency_key: description: 'idempotency_key uniquely identifies this request. If not set, it will be set by the server.' type: string paths: description: 'Deprecated: This field is ignored and will be removed in the next version. paths are the allowed URL paths. If empty, all paths are allowed. Only valid if Type="FQDN".' type: array items: type: string ports: description: 'ports are the allowed ports for TCP protocol. If empty, all ports are allowed.' type: array items: format: int32 type: integer type: description: 'type is the destination type of this rule. Example values are FQDN or CIDR. This field is required.' type: string example: cluster_id: 35c4abb2-bb66-46d7-afed-25ebef5ed100 ports: - 443 - 80 rule_id: 35c4abb2-bb66-46d7-afed-25ebef5ed2aa title: EditEgressRuleRequest securitySchemes: Bearer: type: http scheme: bearer externalDocs: description: Use the CockroachDB Cloud API url: https://www.cockroachlabs.com/docs/cockroachcloud/cloud-api.html