The Things Stack Network Server

NS-side end-device MAC state, ADR, MAC settings profiles, and the v1.1 LoRaWAN Relay configuration service (CtrlUplinkList, UpdateUplinkList, RelayForwardDownlinkReq). Handles deduplication, frame counter tracking, and gateway scheduling.

The Things Stack Network 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.

Tagged areas include Network Server, LoRaWAN MAC, ADR, MAC Settings, and Relay. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

the-things-stack-network-server-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: The Things Stack — Network 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: Ns
- name: NsMACSettingsProfileRegistry
- name: NsRelayConfigurationService
- name: NsEndDeviceRegistry
- name: NsEndDeviceBatchRegistry
paths:
  /ns/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: NsEndDeviceBatchRegistry_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:
      - NsEndDeviceBatchRegistry
  /ns/applications/{application_ids.application_id}/devices/mac_settings_profile/batch:
    post:
      summary: Set the MAC settings profile for a batch of end devices.
      operationId: NsEndDeviceBatchRegistry_SetMACSettingsProfile
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3EndDevices'
        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/NsEndDeviceBatchRegistrySetMACSettingsProfileBody'
      tags:
      - NsEndDeviceBatchRegistry
  /ns/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: NsEndDeviceRegistry_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:
      - NsEndDeviceRegistry
  /ns/applications/{application_ids.application_id}/mac_settings_profiles:
    get:
      summary: List lists the MAC settings profiles.
      operationId: NsMACSettingsProfileRegistry_List
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ListMACSettingsProfilesResponse'
        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 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
      tags:
      - NsMACSettingsProfileRegistry
  /ns/applications/{end_device.ids.application_ids.application_id}/devices:
    post:
      summary: Set creates or updates the device.
      operationId: NsEndDeviceRegistry_Set2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3EndDevice'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device.ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3NsEndDeviceRegistrySetBody'
      tags:
      - NsEndDeviceRegistry
  /ns/applications/{end_device.ids.application_ids.application_id}/devices/{end_device.ids.device_id}:
    put:
      summary: Set creates or updates the device.
      operationId: NsEndDeviceRegistry_Set
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3EndDevice'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device.ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device.ids.device_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3NsEndDeviceRegistrySetBody'
      tags:
      - NsEndDeviceRegistry
  /ns/applications/{end_device_ids.application_ids.application_id}/devices/{end_device_ids.device_id}:
    get:
      summary: 'Get returns the device that matches the given identifiers.

        If there are multiple matches, an error will be returned.'
      operationId: NsEndDeviceRegistry_Get
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3EndDevice'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        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: field_mask
        description: 'The names of the end device fields that should be returned.

          See the API reference for which fields can be returned by the different services.'
        in: query
        required: false
        type: string
      tags:
      - NsEndDeviceRegistry
    patch:
      summary: ResetFactoryDefaults resets device state to factory defaults.
      operationId: NsEndDeviceRegistry_ResetFactoryDefaults
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3EndDevice'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/NsEndDeviceRegistryResetFactoryDefaultsBody'
      tags:
      - NsEndDeviceRegistry
  /ns/applications/{end_device_ids.application_ids.application_id}/relays:
    post:
      summary: Create a relay.
      operationId: NsRelayConfigurationService_CreateRelay
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3CreateRelayResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/NsRelayConfigurationServiceCreateRelayBody'
      tags:
      - NsRelayConfigurationService
  /ns/applications/{end_device_ids.application_ids.application_id}/relays/{end_device_ids.device_id}:
    get:
      summary: Get a relay.
      operationId: NsRelayConfigurationService_GetRelay
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetRelayResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        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: field_mask
        description: Field mask of the fields to return.
        in: query
        required: false
        type: string
      tags:
      - NsRelayConfigurationService
    delete:
      summary: Delete a relay.
      operationId: NsRelayConfigurationService_DeleteRelay
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3DeleteRelayResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        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
      tags:
      - NsRelayConfigurationService
    put:
      summary: Update a relay.
      operationId: NsRelayConfigurationService_UpdateRelay
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3UpdateRelayResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/NsRelayConfigurationServiceUpdateRelayBody'
      tags:
      - NsRelayConfigurationService
  /ns/applications/{end_device_ids.application_ids.application_id}/relays/{end_device_ids.device_id}/uplink-forwarding-rules:
    get:
      summary: List uplink forwarding rules.
      operationId: NsRelayConfigurationService_ListRelayUplinkForwardingRules
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3ListRelayUplinkForwardingRulesResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        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: field_mask
        description: Field mask of the fields to return.
        in: query
        required: false
        type: string
      tags:
      - NsRelayConfigurationService
    post:
      summary: Create an uplink forwarding rule.
      operationId: NsRelayConfigurationService_CreateRelayUplinkForwardingRule
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3CreateRelayUplinkForwardingRuleResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/NsRelayConfigurationServiceCreateRelayUplinkForwardingRuleBody'
      tags:
      - NsRelayConfigurationService
  ? /ns/applications/{end_device_ids.application_ids.application_id}/relays/{end_device_ids.device_id}/uplink-forwarding-rules/{index}
  : get:
      summary: Get an uplink forwarding rule.
      operationId: NsRelayConfigurationService_GetRelayUplinkForwardingRule
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetRelayUplinkForwardingRuleResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        type: string
      - name: index
        description: Index of the uplink forwarding rule.
        in: path
        required: true
        type: integer
        format: int64
      - 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: field_mask
        description: Field mask of the fields to return.
        in: query
        required: false
        type: string
      tags:
      - NsRelayConfigurationService
    delete:
      summary: Delete an uplink forwarding rule.
      operationId: NsRelayConfigurationService_DeleteRelayUplinkForwardingRule
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3DeleteRelayUplinkForwardingRuleResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        type: string
      - name: index
        description: Index of the uplink forwarding rule.
        in: path
        required: true
        type: integer
        format: int64
      - 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
      tags:
      - NsRelayConfigurationService
    put:
      summary: Update an uplink forwarding rule.
      operationId: NsRelayConfigurationService_UpdateRelayUplinkForwardingRule
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3UpdateRelayUplinkForwardingRuleResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: end_device_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: end_device_ids.device_id
        in: path
        required: true
        type: string
      - name: index
        description: Index of the uplink forwarding rule.
        in: path
        required: true
        type: integer
        format: int64
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/NsRelayConfigurationServiceUpdateRelayUplinkForwardingRuleBody'
      tags:
      - NsRelayConfigurationService
  /ns/applications/{mac_settings_profile.ids.application_ids.application_id}/mac_settings_profiles:
    post:
      summary: Create creates a new MAC settings profile.
      operationId: NsMACSettingsProfileRegistry_Create
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3CreateMACSettingsProfileResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: mac_settings_profile.ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3NsMACSettingsProfileRegistryCreateBody'
      tags:
      - NsMACSettingsProfileRegistry
  ? /ns/applications/{mac_settings_profile_ids.application_ids.application_id}/mac_settings_profiles/{mac_settings_profile_ids.profile_id}
  : get:
      summary: Get returns the MAC settings profile that matches the given identifiers.
      operationId: NsMACSettingsProfileRegistry_Get
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetMACSettingsProfileResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: mac_settings_profile_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: mac_settings_profile_ids.profile_id
        description: Profile ID.
        in: path
        required: true
        type: string
      - name: field_mask
        description: The names of the fields that should be returned.
        in: query
        required: false
        type: string
      tags:
      - NsMACSettingsProfileRegistry
    delete:
      summary: Delete deletes the MAC settings profile that matches the given identifiers.
      operationId: NsMACSettingsProfileRegistry_Delete
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3DeleteMACSettingsProfileResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: mac_settings_profile_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: mac_settings_profile_ids.profile_id
        description: Profile ID.
        in: path
        required: true
        type: string
      tags:
      - NsMACSettingsProfileRegistry
    put:
      summary: Update updates the MAC settings profile that matches the given identifiers.
      operationId: NsMACSettingsProfileRegistry_Update
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3UpdateMACSettingsProfileResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: mac_settings_profile_ids.application_ids.application_id
        in: path
        required: true
        type: string
      - name: mac_settings_profile_ids.profile_id
        description: Profile ID.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/v3NsMACSettingsProfileRegistryUpdateBody'
      tags:
      - NsMACSettingsProfileRegistry
  /ns/default_mac_settings/{frequency_plan_id}/{lorawan_phy_version}:
    get:
      summary: GetDefaultMACSettings retrieves the default MAC settings for a frequency plan.
      operationId: Ns_GetDefaultMACSettings
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3MACSettings'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      parameters:
      - name: frequency_plan_id
        in: path
        required: true
        type: string
      - name: lorawan_phy_version
        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:
      - Ns
  /ns/dev_addr:
    get:
      summary: GenerateDevAddr requests a device address assignment from the Network Server.
      operationId: Ns_GenerateDevAddr
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GenerateDevAddrResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      tags:
      - Ns
  /ns/dev_addr_prefixes:
    get:
      operationId: Ns_GetDeviceAddressPrefixes
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetDeviceAdressPrefixesResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      tags:
      - Ns
  /ns/net_id:
    get:
      operationId: Ns_GetNetID
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v3GetNetIDResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/googlerpcStatus'
      tags:
      - Ns
