Events are generated by the ChirpStack Gateway Bridge and forwarded to the configured integration. Depending the marshaler configuration, these are sent as JSON or Protobuf. For the Protobuf definitions, please refer to gw.proto.

  • The Protocol Buffers JSON Mapping defines that bytes must be encoded as base64 strings. This also affects the gatewayID field. When re-encoding this filed to HEX encoding, you will find the expected gateway ID string.

stats - gateway statistics

Statistics reported by the gateway.


    "gatewayID": "cnb/AC4GLBg=",
    "ip": "",
    "time": "2018-07-26T13:36:31Z",
    "location": {                   // only set when gateway has GPS
        "latitude": 1.12345,
        "longitude": 2.12345,
        "altitude": 10,
        "source": "GPS",
    "configVersion": "1.2.3",       // maps to the 'Gateway configuration' message version
    "rxPacketsReceived": 4,
    "rxPacketsReceivedOK": 1,
    "txPacketsReceived": 0,
    "txPacketsEmitted": 1


This message is defined by the GatewayStats Protobuf message.

Uplink frame received by the gateway.


    "phyPayload": "AAEBAQEBAQEBAQEBAQEBAQGXFgzLPxI=",  // base64 encoded LoRaWAN frame
    "txInfo": {
        "frequency": 868300000,
        "modulation": "LORA",
        "loRaModulationInfo": {
            "bandwidth": 125,
            "spreadingFactor": 11,
            "codeRate": "4/5",
            "polarizationInversion": false
    "rxInfo": {
        "gatewayID": "cnb/AC4GLBg=",
        "time": "2018-07-26T15:15:58.599497Z",         // only set when the gateway has a GPS time source
        "timestamp": 58692860,                         // gateway internal timestamp (23 bit)
        "rssi": -55,
        "loRaSNR": 15,
        "channel": 2,
        "rfChain": 0,
        "board": 0,
        "antenna": 0,
        "fineTimestampType": "ENCRYPTED",
        "encryptedFineTimestamp": {
            "aesKeyIndex": 0,
            "encryptedNS": "d2YFe51PraE3EpnrZJV4aw=="  // encrypted nanosecond part of the time


This message is defined by the UplinkFrame Protobuf message.

Acknowledgement (or error) after a downlink command.

Possible error values are:

  • TOO_LATE: Rejected because it was already too late to program this packet for downlink
  • TOO_EARLY: Rejected because downlink packet timestamp is too much in advance
  • COLLISION_PACKET: Rejected because there was already a packet programmed in requested timeframe
  • COLLISION_BEACON: Rejected because there was already a beacon planned in requested timeframe
  • TX_FREQ: Rejected because requested frequency is not supported by TX RF chain
  • TX_POWER: Rejected because requested power is not supported by gateway
  • GPS_UNLOCKED: Rejected because GPS is unlocked, so GPS timestamp cannot be used


    "gatewayID": "cnb/AC4GLBg=",
    "token": 12345,
    "error": "GPS_UNLOCKED"


This message is defined by the DownlinkTXAck Protobuf message.

exec - Command execution response

The exec event is sent back after an exec command and contains the execution output (or possible error).


    "gatewayID": "cnb/AC4GLBg=",
    "token": "[BASE64 ENCODED BLOB]",
    "stdout": "[BASE64 ENCODED BLOB]",
    "stderr": "[BASE64 ENCODED BLOB]",
    "error": "optional error message"


This message is defined by the GatewayCommandExecResponse Protobuf message.