The Things Stack Identity Server

User, organization, OAuth client, API key, session, invitation, bookmark, notification, contact-info, and entity-search APIs. The Identity Server is the single source of truth for identity, access, and entity membership across the Things Stack.

The Things Stack Identity Server is one of 9 APIs that The Things Network / The Things Stack publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 3 JSON Schema definitions.

Tagged areas include Identity, OAuth, Users, Organizations, and Multi-Tenancy. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, 1 Naftiko capability spec, and 3 JSON Schemas.

OpenAPI Specification

the-things-stack-identity-server-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: The Things Stack — Identity Server
  version: v3.36
  description: The Things Stack is an open-source LoRaWAN Network Server implementation. This OpenAPI was derived from the
    upstream gRPC-Gateway generated api.swagger.json published by TheThingsNetwork/lorawan-stack v3.36.
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  contact:
    name: The Things Industries
    url: https://www.thethingsindustries.com
host: eu1.cloud.thethings.industries
basePath: /api/v3
schemes:
- https
consumes:
- application/json
produces:
- application/json
securityDefinitions:
  ApiKeyAuth:
    type: apiKey
    in: header
    name: Authorization
    description: 'Bearer API key. Set Authorization: Bearer NNSXS.xxxxxxxxxx.'
security:
- ApiKeyAuth: []
tags:
- name: UserRegistry
- name: UserAccess
- name: UserInvitationRegistry
- name: UserSessionRegistry
- name: UserBookmarkRegistry
- name: OrganizationRegistry
- name: OrganizationAccess
- name: ClientRegistry
- name: ClientAccess
- name: OAuthAuthorizationRegistry
- name: ContactInfoRegistry
- name: EmailValidationRegistry
- name: EntityAccess
- name: EntityRegistrySearch
- name: EndDeviceRegistrySearch
- name: Is
- name: Configuration
- name: NotificationService
paths:
  /applications/{application_ids.application_id}/collaborators/search:
    get:
      summary: Search for accounts that match the conditions specified in the request.
      operationId: EntityRegistrySearch_SearchAccounts2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3SearchAccountsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: query
        in: query
        required: false
        type: string
      - name: only_users
        in: query
        required: false
        type: boolean
      - name: client_ids.client_id
        in: query
        required: false
        type: string
      - name: gateway_ids.gateway_id
        in: query
        required: false
        type: string
      - name: gateway_ids.eui
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
        format: string
      - name: organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: query
        required: false
        type: string
      - name: complement_collaborators
        in: query
        required: false
        type: boolean
      tags:
      - EntityRegistrySearch
  /auth_info:
    get:
      summary: AuthInfo returns information about the authentication that is used on the request.
      operationId: EntityAccess_AuthInfo
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3AuthInfoResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      tags:
      - EntityAccess
  /clients:
    get:
      summary: 'List OAuth clients where the given user or organization is a direct collaborator.

        If no user or organization is given, this returns the OAuth clients the caller

        has access to.

        Similar to Get, this selects the fields specified in the field mask.

        More or less fields may be returned, depending on the rights of the caller.'
      operationId: ClientRegistry_List
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Clients'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: collaborator.organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: query
        required: false
        type: string
      - name: collaborator.user_ids.user_id
        description: This ID shares namespace with organization IDs.
        in: query
        required: false
        type: string
      - name: collaborator.user_ids.email
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
      - name: field_mask
        description: The names of the client fields that should be returned.
        in: query
        required: false
        type: string
      - name: order
        description: 'Order the results by this field path (must be present in the field mask).

          Default ordering is by ID. Prepend with a minus (-) to reverse the order.'
        in: query
        required: false
        type: string
      - name: limit
        description: Limit the number of results per page.
        in: query
        required: false
        type: integer
        format: int64
      - name: page
        description: Page number for pagination. 0 is interpreted as 1.
        in: query
        required: false
        type: integer
        format: int64
      - name: deleted
        description: Only return recently deleted clients.
        in: query
        required: false
        type: boolean
      tags:
      - ClientRegistry
  /clients/{client.ids.client_id}:
    put:
      summary: Update the OAuth client, changing the fields specified by the field mask to the provided values.
      operationId: ClientRegistry_Update
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Client'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client.ids.client_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3ClientRegistryUpdateBody'
      tags:
      - ClientRegistry
  /clients/{client_ids.client_id}:
    get:
      summary: 'Get the OAuth client with the given identifiers, selecting the fields specified

        in the field mask.

        More or less fields may be returned, depending on the rights of the caller.'
      operationId: ClientRegistry_Get
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Client'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: field_mask
        description: The names of the client fields that should be returned.
        in: query
        required: false
        type: string
      tags:
      - ClientRegistry
  /clients/{client_ids.client_id}/collaborator/organization/{collaborator.organization_ids.organization_id}:
    get:
      summary: 'Get the rights of a collaborator (member) of the client.

        Pseudo-rights in the response (such as the "_ALL" right) are not expanded.'
      operationId: ClientAccess_GetCollaborator2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetCollaboratorResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: collaborator.organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: path
        required: true
        type: string
      - name: collaborator.user_ids.user_id
        description: This ID shares namespace with organization IDs.
        in: query
        required: false
        type: string
      - name: collaborator.user_ids.email
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
      tags:
      - ClientAccess
  /clients/{client_ids.client_id}/collaborator/user/{collaborator.user_ids.user_id}:
    get:
      summary: 'Get the rights of a collaborator (member) of the client.

        Pseudo-rights in the response (such as the "_ALL" right) are not expanded.'
      operationId: ClientAccess_GetCollaborator
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetCollaboratorResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: collaborator.user_ids.user_id
        description: This ID shares namespace with organization IDs.
        in: path
        required: true
        type: string
      - name: collaborator.organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: query
        required: false
        type: string
      - name: collaborator.user_ids.email
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
      tags:
      - ClientAccess
  /clients/{client_ids.client_id}/collaborators:
    get:
      summary: List the collaborators on this OAuth client.
      operationId: ClientAccess_ListCollaborators
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Collaborators'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: limit
        description: Limit the number of results per page.
        in: query
        required: false
        type: integer
        format: int64
      - name: page
        description: Page number for pagination. 0 is interpreted as 1.
        in: query
        required: false
        type: integer
        format: int64
      - name: order
        description: 'Order the results by this field path (must be present in the field mask).

          Default ordering is by ID. Prepend with a minus (-) to reverse the order.'
        in: query
        required: false
        type: string
      tags:
      - ClientAccess
    put:
      summary: 'Set the rights of a collaborator (member) on the OAuth client.

        This method can also be used to delete the collaborator, by giving them no rights.

        The caller is required to have all assigned or/and removed rights.'
      operationId: ClientAccess_SetCollaborator
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3ClientAccessSetCollaboratorBody'
      tags:
      - ClientAccess
  /clients/{client_ids.client_id}/collaborators/organization/{collaborator_ids.organization_ids.organization_id}:
    delete:
      summary: DeleteCollaborator removes a collaborator from a client.
      operationId: ClientAccess_DeleteCollaborator2
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: collaborator_ids.organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: path
        required: true
        type: string
      - name: collaborator_ids.user_ids.user_id
        description: This ID shares namespace with organization IDs.
        in: query
        required: false
        type: string
      - name: collaborator_ids.user_ids.email
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
      tags:
      - ClientAccess
  /clients/{client_ids.client_id}/collaborators/search:
    get:
      summary: Search for accounts that match the conditions specified in the request.
      operationId: EntityRegistrySearch_SearchAccounts3
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3SearchAccountsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: query
        in: query
        required: false
        type: string
      - name: only_users
        in: query
        required: false
        type: boolean
      - name: application_ids.application_id
        in: query
        required: false
        type: string
      - name: gateway_ids.gateway_id
        in: query
        required: false
        type: string
      - name: gateway_ids.eui
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
        format: string
      - name: organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: query
        required: false
        type: string
      - name: complement_collaborators
        in: query
        required: false
        type: boolean
      tags:
      - EntityRegistrySearch
  /clients/{client_ids.client_id}/collaborators/user/{collaborator_ids.user_ids.user_id}:
    delete:
      summary: DeleteCollaborator removes a collaborator from a client.
      operationId: ClientAccess_DeleteCollaborator
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_ids.client_id
        in: path
        required: true
        type: string
      - name: collaborator_ids.user_ids.user_id
        description: This ID shares namespace with organization IDs.
        in: path
        required: true
        type: string
      - name: collaborator_ids.organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: query
        required: false
        type: string
      - name: collaborator_ids.user_ids.email
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
      tags:
      - ClientAccess
  /clients/{client_id}:
    delete:
      summary: Delete the OAuth client. This may not release the client ID for reuse.
      operationId: ClientRegistry_Delete
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_id
        in: path
        required: true
        type: string
      tags:
      - ClientRegistry
  /clients/{client_id}/purge:
    delete:
      summary: Purge the client. This will release the client ID for reuse.
      operationId: ClientRegistry_Purge
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_id
        in: path
        required: true
        type: string
      tags:
      - ClientRegistry
  /clients/{client_id}/restore:
    post:
      summary: Restore a recently deleted client.
      description: 'Deployment configuration may specify if, and for how long after deletion,

        entities can be restored.'
      operationId: ClientRegistry_Restore
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_id
        in: path
        required: true
        type: string
      tags:
      - ClientRegistry
  /clients/{client_id}/rights:
    get:
      summary: List the rights the caller has on this application.
      operationId: ClientAccess_ListRights
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Rights'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: client_id
        in: path
        required: true
        type: string
      tags:
      - ClientAccess
  /configuration/bands:
    get:
      operationId: Configuration_ListBands
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ListBandsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: band_id
        description: 'Optional Band ID to filter the results.

          If unused, all supported Bands are returned.'
        in: query
        required: false
        type: string
      - name: phy_version
        description: 'Optional PHY version to filter the results.

          If unused, all supported versions are returned.'
        in: query
        required: false
        type: string
        enum:
        - PHY_UNKNOWN
        - PHY_V1_0
        - TS001_V1_0
        - PHY_V1_0_1
        - TS001_V1_0_1
        - PHY_V1_0_2_REV_A
        - RP001_V1_0_2
        - PHY_V1_0_2_REV_B
        - RP001_V1_0_2_REV_B
        - PHY_V1_1_REV_A
        - RP001_V1_1_REV_A
        - PHY_V1_1_REV_B
        - RP001_V1_1_REV_B
        - PHY_V1_0_3_REV_A
        - RP001_V1_0_3_REV_A
        - RP002_V1_0_0
        - RP002_V1_0_1
        - RP002_V1_0_2
        - RP002_V1_0_3
        - RP002_V1_0_4
        default: PHY_UNKNOWN
      tags:
      - Configuration
  /configuration/bands/{band_id}:
    get:
      operationId: Configuration_ListBands2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ListBandsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: band_id
        description: 'Optional Band ID to filter the results.

          If unused, all supported Bands are returned.'
        in: path
        required: true
        type: string
      - name: phy_version
        description: 'Optional PHY version to filter the results.

          If unused, all supported versions are returned.'
        in: query
        required: false
        type: string
        enum:
        - PHY_UNKNOWN
        - PHY_V1_0
        - TS001_V1_0
        - PHY_V1_0_1
        - TS001_V1_0_1
        - PHY_V1_0_2_REV_A
        - RP001_V1_0_2
        - PHY_V1_0_2_REV_B
        - RP001_V1_0_2_REV_B
        - PHY_V1_1_REV_A
        - RP001_V1_1_REV_A
        - PHY_V1_1_REV_B
        - RP001_V1_1_REV_B
        - PHY_V1_0_3_REV_A
        - RP001_V1_0_3_REV_A
        - RP002_V1_0_0
        - RP002_V1_0_1
        - RP002_V1_0_2
        - RP002_V1_0_3
        - RP002_V1_0_4
        default: PHY_UNKNOWN
      tags:
      - Configuration
  /configuration/bands/{band_id}/{phy_version}:
    get:
      operationId: Configuration_ListBands3
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ListBandsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: band_id
        description: 'Optional Band ID to filter the results.

          If unused, all supported Bands are returned.'
        in: path
        required: true
        type: string
      - name: phy_version
        description: 'Optional PHY version to filter the results.

          If unused, all supported versions are returned.'
        in: path
        required: true
        type: string
        enum:
        - PHY_UNKNOWN
        - PHY_V1_0
        - TS001_V1_0
        - PHY_V1_0_1
        - TS001_V1_0_1
        - PHY_V1_0_2_REV_A
        - RP001_V1_0_2
        - PHY_V1_0_2_REV_B
        - RP001_V1_0_2_REV_B
        - PHY_V1_1_REV_A
        - RP001_V1_1_REV_A
        - PHY_V1_1_REV_B
        - RP001_V1_1_REV_B
        - PHY_V1_0_3_REV_A
        - RP001_V1_0_3_REV_A
        - RP002_V1_0_0
        - RP002_V1_0_1
        - RP002_V1_0_2
        - RP002_V1_0_3
        - RP002_V1_0_4
      tags:
      - Configuration
  /configuration/frequency-plans:
    get:
      operationId: Configuration_ListFrequencyPlans
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ListFrequencyPlansResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: base_frequency
        description: Optional base frequency in MHz for hardware support (433, 470, 868 or 915)
        in: query
        required: false
        type: integer
        format: int64
      - name: band_id
        description: Optional Band ID to filter the results.
        in: query
        required: false
        type: string
      - name: gateways_only
        description: Optional field to include only gateway related results.
        in: query
        required: false
        type: boolean
      tags:
      - Configuration
  /configuration/phy-versions:
    get:
      summary: Returns a list of supported LoRaWAN PHY Versions for the given Band ID.
      operationId: Configuration_GetPhyVersions
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetPhyVersionsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: band_id
        description: 'Optional Band ID to filter the results.

          If unused, all supported Bands and their versions are returned.'
        in: query
        required: false
        type: string
      tags:
      - Configuration
  /contact_info/validation:
    post:
      summary: Request validation for the non-validated contact info for the given entity.
      operationId: ContactInfoRegistry_RequestValidation
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lorawanv3ContactInfoValidation'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: body
        description: EntityIdentifiers contains one of the possible entity identifiers.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3EntityIdentifiers'
      tags:
      - ContactInfoRegistry
    patch:
      summary: Validate confirms a contact info validation.
      operationId: ContactInfoRegistry_Validate
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/lorawanv3ContactInfoValidation'
      tags:
      - ContactInfoRegistry
  /email/validation:
    post:
      summary: Request validation for the non-validated contact info for the given entity.
      operationId: EmailValidationRegistry_RequestValidation
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3EmailValidation'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3UserIdentifiers'
      tags:
      - EmailValidationRegistry
    patch:
      summary: Validate confirms a contact info validation.
      operationId: EmailValidationRegistry_Validate
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3ValidateEmailRequest'
      tags:
      - EmailValidationRegistry
  /gateways/{gateway_ids.gateway_id}/collaborators/search:
    get:
      summary: Search for accounts that match the conditions specified in the request.
      operationId: EntityRegistrySearch_SearchAccounts4
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3SearchAccountsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: gateway_ids.gateway_id
        in: path
        required: true
        type: string
      - name: query
        in: query
        required: false
        type: string
      - name: only_users
        in: query
        required: false
        type: boolean
      - name: application_ids.application_id
        in: query
        required: false
        type: string
      - name: client_ids.client_id
        in: query
        required: false
        type: string
      - name: gateway_ids.eui
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
        format: string
      - name: organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: query
        required: false
        type: string
      - name: complement_collaborators
        in: query
        required: false
        type: boolean
      tags:
      - EntityRegistrySearch
  /invitations:
    get:
      summary: List the invitations the caller has sent.
      operationId: UserInvitationRegistry_List
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Invitations'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: limit
        description: Limit the number of results per page.
        in: query
        required: false
        type: integer
        format: int64
      - name: page
        description: Page number for pagination. 0 is interpreted as 1.
        in: query
        required: false
        type: integer
        format: int64
      tags:
      - UserInvitationRegistry
    delete:
      summary: Delete (revoke) a user invitation.
      operationId: UserInvitationRegistry_Delete
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: email
        in: query
        required: false
        type: string
      tags:
      - UserInvitationRegistry
    post:
      summary: Invite a user to join the network.
      operationId: UserInvitationRegistry_Send
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lorawanv3Invitation'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3SendInvitationRequest'
      tags:
      - UserInvitationRegistry
  /is/configuration:
    get:
      summary: 'Get the configuration of the Identity Server. The response is typically used

        to enable or disable features in a user interface.'
      operationId: Is_GetConfiguration
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetIsConfigurationResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      tags:
      - Is
  /organizations:
    get:
      summary: 'List organizations where the given user or organization is a direct collaborator.

        If no user or organization is given, this returns the organizations the caller

        has access to.

        Similar to Get, this selects the fields given by the field mask.

        More or less fields may be returned, depending on the rights of the caller.'
      operationId: OrganizationRegistry_List
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Organizations'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: collaborator.organization_ids.organization_id
        description: This ID shares namespace with user IDs.
        in: query
        required: false
        type: string
      - name: collaborator.user_ids.user_id
        description: This ID shares namespace with organization IDs.
        in: query
        required: false
        type: string
      - name: collaborator.user_ids.email
        description: Secondary identifier, which can only be used in specific requests.
        in: query
        required: false
        type: string
      - name: field_mask
        description: The names of the organization fields that should be returned.
        in: query
        required: false
        type: string
      - name: order
        description: 'Order the results by this field path (must be present in the field mask).

          Default ordering is by ID. Prepend with a minus (-) to reverse the order.'
        in: query
        required: false
        type: string
      - name: limit
        description: Limit the number of results per page.
        in: query
        required: false
        type: integer
        format: int64
      - name: page
        description: Page number for pagination. 0 is interpreted as 1.
        in: query
        required: false
        type: integer
        format: i

# --- truncated at 32 KB (300 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/the-things-network/refs/heads/main/openapi/the-things-stack-identity-server-openapi.yml