The Things Stack Application Server

Application registry, application access rights, AppAs uplink/downlink/queue APIs, AsEndDeviceRegistry, payload-formatter management, ApplicationUpStorage (storage integration), and ApplicationPackages (LoRa Cloud DAS/GNSS/Modem, multicast, etc.). Owns the application-level data path.

The Things Stack Application 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 1 JSON Schema definition.

Tagged areas include Application Server, LoRaWAN, Uplink, Downlink, and Payload Formatters. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, sample payloads, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

the-things-stack-application-server-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: The Things Stack — Application 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: ApplicationRegistry
- name: ApplicationAccess
- name: As
- name: AppAs
- name: ApplicationPackageRegistry
- name: ApplicationActivationSettingRegistry
- name: ApplicationUpStorage
- name: AsEndDeviceRegistry
- name: AsEndDeviceBatchRegistry
paths:
  /applications:
    get:
      summary: 'List applications where the given user or organization is a direct collaborator.

        If no user or organization is given, this returns the applications 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: ApplicationRegistry_List
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Applications'
        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 application 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 applications.
        in: query
        required: false
        type: boolean
      tags:
      - ApplicationRegistry
  /applications/{application.ids.application_id}:
    put:
      summary: Update the application, changing the fields specified by the field mask to the provided values.
      operationId: ApplicationRegistry_Update
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Application'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application.ids.application_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3ApplicationRegistryUpdateBody'
      tags:
      - ApplicationRegistry
  /applications/{application_ids.application_id}:
    get:
      summary: 'Get the application 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: ApplicationRegistry_Get
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Application'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: field_mask
        description: The names of the application fields that should be returned.
        in: query
        required: false
        type: string
      tags:
      - ApplicationRegistry
  /applications/{application_ids.application_id}/api-keys:
    get:
      summary: List the API keys for this application.
      operationId: ApplicationAccess_ListAPIKeys
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3APIKeys'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: order
        description: 'Order the results by this field path.

          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
      tags:
      - ApplicationAccess
    post:
      summary: Create an API key scoped to this application.
      operationId: ApplicationAccess_CreateAPIKey
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3APIKey'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3ApplicationAccessCreateAPIKeyBody'
      tags:
      - ApplicationAccess
  /applications/{application_ids.application_id}/api-keys/{api_key.id}:
    put:
      summary: 'Update the rights of an API key of the application.

        This method can also be used to delete the API key, by giving it no rights.

        The caller is required to have all assigned or/and removed rights.'
      operationId: ApplicationAccess_UpdateAPIKey
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3APIKey'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: api_key.id
        description: 'Immutable and unique public identifier for the API key.

          Generated by the Access Server.'
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3ApplicationAccessUpdateAPIKeyBody'
      tags:
      - ApplicationAccess
  /applications/{application_ids.application_id}/api-keys/{key_id}:
    get:
      summary: Get a single API key of this application.
      operationId: ApplicationAccess_GetAPIKey
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3APIKey'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: key_id
        description: Unique public identifier for the API key.
        in: path
        required: true
        type: string
      tags:
      - ApplicationAccess
    delete:
      summary: Delete a single API key of this application.
      operationId: ApplicationAccess_DeleteAPIKey
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: key_id
        in: path
        required: true
        type: string
      tags:
      - ApplicationAccess
  /applications/{application_ids.application_id}/collaborator/organization/{collaborator.organization_ids.organization_id}:
    get:
      summary: 'Get the rights of a collaborator (member) of the application.

        Pseudo-rights in the response (such as the "_ALL" right) are not expanded.'
      operationId: ApplicationAccess_GetCollaborator2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetCollaboratorResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_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:
      - ApplicationAccess
  ? /applications/{application_ids.application_id}/collaborator/organization/{collaborator_ids.organization_ids.organization_id}
  : delete:
      summary: DeleteCollaborator removes a collaborator from an application.
      operationId: ApplicationAccess_DeleteCollaborator2
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_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:
      - ApplicationAccess
  /applications/{application_ids.application_id}/collaborator/user/{collaborator.user_ids.user_id}:
    get:
      summary: 'Get the rights of a collaborator (member) of the application.

        Pseudo-rights in the response (such as the "_ALL" right) are not expanded.'
      operationId: ApplicationAccess_GetCollaborator
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetCollaboratorResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_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:
      - ApplicationAccess
  /applications/{application_ids.application_id}/collaborator/user/{collaborator_ids.user_ids.user_id}:
    delete:
      summary: DeleteCollaborator removes a collaborator from an application.
      operationId: ApplicationAccess_DeleteCollaborator
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_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:
      - ApplicationAccess
  /applications/{application_ids.application_id}/collaborators:
    get:
      summary: List the collaborators on this application.
      operationId: ApplicationAccess_ListCollaborators
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Collaborators'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_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:
      - ApplicationAccess
    put:
      summary: 'Set the rights of a collaborator (member) on the application.

        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: ApplicationAccess_SetCollaborator
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3ApplicationAccessSetCollaboratorBody'
      tags:
      - ApplicationAccess
  /applications/{application_id}:
    delete:
      summary: 'Delete the application. This may not release the application ID for reuse.

        All end devices must be deleted from the application before it can be deleted.'
      operationId: ApplicationRegistry_Delete
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_id
        in: path
        required: true
        type: string
      tags:
      - ApplicationRegistry
  /applications/{application_id}/dev-eui:
    post:
      summary: 'Request DevEUI from the configured address block for a device inside the application.

        The maximum number of DevEUI''s issued per application can be configured.'
      operationId: ApplicationRegistry_IssueDevEUI
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3IssueDevEUIResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_id
        in: path
        required: true
        type: string
      tags:
      - ApplicationRegistry
  /applications/{application_id}/purge:
    delete:
      summary: 'Purge the application. This will release the application ID for reuse.

        All end devices must be deleted from the application before it can be deleted.

        The application owner is responsible for clearing data from any (external) integrations

        that may store and expose data by application ID'
      operationId: ApplicationRegistry_Purge
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_id
        in: path
        required: true
        type: string
      tags:
      - ApplicationRegistry
  /applications/{application_id}/restore:
    post:
      summary: Restore a recently deleted application.
      description: 'Deployment configuration may specify if, and for how long after deletion,

        entities can be restored.'
      operationId: ApplicationRegistry_Restore
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_id
        in: path
        required: true
        type: string
      tags:
      - ApplicationRegistry
  /applications/{application_id}/rights:
    get:
      summary: List the rights the caller has on this application.
      operationId: ApplicationAccess_ListRights
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3Rights'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_id
        in: path
        required: true
        type: string
      tags:
      - ApplicationAccess
  /as/applications/{application_ids.application_id}/devices/batch:
    delete:
      summary: 'Delete a list of devices within the same application.

        This operation is atomic; either all devices are deleted or none.

        Devices not found are skipped and no error is returned.'
      operationId: AsEndDeviceBatchRegistry_Delete
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: device_ids
        in: query
        required: false
        type: array
        items:
          type: string
        collectionFormat: multi
      tags:
      - AsEndDeviceBatchRegistry
  /as/applications/{application_ids.application_id}/devices/{device_id}:
    delete:
      summary: 'Delete deletes the device that matches the given identifiers.

        If there are multiple matches, an error will be returned.'
      operationId: AsEndDeviceRegistry_Delete
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: device_id
        in: path
        required: true
        type: string
      - name: dev_eui
        description: The LoRaWAN DevEUI.
        in: query
        required: false
        type: string
        format: string
      - name: join_eui
        description: The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).
        in: query
        required: false
        type: string
        format: string
      - name: dev_addr
        description: The LoRaWAN DevAddr.
        in: query
        required: false
        type: string
        format: string
      tags:
      - AsEndDeviceRegistry
  /as/applications/{application_ids.application_id}/devices/{device_id}/down:
    get:
      summary: List the items currently in the downlink queue.
      operationId: AppAs_DownlinkQueueList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ApplicationDownlinks'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: device_id
        in: path
        required: true
        type: string
      - name: dev_eui
        description: The LoRaWAN DevEUI.
        in: query
        required: false
        type: string
        format: string
      - name: join_eui
        description: The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).
        in: query
        required: false
        type: string
        format: string
      - name: dev_addr
        description: The LoRaWAN DevAddr.
        in: query
        required: false
        type: string
        format: string
      tags:
      - AppAs
  /as/applications/{application_ids.application_id}/devices/{device_id}/packages:
    get:
      summary: List returns the available packages for the end device.
      operationId: ApplicationPackageRegistry_List
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ApplicationPackages'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: device_id
        in: path
        required: true
        type: string
      - name: dev_eui
        description: The LoRaWAN DevEUI.
        in: query
        required: false
        type: string
        format: string
      - name: join_eui
        description: The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).
        in: query
        required: false
        type: string
        format: string
      - name: dev_addr
        description: The LoRaWAN DevAddr.
        in: query
        required: false
        type: string
        format: string
      tags:
      - ApplicationPackageRegistry
  /as/applications/{application_ids.application_id}/link:
    get:
      summary: 'Get a link configuration from the Application Server to Network Server.

        This only contains the configuration. Use GetLinkStats to view statistics and any link errors.'
      operationId: As_GetLink
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ApplicationLink'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: field_mask
        in: query
        required: false
        type: string
      tags:
      - As
    put:
      summary: 'Set a link configuration from the Application Server a Network Server.

        This call returns immediately after setting the link configuration; it does not wait for a link to establish.

        To get link statistics or errors, use GetLinkStats.

        Note that there can only be one Application Server instance linked to a Network Server for a given application at
        a time.'
      operationId: As_SetLink
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ApplicationLink'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/AsSetLinkBody'
      tags:
      - As
  /as/applications/{application_ids.application_id}/packages/associations/{f_port}:
    delete:
      summary: DeleteDefaultAssociation removes the default association on the FPort of the application.
      operationId: ApplicationPackageRegistry_DeleteDefaultAssociation
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: f_port
        in: path
        required: true
        type: integer
        format: int64
      tags:
      - ApplicationPackageRegistry
  /as/applications/{application_ids.application_id}/packages/storage/{type}:
    get:
      summary: Returns a stream of application messages that have been stored in the database.
      operationId: ApplicationUpStorage_GetStoredApplicationUp2
      responses:
        '200':
          description: A successful response.(streaming responses)
          schema:
            type: object
            properties:
              result:
                $ref: '#/definitions/v3ApplicationUp'
              error:
                $ref: '#/definitions/googlerpcStatus'
            title: Stream result of v3ApplicationUp
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: type
        description: Query upstream messages of a specific type. If not set, then all upstream messages are returned.
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: query
        required: false
        type: string
      - name: end_device_ids.dev_eui
        description: The LoRaWAN DevEUI.
        in: query
        required: false
        type: string
        format: string
      - name: end_device_ids.join_eui
        description: The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).
        in: query
        required: false
        type: string
        format: string
      - name: end_device_ids.dev_addr
        description: The LoRaWAN DevAddr.
        in: query
        required: false
        type: string
        format: string
      - name: limit
        description: Limit number of results.
        in: query
        required: false
        type: integer
        format: int64
      - name: after
        description: Query upstream messages after this timestamp only. Cannot be used in conjunction with last.
        in: query
        required: false
        type: string
        format: date-time
      - name: before
        description: Query upstream messages before this timestamp only. Cannot be used in conjunction with last.
        in: query
        required: false
        type: string
        format: date-time
      - name: f_port
        description: Query uplinks on a specific FPort only.
        in: query
        required: false
        type: integer
        format: int64
      - name: order
        description: Order results.
        in: query
        required: false
        type: string
      - name: field_mask
        description: 'The names of the upstream message fields that should be returned. See the API reference

          for allowed field names for each type of upstream message.'
        in: query
        required: false
        type: string
      - name: last
        description: Query upstream messages that have arrived in the last minutes or hours. Cannot be used in conjunction
          with after and before.
        in: query
        required: false
        type: string
      - name: continuation_token
        description: The continuation token, which is used to retrieve the next page. If provided, other fields are ignored.
        in: query
        required: false
        type: string
      tags:
      - ApplicationUpStorage
  /as/applications/{application_ids.application_id}/packages/storage/{type}/count:
    get:
      summary: Returns how many application messages have been stored in the database for an application or end device.
      operationId: ApplicationUpStorage_GetStoredApplicationUpCount2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetStoredApplicationUpCountResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: application_ids.application_id
        in: path
        required: true
        type: string
      - name: type
        description: Count upstream messages of a specific type. If not set, then all upstream messages are returned.
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: query
        required: false
        type: string
      - name: end_device_ids.dev_eui
        description: The LoRaWAN DevEUI.
        in: query
        required: false
        type: string
        format: string
      - name: end_device_ids.join_eui
        description: The LoRaWAN JoinEUI (AppEUI until LoRaWAN 1.0.3 end devices).
        in: query
        required: false
        type: string
        format: string
      - name: end_device_ids.dev_addr
        description: The LoRaWAN DevAddr.
        in: query
        required: false
        type: string
        format

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