openapi: 3.0.1
info:
  title: catena-tools-core
  version: v1
  description: >-
    # How To Use The API Explorer


    On the right hand side of this page, you will see a list of "Servers".


    - *Mock server*: This server will return mock responses to all requests. It
    is best used when evaluating the shape of the Catena API.

    - *Localhost*: This server will point at a locally running version of
    Catena. It is best used when you want to make real requests or to validate
    that Catena is properly running on your machine.

    - *Custom Domain*: This server will point at any domain you specify with the
    _domain_ variable. It is best used when you have a version of Catena
    deployed to a live environment and you want to make real requests against
    it.


    To configure which server is shown in example requests:

    1. Select the "Try it" button on any API operation within the API explorer


    [ ![api operation](/images/api-description/api-operation.png)
    ](/images/api-description/api-operation.png)



    2. Select your environment


    [ ![select environment](/images/api-description/select-environment.png)
    ](/images/api-description/select-environment.png)


    3. If you want to point the API explorer to an instance of Catena you have
    deployed, select "Custom Domain" and configure the `domain` environment
    variable.


    [ ![custom domain](/images/api-description/custom-domain.png)
    ](/images/api-description/custom-domain.png)


    4. You're all set! This setting will be cached across all API operations
    exposed in these docs.
servers:
  - url: http://localhost:5000
    description: Localhost
  - url: https://{domain}
    description: Custom Domain
    variables:
      domain:
        default: your_domain_here
        description: Your custom domain
