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 JWT Issuers API version: '2026-09-15' servers: - url: https://cockroachlabs.cloud security: - Bearer: [] tags: - name: JWT Issuers paths: /api/v1/jwt-issuers: get: operationId: CockroachCloud_ListJWTIssuers summary: List all JWT Issuers description: 'Lists all the JWT Issuer configurations registered for the CockroachDB Cloud organization Can be used by the following roles assigned at the organization scope: - ORG_ADMIN - AUDITOR' parameters: - 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/ListJWTIssuersResponse' '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: - JWT Issuers x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url 'https://cockroachlabs.cloud/api/v1/jwt-issuers?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_AddJWTIssuer summary: Add a JWT Issuer description: 'Registers a JWT Issuer with the CockroachDB Cloud to allow verifying JWTs during API authentication Can be used by the following roles assigned at the organization scope: - ORG_ADMIN' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddJWTIssuerRequest' responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/JWTIssuer' '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: - JWT Issuers x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://cockroachlabs.cloud/api/v1/jwt-issuers \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"audience\":\"1234567890abcd\",\"claim\":\"email\",\"identity_map\":[{\"cc_identity\":\"\\\\1\",\"token_identity\":\"/^sso_(.*)$\"}],\"issuer_url\":\"https://jwt-issuer.example.com\",\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"use\\\":\\\"sig\\\",\\\"kty\\\":\\\"RSA\\\",\\\"alg\\\":\\\"RS256\\\",\\\"n\\\":\\\"tid8bJCI5FxtvMiVHq8pRZBGIPaG9mEa1akpIC9munzxA3mWoc-KoR1TGkocu76WFthaZnPS31WJbRVChU6g4EMIg7E8Ltpxifk1PQu0qqbLcpnoI62ojsB7l_Z_lkls0NUzTuKGMMtNoJsDrL1BT0UzcnWerh2PwzDAMpfPgafWdT2IYGTx1gNLcNOWpPhDgMSQqUmIPwCmxdan4i4OMd7lJYQ1WQlN8VnQgbRgHrm1zImY6MPqho9jW3Ub5FwGbunwCDrP9a2dD_5Iwm7_lR82iB4BGlu28WxFn0fm5DgZAeAFSGKE1xblC97WrjnPh2XYTx6pxsea_Hn71VcNSQ\\\",\\\"kid\\\":\\\"9341dedeee2d1869b657fa930300082fe26b3d92\\\"}]}\"}'" /api/v1/jwt-issuers/{id}: delete: operationId: CockroachCloud_DeleteJWTIssuer summary: Delete a JWT Issuer description: 'Deletes the JWT Issuer configuration Can be used by the following roles assigned at the organization scope: - ORG_ADMIN' parameters: - name: id in: path description: The unique identifier of the JWT Issuer resource required: true schema: type: string format: uuid responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/JWTIssuer' '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: - JWT Issuers x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request DELETE \\\n --url https://cockroachlabs.cloud/api/v1/jwt-issuers/{id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'" get: operationId: CockroachCloud_GetJWTIssuer summary: Get a JWT Issuer description: 'Retrieves the JWT Issuer configuration Can be used by the following roles assigned at the organization scope: - ORG_ADMIN - AUDITOR' parameters: - name: id in: path description: The unique identifier of the JWT Issuer resource required: true schema: type: string format: uuid responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/JWTIssuer' '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: - JWT Issuers x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url https://cockroachlabs.cloud/api/v1/jwt-issuers/{id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'" patch: operationId: CockroachCloud_UpdateJWTIssuer summary: Update a JWT Issuer description: 'Updates the JWT Issuer configuration Can be used by the following roles assigned at the organization scope: - ORG_ADMIN' parameters: - name: id in: path description: The unique identifier of the JWT Issuer resource required: true schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateJWTIssuerBody' responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/JWTIssuer' '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: - JWT Issuers x-badges: - color: red label: LIMITED ACCESS x-codeSamples: - lang: Shell + Curl source: "curl --request PATCH \\\n --url https://cockroachlabs.cloud/api/v1/jwt-issuers/{id} \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --json '{\"audience\":\"1234567890abcd\",\"claim\":\"email\",\"identity_map\":[{\"cc_identity\":\"\\\\1\",\"token_identity\":\"/^sso_(.*)$\"}],\"issuer_url\":\"https://jwt-issuer.example.com\",\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"use\\\":\\\"sig\\\",\\\"kty\\\":\\\"RSA\\\",\\\"alg\\\":\\\"RS256\\\",\\\"n\\\":\\\"tid8bJCI5FxtvMiVHq8pRZBGIPaG9mEa1akpIC9munzxA3mWoc-KoR1TGkocu76WFthaZnPS31WJbRVChU6g4EMIg7E8Ltpxifk1PQu0qqbLcpnoI62ojsB7l_Z_lkls0NUzTuKGMMtNoJsDrL1BT0UzcnWerh2PwzDAMpfPgafWdT2IYGTx1gNLcNOWpPhDgMSQqUmIPwCmxdan4i4OMd7lJYQ1WQlN8VnQgbRgHrm1zImY6MPqho9jW3Ub5FwGbunwCDrP9a2dD_5Iwm7_lR82iB4BGlu28WxFn0fm5DgZAeAFSGKE1xblC97WrjnPh2XYTx6pxsea_Hn71VcNSQ\\\",\\\"kid\\\":\\\"9341dedeee2d1869b657fa930300082fe26b3d92\\\"}]}\"}'" 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: {} UpdateJWTIssuerBody: type: object properties: audience: type: string example: 1234567890abcd title: The intended audience for consuming the JWT claim: type: string example: email title: Used to identify the user from the external Identity Provider. Defaults to "sub" identity_map: type: array items: $ref: '#/components/schemas/JWTIssuerIdentityMapEntry' title: A list of mappings to map the external token identity into CockroachDB Cloud issuer_url: type: string example: https://jwt-issuer.example.com title: The URL of the server issuing JWTs jwks: type: string example: '{"keys":[{"e":"AQAB","use":"sig","kty":"RSA","alg":"RS256","n":"tid8bJCI5FxtvMiVHq8pRZBGIPaG9mEa1akpIC9munzxA3mWoc-KoR1TGkocu76WFthaZnPS31WJbRVChU6g4EMIg7E8Ltpxifk1PQu0qqbLcpnoI62ojsB7l_Z_lkls0NUzTuKGMMtNoJsDrL1BT0UzcnWerh2PwzDAMpfPgafWdT2IYGTx1gNLcNOWpPhDgMSQqUmIPwCmxdan4i4OMd7lJYQ1WQlN8VnQgbRgHrm1zImY6MPqho9jW3Ub5FwGbunwCDrP9a2dD_5Iwm7_lR82iB4BGlu28WxFn0fm5DgZAeAFSGKE1xblC97WrjnPh2XYTx6pxsea_Hn71VcNSQ","kid":"9341dedeee2d1869b657fa930300082fe26b3d92"}]}' title: A set of public keys (JWKS) used to verify a JWT title: UpdateJWTIssuerRequest Status: type: object properties: code: type: integer format: int32 details: type: array items: $ref: '#/components/schemas/Any' message: type: string AddJWTIssuerRequest: type: object properties: audience: type: string example: 1234567890abcd title: The intended audience for consuming the JWT claim: type: string example: email title: Used to identify the user from the external Identity Provider. Defaults to "sub" identity_map: description: A list of mappings to map the external token identity into CockroachDB Cloud. type: array items: $ref: '#/components/schemas/JWTIssuerIdentityMapEntry' issuer_url: type: string example: https://jwt-issuer.example.com title: The URL of the server issuing JWTs jwks: type: string example: '{"keys":[{"e":"AQAB","use":"sig","kty":"RSA","alg":"RS256","n":"tid8bJCI5FxtvMiVHq8pRZBGIPaG9mEa1akpIC9munzxA3mWoc-KoR1TGkocu76WFthaZnPS31WJbRVChU6g4EMIg7E8Ltpxifk1PQu0qqbLcpnoI62ojsB7l_Z_lkls0NUzTuKGMMtNoJsDrL1BT0UzcnWerh2PwzDAMpfPgafWdT2IYGTx1gNLcNOWpPhDgMSQqUmIPwCmxdan4i4OMd7lJYQ1WQlN8VnQgbRgHrm1zImY6MPqho9jW3Ub5FwGbunwCDrP9a2dD_5Iwm7_lR82iB4BGlu28WxFn0fm5DgZAeAFSGKE1xblC97WrjnPh2XYTx6pxsea_Hn71VcNSQ","kid":"9341dedeee2d1869b657fa930300082fe26b3d92"}]}' title: A set of public keys (JWKS) used to verify a JWT required: - issuer_url - audience title: AddJWTIssuerRequest JWTIssuerIdentityMapEntry: type: object properties: cc_identity: description: 'Specifies how to map the fetched token identity to an identity in CockroachDB Cloud. In case of a regular expression for token_identity, this must contain a \1 placeholder for the matched content. Note that you will need to escape the backslash in the string as in the example usage (\\\\1). The mapped identity must match with either a user email address or a service account ID.' type: string example: \1 token_identity: description: 'Specifies how to fetch external identity from the token claim. A regular expression must start with a forward slash. The regular expression must be in RE2 compatible syntax. For further details, please see https://github.com/google/re2/wiki/Syntax.' type: string example: /^sso_(.*)$ required: - token_identity - cc_identity title: JWTIssuerIdentityMapEntry KeysetPaginationResponse: type: object properties: next_page: type: string previous_page: type: string JWTIssuer: type: object properties: audience: type: string example: 1234567890abcd title: The intended audience for consuming the JWT claim: type: string example: email title: Used to identify the user from the external Identity Provider. Defaults to "sub" id: type: string format: uuid example: 1234abcd-1234-1234-abcd-12345678abcd title: The unique identifier of the JWT Issuer resource identity_map: type: array items: $ref: '#/components/schemas/JWTIssuerIdentityMapEntry' title: A list of mappings to map the external token identity into CockroachDB Cloud issuer_url: type: string example: https://jwt-issuer.example.com title: The URL of the server issuing JWTs jwks: type: string example: '{"keys":[{"e":"AQAB","use":"sig","kty":"RSA","alg":"RS256","n":"tid8bJCI5FxtvMiVHq8pRZBGIPaG9mEa1akpIC9munzxA3mWoc-KoR1TGkocu76WFthaZnPS31WJbRVChU6g4EMIg7E8Ltpxifk1PQu0qqbLcpnoI62ojsB7l_Z_lkls0NUzTuKGMMtNoJsDrL1BT0UzcnWerh2PwzDAMpfPgafWdT2IYGTx1gNLcNOWpPhDgMSQqUmIPwCmxdan4i4OMd7lJYQ1WQlN8VnQgbRgHrm1zImY6MPqho9jW3Ub5FwGbunwCDrP9a2dD_5Iwm7_lR82iB4BGlu28WxFn0fm5DgZAeAFSGKE1xblC97WrjnPh2XYTx6pxsea_Hn71VcNSQ","kid":"9341dedeee2d1869b657fa930300082fe26b3d92"}]}' title: A set of public keys (JWKS) used to verify a JWT required: - id - issuer_url - audience title: JWTIssuer ListJWTIssuersResponse: type: object properties: jwt_issuers: type: array items: $ref: '#/components/schemas/JWTIssuer' title: The list of JWT Issuer resources pagination: $ref: '#/components/schemas/KeysetPaginationResponse' title: ListJWTIssuersResponse securitySchemes: Bearer: type: http scheme: bearer externalDocs: description: Use the CockroachDB Cloud API url: https://www.cockroachlabs.com/docs/cockroachcloud/cloud-api.html