definitions:
  ADRSettingsDynamicMode:
    type: object
    properties:
      margin:
        type: number
        format: float
        description: 'The ADR margin (dB) tells the network server how much margin it should add in ADR requests.

          A bigger margin is less efficient, but gives a better chance of successful reception.

          If unset, the default value from Network Server configuration will be used.'
      min_data_rate_index:
        $ref: '#/definitions/v3DataRateIndexValue'
        description: 'Minimum data rate index.

          If unset, the default value from Network Server configuration will be used.'
      max_data_rate_index:
        $ref: '#/definitions/v3DataRateIndexValue'
        description: 'Maximum data rate index.

          If unset, the default value from Network Server configuration will be used.'
      min_tx_power_index:
        type: integer
        format: int64
        description: 'Minimum transmission power index.

          If unset, the default value from Network Server configuration will be used.'
      max_tx_power_index:
        type: integer
        format: int64
        description: 'Maximum transmission power index.

          If unset, the default value from Network Server configuration will be used.'
      min_nb_trans:
        type: integer
        format: int64
        description: 'Minimum number of retransmissions.

          If unset, the default value from Network Server configuration will be used.'
      max_nb_trans:
        type: integer
        format: int64
        description: 'Maximum number of retransmissions.

          If unset, the default value from Network Server configuration will be used.'
      channel_steering:
        $ref: '#/definitions/DynamicModeChannelSteeringSettings'
      overrides:
        $ref: '#/definitions/DynamicModeOverrides'
    description: Configuration options for dynamic ADR.
  ADRSettingsStaticMode:
    type: object
    properties:
      data_rate_index:
        $ref: '#/definitions/v3DataRateIndex'
        description: Data rate index to use.
      tx_power_index:
        type: integer
        format: int64
        description: Transmission power index to use.
      nb_trans:
        type: integer
        format: int64
        description: Number of retransmissions.
    description: Configuration options for static ADR.
  ApplicationDownlinkClassBC:
    type: object
    properties:
      gateways:
        type: array
        items:
          type: object
          $ref: '#/definitions/v3ClassBCGatewayIdentifiers'
        description: 'Possible gateway identifiers, antenna index, and group index to use for this downlink message.

          The Network Server selects one of these gateways for downlink, based on connectivity, signal quality, channel utilization
          and an available slot.

          If none of the gateways can be selected, the downlink message fails.

          If empty, a gateway and antenna is selected automatically from the gateways seen in recent uplinks.

          If group index is set, gateways will be grouped by the index for the Network Server to select one gateway per group.'
      absolute_time:
        type: string
        format: date-time
        description: 'Absolute time when the downlink message should be transmitted.

          This requires the gateway to have GPS time synchronization.

          If the time is in the past or if there is a scheduling conflict, the downlink message fails.

          If null, the time is selected based on slot availability. This is recommended in class B mode.'
  ApplicationDownlinkConfirmedRetry:
    type: object
    properties:
      attempt:
        type: integer
        format: int64
        description: The number of attempted confirmed downlink acknowledgements.
      max_attempts:
        type: integer
        format: int64
        description: 'The maximum number of confirmed downlink acknowledgement attempts.

          If null, the Application Server configuration is used instead.'
  ChannelSteeringSettingsLoRaNarrowMode:
    type: object
    description: 'Configuration options for LoRa narrow channels steering.

      The narrow mode attempts to steer the end device towards

      using the LoRa modulated, 125kHz bandwidth channels.'
  DownlinkMessageMessageMACPayload:
    type: object
    properties:
      f_port:
        type: integer
        format: int64
      full_f_cnt:
        type: integer
        format: int64
  DownlinkMessageMessageMHDR:
    type: object
    properties:
      m_type:
        $ref: '#/definitions/v3MType'
  DynamicModeChannelSteeringSettings:
    type: object
    properties:
      lora_narrow:
        $ref: '#/definitions/ChannelSteeringSettingsLoRaNarrowMode'
      disabled:
        $ref: '#/definitions/DynamicModeChannelSteeringSettingsDisabledMode'
    description: 'EXPERIMENTAL: Channel steering settings.'
  DynamicModeChannelSteeringSettingsDisabledMode:
    type: object
    description: 'Configuration options for cases in which ADR is not supposed to steer the end device

      to another set of channels.'
  DynamicModeOverrides:
    type: object
    properties:
      data_rate_0:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_1:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_2:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_3:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_4:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_5:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_6:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_7:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_rate_8:
        $ref: '#/definitions/DynamicModePerDataRateIndexOverride'
      data_

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