paths:
  /api/v1/accounts:
    post:
      tags:
        - CatenaAccounts
      summary: CreateOrGetAccountFromToken
      operationId: catena.catena_accounts.CatenaAccounts_CreateOrGetAccountFromToken
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.CreateOrGetAccountFromTokenRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.CreateOrGetAccountFromTokenResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/accounts/{accountId}:
    get:
      tags:
        - CatenaAccounts
      summary: >-
        GetAccountByID Retrieves information about the account given an id. This
        route is to be used by users
      operationId: catena.catena_accounts.CatenaAccounts_GetAccountById
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.GetAccountByIdResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    patch:
      tags:
        - CatenaAccounts
      summary: UpdateAccount Updates a passed in account's display_name and metadata
      operationId: catena.catena_accounts.CatenaAccounts_UpdateAccount
      parameters:
        - name: accountId
          in: path
          description: The id of the account to update
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.UpdateAccountRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.UpdateAccountResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/accounts/ids:
    post:
      tags:
        - CatenaAccounts
      summary: >-
        GetAccountIds Retrieves a list of account ids. This route is to be used
        by users
      operationId: catena.catena_accounts.CatenaAccounts_GetAccountIds
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.GetAccountIdsRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.GetAccountIdsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/accounts/{accountId}:
    get:
      tags:
        - CatenaAccounts
      summary: >-
        AdminGetAccountById is to be used by admins to retrieve detailed account
        information
      operationId: catena.catena_accounts.CatenaAccounts_AdminGetAccountById
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.GetAccountByIdResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/accounts/link:
    post:
      tags:
        - CatenaAccounts
      summary: LinkAccountToPlatform
      operationId: catena.catena_accounts.CatenaAccounts_LinkAccountToPlatform
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.LinkAccountToPlatformRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.LinkAccountToPlatformResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/accounts/metadata:
    post:
      tags:
        - CatenaAccounts
      summary: CreateMetadataEntry Creates a metadata entry for an account
      operationId: catena.catena_accounts.CatenaAccounts_CreateMetadataEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.CreateMetadataEntryRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.CreateMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    put:
      tags:
        - CatenaAccounts
      summary: >-
        UpdateMetadataEntry Updates a passed in account's metadata for a
        specific entry
      operationId: catena.catena_accounts.CatenaAccounts_UpdateMetadataEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.UpdateMetadataEntryRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.UpdateMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaAccounts
      summary: GetMetadataEntries Gets all metadata entries for a passed in account id
      operationId: catena.catena_accounts.CatenaAccounts_GetMetadataEntries
      parameters:
        - name: id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.GetMetadataEntriesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/accounts/metadata/{entryKey}:
    delete:
      tags:
        - CatenaAccounts
      summary: DeleteMetadataEntry Deletes a metadata entry for an account
      operationId: catena.catena_accounts.CatenaAccounts_DeleteMetadataEntry
      parameters:
        - name: entryKey
          in: path
          required: true
          schema:
            type: string
        - name: accountId
          in: query
          schema:
            type: string
        - name: jsonHandlingType
          in: query
          schema:
            $ref: '#/components/schemas/Catena.Groups.DeleteJsonMetadataType'
        - name: propertiesToRemovePaths
          in: query
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.DeleteMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaAccounts
      summary: GetMetadataEntry Gets a metadata entry for a passed in key
      operationId: catena.catena_accounts.CatenaAccounts_GetMetadataEntry
      parameters:
        - name: entryKey
          in: path
          required: true
          schema:
            type: string
        - name: accountId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.GetMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/accounts/healthz:
    get:
      tags:
        - CatenaAccounts
      summary: >-
        GetServiceHealth Gets the health of the CatenaAccounts service, logging
        any errors
      operationId: catena.catena_accounts.CatenaAccounts_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/accounts:
    get:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminListAccounts
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            format: int32
        - name: offset
          in: query
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.ListAccountsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    post:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminCreateAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.AdminCreateAccountRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.CreateAccountResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    patch:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminUpdateAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.UpdateAccountRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.UpdateAccountResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminDeleteAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.DeleteAccountRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.DeleteAccountResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/accounts/metadata:
    post:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminCreateMetadataEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.CreateMetadataEntryRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.CreateMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    put:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminUpdateMetadataEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.UpdateMetadataEntryRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.UpdateMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminDeleteMetadataEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.DeleteMetadataEntryRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.DeleteMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_AdminGetMetadataEntry
      parameters:
        - name: accountId
          in: query
          schema:
            type: string
        - name: entryKey
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.GetMetadataEntryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/accounts:
    post:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_ServerCreateAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.ServerCreateAccountRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.ServerCreateAccountResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_ServerDeleteAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.ServerDeleteAccountRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.ServerDeleteAccountResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/accounts/link:
    post:
      tags:
        - CatenaAccounts
      operationId: catena.catena_accounts.CatenaAccounts_ServerLinkAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAccounts.ServerLinkAccountRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAccounts.ServerLinkAccountResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/api_keys/test:
    get:
      tags:
        - CatenaApiKeys
      summary: TestApiKey is used to test the validity of an API key
      operationId: catena.catena_api_keys.CatenaApiKeys_TestApiKey
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Services.CatenaApiKeys.TestApiKeyResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/api_keys/permissions:
    get:
      tags:
        - CatenaApiKeys
      summary: >-
        AdminGetApiKeyPermissions Gets a list of available permissions that can
        be attached to a policy for an API key
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminGetApiKeyPermissions
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminGetApiKeyPermissionsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/api_keys/policies:
    post:
      tags:
        - CatenaApiKeys
      summary: AdminCreateApiKeyPolicy Creates a policy for use by one or more API keys
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminCreateApiKeyPolicy
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaApiKeys.AdminCreateApiKeyPolicyRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminCreateApiKeyPolicyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaApiKeys
      summary: >-
        AdminGetApiKeyPolicies Gets a list of policies that may be used by one
        or more API keys
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminGetApiKeyPolicies
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminGetApiKeyPoliciesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/api_keys/policies/{id}:
    put:
      tags:
        - CatenaApiKeys
      summary: AdminUpdateApiKeyPolicy Updates a policy for use by one or more API keys
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminUpdateApiKeyPolicy
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaApiKeys.AdminUpdateApiKeyPolicyRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminUpdateApiKeyPolicyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaApiKeys
      summary: AdminDeleteApiKeyPolicy Deletes a policy for use by one or more API keys
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminDeleteApiKeyPolicy
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminDeleteApiKeyPolicyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/api_keys:
    post:
      tags:
        - CatenaApiKeys
      summary: AdminCreateApiKey Creates an API key
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminCreateApiKey
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaApiKeys.AdminCreateApiKeyRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminCreateApiKeyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaApiKeys
      summary: AdminGetApiKeys Gets all API keys
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminGetApiKeys
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminGetApiKeysResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/api_keys/{key}:
    put:
      tags:
        - CatenaApiKeys
      summary: AdminUpdateApiKey Updates an API key
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminUpdateApiKey
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaApiKeys.AdminUpdateApiKeyRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminUpdateApiKeyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaApiKeys
      summary: AdminDeleteApiKey Deletes an API key
      operationId: catena.catena_api_keys.CatenaApiKeys_AdminDeleteApiKey
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaApiKeys.AdminDeleteApiKeyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/authentication/login:
    post:
      tags:
        - CatenaAuthentication
      summary: LoginWithProvider Logs in a user with the given provider.
      operationId: catena.catena_authentication.CatenaAuthentication_LoginWithProvider
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAuthentication.LoginWithProviderRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAuthentication.LoginWithProviderResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/authentication/providers:
    get:
      tags:
        - CatenaAuthentication
      summary: GetEnabledProviders returns a list of all active OAuth providers.
      operationId: catena.catena_authentication.CatenaAuthentication_GetEnabledProviders
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAuthentication.GetEnabledProvidersResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/authentication/providers/{provider}:
    patch:
      tags:
        - CatenaAuthentication
      summary: >-
        AdminUpdateProviderConfig allows an admin to update the configuration of
        a specific provider
      operationId: >-
        catena.catena_authentication.CatenaAuthentication_AdminAddOrUpdateProviderConfig
      parameters:
        - name: provider
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAuthentication.AdminAddOrUpdateProviderConfigRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAuthentication.AdminAddOrUpdateProviderConfigResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaAuthentication
      operationId: catena.catena_authentication.CatenaAuthentication_AdminGetProviderConfig
      parameters:
        - name: provider
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAuthentication.AdminGetProviderConfigResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/authentication/providers/{provider}/status:
    put:
      tags:
        - CatenaAuthentication
      summary: >-
        AdminToggleProvider allows an admin to enable/disable a specific OAuth2
        provider
      operationId: catena.catena_authentication.CatenaAuthentication_AdminToggleProvider
      parameters:
        - name: provider
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaAuthentication.AdminToggleProviderRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAuthentication.AdminToggleProviderResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/authentication/await:
    get:
      tags:
        - CatenaAuthentication
      summary: "AwaitSession will send a message if the user successfully logs in or fails to log in after a timeout.\r\nIn this flow you will log in & go through the oauth flow, then wait for the callback to be called."
      operationId: catena.catena_authentication.CatenaAuthentication_AwaitSession
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAuthentication.AwaitSessionResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/authentication/healthz:
    get:
      tags:
        - CatenaAuthentication
      summary: >-
        GetServiceHealth Gets the health of the CatenaAuthentication service,
        logging any errors
      operationId: catena.catena_authentication.CatenaAuthentication_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/authentication/logout:
    post:
      tags:
        - CatenaAuthentication
      operationId: catena.catena_authentication.CatenaAuthentication_Logout
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaAuthentication.LogoutResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements:
    post:
      tags:
        - CatenaEntitlements
      summary: Creates a new catalog item in our system with the specified information.
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminCreateCatalogItem
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminCreateCatalogItemRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminCreateCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    put:
      tags:
        - CatenaEntitlements
      summary: Updates a new catalog item in our system with the specified information.
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminUpdateCatalogItem
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminUpdateCatalogItemRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminUpdateCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaEntitlements
      summary: >-
        Retreives a list of all catalog items, optionally filtered by specified
        parameters
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminGetCatalogItems
      parameters:
        - name: tag
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetCatalogItemsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/{catalogItemId}:
    delete:
      tags:
        - CatenaEntitlements
      summary: Deletes a new catalog item in our system with the specified id.
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminDeleteCatalogItem
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminDeleteCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/{tag}:
    get:
      tags:
        - CatenaEntitlements
      summary: >-
        Retreives a list of all catalog items, optionally filtered by specified
        parameters
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminGetCatalogItems
      parameters:
        - name: tag
          in: path
          description: optional
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetCatalogItemsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/owned:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetAccountOwnsCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
        - name: customItemId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetAccountOwnsCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/custom/{customItemId}/owned:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetAccountOwnsCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: customItemId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: query
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetAccountOwnsCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/items:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetAccountCatalogItems
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetAccountCatalogItemsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/revoke:
    put:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminRevokeAccountCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminRevokeAccountCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/set/{count}:
    put:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminSetAccountCountableCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: count
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: operation
          in: query
          schema:
            $ref: '#/components/schemas/Services.CatenaEntitlements.ExtendedOperation'
        - name: lockoutFlags.prohibitNonAdminUpdate.nullValue
          in: query
          schema:
            $ref: '#/components/schemas/Services.PublicCommon.NullValue'
        - name: lockoutFlags.prohibitNonAdminUpdate.value
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminSetAccountCountableCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/set_extended:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminSetAccountCountableCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminSetAccountCountableCatalogItemRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminSetAccountCountableCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/increment/{count}:
    patch:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminIncrementAccountCountableCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: count
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminIncrementAccountCountableCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/decrement/{count}:
    patch:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminDecrementAccountCountableCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: count
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: allowNegativeTotal
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminDecrementAccountCountableCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/history/recent:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetMostRecentOwnershipChange
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetMostRecentOwnershipChangeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/account/{accountId}/item/{catalogItemId}/history:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetOwnershipChangeHistory
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetOwnershipChangeHistoryResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/admin/order/place:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminPlaceOrderWithProvider
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminPlaceOrderWithProviderRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminPlaceOrderWithProviderResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/admin/order/refund:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminRefundOrderWithProvider
      parameters:
        - name: provider
          in: query
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
        - name: orderId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminRefundOrderWithProviderResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/admin/subscription/start:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminStartSubscriptionWithProvider
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminStartSubscriptionWithProviderRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminStartSubscriptionWithProviderResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/admin/subscription/cancel:
    post:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminCancelSubscription
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminCancelSubscriptionRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminCancelSubscriptionResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/admin/subscriptions/get:
    post:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminGetSubscriptions
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminGetSubscriptionsRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetSubscriptionsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/{catalogItemId}/provider_data/{provider}/modify:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminModifyProviderCatalogItemData
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: provider
          in: path
          required: true
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminModifyProviderCatalogItemDataRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminModifyProviderCatalogItemDataResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/{catalogItemId}/provider_data/{provider}/remove:
    delete:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminRemoveProviderCatalogItemData
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: provider
          in: path
          required: true
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminRemoveProviderCatalogItemDataResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/{catalogItemId}/provider_data:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetProviderCatalogItemData
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: provider
          in: query
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetProviderCatalogItemDataResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/{catalogItemId}/provider_data/{provider}:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetProviderCatalogItemData
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: provider
          in: path
          required: true
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetProviderCatalogItemDataResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/price/add:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminAddCatalogItemPurchasePrice
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminAddCatalogItemPurchasePriceRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminAddCatalogItemPurchasePriceResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/price/update:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminUpdateCatalogItemPurchasePrice
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminUpdateCatalogItemPurchasePriceRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminUpdateCatalogItemPurchasePriceResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/{catalogItemId}/prices:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminGetCatalogItemPurchasePrices
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminGetCatalogItemPurchasePricesRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminGetCatalogItemPurchasePricesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/price/delete:
    delete:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminDeleteCatalogItemPurchasePrice
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.AdminDeleteCatalogItemPurchasePriceRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminDeleteCatalogItemPurchasePriceResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/providers/supported:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_AdminListSupportedProviders
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminListSupportedProvidersResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/entitlements/providers/active:
    get:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_AdminListActiveProviders
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.AdminListActiveProvidersResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/offer/{provider}/prepare:
    post:
      tags:
        - CatenaEntitlements
      summary: >-
        A trusted service calls PrepareOffersForProvider on behalf of a player
        in order to get a list of potential orders that the player may execute
        for a given provider
      operationId: catena.catena_entitlements.CatenaEntitlements_PrepareOffersForProvider
      parameters:
        - name: provider
          in: path
          required: true
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.PrepareOffersForProviderRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.PrepareOffersForProviderResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/offer/execute:
    post:
      tags:
        - CatenaEntitlements
      summary: >-
        A trusted service calls ExecutePreparedOffersForProvider to execute a
        set of orders with a provider. The request may fail if the prepared
        orders are no longer valid, or data does not match
      operationId: catena.catena_entitlements.CatenaEntitlements_ExecutePreparedOffers
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.ExecutePreparedOffersRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ExecutePreparedOffersResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/account/{accountId}/item/{catalogItemId}/owned:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_ServerGetAccountOwnsCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
        - name: customItemId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerGetAccountOwnsCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/account/{accountId}/item/custom/{customItemId}/owned:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_ServerGetAccountOwnsCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: customItemId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: query
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerGetAccountOwnsCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/account/{accountId}/items:
    get:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_ServerGetAccountCatalogItems
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerGetAccountCatalogItemsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/subscriptions/get:
    post:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_ServerGetSubscriptions
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.ServerGetSubscriptionsRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerGetSubscriptionsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/subscription/cancel:
    post:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_ServerCancelSubscription
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.ServerCancelSubscriptionRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerCancelSubscriptionResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/{catalogItemId}/provider_data/{provider}/modify:
    post:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_ServerModifyProviderCatalogItemData
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: provider
          in: path
          required: true
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.ServerModifyProviderCatalogItemDataRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerModifyProviderCatalogItemDataResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/{catalogItemId}/provider_data/{provider}/remove:
    delete:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_ServerRemoveProviderCatalogItemData
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: provider
          in: path
          required: true
          schema:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.EntitlementProvider
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerRemoveProviderCatalogItemDataResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/account/{accountId}/item/{catalogItemId}/increment/{count}:
    patch:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_ServerIncrementAccountCountableCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: count
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerIncrementAccountCountableCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/entitlements/account/{accountId}/item/{catalogItemId}/decrement/{count}:
    patch:
      tags:
        - CatenaEntitlements
      operationId: >-
        catena.catena_entitlements.CatenaEntitlements_ServerDecrementAccountCountableCatalogItem
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: count
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: allowNegativeTotal
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.ServerDecrementAccountCountableCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/account/item/{catalogItemId}/owned:
    get:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_GetAccountOwnsCatalogItem
      parameters:
        - name: catalogItemId
          in: path
          required: true
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
        - name: customItemId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.GetAccountOwnsCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/account/item/custom/{customItemId}/owned:
    get:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_GetAccountOwnsCatalogItem
      parameters:
        - name: customItemId
          in: path
          required: true
          schema:
            type: string
        - name: catalogItemId
          in: query
          schema:
            type: string
        - name: asap
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.GetAccountOwnsCatalogItemResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/account/items:
    get:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_GetAccountCatalogItems
      parameters:
        - name: asap
          in: query
          schema:
            type: boolean
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.GetAccountCatalogItemsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/subscriptions/get:
    post:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_GetSubscriptions
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.GetSubscriptionsRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.GetSubscriptionsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/entitlements/subscription/cancel:
    post:
      tags:
        - CatenaEntitlements
      operationId: catena.catena_entitlements.CatenaEntitlements_CancelSubscription
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaEntitlements.CancelSubscriptionRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaEntitlements.CancelSubscriptionResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/friends/request/send:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_SendFriendRequest
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.SendFriendRequestRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.SendFriendRequestResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/friends/request/accept:
    post:
      tags:
        - CatenaFriends
      summary: Links two players together as friends
      operationId: catena.catena_friends.CatenaFriends_AcceptFriendRequest
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.AcceptFriendRequestRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.AcceptFriendRequestResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/friends/request/decline:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_DeclineFriendRequest
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.DeclineFriendRequestRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.DeclineFriendRequestResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/friends/remove:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_RemoveFriend
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Services.CatenaFriends.RemoveFriendRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.RemoveFriendResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/friends/request/outgoing:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_GetOutgoingPendingRequests
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.GetOutgoingPendingRequestsRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.GetOutgoingPendingRequestsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/friends/request/incoming:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_GetIncomingPendingRequests
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.GetIncomingPendingRequestsRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.GetIncomingPendingRequestsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/friends/get:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_GetFriendsList
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.GetFriendsListRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.GetFriendsListResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/friends/remove-pending:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_AdminRemovePendingFriendRequest
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.AdminRemovePendingFriendRequestRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.AdminRemovePendingFriendRequestResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/friends/remove:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_AdminRemoveFriend
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.AdminRemoveFriendRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.AdminRemoveFriendResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/friends/get:
    post:
      tags:
        - CatenaFriends
      operationId: catena.catena_friends.CatenaFriends_AdminGetFriendsList
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaFriends.AdminGetFriendsListRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaFriends.AdminGetFriendsListResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/leaderboards:
    get:
      tags:
        - CatenaLeaderboards
      summary: GetLeaderboards
      operationId: catena.catena_leaderboards.CatenaLeaderboards_GetLeaderboards
      parameters:
        - name: title
          in: query
          schema:
            type: string
        - name: count
          in: query
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaLeaderboards.LeaderboardResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/healthz:
    get:
      tags:
        - CatenaMatchBroker
      operationId: catena.catena_match_broker.CatenaMatchBroker_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matches:
    get:
      tags:
        - CatenaMatchBroker
      operationId: catena.catena_match_broker.CatenaMatchBroker_ListQueuedMatches
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.ListQueuedMatchesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/admin/list-active-matches:
    get:
      tags:
        - CatenaMatchBroker
      operationId: catena.catena_match_broker.CatenaMatchBroker_AdminListActiveMatches
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.AdminListActiveMatchesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/admin/match/{matchId}:
    get:
      tags:
        - CatenaMatchBroker
      operationId: catena.catena_match_broker.CatenaMatchBroker_AdminGetActiveMatchById
      parameters:
        - name: matchId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.AdminGetActiveMatchByIdResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/admin/delete/{matchId}:
    delete:
      tags:
        - CatenaMatchBroker
      operationId: catena.catena_match_broker.CatenaMatchBroker_AdminEndActiveMatch
      parameters:
        - name: matchId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.AdminEndActiveMatchResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/admin/allocators/available:
    get:
      tags:
        - CatenaMatchBroker
      operationId: catena.catena_match_broker.CatenaMatchBroker_AdminGetAvailableAllocators
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.AdminGetAvailableAllocatorsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/admin/allocators/configured:
    get:
      tags:
        - CatenaMatchBroker
      operationId: >-
        catena.catena_match_broker.CatenaMatchBroker_AdminGetConfiguredAllocators
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.AdminGetConfiguredAllocatorsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/admin/config:
    get:
      tags:
        - CatenaMatchBroker
      operationId: catena.catena_match_broker.CatenaMatchBroker_AdminXGetMatchBrokerConfig
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.AdminXGetMatchBrokerConfigResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchbroker/admin/reconfigure:
    post:
      tags:
        - CatenaMatchBroker
      operationId: >-
        catena.catena_match_broker.CatenaMatchBroker_AdminXReconfigureMatchBroker
      parameters:
        - name: fastSchedule
          in: query
          schema:
            type: integer
            format: int32
        - name: serverMaxLifetimeMinutes
          in: query
          schema:
            type: integer
            format: int32
        - name: matchPickupTimeSeconds
          in: query
          schema:
            type: integer
            format: int32
        - name: matchReadyTimeSeconds
          in: query
          schema:
            type: integer
            format: int32
        - name: matchMaxRunTimeMinutes
          in: query
          schema:
            type: integer
            format: int32
        - name: scheduleFrequencySeconds
          in: query
          schema:
            type: integer
            format: int32
        - name: delayAllocationSeconds
          in: query
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchBroker.AdminXReconfigureMatchBrokerResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/start:
    post:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_StartMatchmaking
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaMatchmaking.StartMatchmakingRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.StartMatchmakingResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/cancel:
    post:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_CancelMatchmaking
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaMatchmaking.CancelMatchmakingRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.CancelMatchmakingResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/{ticketId}:
    get:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_GetMatchmakingStatus
      parameters:
        - name: ticketId
          in: path
          description: The ID of the ticket for which we are polling matchmaking status.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.GetMatchmakingStatusResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/server/start:
    post:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_ServerStartMatchmaking
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaMatchmaking.StartMatchmakingRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.StartMatchmakingResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/server/cancel:
    post:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_ServerCancelMatchmaking
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaMatchmaking.CancelMatchmakingRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.CancelMatchmakingResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/server/{ticketId}:
    get:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_ServerGetMatchmakingStatus
      parameters:
        - name: ticketId
          in: path
          description: The ID of the ticket for which we are polling matchmaking status.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.GetMatchmakingStatusResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/tickets:
    get:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_ListTickets
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.ListTicketsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/healthz:
    get:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/matchmaking/admin/config:
    get:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_AdminXGetMatchmakerConfig
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.AdminXGetMatchmakerConfigResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    post:
      tags:
        - CatenaMatchmaking
      operationId: catena.catena_matchmaking.CatenaMatchmaking_AdminXReconfigureMatchmaker
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaMatchmaking.AdminXReconfigureMatchmakerRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaMatchmaking.AdminXReconfigureMatchmakerResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/node_control/restart:
    post:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_AdminRestartNode
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminRestartNodeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/node_control/set_preferred_implementation_override:
    post:
      tags:
        - CatenaNodeControl
      operationId: >-
        catena.catena_node_control.CatenaNodeControl_AdminSetPreferredImplementationOverride
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaNodeControl.AdminSetPreferredImplementationOverrideRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminSetPreferredImplementationOverrideResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/node_control/set_preferred_implementation_overrides:
    get:
      tags:
        - CatenaNodeControl
      operationId: >-
        catena.catena_node_control.CatenaNodeControl_AdminGetPreferredImplementationOverrides
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminGetPreferredImplementationOverridesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/node_control/service_include:
    put:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_AdminAddServiceToInclude
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaNodeControl.AdminAddServiceToIncludeRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminAddServiceToIncludeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_AdminRemoveServiceToInclude
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaNodeControl.AdminRemoveServiceToIncludeRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminRemoveServiceToIncludeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/node_control/services_to_include:
    get:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_AdminGetServicesToInclude
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminGetServicesToIncludeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/node_control/service_exclude:
    put:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_AdminAddServiceToExclude
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaNodeControl.AdminAddServiceToExcludeRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminAddServiceToExcludeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_AdminRemoveServiceToExclude
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaNodeControl.AdminRemoveServiceToExcludeRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminRemoveServiceToExcludeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/node_control/services_to_exclude:
    get:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_AdminGetServicesToExclude
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeControl.AdminGetServicesToExcludeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_control/healthz:
    get:
      tags:
        - CatenaNodeControl
      operationId: catena.catena_node_control.CatenaNodeControl_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_inspection/services/discovered:
    get:
      tags:
        - CatenaNodeInspection
      operationId: >-
        catena.catena_node_inspection.CatenaNodeInspection_ListDiscoveredServices
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeInspection.ListDiscoveredServicesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_inspection/services/enabled:
    get:
      tags:
        - CatenaNodeInspection
      operationId: catena.catena_node_inspection.CatenaNodeInspection_ListEnabledServices
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeInspection.ListEnabledServicesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_inspection/implementations/available:
    get:
      tags:
        - CatenaNodeInspection
      operationId: >-
        catena.catena_node_inspection.CatenaNodeInspection_GetAvailableImplementations
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeInspection.GetAvailableImplementationsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_inspection/implementations/active:
    get:
      tags:
        - CatenaNodeInspection
      operationId: >-
        catena.catena_node_inspection.CatenaNodeInspection_GetActiveImplementations
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeInspection.GetActiveImplementationsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_inspection/healthz:
    get:
      tags:
        - CatenaNodeInspection
      operationId: catena.catena_node_inspection.CatenaNodeInspection_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_inspection/node_health:
    get:
      tags:
        - CatenaNodeInspection
      operationId: catena.catena_node_inspection.CatenaNodeInspection_GetNodeHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeInspection.GetNodeHealthResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/node_inspection/is_healthy:
    get:
      tags:
        - CatenaNodeInspection
      operationId: catena.catena_node_inspection.CatenaNodeInspection_NodeIsHealthy
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaNodeInspection.NodeIsHealthyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/create:
    post:
      tags:
        - CatenaParties
      summary: >-
        CreateParty Creates a new party setting the player who requested its
        creation as its leader.
      operationId: catena.catena_parties.CatenaParties_CreateParty
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Services.CatenaParties.CreatePartyRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.CreatePartyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/update-player:
    patch:
      tags:
        - CatenaParties
      summary: >-
        Note: Append operations are not currently supported when updating
        metadata with this method
      operationId: catena.catena_parties.CatenaParties_UpdatePartyPlayer
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaParties.UpdatePartyPlayerRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.UpdatePartyPlayerResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/join:
    post:
      tags:
        - CatenaParties
      summary: >-
        JoinPartyWithInviteCode Allows a player to join a party by specifying
        its invite code.
      operationId: catena.catena_parties.CatenaParties_JoinPartyWithInviteCode
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaParties.JoinPartyWithInviteCodeRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.JoinPartyWithInviteCodeResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties:
    get:
      tags:
        - CatenaParties
      summary: >-
        GetPartyInfo Fetches party information for the party that the requesting
        player is currently a member of.
      operationId: catena.catena_parties.CatenaParties_GetPartyInfo
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.GetPartyInfoResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/{partyId}:
    get:
      tags:
        - CatenaParties
      summary: GetPartyInfoByPartyId Fetches information for a party given a party ID.
      operationId: catena.catena_parties.CatenaParties_GetPartyInfoByPartyId
      parameters:
        - name: partyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.GetPartyInfoResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/players/{playerId}:
    get:
      tags:
        - CatenaParties
      summary: >-
        GetPlayerInfoById Fetches information for a player in a party given an
        ID.
      operationId: catena.catena_parties.CatenaParties_GetPlayerInfoById
      parameters:
        - name: playerId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.GetPlayerInfoByIdResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/set-leader:
    put:
      tags:
        - CatenaParties
      summary: SetPartyLeader Allows the current leader of a party to set a new leader.
      operationId: catena.catena_parties.CatenaParties_SetPartyLeader
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaParties.SetPartyLeaderRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.SetPartyLeaderResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/kick:
    put:
      tags:
        - CatenaParties
      summary: >-
        KickFromParty Allows the leader of a party to kick another player from
        their party.
      operationId: catena.catena_parties.CatenaParties_KickFromParty
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Services.CatenaParties.KickFromPartyRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.KickFromPartyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/leave:
    put:
      tags:
        - CatenaParties
      summary: >-
        LeaveParty Allows a player to leave their party and assigns a new leader
        if the leader leaves.
      operationId: catena.catena_parties.CatenaParties_LeaveParty
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Services.CatenaParties.LeavePartyRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Services.CatenaParties.LeavePartyResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/metadata:
    post:
      tags:
        - CatenaParties
      summary: CreateMetadataEntry Creates a metadata entry for a party
      operationId: catena.catena_parties.CatenaParties_CreateMetadataEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaParties.CreatePartyMetadataEntryRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Groups.CreateMetadataEntryResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    put:
      tags:
        - CatenaParties
      summary: >-
        UpdateMetadataEntry Updates a passed in party's metadata for a specific
        entry
      operationId: catena.catena_parties.CatenaParties_UpdateMetadataEntry
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaParties.UpdatePartyMetadataEntryRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Groups.UpdateMetadataEntryResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/metadata/{innerRequest.id}/{innerRequest.entryKey}:
    delete:
      tags:
        - CatenaParties
      summary: DeleteMetadataEntry Deletes a metadata entry for a party
      operationId: catena.catena_parties.CatenaParties_DeleteMetadataEntry
      parameters:
        - name: innerRequest.id
          in: path
          required: true
          schema:
            type: string
        - name: innerRequest.entryKey
          in: path
          description: The key in the metadata whose entry needs to be deleted
          required: true
          schema:
            type: string
        - name: innerRequest.jsonHandlingType
          in: query
          schema:
            $ref: '#/components/schemas/Catena.Groups.DeleteJsonMetadataType'
        - name: innerRequest.propertiesToRemovePaths
          in: query
          schema:
            type: array
            items:
              type: string
        - name: playerId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Groups.DeleteMetadataEntryResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaParties
      summary: GetMetadataEntry Gets a metadata entry for a passed in key
      operationId: catena.catena_parties.CatenaParties_GetMetadataEntry
      parameters:
        - name: innerRequest.id
          in: path
          required: true
          schema:
            type: string
        - name: innerRequest.entryKey
          in: path
          required: true
          schema:
            type: string
        - name: playerId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Groups.GetMetadataEntryResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/metadata/{innerRequest.id}:
    get:
      tags:
        - CatenaParties
      summary: GetMetadataEntries Gets all metadata entries for a passed in party id
      operationId: catena.catena_parties.CatenaParties_GetMetadataEntries
      parameters:
        - name: innerRequest.id
          in: path
          required: true
          schema:
            type: string
        - name: playerId
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Groups.GetMetadataEntriesResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/parties/healthz:
    get:
      tags:
        - CatenaParties
      summary: GetServiceHealth
      operationId: catena.catena_parties.CatenaParties_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/parties/create:
    post:
      tags:
        - CatenaParties
      summary: >-
        AdminCreateParty Creates a new party, setting the leader and party
        members at creation time
      operationId: catena.catena_parties.CatenaParties_AdminCreateParty
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaParties.AdminCreatePartyRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.AdminCreatePartyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/parties/update:
    patch:
      tags:
        - CatenaParties
      summary: AdminUpdateParty Updates data for a party
      operationId: catena.catena_parties.CatenaParties_AdminUpdateParty
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaParties.AdminUpdatePartyRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.AdminUpdatePartyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/parties/{partyId}:
    get:
      tags:
        - CatenaParties
      summary: AdminGetPartyByID Fetches data for a party given a party ID
      operationId: catena.catena_parties.CatenaParties_AdminGetPartyById
      parameters:
        - name: partyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.AdminGetPartyByIdResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/parties/list-parties:
    get:
      tags:
        - CatenaParties
      summary: AdminListParties lists all parties
      operationId: catena.catena_parties.CatenaParties_AdminListParties
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.AdminListPartiesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/parties/delete/{partyId}:
    delete:
      tags:
        - CatenaParties
      summary: AdminDeleteParty deletes a party given a party ID
      operationId: catena.catena_parties.CatenaParties_AdminDeleteParty
      parameters:
        - name: partyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.AdminDeletePartyResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/parties/delete-all:
    delete:
      tags:
        - CatenaParties
      operationId: catena.catena_parties.CatenaParties_AdminDeleteAllParties
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaParties.AdminDeleteAllPartiesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/platform_auth/remember_me:
    post:
      tags:
        - CatenaPlatformAuth
      operationId: catena.catena_platform_auth.CatenaPlatformAuth_RememberLoginInfo
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaPlatformAuth.RememberLoginInfoResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    get:
      tags:
        - CatenaPlatformAuth
      operationId: catena.catena_platform_auth.CatenaPlatformAuth_AdminGetLoginInfo
      parameters:
        - name: replayToken
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaPlatformAuth.AdminGetLoginInfoResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaPlatformAuth
      operationId: catena.catena_platform_auth.CatenaPlatformAuth_AdminDeleteLoginInfo
      parameters:
        - name: replayToken
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaPlatformAuth.AdminDeleteLoginInfoResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/platform_auth/devices/{deviceId}:
    post:
      tags:
        - CatenaPlatformAuth
      operationId: >-
        catena.catena_platform_auth.CatenaPlatformAuth_AdminRegisterDeviceForAuth
      parameters:
        - name: deviceId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaPlatformAuth.AdminRegisterDeviceForAuthResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
    delete:
      tags:
        - CatenaPlatformAuth
      operationId: catena.catena_platform_auth.CatenaPlatformAuth_AdminRemoveDeviceForAuth
      parameters:
        - name: deviceId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaPlatformAuth.AdminRemoveDeviceForAuthResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/fleets/deploy:
    post:
      tags:
        - CatenaServerCatalog
      summary: "ScheduleConfigOnHost allows a user to schedule a config as defined by the process monitor job specification on a \r\nspecific host based on the criteria specified within the job configuration."
      operationId: catena.catena_server_catalog.CatenaServerCatalog_ScheduleConfigOnHost
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Catena.CatenaServerCatalog.ScheduleConfigOnHostRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Catena.CatenaServerCatalog.ScheduleConfigOnHostResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/fleets/hosts:
    get:
      tags:
        - CatenaServerCatalog
      summary: List known hosts performs host filtering based on requirements
      operationId: catena.catena_server_catalog.CatenaServerCatalog_ListKnownHosts
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Catena.CatenaServerCatalog.ListKnownHostsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/fleets/hosts/{hostId}/action:
    post:
      tags:
        - CatenaServerCatalog
      operationId: catena.catena_server_catalog.CatenaServerCatalog_ExecuteAction
      parameters:
        - name: hostId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Catena.CatenaServerCatalog.ExecuteActionRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Catena.CatenaServerCatalog.ExecuteActionResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/request_match:
    post:
      tags:
        - CatenaServerManager
      operationId: catena.catena_server_manager.CatenaServerManager_RequestMatch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Catena.ServerManager.RequestMatchRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.ServerManager.RequestMatchResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/match_ready:
    post:
      tags:
        - CatenaServerManager
      operationId: catena.catena_server_manager.CatenaServerManager_MatchReady
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Catena.ServerManager.MatchReadyRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.ServerManager.MatchReadyResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/end_match:
    post:
      tags:
        - CatenaServerManager
      operationId: catena.catena_server_manager.CatenaServerManager_EndMatch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Catena.ServerManager.EndMatchRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.ServerManager.EndMatchResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/servers:
    post:
      tags:
        - CatenaServerManager
      operationId: catena.catena_server_manager.CatenaServerManager_ListServers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Catena.ServerManager.ListServersRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.ServerManager.ListServersResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/deallocate:
    post:
      tags:
        - CatenaServerManager
      operationId: catena.catena_server_manager.CatenaServerManager_AdminDeallocateServer
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Catena.ServerManager.AdminDeallocateServerRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Catena.ServerManager.AdminDeallocateServerResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server/allocate:
    post:
      tags:
        - CatenaServerManager
      operationId: catena.catena_server_manager.CatenaServerManager_AdminAllocateServer
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Catena.ServerManager.AdminAllocateServerRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Catena.ServerManager.AdminAllocateServerResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server_releases/manifest:
    get:
      tags:
        - CatenaServerReleases
      summary: >-
        GetServerManifest Returns a manifest for releases and patches to apply
        to the server binary
      operationId: catena.catena_server_releases.CatenaServerReleases_GetServerManifest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaServerReleases.GetServerManifestResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server_releases/create_server_release:
    post:
      tags:
        - CatenaServerReleases
      summary: AdminCreateServerRelease Creates a game server release
      operationId: >-
        catena.catena_server_releases.CatenaServerReleases_AdminCreateServerRelease
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaServerReleases.AdminCreateServerReleaseRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaServerReleases.AdminCreateServerReleaseResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server_releases/update_server_release:
    put:
      tags:
        - CatenaServerReleases
      summary: AdminUpdateServerRelease Updates a game server release
      operationId: >-
        catena.catena_server_releases.CatenaServerReleases_AdminUpdateServerRelease
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaServerReleases.AdminUpdateServerReleaseRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaServerReleases.AdminUpdateServerReleaseResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server_releases/delete_server_release:
    delete:
      tags:
        - CatenaServerReleases
      summary: AdminDeleteServerRelease Deletes a game server release
      operationId: >-
        catena.catena_server_releases.CatenaServerReleases_AdminDeleteServerRelease
      parameters:
        - name: id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaServerReleases.AdminDeleteServerReleaseResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server_releases/create_server_patch:
    post:
      tags:
        - CatenaServerReleases
      summary: AdminCreateServerPatch Creates a game server patch
      operationId: >-
        catena.catena_server_releases.CatenaServerReleases_AdminCreateServerPatch
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaServerReleases.AdminCreateServerPatchRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaServerReleases.AdminCreateServerPatchResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server_releases/update_server_patch:
    put:
      tags:
        - CatenaServerReleases
      summary: AdminUpdateServerPatch Updates a game server patch
      operationId: >-
        catena.catena_server_releases.CatenaServerReleases_AdminUpdateServerPatch
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaServerReleases.AdminUpdateServerPatchRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaServerReleases.AdminUpdateServerPatchResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/server_releases/delete_server_patch:
    delete:
      tags:
        - CatenaServerReleases
      summary: AdminDeleteServerPatch deletes a game server patch
      operationId: >-
        catena.catena_server_releases.CatenaServerReleases_AdminDeleteServerPatch
      parameters:
        - name: id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaServerReleases.AdminDeleteServerPatchResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/sessions:
    get:
      tags:
        - CatenaSessions
      operationId: catena.catena_sessions.CatenaSessions_ListSessions
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSessions.ListSessionsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/sessions/healthz:
    get:
      tags:
        - CatenaSessions
      operationId: catena.catena_sessions.CatenaSessions_GetServiceHealth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Core.GetServiceHealthResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/direct/transaction/report/get:
    post:
      tags:
        - CatenaSteamDiag
      operationId: catena.catena_steam_diag.CatenaSteamDiag_AdminDirectTransactionGetReport
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionGetReportRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionGetReportResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/direct/transaction/user_agreement/get:
    post:
      tags:
        - CatenaSteamDiag
      operationId: >-
        catena.catena_steam_diag.CatenaSteamDiag_AdminDirectTransactionGetUserAgreementInfo
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionGetUserAgreementInfoRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionGetUserAgreementInfoResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/direct/transaction/user_agreement/cancel:
    post:
      tags:
        - CatenaSteamDiag
      operationId: >-
        catena.catena_steam_diag.CatenaSteamDiag_AdminDirectTransactionCancelAgreement
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionCancelAgreementRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionCancelAgreementResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/direct/transaction/transaction/get:
    post:
      tags:
        - CatenaSteamDiag
      operationId: catena.catena_steam_diag.CatenaSteamDiag_AdminDirectTransactionQueryTxn
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionQueryTxnRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionQueryTxnResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/direct/user/app_ownership/{steamId}/{appId}:
    get:
      tags:
        - CatenaSteamDiag
      operationId: >-
        catena.catena_steam_diag.CatenaSteamDiag_AdminDirectUserCheckAppOwnership
      parameters:
        - name: steamId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminDirectUserCheckAppOwnershipResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/direct/inventory/item_defs/get:
    get:
      tags:
        - CatenaSteamDiag
      operationId: catena.catena_steam_diag.CatenaSteamDiag_AdminDirectInventoryGetItemDefs
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminDirectInventoryGetItemDefsResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/app_ownership/{accountId}/{appId}:
    get:
      tags:
        - CatenaSteamDiag
      operationId: catena.catena_steam_diag.CatenaSteamDiag_AdminAccountCheckAppOwnership
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
        - name: appId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminAccountCheckAppOwnershipResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/direct/user/player_summaries:
    post:
      tags:
        - CatenaSteamDiag
      operationId: >-
        catena.catena_steam_diag.CatenaSteamDiag_AdminDirectUserGetPlayerSummaries
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaSteamDiag.AdminDirectUserGetPlayerSummariesRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminDirectUserGetPlayerSummariesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/steam_diag/user/player_summaries:
    post:
      tags:
        - CatenaSteamDiag
      operationId: catena.catena_steam_diag.CatenaSteamDiag_AdminUserGetPlayerSummaries
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaSteamDiag.AdminUserGetPlayerSummariesRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaSteamDiag.AdminUserGetPlayerSummariesResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/generate_presigned_url:
    post:
      tags:
        - CatenaTitles
      summary: GeneratePresignedUrl Generates a presigned S3 URL for a given object key
      operationId: catena.catena_titles.CatenaTitles_GeneratePresignedUrl
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.GeneratePresignedUrlRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.GeneratePresignedUrlResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/generate_presigned_url_from_uri:
    post:
      tags:
        - CatenaTitles
      summary: GeneratePresignedUrlFromUri Generates a presigned URL for a given URL
      operationId: catena.catena_titles.CatenaTitles_GeneratePresignedUrlFromUri
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.GeneratePresignedUrlFromUriRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.GeneratePresignedUrlFromUriResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/titles:
    get:
      tags:
        - CatenaTitles
      summary: >-
        GetTitles Returns a list of game titles that are supported via this
        instance of Catena
      operationId: catena.catena_titles.CatenaTitles_GetTitles
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Services.CatenaTitles.GetTitlesResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/titles/{titleId}/manifest:
    get:
      tags:
        - CatenaTitles
      summary: >-
        GetTitleManifest Returns a manifest for releases and patches that are
        required to play the game
      operationId: catena.catena_titles.CatenaTitles_GetTitleManifest
      parameters:
        - name: titleId
          in: path
          required: true
          schema:
            type: string
        - name: platform
          in: query
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.GetTitleManifestResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/create:
    post:
      tags:
        - CatenaTitles
      summary: AdminCreateTitle Creates a game title
      operationId: catena.catena_titles.CatenaTitles_AdminCreateTitle
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminCreateTitleRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminCreateTitleResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/update:
    put:
      tags:
        - CatenaTitles
      summary: AdminUpdateTitle Updates a game title
      operationId: catena.catena_titles.CatenaTitles_AdminUpdateTitle
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminUpdateTitleRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminUpdateTitleResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/delete:
    delete:
      tags:
        - CatenaTitles
      summary: AdminDeleteTitle Deletes a game title
      operationId: catena.catena_titles.CatenaTitles_AdminDeleteTitle
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminDeleteTitleRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminDeleteTitleResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/create_title_release:
    post:
      tags:
        - CatenaTitles
      summary: AdminCreateTitleRelease Creates a game title release
      operationId: catena.catena_titles.CatenaTitles_AdminCreateTitleRelease
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminCreateTitleReleaseRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminCreateTitleReleaseResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/update_title_release:
    put:
      tags:
        - CatenaTitles
      summary: AdminUpdateTitleRelease Updates a game title release
      operationId: catena.catena_titles.CatenaTitles_AdminUpdateTitleRelease
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminUpdateTitleReleaseRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminUpdateTitleReleaseResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/delete_title_release:
    delete:
      tags:
        - CatenaTitles
      summary: AdminDeleteTitleRelease Deletes a game title release
      operationId: catena.catena_titles.CatenaTitles_AdminDeleteTitleRelease
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminDeleteTitleReleaseRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminDeleteTitleReleaseResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/create_title_patch:
    post:
      tags:
        - CatenaTitles
      summary: AdminCreateTitlePatch Creates a game title patch
      operationId: catena.catena_titles.CatenaTitles_AdminCreateTitlePatch
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminCreateTitlePatchRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminCreateTitlePatchResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/update_title_patch:
    put:
      tags:
        - CatenaTitles
      summary: AdminUpdateTitlePatch Updates a game title patch
      operationId: catena.catena_titles.CatenaTitles_AdminUpdateTitlePatch
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminUpdateTitlePatchRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminUpdateTitlePatchResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/titles/delete_title_patch:
    delete:
      tags:
        - CatenaTitles
      summary: AdminDeleteTitlePatch deletes a game title patch
      operationId: catena.catena_titles.CatenaTitles_AdminDeleteTitlePatch
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Services.CatenaTitles.AdminDeleteTitlePatchRequest
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Services.CatenaTitles.AdminDeleteTitlePatchResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/events/subscribe:
    get:
      tags:
        - Events
      summary: SubscribeToEvents
      operationId: catena.events.Events_SubscribeToEvents
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Events.SubscribeToEventsResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/events/subscribe/tags:
    get:
      tags:
        - Events
      operationId: catena.events.Events_SubscribeToEventsByTag
      parameters:
        - name: senderId
          in: query
          schema:
            type: string
        - name: eventTags
          in: query
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Catena.Events.SubscribeToEventsByTagResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/events/emit:
    post:
      tags:
        - Events
      summary: EmitUpdateEvent
      operationId: catena.events.Events_EmitUpdateEvent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Catena.Events.EmitUpdateEventRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Catena.Events.EmitUpdateEventResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
  /api/v1/admin/events/emit:
    post:
      tags:
        - Events
      operationId: catena.events.Events_AdminEmitUpdateEvent
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Catena.Events.AdminEmitUpdateEventRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Catena.Events.AdminEmitUpdateEventResponse
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Google.Rpc.Status'
components:
  schemas:
    Catena.CatenaServerCatalog.ExecuteActionRequest:
      type: object
      properties:
        hostId:
          type: string
        request:
          $ref: '#/components/schemas/Pxmon.ExecuteActionRequest'
      additionalProperties: false
    Catena.CatenaServerCatalog.ExecuteActionResponse:
      type: object
      additionalProperties: false
    Catena.CatenaServerCatalog.Host:
      type: object
      properties:
        hostname:
          type: string
        hostId:
          type: string
        sidecarVersion:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: string
        lastPingEpoch:
          type: integer
          format: int64
        Available:
          type: boolean
          description: Available for allocations?
        processes:
          type: array
          items:
            $ref: '#/components/schemas/Catena.CatenaServerCatalog.JobProcesses'
          description: Jobs running on host
      additionalProperties: false
    Catena.CatenaServerCatalog.JobProcesses:
      type: object
      properties:
        jobId:
          type: string
        process:
          type: string
        state:
          type: string
        numRestarts:
          type: integer
          format: int64
      additionalProperties: false
      description: JobProcesses is a more detailed list of processes for a specific host.
    Catena.CatenaServerCatalog.ListKnownHostsResponse:
      type: object
      properties:
        hosts:
          type: array
          items:
            $ref: '#/components/schemas/Catena.CatenaServerCatalog.Host'
      additionalProperties: false
    Catena.CatenaServerCatalog.ScheduleConfigOnHostRequest:
      type: object
      properties:
        config:
          $ref: '#/components/schemas/Pxmon.Config'
      additionalProperties: false
    Catena.CatenaServerCatalog.ScheduleConfigOnHostResponse:
      type: object
      properties:
        hostId:
          type: string
        responses:
          type: array
          items:
            type: string
      additionalProperties: false
    Catena.Core.ComponentHealth:
      type: object
      properties:
        component:
          type: string
        healthy:
          type: boolean
        status:
          type: string
      additionalProperties: false
    Catena.Core.GetServiceHealthResponse:
      type: object
      properties:
        healthy:
          type: boolean
        components:
          type: array
          items:
            $ref: '#/components/schemas/Catena.Core.ComponentHealth'
      additionalProperties: false
    Catena.Core.TrustedServerPermission:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
      additionalProperties: false
    Catena.Events.AdminEmitUpdateEventRequest:
      type: object
      properties:
        nestedEvent:
          $ref: '#/components/schemas/Catena.Events.Event'
        recipientIds:
          type: array
          items:
            type: string
        eventTags:
          type: array
          items:
            type: string
        broadcast:
          type: boolean
          description: >-
            affects how an empty recipient list is treated when tags are
            present; required to broadcast
      additionalProperties: false
    Catena.Events.AdminEmitUpdateEventResponse:
      type: object
      properties:
        broadcastSuccess:
          type: boolean
      additionalProperties: false
    Catena.Events.EmitUpdateEventRequest:
      type: object
      properties:
        nestedEvent:
          $ref: '#/components/schemas/Catena.Events.Event'
        recipientIds:
          type: array
          items:
            type: string
        eventTags:
          type: array
          items:
            type: string
        broadcast:
          type: boolean
          description: >-
            affects how an empty recipient list is treated when tags are
            present; required to broadcast
      additionalProperties: false
    Catena.Events.EmitUpdateEventResponse:
      type: object
      properties:
        broadcastSuccess:
          type: boolean
      additionalProperties: false
    Catena.Events.EmptyEvent:
      type: object
      additionalProperties: false
      description: >-
        EmptyEvent is used to send pings through the event service, eg to get
        around bugs where a stream is not opened until the first request comes
        through, or to do a heartbeat
    Catena.Events.Event:
      type: object
      properties:
        eventId:
          type: string
        recipientId:
          type: string
        anyEvent:
          $ref: '#/components/schemas/Google.Protobuf.WellKnownTypes.Any'
        partyUpdateEvent:
          $ref: '#/components/schemas/Services.CatenaParties.PartyUpdateEvent'
        matchmakingStatusUpdateEvent:
          $ref: >-
            #/components/schemas/Services.CatenaMatchmaking.MatchmakingStatusUpdateEvent
        emptyEvent:
          $ref: '#/components/schemas/Catena.Events.EmptyEvent'
        authenticationEvent:
          $ref: >-
            #/components/schemas/Services.CatenaAuthentication.AuthenticationEvent
        newMatchEvent:
          $ref: '#/components/schemas/Services.CatenaMatchmaking.NewMatchEvent'
        announcementEvent:
          $ref: '#/components/schemas/Services.CatenaAnnouncements.AnnouncementEvent'
        accountsEvent:
          $ref: '#/components/schemas/Services.CatenaAccounts.AccountsEvent'
        friendsEvent:
          $ref: '#/components/schemas/Services.CatenaFriends.FriendsEvent'
      additionalProperties: false
    Catena.Events.SubscribeToEventsByTagResponse:
      type: object
      properties:
        event:
          $ref: '#/components/schemas/Catena.Events.Event'
        eventTags:
          type: array
          items:
            type: string
      additionalProperties: false
    Catena.Events.SubscribeToEventsResponse:
      type: object
      properties:
        event:
          $ref: '#/components/schemas/Catena.Events.Event'
      additionalProperties: false
    Catena.Groups.CreateMetadataEntryRequest:
      type: object
      properties:
        id:
          type: string
        entryKey:
          type: string
          description: The key in the metadata to be added
        entryValue:
          $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Catena.Groups.CreateMetadataEntryResponse:
      type: object
      additionalProperties: false
    Catena.Groups.DeleteJsonMetadataType:
      enum:
        - 0
        - 1
      description: "If you are deleting a json, can choose whether to delete the entire entry or a partial part of an entry\r\nCurrently, only whole property removal is supported.\r\nRemoval of elements in a json array (e.g. trying to remove \"value\" from json {\"array\":[\"value\",\"value2\"]})\r\nis not currently supported by DeleteMetadataEntryRequest.\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      format: int32
      x-enumDescriptions:
        '0': EntireEntry
        '1': PartialEntry
    Catena.Groups.DeleteMetadataEntryResponse:
      type: object
      properties:
        entryDeleted:
          type: boolean
          description: If the entry was found in the database and deleted
      additionalProperties: false
    Catena.Groups.Entity:
      type: object
      properties:
        id:
          type: string
        displayName:
          type: string
        entityType:
          $ref: '#/components/schemas/Catena.Groups.EntityType'
        entities:
          type: array
          items:
            $ref: '#/components/schemas/Catena.Groups.Entity'
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
      description: >-
        We rely on the entity type for storing data about a user in the session
        token, this is crucial to enable
    Catena.Groups.EntityMetadata:
      type: object
      properties:
        stringPayload:
          type: string
        intPayload:
          type: integer
          format: int64
        jsonPayload:
          type: string
      additionalProperties: false
    Catena.Groups.EntityType:
      enum:
        - ENTITY_TYPE_UNSPECIFIED
        - ENTITY_TYPE_GENERIC
        - ENTITY_TYPE_ACCOUNT
        - ENTITY_TYPE_GROUP
        - ENTITY_TYPE_MATCH
        - 0
        - 1
        - 2
        - 3
        - 4
      description: "Entities\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Generic
        '2': Account
        '3': Group
        '4': Match
    Catena.Groups.GetMetadataEntriesResponse:
      type: object
      properties:
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Catena.Groups.GetMetadataEntryResponse:
      type: object
      properties:
        entryValue:
          $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Catena.Groups.MetadataEntry:
      type: object
      properties:
        key:
          type: string
        value:
          $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
      description: >-
        Simple message containing a metadata key-value pair so that a metadata
        entry can be sent in update events
    Catena.Groups.MetadataMap:
      type: object
      properties:
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
      description: >-
        Simple message containing a metadata map so that metadata entries can be
        sent in update events (maps are by default not supported in oneof)
    Catena.Groups.UpdateMetadataEntryRequest:
      type: object
      properties:
        id:
          type: string
        entryKey:
          type: string
          description: The key in the metadata whose entry needs to be changed
        entryValue:
          $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
        updateOperationType:
          $ref: '#/components/schemas/Catena.Groups.UpdateMetadataOperationType'
      additionalProperties: false
    Catena.Groups.UpdateMetadataEntryResponse:
      type: object
      additionalProperties: false
    Catena.Groups.UpdateMetadataOperationType:
      enum:
        - OVERWRITE
        - APPEND
        - 0
        - 1
      description: "When updating a metadata entry, the entry can either be overwritten (supported by all types) or appended (supported by string and json)\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Overwrite
        '1': Append
    Catena.MatchBroker.Match:
      type: object
      properties:
        matchId:
          type: string
        playerIds:
          type: array
          items:
            type: string
          description: 'TODO: other required match properties and custom data passing fields'
        matchProperties:
          type: string
          description: "A JSON object that contains all the custom match properties\r\nMay be empty"
        playerProperties:
          type: object
          additionalProperties:
            type: string
          description: "A JSON object per-player where the map key is a player_id in the player_ids field\r\nMay contain values for none, some, or all players"
      additionalProperties: false
    Catena.ServerManager.AdminAllocateServerRequest:
      type: object
      properties:
        match:
          $ref: '#/components/schemas/Catena.MatchBroker.Match'
      additionalProperties: false
    Catena.ServerManager.AdminAllocateServerResponse:
      type: object
      properties:
        serverId:
          type: string
      additionalProperties: false
    Catena.ServerManager.AdminDeallocateServerRequest:
      type: object
      properties:
        serverId:
          type: string
      additionalProperties: false
    Catena.ServerManager.AdminDeallocateServerResponse:
      type: object
      properties:
        success:
          type: boolean
        state:
          $ref: '#/components/schemas/Catena.ServerManager.ServerState'
        matches:
          type: array
          items:
            $ref: '#/components/schemas/Catena.ServerManager.ServerMatchInfo'
      additionalProperties: false
    Catena.ServerManager.EndMatchRequest:
      type: object
      properties:
        serverId:
          type: string
        matchId:
          type: string
        hintFlags:
          $ref: '#/components/schemas/Catena.ServerManager.HintFlag'
      additionalProperties: false
    Catena.ServerManager.EndMatchResponse:
      type: object
      properties:
        matchId:
          type: string
        hintFlags:
          $ref: '#/components/schemas/Catena.ServerManager.HintFlag'
      additionalProperties: false
    Catena.ServerManager.HintFlag:
      enum:
        - HINT_FLAG_NO_HINT_FLAGS
        - HINT_FLAG_SHUTDOWN
        - HINT_FLAG_WILLING_TO_WAIT
        - HINT_FLAG_WILLING_TO_SHUTDOWN
        - HINT_FLAG_FULL
        - HINT_FLAG_NOT_FULL
        - 0
        - 1
        - 2
        - 4
        - 8
        - 16
      description: "Optional flags hinting intention by requester/responder\r\nThese are bit flags - values must be powers of 2!\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': NoHintFlags
        '1': Shutdown
        '2': WillingToWait
        '4': WillingToShutdown
        '8': Full
        '16': NotFull
    Catena.ServerManager.ListServersRequest:
      type: object
      additionalProperties: false
    Catena.ServerManager.ListServersResponse:
      type: object
      properties:
        servers:
          type: array
          items:
            $ref: '#/components/schemas/Catena.ServerManager.ServerInfo'
      additionalProperties: false
    Catena.ServerManager.MatchReadyRequest:
      type: object
      properties:
        serverId:
          type: string
        matchId:
          type: string
        connectionDetails:
          type: string
          description: URI, IP+port, etc - not prescribed
        hintFlags:
          $ref: '#/components/schemas/Catena.ServerManager.HintFlag'
      additionalProperties: false
    Catena.ServerManager.MatchReadyResponse:
      type: object
      properties:
        matchId:
          type: string
          description: >-
            TODO: anything the server needs to know from the backend - proceed
            with match? (what if a client can't get the ready event?)
        hintFlags:
          $ref: '#/components/schemas/Catena.ServerManager.HintFlag'
      additionalProperties: false
    Catena.ServerManager.RequestMatchRequest:
      type: object
      properties:
        serverId:
          type: string
        requirements:
          type: string
          description: 'TODO: define filtering rules that can be applied'
      additionalProperties: false
    Catena.ServerManager.RequestMatchResponse:
      type: object
      properties:
        match:
          $ref: '#/components/schemas/Catena.MatchBroker.Match'
      additionalProperties: false
    Catena.ServerManager.ServerInfo:
      type: object
      properties:
        serverId:
          type: string
        requestedMatch:
          type: boolean
          description: >-
            TODO: replace with "healthy"? what does the server manager consider
            healthy? is it ongoing?
        matches:
          type: array
          items:
            $ref: '#/components/schemas/Catena.ServerManager.ServerMatchInfo'
          description: These are connection strings the server has returned
        IsFull:
          type: boolean
      additionalProperties: false
    Catena.ServerManager.ServerMatchInfo:
      type: object
      properties:
        matchId:
          type: string
        connectionString:
          type: string
      additionalProperties: false
    Catena.ServerManager.ServerState:
      enum:
        - SERVER_STATE_UNSPECIFIED
        - SERVER_STATE_PENDING
        - SERVER_STATE_AVAILABLE
        - SERVER_STATE_FULL
        - 0
        - 1
        - 2
        - 3
      description: "The server state as in its capability to request matches\r\nNote: This is intentionally a subset of the specific states that exist inside the Catena Match Broker\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Pending
        '2': Available
        '3': Full
    Google.Protobuf.WellKnownTypes.Any:
      required:
        - '@type'
      type: object
      properties:
        '@type':
          type: string
      additionalProperties: {}
    Google.Rpc.Status:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: '#/components/schemas/Google.Protobuf.WellKnownTypes.Any'
      additionalProperties: false
    Pxmon.Artifact:
      type: object
      properties:
        name:
          type: string
        remote:
          type: string
        integrity:
          $ref: '#/components/schemas/Pxmon.Integrity'
        config:
          type: string
      additionalProperties: false
    Pxmon.Config:
      type: object
      properties:
        name:
          type: string
        artifacts:
          type: array
          items:
            $ref: '#/components/schemas/Pxmon.Artifact'
        job:
          $ref: '#/components/schemas/Pxmon.Job'
      additionalProperties: false
      description: "Config is the config for a job that can run on a pxmon supported node.\r\nit is a name, definition of artifacts and a job."
    Pxmon.Exec:
      type: object
      properties:
        cmd:
          type: string
        args:
          type: array
          items:
            type: string
        environment:
          type: array
          items:
            type: string
      additionalProperties: false
      description: >-
        Exec represents the command, arguments and environment for starting a
        process.
    Pxmon.ExecuteActionRequest:
      type: object
      properties:
        targetPx:
          type: string
        stateAfterAction:
          type: string
        req:
          $ref: '#/components/schemas/Pxmon.HttpRequest'
      additionalProperties: false
    Pxmon.HttpRequest:
      type: object
      properties:
        method:
          type: string
        body:
          type: string
        path:
          type: string
        port:
          type: integer
          format: int32
        headers:
          type: object
          additionalProperties:
            type: string
      additionalProperties: false
    Pxmon.Include:
      type: object
      properties:
        name:
          type: string
        dest:
          type: string
        executable:
          type: boolean
      additionalProperties: false
      description: Include includes an artifact in the local directory for a job.
    Pxmon.Integrity:
      type: object
      properties:
        alg:
          type: string
        hash:
          type: string
      additionalProperties: false
    Pxmon.Job:
      type: object
      properties:
        requirements:
          type: object
          additionalProperties:
            type: string
        exec:
          type: array
          items:
            $ref: '#/components/schemas/Pxmon.Exec'
          description: >-
            TODO: exec is currently a repeated field, it should not be.
            Originally I was experimenting with allowing a job to start multiple
            processes, but that got too complex.
        include:
          type: array
          items:
            $ref: '#/components/schemas/Pxmon.Include'
        restartPolicy:
          type: string
      additionalProperties: false
      description: "Job is a job that can be run on a pxmon supported node,\r\nit defines requirements, the actual process to execute\r\na restart policy and artifacts to include in the execution of the node."
    Services.CatenaAccounts.Account:
      type: object
      properties:
        id:
          type: string
          description: GUID for this account
        displayName:
          type: string
          description: display name for this account
        authRole:
          type: string
          description: The auth level of the account
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
          description: Metadata associated with the account
        platforms:
          type: array
          items:
            $ref: '#/components/schemas/Services.PublicCommon.Platform'
          description: List of platforms that this account is linked to
      additionalProperties: false
      description: Bundled data that describes an account and its metadata.
    Services.CatenaAccounts.AccountsEvent:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/Services.CatenaAccounts.AccountsUpdateType'
        accountId:
          type: string
        isNewAccount:
          type: boolean
        newPlatformType:
          $ref: '#/components/schemas/Services.PublicCommon.Platform'
        platforms:
          type: array
          items:
            $ref: '#/components/schemas/Services.PublicCommon.Platform'
      additionalProperties: false
    Services.CatenaAccounts.AccountsUpdateType:
      enum:
        - CREATE_OR_GET_ACCOUNT
        - LINK_ACCOUNT_TO_PLATFORM
        - 0
        - 1
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': CreateOrGetAccount
        '1': LinkAccountToPlatform
    Services.CatenaAccounts.AdminCreateAccountRequest:
      type: object
      properties:
        displayName:
          type: string
        authRole:
          type: string
      additionalProperties: false
    Services.CatenaAccounts.CreateAccountResponse:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/Services.CatenaAccounts.Account'
      additionalProperties: false
    Services.CatenaAccounts.CreateMetadataEntryRequest:
      type: object
      properties:
        accountId:
          type: string
        entryKey:
          type: string
        entryValue:
          $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaAccounts.CreateMetadataEntryResponse:
      type: object
      additionalProperties: false
    Services.CatenaAccounts.CreateOrGetAccountFromTokenRequest:
      type: object
      additionalProperties: false
    Services.CatenaAccounts.CreateOrGetAccountFromTokenResponse:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/Services.CatenaAccounts.Account'
      additionalProperties: false
    Services.CatenaAccounts.DeleteAccountRequest:
      type: object
      properties:
        accountId:
          type: string
      additionalProperties: false
    Services.CatenaAccounts.DeleteAccountResponse:
      type: object
      properties:
        accountDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaAccounts.DeleteMetadataEntryRequest:
      type: object
      properties:
        accountId:
          type: string
        entryKey:
          type: string
        jsonHandlingType:
          $ref: '#/components/schemas/Catena.Groups.DeleteJsonMetadataType'
        propertiesToRemovePaths:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaAccounts.DeleteMetadataEntryResponse:
      type: object
      properties:
        entryDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaAccounts.GetAccountByIdResponse:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/Services.CatenaAccounts.Account'
      additionalProperties: false
    Services.CatenaAccounts.GetAccountIdsRequest:
      type: object
      properties:
        limit:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaAccounts.GetAccountIdsResponse:
      type: object
      properties:
        accountIds:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaAccounts.GetMetadataEntriesResponse:
      type: object
      properties:
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaAccounts.GetMetadataEntryResponse:
      type: object
      properties:
        entryValue:
          $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaAccounts.LinkAccountToPlatformRequest:
      type: object
      properties:
        sessionId:
          type: string
          description: The session id to link into the currently logged in session id
      additionalProperties: false
    Services.CatenaAccounts.LinkAccountToPlatformResponse:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/Services.CatenaAccounts.Account'
        accountLinked:
          type: boolean
          description: >-
            indicator of success of linking existing account to new auth
            provider
      additionalProperties: false
    Services.CatenaAccounts.ListAccountsResponse:
      type: object
      properties:
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaAccounts.Account'
      additionalProperties: false
    Services.CatenaAccounts.PlatformAccountId:
      type: object
      properties:
        platform:
          $ref: '#/components/schemas/Services.PublicCommon.Platform'
        id:
          type: string
      additionalProperties: false
    Services.CatenaAccounts.ServerCreateAccountRequest:
      type: object
      properties:
        accountId:
          type: string
        displayName:
          type: string
        platformAccountIds:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaAccounts.PlatformAccountId'
      additionalProperties: false
    Services.CatenaAccounts.ServerCreateAccountResponse:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/Services.CatenaAccounts.Account'
      additionalProperties: false
    Services.CatenaAccounts.ServerDeleteAccountRequest:
      type: object
      properties:
        accountId:
          type: string
      additionalProperties: false
    Services.CatenaAccounts.ServerDeleteAccountResponse:
      type: object
      additionalProperties: false
    Services.CatenaAccounts.ServerLinkAccountRequest:
      type: object
      properties:
        accountId:
          type: string
        platformAccountId:
          $ref: '#/components/schemas/Services.CatenaAccounts.PlatformAccountId'
      additionalProperties: false
    Services.CatenaAccounts.ServerLinkAccountResponse:
      type: object
      additionalProperties: false
    Services.CatenaAccounts.UpdateAccountRequest:
      type: object
      properties:
        accountId:
          type: string
          description: The id of the account to update
        account:
          $ref: '#/components/schemas/Services.CatenaAccounts.Account'
        accountMask:
          type: string
        metadataDeletionKeys:
          type: array
          items:
            type: string
          description: A list of metadata keys to delete
      additionalProperties: false
    Services.CatenaAccounts.UpdateAccountResponse:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/Services.CatenaAccounts.Account'
      additionalProperties: false
    Services.CatenaAccounts.UpdateMetadataEntryRequest:
      type: object
      properties:
        accountId:
          type: string
        entryKey:
          type: string
        entryValue:
          $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
        updateOperationType:
          $ref: '#/components/schemas/Catena.Groups.UpdateMetadataOperationType'
      additionalProperties: false
    Services.CatenaAccounts.UpdateMetadataEntryResponse:
      type: object
      additionalProperties: false
    Services.CatenaAnnouncements.AnnouncementEvent:
      type: object
      properties:
        message:
          type: string
      additionalProperties: false
    Services.CatenaApiKeys.AdminCreateApiKeyPolicyRequest:
      type: object
      properties:
        name:
          type: string
        permissions:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaApiKeys.AdminCreateApiKeyPolicyResponse:
      type: object
      properties:
        policy:
          $ref: '#/components/schemas/Services.CatenaApiKeys.ApiKeyPolicy'
      additionalProperties: false
    Services.CatenaApiKeys.AdminCreateApiKeyRequest:
      type: object
      properties:
        name:
          type: string
        policyId:
          type: string
      additionalProperties: false
    Services.CatenaApiKeys.AdminCreateApiKeyResponse:
      type: object
      properties:
        apiKey:
          $ref: '#/components/schemas/Services.CatenaApiKeys.ApiKey'
      additionalProperties: false
    Services.CatenaApiKeys.AdminDeleteApiKeyPolicyResponse:
      type: object
      properties:
        policyDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaApiKeys.AdminDeleteApiKeyResponse:
      type: object
      properties:
        apiKeyDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaApiKeys.AdminGetApiKeyPermissionsResponse:
      type: object
      properties:
        permissions:
          type: array
          items:
            $ref: '#/components/schemas/Catena.Core.TrustedServerPermission'
      additionalProperties: false
    Services.CatenaApiKeys.AdminGetApiKeyPoliciesResponse:
      type: object
      properties:
        policies:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaApiKeys.ApiKeyPolicy'
      additionalProperties: false
    Services.CatenaApiKeys.AdminGetApiKeysResponse:
      type: object
      properties:
        apiKeys:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaApiKeys.ApiKey'
      additionalProperties: false
    Services.CatenaApiKeys.AdminUpdateApiKeyPolicyRequest:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        permissions:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaApiKeys.AdminUpdateApiKeyPolicyResponse:
      type: object
      properties:
        policy:
          $ref: '#/components/schemas/Services.CatenaApiKeys.ApiKeyPolicy'
      additionalProperties: false
    Services.CatenaApiKeys.AdminUpdateApiKeyRequest:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        policyId:
          type: string
      additionalProperties: false
    Services.CatenaApiKeys.AdminUpdateApiKeyResponse:
      type: object
      properties:
        apiKey:
          $ref: '#/components/schemas/Services.CatenaApiKeys.ApiKey'
      additionalProperties: false
    Services.CatenaApiKeys.ApiKey:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        createdOn:
          type: string
        lastUsedOn:
          type: string
        policy:
          $ref: '#/components/schemas/Services.CatenaApiKeys.ApiKeyPolicy'
      additionalProperties: false
    Services.CatenaApiKeys.ApiKeyPolicy:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        permissions:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaApiKeys.TestApiKeyResponse:
      type: object
      additionalProperties: false
    Services.CatenaAuthentication.AdminAddOrUpdateProviderConfigRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
        providerConfig:
          $ref: '#/components/schemas/Services.CatenaAuthentication.ProviderConfig'
      additionalProperties: false
    Services.CatenaAuthentication.AdminAddOrUpdateProviderConfigResponse:
      type: object
      additionalProperties: false
    Services.CatenaAuthentication.AdminGetProviderConfigResponse:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
        providerConfig:
          $ref: '#/components/schemas/Services.CatenaAuthentication.ProviderConfig'
      additionalProperties: false
    Services.CatenaAuthentication.AdminToggleProviderRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
        isEnabled:
          type: boolean
      additionalProperties: false
    Services.CatenaAuthentication.AdminToggleProviderResponse:
      type: object
      additionalProperties: false
    Services.CatenaAuthentication.AuthenticationEvent:
      type: object
      properties:
        type:
          $ref: >-
            #/components/schemas/Services.CatenaAuthentication.AuthenticationUpdateType
        catenaAccountId:
          type: string
        platformAccountId:
          type: string
        platform:
          $ref: '#/components/schemas/Services.PublicCommon.Platform'
      additionalProperties: false
    Services.CatenaAuthentication.AuthenticationUpdateType:
      enum:
        - LOGOUT
        - LOGIN
        - 0
        - 1
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Logout
        '1': Login
    Services.CatenaAuthentication.AwaitSessionResponse:
      type: object
      properties:
        successfulAuth:
          type: boolean
        message:
          type: string
      additionalProperties: false
    Services.CatenaAuthentication.GetEnabledProvidersResponse:
      type: object
      properties:
        enabledProviders:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
      additionalProperties: false
    Services.CatenaAuthentication.LoginWithProviderRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaAuthentication.Provider'
        payload:
          type: string
          description: provider-specific auth token (username for unsafe provider)
      additionalProperties: false
      example:
        provider: 1
        payload: test01
    Services.CatenaAuthentication.LoginWithProviderResponse:
      type: object
      properties:
        redirectUri:
          type: string
          description: >-
            Redirect URI for the browser to use if we are authenticating via a
            website with an OAuth provider. Not returned if authenticating with
            a game client.
      additionalProperties: false
    Services.CatenaAuthentication.LogoutResponse:
      type: object
      additionalProperties: false
    Services.CatenaAuthentication.Provider:
      enum:
        - PROVIDER_UNSPECIFIED
        - PROVIDER_UNSAFE
        - PROVIDER_DISCORD_WEB
        - PROVIDER_GOOGLE_WEB
        - PROVIDER_APPLE_WEB
        - PROVIDER_TWITCH_WEB
        - PROVIDER_STEAM_WEB
        - PROVIDER_ITCH_WEB
        - PROVIDER_AMAZON_WEB
        - PROVIDER_EPIC_WEB
        - PROVIDER_OFFICE365_WEB
        - PROVIDER_STEAM
        - PROVIDER_DEVICE
        - PROVIDER_REMEMBER_ME
        - PROVIDER_CATENA
        - PROVIDER_CUSTOM
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
        - 11
        - 12
        - 13
        - 98
        - 99
      description: "Accepted auth providers.\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Unsafe
        '2': DiscordWeb
        '3': GoogleWeb
        '4': AppleWeb
        '5': TwitchWeb
        '6': SteamWeb
        '7': ItchWeb
        '8': AmazonWeb
        '9': EpicWeb
        '10': Office365Web
        '11': Steam
        '12': Device
        '13': RememberMe
        '98': Catena
        '99': Custom
    Services.CatenaAuthentication.ProviderConfig:
      type: object
      properties:
        providerClientId:
          type: string
        providerClientSecret:
          type: string
        providerRedirectUri:
          type: string
        providerIsEnabled:
          type: boolean
      additionalProperties: false
      description: Accepted auth provider configs.
    Services.CatenaEntitlements.AdminAddCatalogItemPurchasePriceRequest:
      type: object
      properties:
        priceKey:
          $ref: '#/components/schemas/Services.CatenaEntitlements.CatalogItemPriceKey'
        amount:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.AdminAddCatalogItemPurchasePriceResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminCancelSubscriptionRequest:
      type: object
      properties:
        subscriptionId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminCancelSubscriptionResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminCreateCatalogItemRequest:
      type: object
      properties:
        catalogItemName:
          type: string
        catalogItemDescription:
          type: string
        catalogItemPublished:
          type: boolean
        catalogItemTags:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaEntitlements.CatalogItemTag'
        catalogItemCustomItemId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminCreateCatalogItemResponse:
      type: object
      properties:
        catalogItemId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminDecrementAccountCountableCatalogItemResponse:
      type: object
      properties:
        newCount:
          type: integer
          format: int64
        decrementSuccessful:
          type: boolean
      additionalProperties: false
    Services.CatenaEntitlements.AdminDeleteCatalogItemPurchasePriceRequest:
      type: object
      properties:
        priceKey:
          $ref: '#/components/schemas/Services.CatenaEntitlements.CatalogItemPriceKey'
        amount:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.AdminDeleteCatalogItemPurchasePriceResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminDeleteCatalogItemResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetAccountCatalogItemsResponse:
      type: object
      properties:
        catalogItems:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.AdminGetAccountCatalogItemsResponseCatalogItem
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetAccountCatalogItemsResponseCatalogItem:
      type: object
      properties:
        catalogItemId:
          type: string
        isOwned:
          type: boolean
        count:
          type: integer
          format: int64
        customItemId:
          type: string
        lockoutFlags:
          $ref: '#/components/schemas/Services.CatenaEntitlements.AdminLockoutFlags'
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetAccountOwnsCatalogItemResponse:
      type: object
      properties:
        isOwned:
          type: boolean
        count:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetCatalogItemPurchasePricesRequest:
      type: object
      properties:
        catalogItemId:
          type: string
        type:
          $ref: '#/components/schemas/Services.CatenaEntitlements.PriceTypeFilter'
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetCatalogItemPurchasePricesResponse:
      type: object
      properties:
        prices:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaEntitlements.CatalogItemPrice'
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetCatalogItemsResponse:
      type: object
      properties:
        catalogItems:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaEntitlements.CatalogItem'
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetMostRecentOwnershipChangeResponse:
      type: object
      properties:
        record:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.OwnershipChangeRecord
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetOwnershipChangeHistoryResponse:
      type: object
      properties:
        records:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.OwnershipChangeRecord
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetProviderCatalogItemDataResponse:
      type: object
      properties:
        providerItemData:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.ProviderCatalogItemData
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetSubscriptionsRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        accountId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminGetSubscriptionsResponse:
      type: object
      properties:
        subscriptionIds:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminIncrementAccountCountableCatalogItemResponse:
      type: object
      properties:
        newCount:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.AdminListActiveProvidersResponse:
      type: object
      properties:
        orderProviders:
          type: array
          items:
            type: string
        externalItemProviders:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminListSupportedProvidersResponse:
      type: object
      properties:
        orderProviders:
          type: array
          items:
            type: string
        externalItemProviders:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminLockoutFlags:
      type: object
      properties:
        prohibitNonAdminUpdate:
          $ref: '#/components/schemas/Services.PublicCommon.NullableBool'
      additionalProperties: false
      description: "Lockout flags as they are exposed to admins\r\nThese may be null during a set if they should be left unchanged but should not be null during a get"
    Services.CatenaEntitlements.AdminModifyProviderCatalogItemDataRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        catalogItemId:
          type: string
        operation:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.ModifyProviderCatalogItemDataOperation
        steamApp:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamAppProviderCatalogItemData
      additionalProperties: false
    Services.CatenaEntitlements.AdminModifyProviderCatalogItemDataResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminPlaceOrderWithProviderRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        order:
          $ref: '#/components/schemas/Services.CatenaEntitlements.Order'
        steam:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderOrderMetadata
      additionalProperties: false
    Services.CatenaEntitlements.AdminPlaceOrderWithProviderResponse:
      type: object
      properties:
        createdSuccessfully:
          type: boolean
        orderId:
          type: string
        steam:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderOrderResultDetails
      additionalProperties: false
    Services.CatenaEntitlements.AdminRefundOrderWithProviderResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminRemoveProviderCatalogItemDataResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminRevokeAccountCatalogItemResponse:
      type: object
      properties:
        wasOwned:
          type: boolean
        previousCount:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.AdminSetAccountCountableCatalogItemRequest:
      type: object
      properties:
        accountId:
          type: string
        catalogItemId:
          type: string
        count:
          type: integer
          format: int64
        operation:
          $ref: '#/components/schemas/Services.CatenaEntitlements.ExtendedOperation'
        lockoutFlags:
          $ref: '#/components/schemas/Services.CatenaEntitlements.AdminLockoutFlags'
      additionalProperties: false
    Services.CatenaEntitlements.AdminSetAccountCountableCatalogItemResponse:
      type: object
      properties:
        previousCount:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.AdminStartSubscriptionWithProviderRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        subscription:
          $ref: '#/components/schemas/Services.CatenaEntitlements.Subscription'
        steam:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderSubscriptionMetadata
      additionalProperties: false
    Services.CatenaEntitlements.AdminStartSubscriptionWithProviderResponse:
      type: object
      properties:
        createdSuccessfully:
          type: boolean
        orderId:
          type: string
        steam:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderSubscriptionResultDetails
      additionalProperties: false
    Services.CatenaEntitlements.AdminUpdateCatalogItemPurchasePriceRequest:
      type: object
      properties:
        priceKey:
          $ref: '#/components/schemas/Services.CatenaEntitlements.CatalogItemPriceKey'
        amount:
          type: integer
          format: int64
        existingAmount:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.AdminUpdateCatalogItemPurchasePriceResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.AdminUpdateCatalogItemRequest:
      type: object
      properties:
        catalogItemId:
          type: string
        name:
          type: string
        description:
          type: string
        published:
          type: boolean
        tagUpdates:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaEntitlements.TagUpdate'
        customItemId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.AdminUpdateCatalogItemResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.CancelSubscriptionRequest:
      type: object
      properties:
        subscriptionId:
          type: string
          description: Provider may be unspecified
      additionalProperties: false
    Services.CatenaEntitlements.CancelSubscriptionResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.CatalogItem:
      type: object
      properties:
        catalogItemId:
          type: string
        name:
          type: string
        description:
          type: string
        published:
          type: boolean
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaEntitlements.CatalogItemTag'
        customItemId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.CatalogItemPrice:
      type: object
      properties:
        provider:
          type: string
        quantity:
          type: integer
          format: int64
        currency:
          type: string
        amount:
          type: integer
          format: int64
        subscriptionInterval:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SubscriptionInterval
      additionalProperties: false
    Services.CatenaEntitlements.CatalogItemPriceKey:
      type: object
      properties:
        catalogItemId:
          type: string
        provider:
          type: string
          description: May be empty
        quantity:
          type: integer
          format: int64
        currency:
          type: string
        subscriptionInterval:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SubscriptionInterval
      additionalProperties: false
    Services.CatenaEntitlements.CatalogItemTag:
      type: object
      properties:
        tag:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.EntitlementProvider:
      enum:
        - ENTITLEMENT_PROVIDER_UNSPECIFIED
        - ENTITLEMENT_PROVIDER_STEAM
        - ENTITLEMENT_PROVIDER_STEAM_APP
        - 0
        - 6
        - 7
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '6': Steam
        '7': SteamApp
    Services.CatenaEntitlements.ExecutePreparedOffersRequest:
      type: object
      properties:
        preparedOrders:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.PreparedOrderWithQuantity
        accountId:
          type: string
        steam:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderOrderMetadata
      additionalProperties: false
    Services.CatenaEntitlements.ExecutePreparedOffersResponse:
      type: object
      properties:
        success:
          type: boolean
        orderId:
          type: string
        steam:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderOrderResultDetails
      additionalProperties: false
    Services.CatenaEntitlements.ExtendedOperation:
      enum:
        - 0
        - 1
        - 2
        - 3
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      format: int32
      x-enumDescriptions:
        '0': Default
        '1': CountOnly
        '2': LockoutFlagsOnly
        '3': CountAndLockoutFlags
    Services.CatenaEntitlements.GetAccountCatalogItemsResponse:
      type: object
      properties:
        catalogItems:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.GetAccountCatalogItemsResponseCatalogItem
      additionalProperties: false
    Services.CatenaEntitlements.GetAccountCatalogItemsResponseCatalogItem:
      type: object
      properties:
        catalogItemId:
          type: string
        isOwned:
          type: boolean
        count:
          type: integer
          format: int64
        customItemId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.GetAccountOwnsCatalogItemResponse:
      type: object
      properties:
        isOwned:
          type: boolean
        count:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.GetSubscriptionsRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
      additionalProperties: false
    Services.CatenaEntitlements.GetSubscriptionsResponse:
      type: object
      properties:
        subscriptionIds:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaEntitlements.ModifyProviderCatalogItemDataOperation:
      enum:
        - MODIFY_PROVIDER_CATALOG_ITEM_DATA_OPERATION_UNSPECIFIED
        - MODIFY_PROVIDER_CATALOG_ITEM_DATA_OPERATION_SET
        - MODIFY_PROVIDER_CATALOG_ITEM_DATA_OPERATION_UPDATE
        - 0
        - 1
        - 2
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Set
        '2': Update
    Services.CatenaEntitlements.Order:
      type: object
      properties:
        granteeId:
          type: string
        items:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaEntitlements.OrderItem'
      additionalProperties: false
    Services.CatenaEntitlements.OrderItem:
      type: object
      properties:
        itemId:
          type: string
        description:
          type: string
        currency:
          type: string
        pricePerItem:
          type: integer
          format: int64
        count:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaEntitlements.OwnershipChangeRecord:
      type: object
      properties:
        increment:
          type: integer
          format: int64
        agent:
          type: string
        changeType:
          $ref: '#/components/schemas/Services.CatenaEntitlements.OwnershipChangeType'
        description:
          type: string
        timestamp:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.OwnershipChangeType:
      enum:
        - OWNERSHIP_CHANGE_TYPE_UNSPECIFIED
        - OWNERSHIP_CHANGE_TYPE_ORDER
        - OWNERSHIP_CHANGE_TYPE_REFUND
        - OWNERSHIP_CHANGE_TYPE_KNOWN
        - OWNERSHIP_CHANGE_TYPE_ADMIN
        - 0
        - 1
        - 2
        - 3
        - 4
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Order
        '2': Refund
        '3': Known
        '4': Admin
    Services.CatenaEntitlements.PlayerFacingPreparedOffer:
      type: object
      properties:
        offerId:
          type: string
        itemId:
          type: string
        currency:
          type: string
        description:
          type: string
        priceDetails:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.PlayerFacingPreparedOfferPrice
      additionalProperties: false
    Services.CatenaEntitlements.PlayerFacingPreparedOfferPrice:
      type: object
      properties:
        quantity:
          type: integer
          description: The number of items this order would purchase
          format: int64
        amount:
          type: integer
          description: The price in the specified currency
          format: int64
        subscriptionInterval:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SubscriptionInterval
      additionalProperties: false
    Services.CatenaEntitlements.PrepareOffersForProviderRequest:
      type: object
      properties:
        accountId:
          type: string
          description: >-
            since we are making this request on behalf of a player rather than
            initiated by a player, we must pass an account id in the request
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        currency:
          type: string
        tagFilter:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaEntitlements.PrepareOffersForProviderResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.PlayerFacingPreparedOffer
      additionalProperties: false
    Services.CatenaEntitlements.PreparedOrderWithQuantity:
      type: object
      properties:
        preparedOrder:
          type: string
        quantity:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.PriceTypeFilter:
      enum:
        - PRICE_TYPE_FILTER_UNSPECIFIED
        - PRICE_TYPE_FILTER_PURCHASE
        - PRICE_TYPE_FILTER_SUBSCRIPTION
        - 0
        - 1
        - 2
      description: "These are flags and must be powers of 2!\r\nDefault/unspecified returns purchase prices only (equivalent to when value is 1)\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Purchase
        '2': Subscription
    Services.CatenaEntitlements.ProviderCatalogItemData:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        steamApp:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamAppProviderCatalogItemData
      additionalProperties: false
    Services.CatenaEntitlements.ServerCancelSubscriptionRequest:
      type: object
      properties:
        subscriptionId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.ServerCancelSubscriptionResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.ServerDecrementAccountCountableCatalogItemResponse:
      type: object
      properties:
        newCount:
          type: integer
          format: int64
        decrementSuccessful:
          type: boolean
      additionalProperties: false
    Services.CatenaEntitlements.ServerGetAccountCatalogItemsResponse:
      type: object
      properties:
        catalogItems:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaEntitlements.ServerGetAccountCatalogItemsResponseCatalogItem
      additionalProperties: false
    Services.CatenaEntitlements.ServerGetAccountCatalogItemsResponseCatalogItem:
      type: object
      properties:
        catalogItemId:
          type: string
        isOwned:
          type: boolean
        count:
          type: integer
          format: int64
        customItemId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.ServerGetAccountOwnsCatalogItemResponse:
      type: object
      properties:
        isOwned:
          type: boolean
        count:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.ServerGetSubscriptionsRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        accountId:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.ServerGetSubscriptionsResponse:
      type: object
      properties:
        subscriptionIds:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaEntitlements.ServerIncrementAccountCountableCatalogItemResponse:
      type: object
      properties:
        newCount:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaEntitlements.ServerModifyProviderCatalogItemDataRequest:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Services.CatenaEntitlements.EntitlementProvider'
        catalogItemId:
          type: string
        operation:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.ModifyProviderCatalogItemDataOperation
        steamApp:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamAppProviderCatalogItemData
      additionalProperties: false
    Services.CatenaEntitlements.ServerModifyProviderCatalogItemDataResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.ServerRemoveProviderCatalogItemDataResponse:
      type: object
      additionalProperties: false
    Services.CatenaEntitlements.SteamAppItemPolicy:
      enum:
        - STEAM_APP_ITEM_POLICY_UNSPECIFIED
        - STEAM_APP_ITEM_POLICY_ANY
        - STEAM_APP_ITEM_POLICY_PERMANENT_ONLY
        - 0
        - 1
        - 2
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Any
        '2': PermanentOnly
    Services.CatenaEntitlements.SteamAppProviderCatalogItemData:
      type: object
      properties:
        appId:
          type: integer
          format: int32
        policy:
          $ref: '#/components/schemas/Services.CatenaEntitlements.SteamAppItemPolicy'
      additionalProperties: false
    Services.CatenaEntitlements.SteamOrderProviderOrderMetadata:
      type: object
      properties:
        language:
          type: string
        userSession:
          type: string
        ipAddress:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.SteamOrderProviderOrderResultDetails:
      type: object
      properties:
        checkoutUrl:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.SteamOrderProviderSubscriptionMetadata:
      type: object
      properties:
        orderMetadata:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderOrderMetadata
      additionalProperties: false
    Services.CatenaEntitlements.SteamOrderProviderSubscriptionResultDetails:
      type: object
      properties:
        orderResultDetails:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SteamOrderProviderOrderResultDetails
      additionalProperties: false
    Services.CatenaEntitlements.Subscription:
      type: object
      properties:
        order:
          $ref: '#/components/schemas/Services.CatenaEntitlements.Order'
        interval:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SubscriptionInterval
      additionalProperties: false
    Services.CatenaEntitlements.SubscriptionInterval:
      type: object
      properties:
        unit:
          $ref: >-
            #/components/schemas/Services.CatenaEntitlements.SubscriptionIntervalUnit
        count:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaEntitlements.SubscriptionIntervalUnit:
      enum:
        - SUBSCRIPTION_INTERVAL_UNIT_UNSPECIFIED
        - SUBSCRIPTION_INTERVAL_UNIT_DAY
        - SUBSCRIPTION_INTERVAL_UNIT_WEEK
        - SUBSCRIPTION_INTERVAL_UNIT_MONTH
        - SUBSCRIPTION_INTERVAL_UNIT_YEAR
        - 0
        - 1
        - 2
        - 3
        - 4
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Day
        '2': Week
        '3': Month
        '4': Year
    Services.CatenaEntitlements.TagUpdate:
      type: object
      properties:
        operation:
          $ref: '#/components/schemas/Services.CatenaEntitlements.TagUpdateOperation'
        tag:
          type: string
      additionalProperties: false
    Services.CatenaEntitlements.TagUpdateOperation:
      enum:
        - TAG_UPDATE_ADD
        - TAG_UPDATE_REMOVE
        - 0
        - 1
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': TagUpdateAdd
        '1': TagUpdateRemove
    Services.CatenaFriends.AcceptFriendRequestRequest:
      type: object
      properties:
        senderAccountId:
          type: string
      additionalProperties: false
    Services.CatenaFriends.AcceptFriendRequestResponse:
      type: object
      additionalProperties: false
    Services.CatenaFriends.AdminGetFriendsListRequest:
      type: object
      properties:
        accountId:
          type: string
        limit:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaFriends.AdminGetFriendsListResponse:
      type: object
      properties:
        friends:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaFriends.Friend'
      additionalProperties: false
    Services.CatenaFriends.AdminRemoveFriendRequest:
      type: object
      properties:
        accountId1:
          type: string
        accountId2:
          type: string
      additionalProperties: false
    Services.CatenaFriends.AdminRemoveFriendResponse:
      type: object
      additionalProperties: false
    Services.CatenaFriends.AdminRemovePendingFriendRequestRequest:
      type: object
      properties:
        senderAccountId:
          type: string
        receiverAccountId:
          type: string
      additionalProperties: false
    Services.CatenaFriends.AdminRemovePendingFriendRequestResponse:
      type: object
      additionalProperties: false
    Services.CatenaFriends.DeclineFriendRequestRequest:
      type: object
      properties:
        senderAccountId:
          type: string
      additionalProperties: false
    Services.CatenaFriends.DeclineFriendRequestResponse:
      type: object
      additionalProperties: false
    Services.CatenaFriends.Friend:
      type: object
      properties:
        accountId:
          type: string
        becameFriendsTimestamp:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaFriends.FriendRequest:
      type: object
      properties:
        accountId:
          type: string
        requestSentTimestamp:
          type: integer
          format: int64
      additionalProperties: false
      description: Structures
    Services.CatenaFriends.FriendsEvent:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/Services.CatenaFriends.FriendsEventType'
        senderAccountId:
          type: string
        receiverAccountId:
          type: string
      additionalProperties: false
    Services.CatenaFriends.FriendsEventType:
      enum:
        - UNSPECIFIED
        - SEND_FRIEND_REQUEST
        - ACCEPT_FRIEND_REQUEST
        - 0
        - 1
        - 2
      description: "Update Events\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': SendFriendRequest
        '2': AcceptFriendRequest
    Services.CatenaFriends.GetFriendsListRequest:
      type: object
      properties:
        limit:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaFriends.GetFriendsListResponse:
      type: object
      properties:
        friends:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaFriends.Friend'
      additionalProperties: false
    Services.CatenaFriends.GetIncomingPendingRequestsRequest:
      type: object
      properties:
        limit:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaFriends.GetIncomingPendingRequestsResponse:
      type: object
      properties:
        incomingFriends:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaFriends.FriendRequest'
      additionalProperties: false
    Services.CatenaFriends.GetOutgoingPendingRequestsRequest:
      type: object
      properties:
        limit:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaFriends.GetOutgoingPendingRequestsResponse:
      type: object
      properties:
        outgoingFriends:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaFriends.FriendRequest'
      additionalProperties: false
    Services.CatenaFriends.RemoveFriendRequest:
      type: object
      properties:
        removingAccountId:
          type: string
      additionalProperties: false
    Services.CatenaFriends.RemoveFriendResponse:
      type: object
      additionalProperties: false
    Services.CatenaFriends.SendFriendRequestRequest:
      type: object
      properties:
        receiverAccountId:
          type: string
      additionalProperties: false
      description: Requests
    Services.CatenaFriends.SendFriendRequestResponse:
      type: object
      additionalProperties: false
    Services.CatenaLeaderboards.LeaderboardResponse:
      type: object
      properties:
        players:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaLeaderboards.PlayerScore'
      additionalProperties: false
    Services.CatenaLeaderboards.PlayerScore:
      type: object
      properties:
        playerName:
          type: string
        score:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaMatchBroker.AdminEndActiveMatchResponse:
      type: object
      properties:
        matchDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaMatchBroker.AdminGetActiveMatchByIdResponse:
      type: object
      properties:
        match:
          $ref: '#/components/schemas/Catena.MatchBroker.Match'
      additionalProperties: false
    Services.CatenaMatchBroker.AdminGetAvailableAllocatorsResponse:
      type: object
      properties:
        allocatorNames:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaMatchBroker.AdminGetConfiguredAllocatorsResponse:
      type: object
      properties:
        allocators:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaMatchBroker.AllocatorConfiguration
      additionalProperties: false
    Services.CatenaMatchBroker.AdminListActiveMatchesResponse:
      type: object
      properties:
        matches:
          type: array
          items:
            $ref: '#/components/schemas/Catena.MatchBroker.Match'
      additionalProperties: false
    Services.CatenaMatchBroker.AdminXGetMatchBrokerConfigResponse:
      type: object
      properties:
        fastSchedule:
          type: integer
          format: int32
        serverMaxLifetimeMinutes:
          type: integer
          format: int32
        matchPickupTimeSeconds:
          type: integer
          format: int32
        matchReadyTimeSeconds:
          type: integer
          format: int32
        matchMaxRunTimeMinutes:
          type: integer
          format: int32
        scheduleFrequencySeconds:
          type: integer
          format: int32
        delayAllocationSeconds:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaMatchBroker.AdminXReconfigureMatchBrokerResponse:
      type: object
      properties:
        success:
          type: boolean
      additionalProperties: false
    Services.CatenaMatchBroker.AllocatorConfiguration:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        requirements:
          type: string
        rawAllocatorConfiguration:
          type: string
      additionalProperties: false
    Services.CatenaMatchBroker.ListQueuedMatchesResponse:
      type: object
      properties:
        matches:
          type: array
          items:
            $ref: '#/components/schemas/Catena.MatchBroker.Match'
      additionalProperties: false
    Services.CatenaMatchmaking.AdminXGetMatchmakerConfigResponse:
      type: object
      properties:
        catenaMatchmakerConfig:
          $ref: >-
            #/components/schemas/Services.CatenaMatchmaking.CatenaMatchmakerConfig
        flexMatchConfig:
          $ref: '#/components/schemas/Services.CatenaMatchmaking.FlexMatchConfig'
        customMatchmakerConfig:
          type: string
      additionalProperties: false
    Services.CatenaMatchmaking.AdminXReconfigureMatchmakerRequest:
      type: object
      properties:
        config:
          type: string
      additionalProperties: false
    Services.CatenaMatchmaking.AdminXReconfigureMatchmakerResponse:
      type: object
      properties:
        success:
          type: boolean
      additionalProperties: false
    Services.CatenaMatchmaking.CancelMatchmakingRequest:
      type: object
      properties:
        ticketId:
          type: string
          description: The ID of the ticket for which we are cancelling matchmaking.
      additionalProperties: false
    Services.CatenaMatchmaking.CancelMatchmakingResponse:
      type: object
      additionalProperties: false
    Services.CatenaMatchmaking.CatenaMatchmakerConfig:
      type: object
      properties:
        matchmakingQueues:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Services.CatenaMatchmaking.QueueConfig'
        statusExpirationMinutes:
          type: integer
          format: int64
        customHooks:
          type: string
      additionalProperties: false
    Services.CatenaMatchmaking.FlexMatchConfig:
      type: object
      properties:
        sqsQueueUrl:
          type: string
        gameliftConfig:
          $ref: '#/components/schemas/Services.CatenaMatchmaking.GameLiftConfig'
      additionalProperties: false
    Services.CatenaMatchmaking.GameLiftConfig:
      type: object
      properties:
        profile:
          type: string
        region:
          type: string
        accessKey:
          type: string
        secretKey:
          type: string
      additionalProperties: false
    Services.CatenaMatchmaking.GetMatchmakingStatusResponse:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/Services.CatenaMatchmaking.MatchmakingStatus'
      additionalProperties: false
    Services.CatenaMatchmaking.ListTicketsResponse:
      type: object
      properties:
        tickets:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaMatchmaking.MatchmakingTicketWithState
      additionalProperties: false
    Services.CatenaMatchmaking.MatchmakingStatus:
      enum:
        - MATCHMAKING_STATUS_UNSPECIFIED
        - MATCHMAKING_STATUS_IN_PROGRESS
        - MATCHMAKING_STATUS_COMPLETED
        - MATCHMAKING_STATUS_CANCELLED
        - MATCHMAKING_STATUS_FAILED
        - MATCHMAKING_STATUS_FINDING_SERVER
        - MATCHMAKING_STATUS_MATCHMAKING_TIMED_OUT
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': InProgress
        '2': Completed
        '3': Cancelled
        '4': Failed
        '5': FindingServer
        '6': MatchmakingTimedOut
    Services.CatenaMatchmaking.MatchmakingStatusUpdateEvent:
      type: object
      properties:
        type:
          $ref: >-
            #/components/schemas/Services.CatenaMatchmaking.MatchmakingStatusUpdateType
        message:
          type: string
        ticketId:
          type: string
        additionalEventData:
          type: string
      additionalProperties: false
    Services.CatenaMatchmaking.MatchmakingStatusUpdateType:
      enum:
        - MATCHMAKING_STATUS_UPDATE_TYPE_UNSPECIFIED
        - MATCHMAKING_STATUS_UPDATE_TYPE_IN_PROGRESS
        - MATCHMAKING_STATUS_UPDATE_TYPE_COMPLETED
        - MATCHMAKING_STATUS_UPDATE_TYPE_FAILED
        - MATCHMAKING_STATUS_UPDATE_TYPE_CANCELLED
        - MATCHMAKING_STATUS_UPDATE_TYPE_FINDING_SERVER
        - MATCHMAKING_STATUS_UPDATE_MATCHMAKING_TIMED_OUT
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': InProgress
        '2': Completed
        '3': Failed
        '4': Cancelled
        '5': FindingServer
        '6': MatchmakingStatusUpdateMatchmakingTimedOut
    Services.CatenaMatchmaking.MatchmakingTicketWithState:
      type: object
      properties:
        ticketId:
          type: string
        entity:
          $ref: '#/components/schemas/Catena.Groups.Entity'
        status:
          $ref: '#/components/schemas/Services.CatenaMatchmaking.MatchmakingStatus'
        matchmakerState:
          type: string
          description: Determined by the configured matchmaker
      additionalProperties: false
    Services.CatenaMatchmaking.NewMatchEvent:
      type: object
      properties:
        match:
          $ref: '#/components/schemas/Catena.MatchBroker.Match'
      additionalProperties: false
    Services.CatenaMatchmaking.QueueConfig:
      type: object
      properties:
        queueName:
          type: string
        teams:
          type: integer
          format: int64
        minPlayersPerTeam:
          type: integer
          format: int64
        playersPerTeam:
          type: integer
          format: int64
        ticketExpirationSeconds:
          type: integer
          format: int64
        expirationAction:
          type: string
        customStrategy:
          type: string
        customHooks:
          type: string
      additionalProperties: false
    Services.CatenaMatchmaking.StartMatchmakingRequest:
      type: object
      properties:
        entity:
          $ref: '#/components/schemas/Catena.Groups.Entity'
      additionalProperties: false
    Services.CatenaMatchmaking.StartMatchmakingResponse:
      type: object
      properties:
        ticketId:
          type: string
          description: The ID of the newly created matchmaking ticket.
      additionalProperties: false
    Services.CatenaNodeControl.AdminAddServiceToExcludeRequest:
      type: object
      properties:
        service:
          type: string
      additionalProperties: false
    Services.CatenaNodeControl.AdminAddServiceToExcludeResponse:
      type: object
      additionalProperties: false
    Services.CatenaNodeControl.AdminAddServiceToIncludeRequest:
      type: object
      properties:
        service:
          type: string
      additionalProperties: false
    Services.CatenaNodeControl.AdminAddServiceToIncludeResponse:
      type: object
      additionalProperties: false
    Services.CatenaNodeControl.AdminGetPreferredImplementationOverridesResponse:
      type: object
      properties:
        overrides:
          type: object
          additionalProperties:
            type: string
      additionalProperties: false
    Services.CatenaNodeControl.AdminGetServicesToExcludeResponse:
      type: object
      properties:
        services:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaNodeControl.AdminGetServicesToIncludeResponse:
      type: object
      properties:
        services:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaNodeControl.AdminRemoveServiceToExcludeRequest:
      type: object
      properties:
        service:
          type: string
      additionalProperties: false
    Services.CatenaNodeControl.AdminRemoveServiceToExcludeResponse:
      type: object
      additionalProperties: false
    Services.CatenaNodeControl.AdminRemoveServiceToIncludeRequest:
      type: object
      properties:
        service:
          type: string
      additionalProperties: false
    Services.CatenaNodeControl.AdminRemoveServiceToIncludeResponse:
      type: object
      additionalProperties: false
    Services.CatenaNodeControl.AdminRestartNodeResponse:
      type: object
      additionalProperties: false
    Services.CatenaNodeControl.AdminSetPreferredImplementationOverrideRequest:
      type: object
      properties:
        interface:
          type: string
        implementation:
          type: string
        clear:
          type: boolean
      additionalProperties: false
    Services.CatenaNodeControl.AdminSetPreferredImplementationOverrideResponse:
      type: object
      additionalProperties: false
    Services.CatenaNodeInspection.AvailableImplementations:
      type: object
      properties:
        implementations:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaNodeInspection.GetActiveImplementationsResponse:
      type: object
      properties:
        activeImplementations:
          type: object
          additionalProperties:
            type: string
      additionalProperties: false
    Services.CatenaNodeInspection.GetAvailableImplementationsResponse:
      type: object
      properties:
        availableImplementations:
          type: object
          additionalProperties:
            $ref: >-
              #/components/schemas/Services.CatenaNodeInspection.AvailableImplementations
      additionalProperties: false
    Services.CatenaNodeInspection.GetNodeHealthResponse:
      type: object
      properties:
        healthy:
          type: boolean
        services:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaNodeInspection.ServiceHealth'
      additionalProperties: false
    Services.CatenaNodeInspection.ListDiscoveredServicesResponse:
      type: object
      properties:
        services:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaNodeInspection.ListEnabledServicesResponse:
      type: object
      properties:
        services:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaNodeInspection.NodeIsHealthyResponse:
      type: object
      properties:
        isHealthy:
          type: boolean
      additionalProperties: false
    Services.CatenaNodeInspection.ServiceHealth:
      type: object
      properties:
        service:
          type: string
        healthy:
          $ref: >-
            #/components/schemas/Services.CatenaNodeInspection.ServiceHealthStatus
        components:
          type: array
          items:
            $ref: '#/components/schemas/Catena.Core.ComponentHealth'
      additionalProperties: false
    Services.CatenaNodeInspection.ServiceHealthStatus:
      enum:
        - SERVICE_HEALTH_STATUS_UNSPECIFIED
        - SERVICE_HEALTH_STATUS_HEALTHY
        - SERVICE_HEALTH_STATUS_UNHEALTHY
        - SERVICE_HEALTH_STATUS_PRESUMED_HEALTHY
        - 0
        - 1
        - 2
        - 3
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Healthy
        '2': Unhealthy
        '3': PresumedHealthy
    Services.CatenaParties.AdminCreatePartyRequest:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaParties.AdminCreatePartyResponse:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaParties.AdminDeleteAllPartiesResponse:
      type: object
      properties:
        partiesDeleted:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaParties.AdminDeletePartyResponse:
      type: object
      properties:
        partyDeleted:
          type: boolean
          description: returns true if party was deleted from database, false otherwise
      additionalProperties: false
    Services.CatenaParties.AdminGetPartyByIdResponse:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaParties.AdminListPartiesResponse:
      type: object
      properties:
        parties:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaParties.Party'
          description: list of all the existing parties
      additionalProperties: false
    Services.CatenaParties.AdminUpdateParty:
      type: object
      properties:
        leaderId:
          type: string
        kick:
          type: array
          items:
            type: string
        join:
          type: array
          items:
            type: string
        joinDisplayNames:
          type: object
          additionalProperties:
            type: string
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaParties.AdminUpdatePartyRequest:
      type: object
      properties:
        partyId:
          type: string
          description: id of party to be updated
        payload:
          $ref: '#/components/schemas/Services.CatenaParties.AdminUpdateParty'
      additionalProperties: false
    Services.CatenaParties.AdminUpdatePartyResponse:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaParties.CreatePartyMetadataEntryRequest:
      type: object
      properties:
        innerRequest:
          $ref: '#/components/schemas/Catena.Groups.CreateMetadataEntryRequest'
        playerId:
          type: string
          description: 'Optional: If included, query for a specific party member'
      additionalProperties: false
    Services.CatenaParties.CreatePartyRequest:
      type: object
      properties:
        creatingPlayerMetadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaParties.CreatePartyResponse:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaParties.GetPartyInfoResponse:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaParties.GetPlayerInfoByIdResponse:
      type: object
      properties:
        player:
          $ref: '#/components/schemas/Services.CatenaParties.Player'
      additionalProperties: false
    Services.CatenaParties.JoinPartyWithInviteCodeRequest:
      type: object
      properties:
        inviteCode:
          type: string
          description: code used to join the party
        joiningPlayerMetadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaParties.JoinPartyWithInviteCodeResponse:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaParties.KickFromPartyRequest:
      type: object
      properties:
        playerId:
          type: string
          description: ID of player to kick from party
        partyId:
          type: string
          description: ID of party to kick player from
      additionalProperties: false
    Services.CatenaParties.KickFromPartyResponse:
      type: object
      additionalProperties: false
    Services.CatenaParties.LeavePartyRequest:
      type: object
      properties:
        partyId:
          type: string
          description: ID of party to leave
      additionalProperties: false
    Services.CatenaParties.LeavePartyResponse:
      type: object
      additionalProperties: false
    Services.CatenaParties.Party:
      type: object
      properties:
        partyId:
          type: string
        leaderId:
          type: string
        inviteCode:
          type: string
        players:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaParties.Player'
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaParties.PartyEventValue:
      type: object
      properties:
        boolValue:
          type: boolean
        metadataValue:
          $ref: '#/components/schemas/Catena.Groups.MetadataEntry'
        stringValue:
          type: string
        playerValue:
          $ref: '#/components/schemas/Services.CatenaParties.Player'
        intValue:
          type: integer
          format: int32
        metadataMapValue:
          $ref: '#/components/schemas/Catena.Groups.MetadataMap'
      additionalProperties: false
    Services.CatenaParties.PartyUpdateEvent:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/Services.CatenaParties.PartyUpdateType'
        message:
          type: string
        partyId:
          type: string
          description: The party id this event is associated with
        eventPayload:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Services.CatenaParties.PartyEventValue'
      additionalProperties: false
    Services.CatenaParties.PartyUpdateType:
      enum:
        - PARTY_UPDATE_TYPE_UNSPECIFIED
        - PARTY_UPDATE_TYPE_PLAYER_JOINED
        - PARTY_UPDATE_TYPE_PLAYER_LEFT
        - PARTY_UPDATE_TYPE_PLAYER_KICKED
        - PARTY_UPDATE_TYPE_PLAYER_READY_CHANGED
        - PARTY_UPDATE_TYPE_PLAYER_LEADER_CHANGED
        - PARTY_UPDATE_TYPE_METADATA_CREATED
        - PARTY_UPDATE_TYPE_METADATA_UPDATED
        - PARTY_UPDATE_TYPE_METADATA_DELETED
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
      description: "\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': PlayerJoined
        '2': PlayerLeft
        '3': PlayerKicked
        '4': PlayerReadyChanged
        '5': PlayerLeaderChanged
        '6': MetadataCreated
        '7': MetadataUpdated
        '8': MetadataDeleted
    Services.CatenaParties.Player:
      type: object
      properties:
        playerId:
          type: string
        displayName:
          type: string
        isReady:
          type: boolean
        isLeader:
          type: boolean
        teamNumber:
          type: integer
          format: int32
        metadata:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Catena.Groups.EntityMetadata'
      additionalProperties: false
    Services.CatenaParties.SetPartyLeaderRequest:
      type: object
      properties:
        playerId:
          type: string
          description: ID of player to set as party leader
        partyId:
          type: string
          description: ID of party to set leader of
      additionalProperties: false
    Services.CatenaParties.SetPartyLeaderResponse:
      type: object
      additionalProperties: false
    Services.CatenaParties.UpdatePartyMetadataEntryRequest:
      type: object
      properties:
        innerRequest:
          $ref: '#/components/schemas/Catena.Groups.UpdateMetadataEntryRequest'
        playerId:
          type: string
          description: 'Optional: If included, query for a specific party member'
      additionalProperties: false
    Services.CatenaParties.UpdatePartyPlayerRequest:
      type: object
      properties:
        payload:
          $ref: '#/components/schemas/Services.CatenaParties.Player'
        payloadMask:
          type: string
      additionalProperties: false
    Services.CatenaParties.UpdatePartyPlayerResponse:
      type: object
      properties:
        party:
          $ref: '#/components/schemas/Services.CatenaParties.Party'
      additionalProperties: false
    Services.CatenaPlatformAuth.AdminDeleteLoginInfoResponse:
      type: object
      additionalProperties: false
    Services.CatenaPlatformAuth.AdminGetLoginInfoResponse:
      type: object
      properties:
        sessionData:
          type: string
      additionalProperties: false
    Services.CatenaPlatformAuth.AdminRegisterDeviceForAuthResponse:
      type: object
      properties:
        certificate:
          type: string
      additionalProperties: false
    Services.CatenaPlatformAuth.AdminRemoveDeviceForAuthResponse:
      type: object
      additionalProperties: false
    Services.CatenaPlatformAuth.RememberLoginInfoResponse:
      type: object
      properties:
        replayToken:
          type: string
      additionalProperties: false
    Services.CatenaServerReleases.AdminCreateServerPatchRequest:
      type: object
      properties:
        id:
          type: string
          description: game server release id
        uri:
          type: string
        bytes:
          type: integer
          description: >-
            subject to change: possibly protobuf.bytes type  / cant use long,
            have to use int64 in .proto files
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaServerReleases.AdminCreateServerPatchResponse:
      type: object
      properties:
        id:
          type: string
          description: patch id
      additionalProperties: false
    Services.CatenaServerReleases.AdminCreateServerReleaseRequest:
      type: object
      properties:
        id:
          type: string
          description: game server release id
        uri:
          type: string
        bytes:
          type: integer
          description: >-
            subject to change: possibly protobuf.bytes type  / cant use long,
            have to use int64 in .proto files
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaServerReleases.AdminCreateServerReleaseResponse:
      type: object
      properties:
        id:
          type: string
          description: game server release id
        name:
          type: string
          description: name of server
      additionalProperties: false
    Services.CatenaServerReleases.AdminDeleteServerPatchResponse:
      type: object
      properties:
        serverDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaServerReleases.AdminDeleteServerReleaseResponse:
      type: object
      properties:
        serverReleaseDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaServerReleases.AdminUpdateServerPatchRequest:
      type: object
      properties:
        id:
          type: string
          description: game patch id
        gameServerReleaseId:
          type: string
          description: game server release id
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaServerReleases.AdminUpdateServerPatchResponse:
      type: object
      properties:
        id:
          type: string
          description: game patch id
      additionalProperties: false
    Services.CatenaServerReleases.AdminUpdateServerReleaseRequest:
      type: object
      properties:
        id:
          type: string
          description: game server release id
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaServerReleases.AdminUpdateServerReleaseResponse:
      type: object
      properties:
        id:
          type: string
          description: game server release id
      additionalProperties: false
    Services.CatenaServerReleases.GetServerManifestResponse:
      type: object
      properties:
        releases:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaServerReleases.ServerRelease'
      additionalProperties: false
    Services.CatenaServerReleases.ServerPatch:
      type: object
      properties:
        id:
          type: string
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaServerReleases.ServerRelease:
      type: object
      properties:
        id:
          type: string
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
        patches:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaServerReleases.ServerPatch'
      additionalProperties: false
    Services.CatenaSessions.ListSessionsResponse:
      type: object
      properties:
        sessions:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Services.CatenaSessions.Session'
      additionalProperties: false
    Services.CatenaSessions.Session:
      type: object
      properties:
        sessionData:
          type: object
          additionalProperties:
            type: string
      additionalProperties: false
    Services.CatenaSteamDiag.AdminAccountCheckAppOwnershipResponse:
      type: object
      properties:
        ownsApp:
          type: boolean
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectInventoryGetItemDefsResponse:
      type: object
      properties:
        itemdefJson:
          type: string
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionCancelAgreementRequest:
      type: object
      properties:
        steamId:
          type: integer
          format: int64
        appId:
          type: integer
          format: int32
        agreementId:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionCancelAgreementResponse:
      type: object
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionGetReportRequest:
      type: object
      properties:
        maxResults:
          type: integer
          format: int32
        timestamp:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionGetReportResponse:
      type: object
      properties:
        orders:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionGetReportResponseOrder
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionGetReportResponseOrder:
      type: object
      properties:
        orderId:
          type: integer
          description: Not all information is reported back here
          format: int64
        transId:
          type: integer
          format: int64
        steamId:
          type: integer
          format: int64
        status:
          type: string
        time:
          type: string
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionGetUserAgreementInfoAgreement:
      type: object
      properties:
        agreementId:
          type: integer
          description: Not all information is reported back here
          format: int64
        status:
          type: string
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionGetUserAgreementInfoRequest:
      type: object
      properties:
        steamId:
          type: integer
          format: int64
        appId:
          type: integer
          format: int32
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionGetUserAgreementInfoResponse:
      type: object
      properties:
        agreements:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaSteamDiag.AdminDirectTransactionGetUserAgreementInfoAgreement
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionQueryTxnRequest:
      type: object
      properties:
        orderId:
          type: integer
          format: int64
        transId:
          type: integer
          format: int64
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectTransactionQueryTxnResponse:
      type: object
      properties:
        orderId:
          type: integer
          description: Not all information is reported back here
          format: int64
        transId:
          type: integer
          format: int64
        steamId:
          type: integer
          format: int64
        status:
          type: string
        time:
          type: string
        agreementId:
          type: integer
          format: int64
        agreementStatus:
          type: string
        timeCreated:
          type: string
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectUserCheckAppOwnershipResponse:
      type: object
      properties:
        ownsApp:
          type: boolean
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectUserGetPlayerSummariesRequest:
      type: object
      properties:
        steamId:
          type: array
          items:
            type: integer
            format: int64
      additionalProperties: false
    Services.CatenaSteamDiag.AdminDirectUserGetPlayerSummariesResponse:
      type: object
      properties:
        players:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaSteamDiag.PlayerSummary'
      additionalProperties: false
    Services.CatenaSteamDiag.AdminUserGetPlayerSummariesRequest:
      type: object
      properties:
        accountIds:
          type: array
          items:
            type: string
      additionalProperties: false
    Services.CatenaSteamDiag.AdminUserGetPlayerSummariesResponse:
      type: object
      properties:
        players:
          type: array
          items:
            $ref: >-
              #/components/schemas/Services.CatenaSteamDiag.AugmentedPlayerSummary
      additionalProperties: false
    Services.CatenaSteamDiag.AugmentedPlayerSummary:
      type: object
      properties:
        accountId:
          type: string
          description: Augment with account ID from request for correlation
        steamId:
          type: integer
          description: >-
            Not all information is reported back here, steam ID is 0 when
            account can't be mapped
          format: int64
        personaName:
          type: string
      additionalProperties: false
    Services.CatenaSteamDiag.PlayerSummary:
      type: object
      properties:
        steamId:
          type: integer
          description: Not all information is reported back here
          format: int64
        personaName:
          type: string
      additionalProperties: false
    Services.CatenaTitles.AdminCreateTitlePatchRequest:
      type: object
      properties:
        id:
          type: string
          description: game title release id
        uri:
          type: string
        bytes:
          type: integer
          description: >-
            subject to change: possibly protobuf.bytes type  / cant use long,
            have to use int64 in .proto files
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaTitles.AdminCreateTitlePatchResponse:
      type: object
      properties:
        id:
          type: string
          description: patch id
        name:
          type: string
          description: name of title
      additionalProperties: false
    Services.CatenaTitles.AdminCreateTitleReleaseRequest:
      type: object
      properties:
        id:
          type: string
          description: game title id
        uri:
          type: string
        bytes:
          type: integer
          description: >-
            subject to change: possibly protobuf.bytes type  / cant use long,
            have to use int64 in .proto files
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
        platform:
          type: string
      additionalProperties: false
    Services.CatenaTitles.AdminCreateTitleReleaseResponse:
      type: object
      properties:
        id:
          type: string
          description: release id
        name:
          type: string
          description: name of title
      additionalProperties: false
    Services.CatenaTitles.AdminCreateTitleRequest:
      type: object
      properties:
        name:
          type: string
      additionalProperties: false
    Services.CatenaTitles.AdminCreateTitleResponse:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      additionalProperties: false
    Services.CatenaTitles.AdminDeleteTitlePatchRequest:
      type: object
      properties:
        id:
          type: string
          description: patch id
      additionalProperties: false
    Services.CatenaTitles.AdminDeleteTitlePatchResponse:
      type: object
      properties:
        titleDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaTitles.AdminDeleteTitleReleaseRequest:
      type: object
      properties:
        id:
          type: string
          description: release id
      additionalProperties: false
    Services.CatenaTitles.AdminDeleteTitleReleaseResponse:
      type: object
      properties:
        titleDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaTitles.AdminDeleteTitleRequest:
      type: object
      properties:
        id:
          type: string
      additionalProperties: false
    Services.CatenaTitles.AdminDeleteTitleResponse:
      type: object
      properties:
        titleDeleted:
          type: boolean
      additionalProperties: false
    Services.CatenaTitles.AdminUpdateTitlePatchRequest:
      type: object
      properties:
        id:
          type: string
          description: game patch id
        gameTitleReleaseId:
          type: string
          description: game title release id
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaTitles.AdminUpdateTitlePatchResponse:
      type: object
      properties:
        id:
          type: string
          description: game patch id
        name:
          type: string
          description: game title name
      additionalProperties: false
    Services.CatenaTitles.AdminUpdateTitleReleaseRequest:
      type: object
      properties:
        id:
          type: string
          description: game title release id
        gameTitleId:
          type: string
          description: game title id
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
        platform:
          type: string
      additionalProperties: false
    Services.CatenaTitles.AdminUpdateTitleReleaseResponse:
      type: object
      properties:
        id:
          type: string
          description: game title release id
        name:
          type: string
          description: game title name
      additionalProperties: false
    Services.CatenaTitles.AdminUpdateTitleRequest:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      additionalProperties: false
    Services.CatenaTitles.AdminUpdateTitleResponse:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      additionalProperties: false
    Services.CatenaTitles.GameTitle:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      additionalProperties: false
    Services.CatenaTitles.GeneratePresignedUrlFromUriRequest:
      type: object
      properties:
        uri:
          type: string
      additionalProperties: false
    Services.CatenaTitles.GeneratePresignedUrlFromUriResponse:
      type: object
      properties:
        presignedHeadUrl:
          type: string
        presignedGetUrl:
          type: string
      additionalProperties: false
    Services.CatenaTitles.GeneratePresignedUrlRequest:
      type: object
      properties:
        objectKey:
          type: string
      additionalProperties: false
    Services.CatenaTitles.GeneratePresignedUrlResponse:
      type: object
      properties:
        presignedHeadUrl:
          type: string
        presignedGetUrl:
          type: string
      additionalProperties: false
    Services.CatenaTitles.GetTitleManifestResponse:
      type: object
      properties:
        titleName:
          type: string
        releases:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaTitles.TitleRelease'
      additionalProperties: false
    Services.CatenaTitles.GetTitlesResponse:
      type: object
      properties:
        titles:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaTitles.GameTitle'
      additionalProperties: false
    Services.CatenaTitles.TitlePatch:
      type: object
      properties:
        id:
          type: string
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
      additionalProperties: false
    Services.CatenaTitles.TitleRelease:
      type: object
      properties:
        id:
          type: string
        uri:
          type: string
        bytes:
          type: integer
          format: int64
        checksum:
          type: string
          description: StringValue allows for a field to be nullable
        checksumAlg:
          type: string
          description: StringValue allows for a field to be nullable
        patches:
          type: array
          items:
            $ref: '#/components/schemas/Services.CatenaTitles.TitlePatch'
        platform:
          type: string
      additionalProperties: false
    Services.PublicCommon.NullValue:
      enum:
        - NULL_VALUE
        - 0
      description: "Specific use case \"nullable\" types\r\nSimilar to well-known types but simplified (and fewer dependencies and less overhead and no Value/Struct!)\r\nCatena supports implicitly casting to/from from C# native nullable types\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': NullValue
    Services.PublicCommon.NullableBool:
      type: object
      properties:
        nullValue:
          $ref: '#/components/schemas/Services.PublicCommon.NullValue'
        value:
          type: boolean
      additionalProperties: false
    Services.PublicCommon.Platform:
      enum:
        - PLATFORM_UNSPECIFIED
        - PLATFORM_UNSAFE
        - PLATFORM_DISCORD
        - PLATFORM_GOOGLE
        - PLATFORM_APPLE
        - PLATFORM_TWITCH
        - PLATFORM_STEAM
        - PLATFORM_ITCH
        - PLATFORM_AMAZON
        - PLATFORM_EPIC
        - PLATFORM_OFFICE365
        - PLATFORM_CATENA
        - PLATFORM_CUSTOM
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
        - 98
        - 99
      description: "All Catena supported platforms.\r\nPrefer integer values in JSON-encoded requests to avoid generic parse errors due to typos."
      x-enumDescriptions:
        '0': Unspecified
        '1': Unsafe
        '2': Discord
        '3': Google
        '4': Apple
        '5': Twitch
        '6': Steam
        '7': Itch
        '8': Amazon
        '9': Epic
        '10': Office365
        '98': Catena
        '99': Custom
tags:
  - name: CatenaApiKeys
    description: CatenaApiKeys
  - name: CatenaAccounts
    description: CatenaAccounts
  - name: CatenaServerManager
    description: >-
      The server manager service portion of the integrated broker. This is what
      game servers interact with to handle matches.
  - name: CatenaAuthentication
    description: CatenaAuthentication
  - name: CatenaSessions
    description: "A service that can be used to probe the session store directly for development or diagnostics.\r\nNot intended for regular production use!"
  - name: CatenaTitles
    description: CatenaTitles
  - name: CatenaServerReleases
    description: CatenaServerManagement
  - name: CatenaPlatformAuth
    description: "A service for managing Catena-authoritative functionality with regards to validation and authentication.\r\nUsed by validators in the Authentication service that log the user into the Catena platform."
  - name: CatenaParties
    description: CatenaParties
  - name: CatenaNodeInspection
    description: A service that can be used inspect the Catena node.
  - name: CatenaNodeControl
    description: A service that can be used control the Catena node.
  - name: CatenaMatchBroker
    description: "An integrated match broker service which sits between the matchmaker, clients, and game servers/hosting to coordinate capacity and notify clients when servers are ready to accept connections.\r\nThis implementation integrates the broker and capacity/server manager roles."
  - name: CatenaFriends
    description: CatenaFriends
  - name: Events
    description: Events
