{
  "swagger": "2.0",
  "info": {
    "title": "TiDB Cloud TCPN Open API",
    "description": "TiDB Cloud TCPN Open API.",
    "version": "v1beta1"
  },
  "host": "tcpn.tidbapi.com",
  "schemes": [
    "https"
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/v1beta1/apiKeys": {
      "get": {
        "summary": "List API keys",
        "operationId": "ApiKeyService_ListApiKeys",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1ListApiKeysResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "pageSize",
            "description": "The maximum number of API keys to return.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32",
            "default": 100,
            "minimum": 1,
            "maximum": 100
          },
          {
            "name": "pageToken",
            "description": "The identifier of the current page, used to retrieve the next page of results. You can get this value from the `nextPageToken` field in the previous response. To access the first page of data, omit this field.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "skip",
            "description": "The number of results to skip before returning the requested page.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32",
            "default": 0,
            "minimum": 0,
            "maximum": 100
          }
        ],
        "tags": [
          "API Key"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request GET \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/apiKeys'"
          }
        ]
      },
      "post": {
        "summary": "Create an API key",
        "operationId": "ApiKeyService_CreateApiKey",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1ApiKey"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "apiKey",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/v1beta1ApiKey"
            }
          }
        ],
        "tags": [
          "API Key"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request POST \\\n  -d '{\"displayName\": \"New Key\", \"role\": \"api:org:owner\"}' \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/apiKeys'"
          }
        ]
      }
    },
    "/v1beta1/apiKeys/{accessKey}": {
      "delete": {
        "summary": "Delete an API key",
        "operationId": "ApiKeyService_DeleteApiKey",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "accessKey",
            "description": "The access key of the API key. You can get this value from the response of [List API keys](#tag/API-Key/operation/ApiKeyService_ListApiKeys).",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "API Key"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request DELETE \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/apiKeys/{accessKey}'"
          }
        ]
      },
      "get": {
        "summary": "Get an API key",
        "operationId": "ApiKeyService_GetApiKey",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1ApiKey"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "accessKey",
            "description": "The access key of the API key. You can get this value from the response of [List API keys](#tag/API-Key/operation/ApiKeyService_ListApiKeys).",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "API Key"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request GET \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/apiKeys/{accessKey}'"
          }
        ]
      }
    },
    "/v1beta1/org": {
      "get": {
        "summary": "Get organization details",
        "operationId": "OrgService_GetOrg",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1Org"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "Organization"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request GET \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/org'"
          }
        ]
      }
    },
    "/v1beta1/partners/customers": {
      "get": {
        "summary": "List customers in a partner",
        "operationId": "PartnerService_ListCustomers",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1ListCustomersResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "Partner"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request GET \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/partners/customers'"
          }
        ]
      }
    },
    "/v1beta1/partners/msp/signupUrl": {
      "post": {
        "summary": "Create a signup URL for partner customers",
        "operationId": "PartnerService_CreateSignupUrl",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1CreateSignupUrlResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "Partner"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request POST \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/partners/msp/signupUrl'"
          }
        ]
      }
    },
    "/v1beta1/partners/partnerProfile": {
      "get": {
        "summary": "Get partner profile",
        "operationId": "PartnerService_GetPartnerProfile",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1PartnerProfile"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "Partner"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request GET \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/partners/partnerProfile'"
          }
        ]
      },
      "patch": {
        "summary": "Update partner profile",
        "operationId": "PartnerService_UpdatePartnerProfile",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1PartnerProfile"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "partnerProfile",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/v1beta1PartnerProfile"
            }
          }
        ],
        "tags": [
          "Partner"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request PATCH \\\n  -d '{\"logo\": \"my_logo.svg\", \"advertising\": [{\"index\": \"index\", \"heading\": \"heading\", \"body\": \"body\"}]}' \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/partners/partnerProfile'"
          }
        ]
      }
    },
    "/v1beta1/projects/{projectId}/users/{userId}": {
      "delete": {
        "summary": "Remove a user from a project",
        "operationId": "UserService_DeleteProjectUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "projectId",
            "description": "The ID of the project. You can get this value from the response of [List all accessible projects.](https://docs.pingcap.com/tidbcloud/api/v1beta#tag/Project/operation/ListProjects).",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "userId",
            "description": "The ID of the user to remove. You can get this value from the `userId` field in the response of [List users](#tag/User/operation/UserService_ListUsers).",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "User"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request DELETE \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/projects/{projectId}/users/{userId}'"
          }
        ]
      }
    },
    "/v1beta1/users": {
      "get": {
        "summary": "List users",
        "operationId": "UserService_ListUsers",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1ListUsersResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "pageSize",
            "description": "The maximum number of User to return.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32",
            "default": 100,
            "minimum": 1,
            "maximum": 100
          },
          {
            "name": "pageToken",
            "description": "The identifier of the current page, used to retrieve the next page of results. You can get this value from the `nextPageToken` field in the previous response. To access the first page of data, omit this field.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "projectId",
            "description": "The project ID where the user has an active project role.",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "int64"
          },
          {
            "name": "email",
            "description": "The user's email address.",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "skip",
            "description": "The number of results to skip before returning the requested page.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32",
            "default": 0,
            "minimum": 0,
            "maximum": 100
          }
        ],
        "tags": [
          "User"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request GET \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/users'"
          }
        ]
      }
    },
    "/v1beta1/users/{userId}": {
      "delete": {
        "summary": "Remove a user from an organization",
        "operationId": "UserService_DeleteOrgUser",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "description": "The ID of the user to remove. You can get this value from the `userId` field in the response of [List users](#tag/User/operation/UserService_ListUsers).",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "User"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request DELETE \\\n  --url 'https://tcpn.tidbapi.com/v1beta1/users/{userId}'"
          }
        ]
      }
    },
    "/v1beta1/users:invite": {
      "post": {
        "summary": "Create an invitation for users to join an organization",
        "operationId": "InvitationService_CreateOrgInvitation",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1CreateInvitationResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "401": {
            "description": "Unauthorized",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "403": {
            "description": "Forbidden",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "429": {
            "description": "Too Many Requests",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "500": {
            "description": "Internal Server Error",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/v1beta1CreateOrgInvitationRequest"
            }
          }
        ],
        "tags": [
          "Invitation"
        ],
        "x-code-samples": [
          {
            "lang": "curl",
            "source": "curl --digest \\\n  --user 'YOUR_PUBLIC_KEY:YOUR_PRIVATE_KEY' \\\n  --request POST \\\n  -d '{\"inviteesEmails\": [\"my@test.com\"], \"role\": \"partner:admin\"}' \\\n  --url 'https://tcpn.tidbapi.com//v1beta1/users:invite'"
          }
        ]
      }
    }
  },
  "definitions": {
    "InvitationResult": {
      "default": "RESULT_UNSPECIFIED",
      "description": "The result of the invitation process.\n- \"RESULT_UNSPECIFIED\": Unspecified. This should not be used.\n - \"RESULT_SUCCESS\": The invitation was successful.\n - \"RESULT_FAIL\": The invitation failed.",
      "enum": [
        "RESULT_UNSPECIFIED",
        "RESULT_SUCCESS",
        "RESULT_FAIL"
      ],
      "type": "string"
    },
    "protobufAny": {
      "additionalProperties": {},
      "properties": {
        "@type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "rpcStatus": {
      "properties": {
        "code": {
          "format": "int32",
          "type": "integer"
        },
        "details": {
          "items": {
            "$ref": "#/definitions/protobufAny"
          },
          "type": "array"
        },
        "message": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1beta1Advertising": {
      "properties": {
        "body": {
          "required": [
            "body"
          ],
          "description": "The body text of the advertisement.",
          "type": "string"
        },
        "heading": {
          "required": [
            "heading"
          ],
          "description": "The heading or title of the advertisement.",
          "type": "string"
        },
        "index": {
          "required": [
            "index"
          ],
          "description": "The index or position of the advertisement.",
          "type": "string"
        }
      },
      "required": [
        "index",
        "heading",
        "body"
      ],
      "description": "Advertising of Partner",
      "type": "object"
    },
    "v1beta1ApiKey": {
      "properties": {
        "accessKey": {
          "readOnly": true,
          "description": "The access key of the API key.",
          "type": "string"
        },
        "createTime": {
          "readOnly": true,
          "description": "The creation time of the API key. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        },
        "creator": {
          "readOnly": true,
          "description": "The creator of the API key.",
          "type": "string"
        },
        "displayName": {
          "required": [
            "displayName"
          ],
          "description": "A descriptive name for the API key.",
          "type": "string"
        },
        "name": {
          "description": "The unique identifier of the API key, in the format of `orgs/{org_id}/apikeys/{api_key}`.",
          "readOnly": true,
          "type": "string"
        },
        "role": {
          "enum": [
            "api:org:owner"
          ],
          "required": [
            "role"
          ],
          "description": "The role associated with the API key.",
          "type": "string"
        },
        "secretKey": {
          "description": "The secret key of the API key. Only fully displayed when initially created.",
          "readOnly": true,
          "type": "string"
        },
        "updateTime": {
          "readOnly": true,
          "description": "The last update time of the API key. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        }
      },
      "required": [
        "displayName",
        "role"
      ],
      "title": "An API key",
      "type": "object"
    },
    "v1beta1CreateInvitationResponse": {
      "properties": {
        "invitations": {
          "items": {
            "$ref": "#/definitions/v1beta1Invitation"
          },
          "readOnly": true,
          "type": "array"
        }
      },
      "title": "Response for CreateOrgInvitation CreateProjectInvitation",
      "type": "object"
    },
    "v1beta1CreateOrgInvitationRequest": {
      "properties": {
        "inviteesEmails": {
          "items": {
            "type": "string"
          },
          "required": [
            "inviteesEmails"
          ],
          "description": "The email addresses of the users to invite.",
          "type": "array"
        },
        "role": {
          "enum": [
            "partner:admin",
            "org:owner",
            "org:member",
            "org:audit_admin",
            "org:billing_admin"
          ],
          "required": [
            "role"
          ],
          "description": "The role to assign to the invited users.\n",
          "type": "string"
        }
      },
      "required": [
        "inviteesEmails",
        "role"
      ],
      "title": "(-- api-linter: core::0133::request-resource-field=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\n(-- api-linter: core::0133::request-parent-required=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\n(-- api-linter: core::0133::request-id-field=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\nRequest for CreateOrgInvitation",
      "type": "object"
    },
    "v1beta1CreateSignupUrlResponse": {
      "properties": {
        "customerSignupUrl": {
          "readOnly": true,
          "description": "The unique URL that partners can share with their customers for signup.",
          "type": "string"
        },
        "expiredTime": {
          "readOnly": true,
          "description": "The timestamp when the signup URL will expire. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        }
      },
      "title": "(-- api-linter: core::0142::time-field-type=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\n(-- api-linter: core::0140::uri=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\nResponse for CreateSignupUrl",
      "type": "object"
    },
    "v1beta1Customer": {
      "properties": {
        "effectedTime": {
          "readOnly": true,
          "description": "The time when the partnership became effective. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        },
        "email": {
          "readOnly": true,
          "description": "The email address associated with the customer.",
          "type": "string"
        },
        "expiredTime": {
          "readOnly": true,
          "description": "The time when the partnership is set to expire. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        },
        "orgId": {
          "readOnly": true,
          "description": "The unique identifier of the customer's organization.",
          "type": "string"
        },
        "orgName": {
          "readOnly": true,
          "description": "The name of the customer's organization.",
          "type": "string"
        },
        "state": {
          "readOnly": true,
          "description": "The current state of the customer partnership.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1beta1Invitation": {
      "properties": {
        "inviteesEmail": {
          "readOnly": true,
          "description": "The email address of the invited user.",
          "type": "string"
        },
        "message": {
          "readOnly": true,
          "description": "A message describing the result of the invitation.",
          "type": "string"
        },
        "orgId": {
          "readOnly": true,
          "description": "The ID of the organization associated with the invitation.",
          "type": "string"
        },
        "projectId": {
          "readOnly": true,
          "description": "The ID of the project associated with the invitation.",
          "type": "string"
        },
        "result": {
          "$ref": "#/definitions/InvitationResult"
        },
        "role": {
          "readOnly": true,
          "description": "The role assigned to the invited user.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1beta1ListApiKeysResponse": {
      "properties": {
        "apiKeys": {
          "description": "The list of matching API keys.",
          "items": {
            "$ref": "#/definitions/v1beta1ApiKey"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "The token to retrieve the next page of results.",
          "type": "string"
        },
        "totalSize": {
          "description": "The total number of matching API keys.",
          "format": "int32",
          "type": "integer"
        }
      },
      "title": "Response for ListApiKeys",
      "type": "object"
    },
    "v1beta1ListCustomersResponse": {
      "properties": {
        "customers": {
          "items": {
            "$ref": "#/definitions/v1beta1Customer"
          },
          "readOnly": true,
          "description": "The customers in the partner.",
          "type": "array"
        }
      },
      "title": "(-- api-linter: core::0158::response-next-page-token-field=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\nResponse for ListCustomers",
      "type": "object"
    },
    "v1beta1ListPartnerOrgsResponse": {
      "properties": {
        "orgs": {
          "description": "The list of matching Orgs.",
          "items": {
            "$ref": "#/definitions/v1beta1Org"
          },
          "type": "array"
        },
        "totalSize": {
          "description": "The total number of matching Orgs.",
          "format": "int32",
          "type": "integer"
        }
      },
      "title": "(-- api-linter: core::0158::response-next-page-token-field=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\nResponse for ListPartnerOrgs",
      "type": "object"
    },
    "v1beta1ListUsersResponse": {
      "properties": {
        "nextPageToken": {
          "description": "The token to retrieve the next page of results.",
          "type": "string"
        },
        "totalSize": {
          "description": "The total number of matching Users.",
          "format": "int32",
          "type": "integer"
        },
        "users": {
          "description": "The list of matching users.",
          "items": {
            "$ref": "#/definitions/v1beta1User"
          },
          "type": "array"
        }
      },
      "title": "Response for ListUsers",
      "type": "object"
    },
    "v1beta1Org": {
      "properties": {
        "createTime": {
          "readOnly": true,
          "description": "The creation time of the organization. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        },
        "email": {
          "readOnly": true,
          "description": "The email address associated with the organization.",
          "type": "string"
        },
        "emailDomain": {
          "readOnly": true,
          "description": "The email domain of the organization's creator.",
          "type": "string"
        },
        "orgId": {
          "readOnly": true,
          "description": "The unique identifier of the organization.",
          "type": "string"
        },
        "orgName": {
          "readOnly": true,
          "description": "The name of the organization.",
          "type": "string"
        },
        "orgTag": {
          "readOnly": true,
          "description": "The tag associated with the organization.",
          "type": "string"
        }
      },
      "title": "A Org",
      "type": "object"
    },
    "v1beta1PartnerProfile": {
      "properties": {
        "advertising": {
          "items": {
            "$ref": "#/definitions/v1beta1Advertising"
          },
          "required": [
            "advertising"
          ],
          "description": "An array of advertising items.",
          "type": "array"
        },
        "darkLogo": {
          "required": [
            "darkLogo"
          ],
          "description": "The URL or identifier for the partner's dark-colored logo.",
          "type": "string"
        },
        "lightLogo": {
          "required": [
            "lightLogo"
          ],
          "description": "The URL or identifier for the partner's light-colored logo.",
          "type": "string"
        },
        "orgId": {
          "readOnly": true,
          "description": "The unique identifier of the partner organization.",
          "type": "string"
        }
      },
      "required": [
        "lightLogo",
        "advertising",
        "darkLogo"
      ],
      "description": "Partner Profile",
      "type": "object"
    },
    "v1beta1UploadLogoRequest": {
      "properties": {
        "content": {
          "format": "byte",
          "required": [
            "content"
          ],
          "description": "The Content of Upload file",
          "type": "string"
        },
        "fileName": {
          "required": [
            "fileName"
          ],
          "description": "The File Name of Upload file",
          "type": "string"
        },
        "headers": {
          "additionalProperties": {
            "type": "string"
          },
          "required": [
            "headers"
          ],
          "description": "The Header of Upload file",
          "type": "object"
        }
      },
      "required": [
        "fileName",
        "content",
        "headers"
      ],
      "title": "(-- api-linter: core::0122::name-suffix=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\nRequest for UploadLogo",
      "type": "object"
    },
    "v1beta1UploadLogoResponse": {
      "properties": {
        "logoName": {
          "description": "The Logo Name of Uploaded file",
          "type": "string"
        },
        "logoUrl": {
          "description": "The Logo Url of Uploaded file",
          "type": "string"
        }
      },
      "title": "(-- api-linter: core::0140::uri=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\n(-- api-linter: core::0122::name-suffix=disabled\n    aip.dev/not-precedent: We need to do this because reasons. --)\nResponse for UploadLogo",
      "type": "object"
    },
    "v1beta1User": {
      "properties": {
        "email": {
          "readOnly": true,
          "description": "The user's email address.",
          "type": "string"
        },
        "firstName": {
          "required": [
            "firstName"
          ],
          "description": "The user's first name.",
          "type": "string"
        },
        "inviteTime": {
          "readOnly": true,
          "description": "The time when the user was invited to the resource. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        },
        "lastLoginTime": {
          "readOnly": true,
          "description": "The time of the user's last login to the resource. For example: \"2006-01-02 15:04:05\".",
          "type": "string"
        },
        "lastName": {
          "required": [
            "lastName"
          ],
          "description": "The user's last name.",
          "type": "string"
        },
        "name": {
          "readOnly": true,
          "description": "The unique identifier of the user, in the format of `users/{userId}`.",
          "type": "string"
        },
        "roleBindingRole": {
          "readOnly": true,
          "description": "The user's role in the resource.",
          "type": "string"
        },
        "roleBindingStatus": {
          "readOnly": true,
          "description": "The user's status in the resource.",
          "type": "string"
        },
        "userId": {
          "readOnly": true,
          "description": "The ID of the user.",
          "type": "string"
        }
      },
      "required": [
        "firstName",
        "lastName"
      ],
      "description": "A User",
      "type": "object"
    }
  }
}
