diff --git a/api/device_profile.pb.go b/api/device_profile.pb.go index fc7a5eb..2243c47 100644 --- a/api/device_profile.pb.go +++ b/api/device_profile.pb.go @@ -544,6 +544,14 @@ type DeviceProfile struct { // // If set to true, it means that the device is allowed to use roaming. AllowRoaming bool `protobuf:"varint,52,opt,name=allow_roaming,json=allowRoaming,proto3" json:"allow_roaming,omitempty"` + // RX1 Delay. + // + // This makes it possible to override the system RX1 Delay. Please note that + // this values only has effect in case it is higher than the system value. + // In other words, it can be used to increase the RX1 Delay but not to decrease + // it. + // Valid options are 1 - 15 (0 = always use system RX1 Delay). + Rx1Delay uint32 `protobuf:"varint,53,opt,name=rx1_delay,json=rx1Delay,proto3" json:"rx1_delay,omitempty"` } func (x *DeviceProfile) Reset() { @@ -942,6 +950,13 @@ func (x *DeviceProfile) GetAllowRoaming() bool { return false } +func (x *DeviceProfile) GetRx1Delay() uint32 { + if x != nil { + return x.Rx1Delay + } + return 0 +} + type Measurement struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1692,7 +1707,7 @@ var file_api_device_profile_proto_rawDesc = []byte{ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xd3, 0x16, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x22, 0xf0, 0x16, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, @@ -1864,187 +1879,189 @@ var file_api_device_profile_proto_rawDesc = []byte{ 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, - 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x51, 0x0a, 0x11, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0b, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, - 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x22, 0xd2, 0x03, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, - 0x33, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, - 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x13, 0x72, 0x65, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, - 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x74, 0x61, 0x61, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x4f, 0x74, 0x61, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x12, 0x28, - 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x5f, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x22, 0x57, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x22, 0x2d, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x29, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x18, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, - 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x22, 0x2c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x7e, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, - 0x22, 0x71, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x32, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x7c, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, - 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x3a, 0x0a, 0x14, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, - 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x31, 0x0a, - 0x0c, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x08, 0x0a, - 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x59, 0x45, 0x4e, - 0x4e, 0x45, 0x5f, 0x4c, 0x50, 0x50, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x02, - 0x2a, 0x50, 0x0a, 0x0f, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, - 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, - 0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47, - 0x41, 0x55, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, - 0x10, 0x04, 0x2a, 0x55, 0x0a, 0x0e, 0x43, 0x61, 0x64, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, - 0x63, 0x69, 0x74, 0x79, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x45, 0x43, 0x5f, 0x31, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, - 0x53, 0x5f, 0x32, 0x35, 0x30, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x31, 0x30, - 0x30, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x10, 0x04, 0x12, 0x09, - 0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x32, 0x30, 0x10, 0x05, 0x2a, 0x61, 0x0a, 0x11, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x43, 0x68, 0x41, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x09, - 0x0a, 0x05, 0x4b, 0x48, 0x5a, 0x5f, 0x30, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, - 0x5f, 0x32, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x34, 0x30, - 0x30, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x38, 0x30, 0x30, 0x10, 0x03, - 0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x31, 0x36, 0x30, 0x30, 0x10, 0x04, 0x12, 0x0c, - 0x0a, 0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x33, 0x32, 0x30, 0x30, 0x10, 0x05, 0x2a, 0x6c, 0x0a, 0x13, - 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, - 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x45, - 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x12, - 0x19, 0x0a, 0x15, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f, - 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xb8, 0x05, 0x0a, 0x14, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x12, 0x65, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, + 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x78, + 0x31, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, + 0x78, 0x31, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x51, 0x0a, 0x11, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x61, + 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0b, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x22, 0xd2, 0x03, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x0b, + 0x6d, 0x61, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x63, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x49, 0x0a, 0x13, 0x72, 0x65, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x67, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x74, 0x61, 0x61, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x74, 0x61, + 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x5f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x12, 0x28, 0x0a, 0x10, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x43, 0x22, 0x57, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, + 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x2d, + 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x29, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, + 0x2c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x7e, 0x0a, + 0x19, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, + 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x7c, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, + 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4c, 0x69, + 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3a, + 0x0a, 0x14, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4c, 0x69, + 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x31, 0x0a, 0x0c, 0x43, 0x6f, + 0x64, 0x65, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, + 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x59, 0x45, 0x4e, 0x4e, 0x45, 0x5f, + 0x4c, 0x50, 0x50, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x02, 0x2a, 0x50, 0x0a, + 0x0f, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42, + 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, + 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x2a, + 0x55, 0x0a, 0x0e, 0x43, 0x61, 0x64, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74, + 0x79, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x45, 0x43, 0x5f, 0x31, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x32, + 0x35, 0x30, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x31, 0x30, 0x30, 0x10, 0x03, + 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4d, + 0x53, 0x5f, 0x32, 0x30, 0x10, 0x05, 0x2a, 0x61, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x43, 0x68, 0x41, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x09, 0x0a, 0x05, 0x4b, + 0x48, 0x5a, 0x5f, 0x30, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x32, 0x30, + 0x30, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x34, 0x30, 0x30, 0x10, 0x02, + 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x38, 0x30, 0x30, 0x10, 0x03, 0x12, 0x0c, 0x0a, + 0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x31, 0x36, 0x30, 0x30, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4b, + 0x48, 0x5a, 0x5f, 0x33, 0x32, 0x30, 0x30, 0x10, 0x05, 0x2a, 0x6c, 0x0a, 0x13, 0x52, 0x65, 0x6c, + 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x12, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41, + 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x41, 0x42, + 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, + 0x0b, 0x0a, 0x07, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, + 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, + 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xb8, 0x05, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x6c, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x65, + 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x1a, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x69, 0x64, 0x7d, - 0x12, 0x64, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, - 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, - 0x68, 0x6d, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x61, 0x70, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x3a, 0x01, 0x2a, 0x1a, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x69, 0x64, 0x7d, 0x12, 0x64, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, - 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x72, 0x2d, 0x61, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x73, 0x42, 0x6a, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, - 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, - 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, - 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, - 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, - 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x11, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x72, 0x2d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, + 0x6d, 0x73, 0x42, 0x6a, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, + 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/gateway.pb.go b/api/gateway.pb.go index 43acc51..8bdb771 100644 --- a/api/gateway.pb.go +++ b/api/gateway.pb.go @@ -1029,6 +1029,129 @@ func (x *GetGatewayMetricsResponse) GetTxPacketsPerStatus() *common.Metric { return nil } +type GetGatewayDutyCycleMetricsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Gateway ID (EUI64). + GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"` + // Interval start timestamp. + Start *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start,proto3" json:"start,omitempty"` + // Interval end timestamp. + End *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=end,proto3" json:"end,omitempty"` +} + +func (x *GetGatewayDutyCycleMetricsRequest) Reset() { + *x = GetGatewayDutyCycleMetricsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_gateway_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGatewayDutyCycleMetricsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGatewayDutyCycleMetricsRequest) ProtoMessage() {} + +func (x *GetGatewayDutyCycleMetricsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_gateway_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGatewayDutyCycleMetricsRequest.ProtoReflect.Descriptor instead. +func (*GetGatewayDutyCycleMetricsRequest) Descriptor() ([]byte, []int) { + return file_api_gateway_proto_rawDescGZIP(), []int{13} +} + +func (x *GetGatewayDutyCycleMetricsRequest) GetGatewayId() string { + if x != nil { + return x.GatewayId + } + return "" +} + +func (x *GetGatewayDutyCycleMetricsRequest) GetStart() *timestamppb.Timestamp { + if x != nil { + return x.Start + } + return nil +} + +func (x *GetGatewayDutyCycleMetricsRequest) GetEnd() *timestamppb.Timestamp { + if x != nil { + return x.End + } + return nil +} + +type GetGatewayDutyCycleMetricsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Percentage relative to max load. + MaxLoadPercentage *common.Metric `protobuf:"bytes,1,opt,name=max_load_percentage,json=maxLoadPercentage,proto3" json:"max_load_percentage,omitempty"` + // Percentage relative to tracking window. + WindowPercentage *common.Metric `protobuf:"bytes,2,opt,name=window_percentage,json=windowPercentage,proto3" json:"window_percentage,omitempty"` +} + +func (x *GetGatewayDutyCycleMetricsResponse) Reset() { + *x = GetGatewayDutyCycleMetricsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_gateway_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGatewayDutyCycleMetricsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGatewayDutyCycleMetricsResponse) ProtoMessage() {} + +func (x *GetGatewayDutyCycleMetricsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_gateway_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGatewayDutyCycleMetricsResponse.ProtoReflect.Descriptor instead. +func (*GetGatewayDutyCycleMetricsResponse) Descriptor() ([]byte, []int) { + return file_api_gateway_proto_rawDescGZIP(), []int{14} +} + +func (x *GetGatewayDutyCycleMetricsResponse) GetMaxLoadPercentage() *common.Metric { + if x != nil { + return x.MaxLoadPercentage + } + return nil +} + +func (x *GetGatewayDutyCycleMetricsResponse) GetWindowPercentage() *common.Metric { + if x != nil { + return x.WindowPercentage + } + return nil +} + var File_api_gateway_proto protoreflect.FileDescriptor var file_api_gateway_proto_rawDesc = []byte{ @@ -1203,67 +1326,98 @@ var file_api_gateway_proto_rawDesc = []byte{ 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x12, 0x74, 0x78, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, - 0x37, 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x0e, 0x0a, 0x0a, 0x4e, 0x45, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x45, 0x4e, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4f, - 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x32, 0x91, 0x06, 0x0a, 0x0e, 0x47, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x06, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, - 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x73, 0x12, 0x5a, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6a, - 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x1a, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x5f, 0x0a, 0x06, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, - 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x52, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, - 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, - 0xb1, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0xa2, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x44, 0x75, + 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x03, 0x65, 0x6e, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x13, 0x6d, + 0x61, 0x78, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x4c, 0x6f, 0x61, + 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x11, 0x77, + 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x50, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x2a, 0x37, 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x45, 0x56, 0x45, + 0x52, 0x5f, 0x53, 0x45, 0x45, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, + 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, + 0x02, 0x32, 0xb1, 0x07, 0x0a, 0x0e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x5a, 0x0a, 0x03, 0x47, + 0x65, 0x74, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6a, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x1a, + 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0x5f, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x19, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x64, 0x0a, 0x11, - 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, - 0x69, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, - 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, - 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, - 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, - 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x52, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0xb1, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x2d, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x77, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, + 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x75, 0x74, + 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x44, 0x75, + 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x44, 0x75, 0x74, 0x79, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x64, 0x75, 0x74, 0x79, 0x2d, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x2d, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x64, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, + 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, + 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, + 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1279,7 +1433,7 @@ func file_api_gateway_proto_rawDescGZIP() []byte { } var file_api_gateway_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_api_gateway_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_api_gateway_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_api_gateway_proto_goTypes = []interface{}{ (GatewayState)(0), // 0: api.GatewayState (*Gateway)(nil), // 1: api.Gateway @@ -1295,62 +1449,70 @@ var file_api_gateway_proto_goTypes = []interface{}{ (*GenerateGatewayClientCertificateResponse)(nil), // 11: api.GenerateGatewayClientCertificateResponse (*GetGatewayMetricsRequest)(nil), // 12: api.GetGatewayMetricsRequest (*GetGatewayMetricsResponse)(nil), // 13: api.GetGatewayMetricsResponse - nil, // 14: api.Gateway.TagsEntry - nil, // 15: api.Gateway.MetadataEntry - nil, // 16: api.GatewayListItem.PropertiesEntry - (*common.Location)(nil), // 17: common.Location - (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp - (common.Aggregation)(0), // 19: common.Aggregation - (*common.Metric)(nil), // 20: common.Metric - (*emptypb.Empty)(nil), // 21: google.protobuf.Empty + (*GetGatewayDutyCycleMetricsRequest)(nil), // 14: api.GetGatewayDutyCycleMetricsRequest + (*GetGatewayDutyCycleMetricsResponse)(nil), // 15: api.GetGatewayDutyCycleMetricsResponse + nil, // 16: api.Gateway.TagsEntry + nil, // 17: api.Gateway.MetadataEntry + nil, // 18: api.GatewayListItem.PropertiesEntry + (*common.Location)(nil), // 19: common.Location + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp + (common.Aggregation)(0), // 21: common.Aggregation + (*common.Metric)(nil), // 22: common.Metric + (*emptypb.Empty)(nil), // 23: google.protobuf.Empty } var file_api_gateway_proto_depIdxs = []int32{ - 17, // 0: api.Gateway.location:type_name -> common.Location - 14, // 1: api.Gateway.tags:type_name -> api.Gateway.TagsEntry - 15, // 2: api.Gateway.metadata:type_name -> api.Gateway.MetadataEntry - 17, // 3: api.GatewayListItem.location:type_name -> common.Location - 16, // 4: api.GatewayListItem.properties:type_name -> api.GatewayListItem.PropertiesEntry - 18, // 5: api.GatewayListItem.created_at:type_name -> google.protobuf.Timestamp - 18, // 6: api.GatewayListItem.updated_at:type_name -> google.protobuf.Timestamp - 18, // 7: api.GatewayListItem.last_seen_at:type_name -> google.protobuf.Timestamp + 19, // 0: api.Gateway.location:type_name -> common.Location + 16, // 1: api.Gateway.tags:type_name -> api.Gateway.TagsEntry + 17, // 2: api.Gateway.metadata:type_name -> api.Gateway.MetadataEntry + 19, // 3: api.GatewayListItem.location:type_name -> common.Location + 18, // 4: api.GatewayListItem.properties:type_name -> api.GatewayListItem.PropertiesEntry + 20, // 5: api.GatewayListItem.created_at:type_name -> google.protobuf.Timestamp + 20, // 6: api.GatewayListItem.updated_at:type_name -> google.protobuf.Timestamp + 20, // 7: api.GatewayListItem.last_seen_at:type_name -> google.protobuf.Timestamp 0, // 8: api.GatewayListItem.state:type_name -> api.GatewayState 1, // 9: api.CreateGatewayRequest.gateway:type_name -> api.Gateway 1, // 10: api.GetGatewayResponse.gateway:type_name -> api.Gateway - 18, // 11: api.GetGatewayResponse.created_at:type_name -> google.protobuf.Timestamp - 18, // 12: api.GetGatewayResponse.updated_at:type_name -> google.protobuf.Timestamp - 18, // 13: api.GetGatewayResponse.last_seen_at:type_name -> google.protobuf.Timestamp + 20, // 11: api.GetGatewayResponse.created_at:type_name -> google.protobuf.Timestamp + 20, // 12: api.GetGatewayResponse.updated_at:type_name -> google.protobuf.Timestamp + 20, // 13: api.GetGatewayResponse.last_seen_at:type_name -> google.protobuf.Timestamp 1, // 14: api.UpdateGatewayRequest.gateway:type_name -> api.Gateway 2, // 15: api.ListGatewaysResponse.result:type_name -> api.GatewayListItem - 18, // 16: api.GenerateGatewayClientCertificateResponse.expires_at:type_name -> google.protobuf.Timestamp - 18, // 17: api.GetGatewayMetricsRequest.start:type_name -> google.protobuf.Timestamp - 18, // 18: api.GetGatewayMetricsRequest.end:type_name -> google.protobuf.Timestamp - 19, // 19: api.GetGatewayMetricsRequest.aggregation:type_name -> common.Aggregation - 20, // 20: api.GetGatewayMetricsResponse.rx_packets:type_name -> common.Metric - 20, // 21: api.GetGatewayMetricsResponse.tx_packets:type_name -> common.Metric - 20, // 22: api.GetGatewayMetricsResponse.tx_packets_per_freq:type_name -> common.Metric - 20, // 23: api.GetGatewayMetricsResponse.rx_packets_per_freq:type_name -> common.Metric - 20, // 24: api.GetGatewayMetricsResponse.tx_packets_per_dr:type_name -> common.Metric - 20, // 25: api.GetGatewayMetricsResponse.rx_packets_per_dr:type_name -> common.Metric - 20, // 26: api.GetGatewayMetricsResponse.tx_packets_per_status:type_name -> common.Metric - 3, // 27: api.GatewayService.Create:input_type -> api.CreateGatewayRequest - 4, // 28: api.GatewayService.Get:input_type -> api.GetGatewayRequest - 6, // 29: api.GatewayService.Update:input_type -> api.UpdateGatewayRequest - 7, // 30: api.GatewayService.Delete:input_type -> api.DeleteGatewayRequest - 8, // 31: api.GatewayService.List:input_type -> api.ListGatewaysRequest - 10, // 32: api.GatewayService.GenerateClientCertificate:input_type -> api.GenerateGatewayClientCertificateRequest - 12, // 33: api.GatewayService.GetMetrics:input_type -> api.GetGatewayMetricsRequest - 21, // 34: api.GatewayService.Create:output_type -> google.protobuf.Empty - 5, // 35: api.GatewayService.Get:output_type -> api.GetGatewayResponse - 21, // 36: api.GatewayService.Update:output_type -> google.protobuf.Empty - 21, // 37: api.GatewayService.Delete:output_type -> google.protobuf.Empty - 9, // 38: api.GatewayService.List:output_type -> api.ListGatewaysResponse - 11, // 39: api.GatewayService.GenerateClientCertificate:output_type -> api.GenerateGatewayClientCertificateResponse - 13, // 40: api.GatewayService.GetMetrics:output_type -> api.GetGatewayMetricsResponse - 34, // [34:41] is the sub-list for method output_type - 27, // [27:34] is the sub-list for method input_type - 27, // [27:27] is the sub-list for extension type_name - 27, // [27:27] is the sub-list for extension extendee - 0, // [0:27] is the sub-list for field type_name + 20, // 16: api.GenerateGatewayClientCertificateResponse.expires_at:type_name -> google.protobuf.Timestamp + 20, // 17: api.GetGatewayMetricsRequest.start:type_name -> google.protobuf.Timestamp + 20, // 18: api.GetGatewayMetricsRequest.end:type_name -> google.protobuf.Timestamp + 21, // 19: api.GetGatewayMetricsRequest.aggregation:type_name -> common.Aggregation + 22, // 20: api.GetGatewayMetricsResponse.rx_packets:type_name -> common.Metric + 22, // 21: api.GetGatewayMetricsResponse.tx_packets:type_name -> common.Metric + 22, // 22: api.GetGatewayMetricsResponse.tx_packets_per_freq:type_name -> common.Metric + 22, // 23: api.GetGatewayMetricsResponse.rx_packets_per_freq:type_name -> common.Metric + 22, // 24: api.GetGatewayMetricsResponse.tx_packets_per_dr:type_name -> common.Metric + 22, // 25: api.GetGatewayMetricsResponse.rx_packets_per_dr:type_name -> common.Metric + 22, // 26: api.GetGatewayMetricsResponse.tx_packets_per_status:type_name -> common.Metric + 20, // 27: api.GetGatewayDutyCycleMetricsRequest.start:type_name -> google.protobuf.Timestamp + 20, // 28: api.GetGatewayDutyCycleMetricsRequest.end:type_name -> google.protobuf.Timestamp + 22, // 29: api.GetGatewayDutyCycleMetricsResponse.max_load_percentage:type_name -> common.Metric + 22, // 30: api.GetGatewayDutyCycleMetricsResponse.window_percentage:type_name -> common.Metric + 3, // 31: api.GatewayService.Create:input_type -> api.CreateGatewayRequest + 4, // 32: api.GatewayService.Get:input_type -> api.GetGatewayRequest + 6, // 33: api.GatewayService.Update:input_type -> api.UpdateGatewayRequest + 7, // 34: api.GatewayService.Delete:input_type -> api.DeleteGatewayRequest + 8, // 35: api.GatewayService.List:input_type -> api.ListGatewaysRequest + 10, // 36: api.GatewayService.GenerateClientCertificate:input_type -> api.GenerateGatewayClientCertificateRequest + 12, // 37: api.GatewayService.GetMetrics:input_type -> api.GetGatewayMetricsRequest + 14, // 38: api.GatewayService.GetDutyCycleMetrics:input_type -> api.GetGatewayDutyCycleMetricsRequest + 23, // 39: api.GatewayService.Create:output_type -> google.protobuf.Empty + 5, // 40: api.GatewayService.Get:output_type -> api.GetGatewayResponse + 23, // 41: api.GatewayService.Update:output_type -> google.protobuf.Empty + 23, // 42: api.GatewayService.Delete:output_type -> google.protobuf.Empty + 9, // 43: api.GatewayService.List:output_type -> api.ListGatewaysResponse + 11, // 44: api.GatewayService.GenerateClientCertificate:output_type -> api.GenerateGatewayClientCertificateResponse + 13, // 45: api.GatewayService.GetMetrics:output_type -> api.GetGatewayMetricsResponse + 15, // 46: api.GatewayService.GetDutyCycleMetrics:output_type -> api.GetGatewayDutyCycleMetricsResponse + 39, // [39:47] is the sub-list for method output_type + 31, // [31:39] is the sub-list for method input_type + 31, // [31:31] is the sub-list for extension type_name + 31, // [31:31] is the sub-list for extension extendee + 0, // [0:31] is the sub-list for field type_name } func init() { file_api_gateway_proto_init() } @@ -1515,6 +1677,30 @@ func file_api_gateway_proto_init() { return nil } } + file_api_gateway_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGatewayDutyCycleMetricsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_gateway_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGatewayDutyCycleMetricsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1522,7 +1708,7 @@ func file_api_gateway_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_gateway_proto_rawDesc, NumEnums: 1, - NumMessages: 16, + NumMessages: 18, NumExtensions: 0, NumServices: 1, }, diff --git a/api/gateway.pb.gw.go b/api/gateway.pb.gw.go index 37f75d4..67e064e 100644 --- a/api/gateway.pb.gw.go +++ b/api/gateway.pb.gw.go @@ -395,6 +395,76 @@ func local_request_GatewayService_GetMetrics_0(ctx context.Context, marshaler ru } +var ( + filter_GatewayService_GetDutyCycleMetrics_0 = &utilities.DoubleArray{Encoding: map[string]int{"gateway_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_GatewayService_GetDutyCycleMetrics_0(ctx context.Context, marshaler runtime.Marshaler, client GatewayServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetGatewayDutyCycleMetricsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["gateway_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gateway_id") + } + + protoReq.GatewayId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gateway_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GatewayService_GetDutyCycleMetrics_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetDutyCycleMetrics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GatewayService_GetDutyCycleMetrics_0(ctx context.Context, marshaler runtime.Marshaler, server GatewayServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetGatewayDutyCycleMetricsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["gateway_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gateway_id") + } + + protoReq.GatewayId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gateway_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GatewayService_GetDutyCycleMetrics_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetDutyCycleMetrics(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterGatewayServiceHandlerServer registers the http handlers for service GatewayService to "mux". // UnaryRPC :call GatewayServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -569,6 +639,30 @@ func RegisterGatewayServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) + mux.Handle("GET", pattern_GatewayService_GetDutyCycleMetrics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/api.GatewayService/GetDutyCycleMetrics", runtime.WithHTTPPathPattern("/api/gateways/{gateway_id}/duty-cycle-metrics")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GatewayService_GetDutyCycleMetrics_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GatewayService_GetDutyCycleMetrics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -757,6 +851,27 @@ func RegisterGatewayServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("GET", pattern_GatewayService_GetDutyCycleMetrics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/api.GatewayService/GetDutyCycleMetrics", runtime.WithHTTPPathPattern("/api/gateways/{gateway_id}/duty-cycle-metrics")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GatewayService_GetDutyCycleMetrics_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GatewayService_GetDutyCycleMetrics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -774,6 +889,8 @@ var ( pattern_GatewayService_GenerateClientCertificate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "gateways", "gateway_id", "generate-certificate"}, "")) pattern_GatewayService_GetMetrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "gateways", "gateway_id", "metrics"}, "")) + + pattern_GatewayService_GetDutyCycleMetrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "gateways", "gateway_id", "duty-cycle-metrics"}, "")) ) var ( @@ -790,4 +907,6 @@ var ( forward_GatewayService_GenerateClientCertificate_0 = runtime.ForwardResponseMessage forward_GatewayService_GetMetrics_0 = runtime.ForwardResponseMessage + + forward_GatewayService_GetDutyCycleMetrics_0 = runtime.ForwardResponseMessage ) diff --git a/api/gateway_grpc.pb.go b/api/gateway_grpc.pb.go index 05cb3e9..c289e64 100644 --- a/api/gateway_grpc.pb.go +++ b/api/gateway_grpc.pb.go @@ -27,6 +27,7 @@ const ( GatewayService_List_FullMethodName = "/api.GatewayService/List" GatewayService_GenerateClientCertificate_FullMethodName = "/api.GatewayService/GenerateClientCertificate" GatewayService_GetMetrics_FullMethodName = "/api.GatewayService/GetMetrics" + GatewayService_GetDutyCycleMetrics_FullMethodName = "/api.GatewayService/GetDutyCycleMetrics" ) // GatewayServiceClient is the client API for GatewayService service. @@ -47,6 +48,9 @@ type GatewayServiceClient interface { GenerateClientCertificate(ctx context.Context, in *GenerateGatewayClientCertificateRequest, opts ...grpc.CallOption) (*GenerateGatewayClientCertificateResponse, error) // GetMetrics returns the gateway metrics. GetMetrics(ctx context.Context, in *GetGatewayMetricsRequest, opts ...grpc.CallOption) (*GetGatewayMetricsResponse, error) + // GetDutyCycleMetrics returns the duty-cycle metrics. + // Note that only the last 2 hours of data are stored. Currently only per minute aggregation is available. + GetDutyCycleMetrics(ctx context.Context, in *GetGatewayDutyCycleMetricsRequest, opts ...grpc.CallOption) (*GetGatewayDutyCycleMetricsResponse, error) } type gatewayServiceClient struct { @@ -120,6 +124,15 @@ func (c *gatewayServiceClient) GetMetrics(ctx context.Context, in *GetGatewayMet return out, nil } +func (c *gatewayServiceClient) GetDutyCycleMetrics(ctx context.Context, in *GetGatewayDutyCycleMetricsRequest, opts ...grpc.CallOption) (*GetGatewayDutyCycleMetricsResponse, error) { + out := new(GetGatewayDutyCycleMetricsResponse) + err := c.cc.Invoke(ctx, GatewayService_GetDutyCycleMetrics_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // GatewayServiceServer is the server API for GatewayService service. // All implementations must embed UnimplementedGatewayServiceServer // for forward compatibility @@ -138,6 +151,9 @@ type GatewayServiceServer interface { GenerateClientCertificate(context.Context, *GenerateGatewayClientCertificateRequest) (*GenerateGatewayClientCertificateResponse, error) // GetMetrics returns the gateway metrics. GetMetrics(context.Context, *GetGatewayMetricsRequest) (*GetGatewayMetricsResponse, error) + // GetDutyCycleMetrics returns the duty-cycle metrics. + // Note that only the last 2 hours of data are stored. Currently only per minute aggregation is available. + GetDutyCycleMetrics(context.Context, *GetGatewayDutyCycleMetricsRequest) (*GetGatewayDutyCycleMetricsResponse, error) mustEmbedUnimplementedGatewayServiceServer() } @@ -166,6 +182,9 @@ func (UnimplementedGatewayServiceServer) GenerateClientCertificate(context.Conte func (UnimplementedGatewayServiceServer) GetMetrics(context.Context, *GetGatewayMetricsRequest) (*GetGatewayMetricsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented") } +func (UnimplementedGatewayServiceServer) GetDutyCycleMetrics(context.Context, *GetGatewayDutyCycleMetricsRequest) (*GetGatewayDutyCycleMetricsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDutyCycleMetrics not implemented") +} func (UnimplementedGatewayServiceServer) mustEmbedUnimplementedGatewayServiceServer() {} // UnsafeGatewayServiceServer may be embedded to opt out of forward compatibility for this service. @@ -305,6 +324,24 @@ func _GatewayService_GetMetrics_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _GatewayService_GetDutyCycleMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGatewayDutyCycleMetricsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GatewayServiceServer).GetDutyCycleMetrics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GatewayService_GetDutyCycleMetrics_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GatewayServiceServer).GetDutyCycleMetrics(ctx, req.(*GetGatewayDutyCycleMetricsRequest)) + } + return interceptor(ctx, in, info, handler) +} + // GatewayService_ServiceDesc is the grpc.ServiceDesc for GatewayService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -340,6 +377,10 @@ var GatewayService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetMetrics", Handler: _GatewayService_GetMetrics_Handler, }, + { + MethodName: "GetDutyCycleMetrics", + Handler: _GatewayService_GetDutyCycleMetrics_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "api/gateway.proto", diff --git a/api/multicast_group.pb.go b/api/multicast_group.pb.go index d2532f5..24ae221 100644 --- a/api/multicast_group.pb.go +++ b/api/multicast_group.pb.go @@ -155,7 +155,13 @@ type MulticastGroup struct { // Frequency (Hz). Frequency uint32 `protobuf:"varint,11,opt,name=frequency,proto3" json:"frequency,omitempty"` // Ping-slot period (only for Class-B). + // Deprecated: use class_b_ping_slot_nb_k. ClassBPingSlotPeriod uint32 `protobuf:"varint,12,opt,name=class_b_ping_slot_period,json=classBPingSlotPeriod,proto3" json:"class_b_ping_slot_period,omitempty"` + // Class-B ping-slots per beacon period (only for Class-B). + // Valid options are: 0 - 7; + // + // The actual number of ping-slots per beacon period equals to 2^k. + ClassBPingSlotNbK uint32 `protobuf:"varint,14,opt,name=class_b_ping_slot_nb_k,json=classBPingSlotNbK,proto3" json:"class_b_ping_slot_nb_k,omitempty"` // Scheduling type (only for Class-C). ClassCSchedulingType MulticastGroupSchedulingType `protobuf:"varint,13,opt,name=class_c_scheduling_type,json=classCSchedulingType,proto3,enum=api.MulticastGroupSchedulingType" json:"class_c_scheduling_type,omitempty"` } @@ -276,6 +282,13 @@ func (x *MulticastGroup) GetClassBPingSlotPeriod() uint32 { return 0 } +func (x *MulticastGroup) GetClassBPingSlotNbK() uint32 { + if x != nil { + return x.ClassBPingSlotNbK + } + return 0 +} + func (x *MulticastGroup) GetClassCSchedulingType() MulticastGroupSchedulingType { if x != nil { return x.ClassCSchedulingType @@ -1369,7 +1382,7 @@ var file_api_multicast_group_proto_rawDesc = []byte{ 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xeb, 0x03, 0x0a, 0x0e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x6f, 0x22, 0x9e, 0x04, 0x0a, 0x0e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, @@ -1394,258 +1407,261 @@ var file_api_multicast_group_proto_rawDesc = []byte{ 0x18, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x50, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x58, 0x0a, 0x17, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x63, - 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x14, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x43, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, - 0x92, 0x02, 0x0a, 0x16, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x0a, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x5b, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x22, 0x2e, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x2a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcf, 0x01, - 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, - 0x5b, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x16, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, + 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x6e, 0x62, 0x5f, 0x6b, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x50, 0x69, 0x6e, + 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x4e, 0x62, 0x4b, 0x12, 0x58, 0x0a, 0x17, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x5f, 0x63, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x14, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x43, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x79, + 0x70, 0x65, 0x22, 0x92, 0x02, 0x0a, 0x16, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, + 0x36, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x5b, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2e, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x2a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0xcf, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0e, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2d, 0x0a, 0x1b, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x1a, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x73, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, - 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x69, 0x0a, 0x20, - 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x6e, 0x0a, 0x25, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x70, 0x0a, 0x21, 0x41, 0x64, 0x64, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0x75, 0x0a, 0x26, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x39, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x22, 0x5b, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, + 0x2d, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x89, + 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x73, 0x0a, 0x1b, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, + 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x69, 0x0a, 0x20, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, - 0x22, 0x87, 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2c, 0x0a, 0x12, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x13, 0x0a, 0x05, 0x66, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, 0x6e, 0x74, 0x12, - 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x25, 0x45, 0x6e, - 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x6e, 0x0a, 0x25, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x70, 0x0a, 0x21, 0x41, 0x64, + 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0x75, 0x0a, 0x26, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x6f, + 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x49, 0x64, 0x22, 0x87, 0x01, 0x0a, 0x17, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x13, 0x0a, + 0x05, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, + 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x66, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x66, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, + 0x25, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, + 0x74, 0x65, 0x6d, 0x22, 0x3d, 0x0a, 0x26, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x71, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x22, 0x3d, 0x0a, 0x26, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x66, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, 0x6e, 0x74, 0x22, - 0x4f, 0x0a, 0x1f, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x22, 0x4e, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, - 0x22, 0x55, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, - 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, 0x2e, 0x0a, 0x12, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, - 0x41, 0x53, 0x53, 0x5f, 0x42, 0x10, 0x01, 0x2a, 0x37, 0x0a, 0x1c, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, - 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x47, 0x50, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, - 0x32, 0xdd, 0x0c, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x06, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x68, 0x0a, 0x03, 0x47, - 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2f, 0x3a, 0x01, 0x2a, 0x1a, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x69, 0x64, 0x7d, - 0x12, 0x66, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x61, + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, + 0x05, 0x66, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x43, + 0x6e, 0x74, 0x22, 0x4f, 0x0a, 0x1f, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, 0x2e, 0x0a, 0x12, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x42, 0x10, 0x01, 0x2a, 0x37, 0x0a, 0x1c, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, + 0x4c, 0x41, 0x59, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x47, 0x50, 0x53, 0x5f, 0x54, 0x49, 0x4d, + 0x45, 0x10, 0x01, 0x32, 0xdd, 0x0c, 0x0a, 0x15, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, + 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x68, + 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x68, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x01, 0x2a, 0x22, 0x32, 0x2f, 0x61, 0x70, 0x69, + 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x35, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x1a, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, + 0x69, 0x64, 0x7d, 0x12, 0x66, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x20, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, + 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x68, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x01, 0x2a, 0x22, 0x32, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12, 0x8c, 0x01, 0x0a, + 0x0a, 0x41, 0x64, 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x26, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x41, 0x64, 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x6f, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x38, 0x3a, 0x01, 0x2a, 0x22, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x0d, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2b, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x2a, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x98, - 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x0a, 0x41, 0x64, - 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, - 0x64, 0x64, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x6f, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, - 0x3a, 0x01, 0x2a, 0x22, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, - 0x6f, 0x6d, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x2a, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, + 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, + 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, + 0x07, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, + 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, + 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x07, 0x45, 0x6e, - 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, - 0x65, 0x75, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x2f, 0x7b, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x46, 0x6c, 0x75, 0x73, 0x68, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x6c, 0x75, 0x73, - 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, - 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x2a, 0x30, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x90, 0x01, - 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, + 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x46, 0x6c, + 0x75, 0x73, 0x68, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, + 0x6c, 0x75, 0x73, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x2a, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, - 0x42, 0x6b, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, - 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, - 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, - 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x90, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x23, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, + 0x65, 0x75, 0x65, 0x42, 0x6b, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, + 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, + 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, + 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/chirpstack b/chirpstack index 8c875c3..4968f5d 160000 --- a/chirpstack +++ b/chirpstack @@ -1 +1 @@ -Subproject commit 8c875c3bf1131e5a5107d4b4b43c4e3ebba6722c +Subproject commit 4968f5d792718e6353dd8ab9eb8b2420d5e84262 diff --git a/go.mod b/go.mod index 01684c7..a91b2db 100644 --- a/go.mod +++ b/go.mod @@ -1,27 +1,29 @@ module github.com/chirpstack/chirpstack-rest-api -go 1.18 +go 1.21 + +toolchain go1.21.4 require ( - github.com/chirpstack/chirpstack/api/go/v4 v4.7.0 + github.com/chirpstack/chirpstack/api/go/v4 v4.8.1 github.com/goreleaser/goreleaser v1.10.2 github.com/goreleaser/nfpm/v2 v2.16.0 github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.3 - google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405 - google.golang.org/grpc v1.59.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa + google.golang.org/grpc v1.62.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.31.0 + google.golang.org/protobuf v1.33.0 ) require ( - cloud.google.com/go v0.110.9 // indirect - cloud.google.com/go/compute v1.23.2 // indirect + cloud.google.com/go v0.112.0 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.4 // indirect - cloud.google.com/go/kms v1.15.4 // indirect - cloud.google.com/go/storage v1.30.1 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/kms v1.15.5 // indirect + cloud.google.com/go/storage v1.36.0 // indirect code.gitea.io/sdk/gitea v0.15.1 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/Azure/azure-pipeline-go v0.2.3 // indirect @@ -75,23 +77,23 @@ require ( github.com/dghubble/sling v1.4.0 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/emirpasic/gods v1.12.0 // indirect - github.com/felixge/httpsnoop v1.0.1 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect github.com/go-git/go-git/v5 v5.4.2 // indirect github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/golang-jwt/jwt/v4 v4.0.0 // indirect - github.com/golang/glog v1.1.2 // indirect + github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/go-github/v45 v45.2.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/rpmpack v0.0.0-20220314092521-38642b5e571e // indirect - github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/google/wire v0.5.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/goreleaser/chglog v0.1.2 // indirect github.com/goreleaser/fileglob v1.3.0 // indirect @@ -135,18 +137,18 @@ require ( github.com/xanzy/ssh-agent v0.3.1 // indirect go.opencensus.io v0.24.0 // indirect gocloud.dev v0.24.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.11.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.5.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.128.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect + google.golang.org/api v0.155.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/mail.v2 v2.3.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/go.sum b/go.sum index 4fcaf89..33b4065 100644 --- a/go.sum +++ b/go.sum @@ -33,6 +33,8 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.0/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.110.9 h1:e7ITSqGFFk4rbz/JFIqZh3G4VEHguhAL4BQcFlWtU68= cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= +cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -41,6 +43,8 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute v1.23.2 h1:nWEMDhgbBkBJjfpVySqU4jgWdc22PLR0o4vEexZHers= cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= @@ -49,9 +53,13 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl cloud.google.com/go/firestore v1.5.0/go.mod h1:c4nNYR1qdq7eaZ+jSc5fonrQN2k3M7sWATcYTiakjEo= cloud.google.com/go/iam v1.1.4 h1:K6n/GZHFTtEoKT5aUG3l9diPi0VduZNQ1PfdnpkkIFk= cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/kms v0.1.0/go.mod h1:8Qp8PCAypHg4FdmlyW1QRAv09BGQ9Uzh7JnmIZxPk+c= cloud.google.com/go/kms v1.15.4 h1:gEZzC54ZBI+aeW8/jg9tgz9KR4Aa+WEDPbdGIV3iJ7A= cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc= +cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= cloud.google.com/go/monitoring v0.1.0/go.mod h1:Hpm3XfzJv+UTiXzCG5Ffp0wijzHTC7Cv4eR7o3x/fEE= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= @@ -67,6 +75,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.16.1/go.mod h1:LaNorbty3ehnU3rEjXSNV/NRgQA0O8Y+uh6bPe5UOk4= cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/trace v0.1.0/go.mod h1:wxEwsoeRVPbeSkt7ZC9nWCgmoKQRAoySN7XHW2AmI7g= code.gitea.io/gitea-vet v0.2.1/go.mod h1:zcNbT/aJEmivCAhfmkHOlT645KNOf9W2KnkLgFjGGfE= code.gitea.io/sdk/gitea v0.15.1 h1:WJreC7YYuxbn0UDaPuWIe/mtiNKTvLN8MLkaw71yx/M= @@ -237,6 +247,8 @@ github.com/chirpstack/chirpstack/api/go/v4 v4.6.0 h1:l+nr/QhFab1y9E8LVOJq/lDG+o0 github.com/chirpstack/chirpstack/api/go/v4 v4.6.0/go.mod h1:6+68s1PGHq2QWZ216RTwXhp7h1vCiMc6kX3f4s74ZzQ= github.com/chirpstack/chirpstack/api/go/v4 v4.7.0 h1:LgtwvUm/pDvmBYgVc62khybuFdXnx0Hyj9MfKGkXufI= github.com/chirpstack/chirpstack/api/go/v4 v4.7.0/go.mod h1:6+68s1PGHq2QWZ216RTwXhp7h1vCiMc6kX3f4s74ZzQ= +github.com/chirpstack/chirpstack/api/go/v4 v4.8.1 h1:SqbHUYtSMAhIKOb+yYlOrjB0NvEOy2sg4PvuisRa91g= +github.com/chirpstack/chirpstack/api/go/v4 v4.8.1/go.mod h1:NNVeEib9I7GGomK2bPiP5c5UstkoMfxYiJ1Z5wrYCh4= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -289,6 +301,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= @@ -343,6 +357,8 @@ github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2V github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -377,6 +393,8 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -432,16 +450,21 @@ github.com/google/rpmpack v0.0.0-20220314092521-38642b5e571e h1:6Jn9JtfCn20uycra github.com/google/rpmpack v0.0.0-20220314092521-38642b5e571e/go.mod h1:83rLnx5vhPyN/mDzBYJWtiPf+9xnSVQynTpqZWe7OnY= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -757,6 +780,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -843,6 +868,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -862,6 +889,8 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -876,6 +905,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -945,9 +976,12 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -960,12 +994,15 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1064,6 +1101,8 @@ google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA= +google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1072,6 +1111,8 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1134,10 +1175,16 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U= google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405 h1:HJMDndgxest5n2y77fnErkM62iUsptE/H8p0dC2Huo4= google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg= +google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa h1:Jt1XW5PaLXF1/ePZrznsh/aAUvI7Adfc3LY1dAKlzRs= +google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:K4kfzHtI0kqWA79gecJarFtDn/Mls+GxQcg3Zox91Ac= google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik= google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa h1:RBgMaUMP+6soRkik4VoN8ojR2nex2TqZwjSSogic+eo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1166,6 +1213,8 @@ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9K google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= @@ -1184,6 +1233,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= diff --git a/openapiv2/api/device.swagger.json b/openapiv2/api/device.swagger.json index f2c36c0..20c33f4 100644 --- a/openapiv2/api/device.swagger.json +++ b/openapiv2/api/device.swagger.json @@ -448,14 +448,15 @@ }, { "name": "aggregation", - "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.", + "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.", "in": "query", "required": false, "type": "string", "enum": [ "HOUR", "DAY", - "MONTH" + "MONTH", + "MINUTE" ], "default": "HOUR" } @@ -509,14 +510,15 @@ }, { "name": "aggregation", - "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.", + "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.", "in": "query", "required": false, "type": "string", "enum": [ "HOUR", "DAY", - "MONTH" + "MONTH", + "MINUTE" ], "default": "HOUR" } @@ -1389,10 +1391,11 @@ "enum": [ "HOUR", "DAY", - "MONTH" + "MONTH", + "MINUTE" ], "default": "HOUR", - "description": " - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month." + "description": " - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute." }, "commonDeviceClass": { "type": "string", diff --git a/openapiv2/api/device_profile.swagger.json b/openapiv2/api/device_profile.swagger.json index 17b6af8..0cf41d0 100644 --- a/openapiv2/api/device_profile.swagger.json +++ b/openapiv2/api/device_profile.swagger.json @@ -397,6 +397,11 @@ "allowRoaming": { "type": "boolean", "description": "Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming." + }, + "rx1Delay": { + "type": "integer", + "format": "int64", + "description": "RX1 Delay.\n\nThis makes it possible to override the system RX1 Delay. Please note that\nthis values only has effect in case it is higher than the system value.\nIn other words, it can be used to increase the RX1 Delay but not to decrease\nit.\nValid options are 1 - 15 (0 = always use system RX1 Delay)." } }, "description": "Device-profile object.", @@ -772,6 +777,11 @@ "allowRoaming": { "type": "boolean", "description": "Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming." + }, + "rx1Delay": { + "type": "integer", + "format": "int64", + "description": "RX1 Delay.\n\nThis makes it possible to override the system RX1 Delay. Please note that\nthis values only has effect in case it is higher than the system value.\nIn other words, it can be used to increase the RX1 Delay but not to decrease\nit.\nValid options are 1 - 15 (0 = always use system RX1 Delay)." } } }, @@ -944,7 +954,8 @@ "RP002_1_0_0", "RP002_1_0_1", "RP002_1_0_2", - "RP002_1_0_3" + "RP002_1_0_3", + "RP002_1_0_4" ], "default": "A" }, diff --git a/openapiv2/api/device_profile_template.swagger.json b/openapiv2/api/device_profile_template.swagger.json index 313afd1..fac454a 100644 --- a/openapiv2/api/device_profile_template.swagger.json +++ b/openapiv2/api/device_profile_template.swagger.json @@ -626,7 +626,8 @@ "RP002_1_0_0", "RP002_1_0_1", "RP002_1_0_2", - "RP002_1_0_3" + "RP002_1_0_3", + "RP002_1_0_4" ], "default": "A" }, diff --git a/openapiv2/api/gateway.swagger.json b/openapiv2/api/gateway.swagger.json index 548c723..e744b0b 100644 --- a/openapiv2/api/gateway.swagger.json +++ b/openapiv2/api/gateway.swagger.json @@ -258,6 +258,54 @@ ] } }, + "/api/gateways/{gatewayId}/duty-cycle-metrics": { + "get": { + "summary": "GetDutyCycleMetrics returns the duty-cycle metrics.\nNote that only the last 2 hours of data are stored. Currently only per minute aggregation is available.", + "operationId": "GatewayService_GetDutyCycleMetrics", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiGetGatewayDutyCycleMetricsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "gatewayId", + "description": "Gateway ID (EUI64).", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "start", + "description": "Interval start timestamp.", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "end", + "description": "Interval end timestamp.", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "tags": [ + "GatewayService" + ] + } + }, "/api/gateways/{gatewayId}/generate-certificate": { "post": { "summary": "Generate client-certificate for the gateway.", @@ -334,14 +382,15 @@ }, { "name": "aggregation", - "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.", + "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.", "in": "query", "required": false, "type": "string", "enum": [ "HOUR", "DAY", - "MONTH" + "MONTH", + "MINUTE" ], "default": "HOUR" } @@ -489,6 +538,19 @@ } } }, + "apiGetGatewayDutyCycleMetricsResponse": { + "type": "object", + "properties": { + "maxLoadPercentage": { + "$ref": "#/definitions/commonMetric", + "description": "Percentage relative to max load." + }, + "windowPercentage": { + "$ref": "#/definitions/commonMetric", + "description": "Percentage relative to tracking window." + } + } + }, "apiGetGatewayMetricsResponse": { "type": "object", "properties": { @@ -568,10 +630,11 @@ "enum": [ "HOUR", "DAY", - "MONTH" + "MONTH", + "MINUTE" ], "default": "HOUR", - "description": " - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month." + "description": " - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute." }, "commonLocation": { "type": "object", diff --git a/openapiv2/api/multicast_group.swagger.json b/openapiv2/api/multicast_group.swagger.json index d3f3aaf..4ded53d 100644 --- a/openapiv2/api/multicast_group.swagger.json +++ b/openapiv2/api/multicast_group.swagger.json @@ -248,7 +248,13 @@ "classBPingSlotPeriod": { "type": "integer", "format": "int64", - "description": "Ping-slot period (only for Class-B)." + "description": "Ping-slot period (only for Class-B).\nDeprecated: use class_b_ping_slot_nb_k." + }, + "classBPingSlotNbK": { + "type": "integer", + "format": "int64", + "description": "The actual number of ping-slots per beacon period equals to 2^k.", + "title": "Class-B ping-slots per beacon period (only for Class-B).\nValid options are: 0 - 7;" }, "classCSchedulingType": { "$ref": "#/definitions/apiMulticastGroupSchedulingType", @@ -698,7 +704,13 @@ "classBPingSlotPeriod": { "type": "integer", "format": "int64", - "description": "Ping-slot period (only for Class-B)." + "description": "Ping-slot period (only for Class-B).\nDeprecated: use class_b_ping_slot_nb_k." + }, + "classBPingSlotNbK": { + "type": "integer", + "format": "int64", + "description": "The actual number of ping-slots per beacon period equals to 2^k.", + "title": "Class-B ping-slots per beacon period (only for Class-B).\nValid options are: 0 - 7;" }, "classCSchedulingType": { "$ref": "#/definitions/apiMulticastGroupSchedulingType", diff --git a/ui/api.json b/ui/api.json index 872161d..f490861 100644 --- a/ui/api.json +++ b/ui/api.json @@ -1 +1 @@ -{"swagger":"2.0","basePath":"","info":{"title":"ChirpStack REST API","version":"v4.7.0","description":"For documentation, please refer to www.chirpstack.io."},"securityDefinitions":{"api_key":{"type":"apiKey","name":"Grpc-Metadata-Authorization","in":"header"}},"security":[{"api_key":[]}],"schemes":null,"consumes":["application/json"],"produces":["application/json"],"paths":{"/api/applications":{"get":{"operationId":"ApplicationService_List","parameters":[{"description":"Max number of applications to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name (optional).","in":"query","name":"search","required":false,"type":"string"},{"description":"Tenant ID to list the applications for.","in":"query","name":"tenantId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListApplicationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of applications.","tags":["ApplicationService"]},"post":{"operationId":"ApplicationService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateApplicationRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateApplicationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create creates the given application.","tags":["ApplicationService"]}},"/api/applications/{application.id}":{"put":{"operationId":"ApplicationService_Update","parameters":[{"description":"Application ID (UUID).\nNote: on create this will be automatically generated.","in":"path","name":"application.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"application":{"description":"Application object.","properties":{"description":{"description":"Application description.","type":"string"},"name":{"description":"Application name.","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the application.\nThese tags are exposed in all the integration events of devices under\nthis application.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update updates the given application.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations":{"get":{"operationId":"ApplicationService_ListIntegrations","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListIntegrationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List all configured integrations.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/aws-sns":{"delete":{"operationId":"ApplicationService_DeleteAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete AWS SNS integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetAwsSnsIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get AWS SNS integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/azure-service-bus":{"delete":{"operationId":"ApplicationService_DeleteAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete Azure Service-Bus integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetAzureServiceBusIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get Azure Service-Bus integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/gcp-pub-sub":{"delete":{"operationId":"ApplicationService_DeleteGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete GCP Pub/Sub integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetGcpPubSubIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get GCP Pub/Sub integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/http":{"delete":{"operationId":"ApplicationService_DeleteHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the HTTP integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetHttpIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the configured HTTP integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/ifttt":{"delete":{"operationId":"ApplicationService_DeleteIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete IFTTT integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetIftttIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get IFTTT integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/influxdb":{"delete":{"operationId":"ApplicationService_DeleteInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete InfluxDb integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetInfluxDbIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get InfluxDb integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/loracloud":{"delete":{"operationId":"ApplicationService_DeleteLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete LoRaCloud integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetLoraCloudIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get LoRaCloud integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/mqtt/certificate":{"post":{"operationId":"ApplicationService_GenerateMqttIntegrationClientCertificate","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGenerateMqttIntegrationClientCertificateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Generates application ID specific client-certificate.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/mydevices":{"delete":{"operationId":"ApplicationService_DeleteMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete myDevices integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetMyDevicesIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get myDevices integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/pilot-things":{"delete":{"operationId":"ApplicationService_DeletePilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete Pilot Things integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetPilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetPilotThingsIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get Pilot Things integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/thingsboard":{"delete":{"operationId":"ApplicationService_DeleteThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete ThingsBoard integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetThingsBoardIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get ThingsBoard integration.","tags":["ApplicationService"]}},"/api/applications/{id}":{"delete":{"operationId":"ApplicationService_Delete","parameters":[{"description":"Application ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the application for the given ID.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_Get","parameters":[{"description":"Application ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetApplicationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the application for the given ID.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/aws-sns":{"post":{"operationId":"ApplicationService_CreateAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"accessKeyId":{"description":"AWS Access Key ID.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"region":{"description":"AWS region.","type":"string"},"secretAccessKey":{"description":"AWS Secret Access Key.","type":"string"},"topicArn":{"description":"Topic ARN.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create AWS SNS integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"accessKeyId":{"description":"AWS Access Key ID.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"region":{"description":"AWS region.","type":"string"},"secretAccessKey":{"description":"AWS Secret Access Key.","type":"string"},"topicArn":{"description":"Topic ARN.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update AWS SNS integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/azure-service-bus":{"post":{"operationId":"ApplicationService_CreateAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"connectionString":{"description":"Connection string.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"publishName":{"description":"Publish name.\nThis is the name of the topic or queue.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create Azure Service-Bus integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"connectionString":{"description":"Connection string.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"publishName":{"description":"Publish name.\nThis is the name of the topic or queue.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update Azure Service-Bus integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/gcp-pub-sub":{"post":{"operationId":"ApplicationService_CreateGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"credentialsFile":{"description":"Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"projectId":{"description":"Project ID.","type":"string"},"topicName":{"description":"Topic name.\nThis is the name of the Pub/Sub topic.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create GCP Pub/Sub integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"credentialsFile":{"description":"Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"projectId":{"description":"Project ID.","type":"string"},"topicName":{"description":"Topic name.\nThis is the name of the Pub/Sub topic.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update GCP Pub/Sub integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/http":{"post":{"operationId":"ApplicationService_CreateHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"encoding":{"$ref":"#/definitions/apiEncoding","description":"Payload encoding."},"eventEndpointUrl":{"description":"Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"HTTP headers to set when making requests.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create HTTP integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"encoding":{"$ref":"#/definitions/apiEncoding","description":"Payload encoding."},"eventEndpointUrl":{"description":"Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"HTTP headers to set when making requests.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the HTTP integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/ifttt":{"post":{"operationId":"ApplicationService_CreateIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object.","properties":{"arbitraryJson":{"description":"Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.","type":"boolean"},"eventPrefix":{"description":"Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.","type":"string"},"key":{"description":"Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.","type":"string"},"uplinkValues":{"description":"Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n \"batteryLevel\": 75.3,\n \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]","items":{"type":"string"},"type":"array"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create IFTTT integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"arbitraryJson":{"description":"Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.","type":"boolean"},"eventPrefix":{"description":"Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.","type":"string"},"key":{"description":"Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.","type":"string"},"uplinkValues":{"description":"Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n \"batteryLevel\": 75.3,\n \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]","items":{"type":"string"},"type":"array"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update IFTTT integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/influxdb":{"post":{"operationId":"ApplicationService_CreateInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"bucket":{"description":"Bucket. (InfluxDb v2)","type":"string"},"db":{"description":"InfluxDb database name. (InfluxDb v1)","type":"string"},"endpoint":{"description":"InfluxDb API write endpoint (e.g. http://localhost:8086/write).","type":"string"},"organization":{"description":"Organization. (InfluxDb v2)","type":"string"},"password":{"description":"InfluxDb password. (InfluxDb v1)","type":"string"},"precision":{"$ref":"#/definitions/apiInfluxDbPrecision","description":"InfluxDb timestamp precision (InfluxDb v1)."},"retentionPolicyName":{"description":"InfluxDb retention policy name. (InfluxDb v1)","type":"string"},"token":{"description":"Token. (InfluxDb v2)","type":"string"},"username":{"description":"InfluxDb username. (InfluxDb v1)","type":"string"},"version":{"$ref":"#/definitions/apiInfluxDbVersion","description":"InfluxDb version."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create InfluxDb integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"bucket":{"description":"Bucket. (InfluxDb v2)","type":"string"},"db":{"description":"InfluxDb database name. (InfluxDb v1)","type":"string"},"endpoint":{"description":"InfluxDb API write endpoint (e.g. http://localhost:8086/write).","type":"string"},"organization":{"description":"Organization. (InfluxDb v2)","type":"string"},"password":{"description":"InfluxDb password. (InfluxDb v1)","type":"string"},"precision":{"$ref":"#/definitions/apiInfluxDbPrecision","description":"InfluxDb timestamp precision (InfluxDb v1)."},"retentionPolicyName":{"description":"InfluxDb retention policy name. (InfluxDb v1)","type":"string"},"token":{"description":"Token. (InfluxDb v2)","type":"string"},"username":{"description":"InfluxDb username. (InfluxDb v1)","type":"string"},"version":{"$ref":"#/definitions/apiInfluxDbVersion","description":"InfluxDb version."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update InfluxDb integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/loracloud":{"post":{"operationId":"ApplicationService_CreateLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"modemGeolocationServices":{"$ref":"#/definitions/apiLoraCloudModemGeolocationServices","description":"Modem \u0026 Geolocation Services configuration."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create LoRaCloud integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"modemGeolocationServices":{"$ref":"#/definitions/apiLoraCloudModemGeolocationServices","description":"Modem \u0026 Geolocation Services configuration."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update LoRaCloud integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/mydevices":{"post":{"operationId":"ApplicationService_CreateMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"endpoint":{"description":"myDevices API endpoint.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create myDevices integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"endpoint":{"description":"myDevices API endpoint.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update myDevices integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/pilot-things":{"post":{"operationId":"ApplicationService_CreatePilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"server":{"description":"Server URL.","type":"string"},"token":{"description":"Authentication token.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create Pilot Things integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdatePilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"server":{"description":"Server URL.","type":"string"},"token":{"description":"Authentication token.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update Pilot Things integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/thingsboard":{"post":{"operationId":"ApplicationService_CreateThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"server":{"description":"ThingsBoard server endpoint, e.g. https://example.com","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create ThingsBoard integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"server":{"description":"ThingsBoard server endpoint, e.g. https://example.com","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update ThingsBoard integration.","tags":["ApplicationService"]}},"/api/device-profile-templates":{"get":{"operationId":"DeviceProfileTemplateService_List","parameters":[{"description":"Max number of device-profile templates to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDeviceProfileTemplatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the available device-profile templates.","tags":["DeviceProfileTemplateService"]},"post":{"operationId":"DeviceProfileTemplateService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateDeviceProfileTemplateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device-profile template.","tags":["DeviceProfileTemplateService"]}},"/api/device-profile-templates/{deviceProfileTemplate.id}":{"put":{"operationId":"DeviceProfileTemplateService_Update","parameters":[{"description":"Device-profile template ID.","in":"path","name":"deviceProfileTemplate.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceProfileTemplate":{"description":"Object to update.","properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the device-status\nfrom the device.","format":"int64","type":"integer"},"firmware":{"description":"Firmware.","type":"string"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"User defined tags.","type":"object"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. When the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"},"vendor":{"description":"Vendor.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device-profile template.","tags":["DeviceProfileTemplateService"]}},"/api/device-profile-templates/{id}":{"delete":{"operationId":"DeviceProfileTemplateService_Delete","parameters":[{"description":"ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device-profile template with the given ID.","tags":["DeviceProfileTemplateService"]},"get":{"operationId":"DeviceProfileTemplateService_Get","parameters":[{"description":"ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceProfileTemplateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the device-profile template for the given ID.","tags":["DeviceProfileTemplateService"]}},"/api/device-profiles":{"get":{"operationId":"DeviceProfileService_List","parameters":[{"description":"Max number of device-profiles to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name.","in":"query","name":"search","required":false,"type":"string"},{"description":"Tenant ID to list the device-profiles for.","in":"query","name":"tenantId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDeviceProfilesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the available device-profiles.","tags":["DeviceProfileService"]},"post":{"operationId":"DeviceProfileService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateDeviceProfileRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateDeviceProfileResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device-profile.","tags":["DeviceProfileService"]}},"/api/device-profiles/adr-algorithms":{"get":{"operationId":"DeviceProfileService_ListAdrAlgorithms","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDeviceProfileAdrAlgorithmsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List available ADR algorithms.","tags":["DeviceProfileService"]}},"/api/device-profiles/{deviceProfile.id}":{"put":{"operationId":"DeviceProfileService_Update","parameters":[{"description":"Device-profile ID (UUID).\nNote: on create this will be automatically generated.","in":"path","name":"deviceProfile.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceProfile":{"description":"Device-profile object.","properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"allowRoaming":{"description":"Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming.","type":"boolean"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the\ndevice-status from the device.","format":"int64","type":"integer"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"isRelay":{"description":"Device is a Relay device.\nEnable this in case the device is a Relay. A Relay device implements TS011\nand is able to relay data from relay capable devices.\nSee for more information the TS011 specification.","type":"boolean"},"isRelayEd":{"description":"Device is a Relay end-device.\nEnable this in case the device is an end-device that can operate under a\nRelay. Please refer to the TS011 specification for more information.","type":"boolean"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"regionConfigId":{"description":"Region configuration ID.\nIf set, devices will only use the associated region. If let blank, then\ndevices will use all regions matching the selected common-name. Note\nthat multiple region configurations can exist for the same common-name,\ne.g. to provide an 8 channel and 16 channel configuration for the US915\nband.","type":"string"},"relayCadPeriodicity":{"$ref":"#/definitions/apiCadPeriodicity","description":"Relay CAD periodicity."},"relayDefaultChannelIndex":{"description":"Relay default channel index.\nValid values are 0 and 1, please refer to the RP002 specification for\nthe meaning of these values.","format":"int64","type":"integer"},"relayEdActivationMode":{"$ref":"#/definitions/apiRelayModeActivation","description":"Relay end-device activation mode."},"relayEdBackOff":{"description":"Relay end-device back-off (in case it does not receive WOR ACK frame).\n0 = Always send a LoRaWAN uplink\n1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK","format":"int64","type":"integer"},"relayEdRelayOnly":{"description":"End-device only accept data through relay.\nOnly accept data for this device through a relay. This setting is useful\nfor testing as in case of a test-setup, the end-device is usually within\nrange of the gateway.","type":"boolean"},"relayEdSmartEnableLevel":{"description":"Relay end-device smart-enable level.","format":"int64","type":"integer"},"relayEdUplinkLimitBucketSize":{"description":"Relay end-device uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayEdUplinkLimitReloadRate":{"description":"Relay end-device uplink limit reload rate.\n\nValid values:\n * 0 - 62 = X tokens every hour\n * 63 = no limitation","format":"int64","type":"integer"},"relayEnabled":{"description":"Relay must be enabled.","type":"boolean"},"relayGlobalUplinkLimitBucketSize":{"description":"Relay globak uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayGlobalUplinkLimitReloadRate":{"description":"Relay global uplink limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayJoinReqLimitBucketSize":{"description":"Relay join-request limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayJoinReqLimitReloadRate":{"description":"Relay join-request limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayNotifyLimitBucketSize":{"description":"Relay notify limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayNotifyLimitReloadRate":{"description":"Relay notify limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayOverallLimitBucketSize":{"description":"Relay overall limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayOverallLimitReloadRate":{"description":"Relay overall limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relaySecondChannelAckOffset":{"$ref":"#/definitions/apiSecondChAckOffset","description":"Relay second channel ACK offset."},"relaySecondChannelDr":{"description":"Relay second channel DR.","format":"int64","type":"integer"},"relaySecondChannelFreq":{"description":"Relay second channel frequency (Hz).","format":"int64","type":"integer"},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information the the\ndevice-profile. These tags are exposed in all the integration events of\ndevices using this device-profile.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. If the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device-profile.","tags":["DeviceProfileService"]}},"/api/device-profiles/{id}":{"delete":{"operationId":"DeviceProfileService_Delete","parameters":[{"description":"ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device-profile with the given ID.","tags":["DeviceProfileService"]},"get":{"operationId":"DeviceProfileService_Get","parameters":[{"description":"ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceProfileResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the device-profile for the given ID.","tags":["DeviceProfileService"]}},"/api/devices":{"get":{"operationId":"DeviceService_List","parameters":[{"description":"Max number of devices to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name (optional).","in":"query","name":"search","required":false,"type":"string"},{"description":"Application ID (UUID) to filter devices on.","in":"query","name":"applicationId","required":false,"type":"string"},{"description":"Multicst-group ID (UUID) to filter devices on.","in":"query","name":"multicastGroupId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDevicesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of devices.","tags":["DeviceService"]},"post":{"operationId":"DeviceService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateDeviceRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device.","tags":["DeviceService"]}},"/api/devices/{devEui}":{"delete":{"operationId":"DeviceService_Delete","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device with the given DevEUI.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_Get","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get returns the device for the given DevEUI.","tags":["DeviceService"]}},"/api/devices/{devEui}/activation":{"delete":{"operationId":"DeviceService_Deactivate","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Deactivate de-activates the device.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_GetActivation","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceActivationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetActivation returns the current activation details of the device (OTAA or\nABP).","tags":["DeviceService"]}},"/api/devices/{devEui}/dev-nonces":{"delete":{"operationId":"DeviceService_FlushDevNonces","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"FlushDevNonces flushes the OTAA device nonces.","tags":["DeviceService"]}},"/api/devices/{devEui}/get-next-f-cnt-down":{"post":{"operationId":"DeviceService_GetNextFCntDown","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceNextFCntDownResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetNextFCntDown returns the next FCntDown to use for enqueing encrypted\ndownlinks. The difference with the DeviceActivation f_cont_down is that\nthis method takes potential existing queue-items into account.","tags":["DeviceService"]}},"/api/devices/{devEui}/get-random-dev-addr":{"post":{"operationId":"DeviceService_GetRandomDevAddr","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetRandomDevAddrResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetRandomDevAddr returns a random DevAddr taking the NwkID prefix into\naccount.","tags":["DeviceService"]}},"/api/devices/{devEui}/keys":{"delete":{"operationId":"DeviceService_DeleteKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device-keys for the given DevEUI.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_GetKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceKeysResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the device-keys for the given DevEUI.","tags":["DeviceService"]}},"/api/devices/{devEui}/link-metrics":{"get":{"operationId":"DeviceService_GetLinkMetrics","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"description":"Interval start timestamp.","format":"date-time","in":"query","name":"start","required":false,"type":"string"},{"description":"Interval end timestamp.","format":"date-time","in":"query","name":"end","required":false,"type":"string"},{"default":"HOUR","description":"Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.","enum":["HOUR","DAY","MONTH"],"in":"query","name":"aggregation","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceLinkMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetLinkMetrics returns the device link metrics.\nThis includes uplinks, downlinks, RSSI, SNR, etc...","tags":["DeviceService"]}},"/api/devices/{devEui}/metrics":{"get":{"operationId":"DeviceService_GetMetrics","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"description":"Interval start timestamp.","format":"date-time","in":"query","name":"start","required":false,"type":"string"},{"description":"Interval end timestamp.","format":"date-time","in":"query","name":"end","required":false,"type":"string"},{"default":"HOUR","description":"Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.","enum":["HOUR","DAY","MONTH"],"in":"query","name":"aggregation","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetMetrics returns the device metrics.\nNote that this requires a device-profile with codec and measurements\nconfigured.","tags":["DeviceService"]}},"/api/devices/{devEui}/queue":{"delete":{"operationId":"DeviceService_FlushQueue","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"FlushQueue flushes the downlink device-queue.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_GetQueue","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"description":"Return only the count, not the result-set.","in":"query","name":"countOnly","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceQueueItemsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetQueue returns the downlink device-queue.","tags":["DeviceService"]}},"/api/devices/{device.devEui}":{"put":{"operationId":"DeviceService_Update","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"device.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"device":{"description":"Device object.","properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"description":{"description":"Description.","type":"string"},"deviceProfileId":{"description":"Device-profile ID (UUID).","type":"string"},"isDisabled":{"description":"Device is disabled.","type":"boolean"},"joinEui":{"description":"JoinEUI (optional, EUI64).\nThis field will be automatically set / updated on OTAA. However, in some\ncases it must be pre-configured. For example to allow OTAA using a Relay.\nIn this case the Relay needs to know the JoinEUI + DevEUI combinations\nof the devices for which it needs to forward uplinks.","type":"string"},"name":{"description":"Name.","type":"string"},"skipFcntCheck":{"description":"Skip frame-counter checks (this is insecure, but could be helpful for\ndebugging).","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the device.\nThese tags are exposed in all the integration events.","type":"object"},"variables":{"additionalProperties":{"type":"string"},"description":"Variables (user defined).\nThese variables can be used together with integrations to store tokens /\nsecrets that must be configured per device. These variables are not\nexposed in the event payloads.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device.","tags":["DeviceService"]}},"/api/devices/{deviceActivation.devEui}/activate":{"post":{"operationId":"DeviceService_Activate","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"deviceActivation.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceActivation":{"description":"Device activation object.","properties":{"aFCntDown":{"description":"Downlink application frame-counter.","format":"int64","type":"integer"},"appSKey":{"description":"Application session key (HEX encoded).","type":"string"},"devAddr":{"description":"Device address (HEX encoded).","type":"string"},"fCntUp":{"description":"Uplink frame-counter.","format":"int64","type":"integer"},"fNwkSIntKey":{"description":"Forwarding network session integrity key (HEX encoded).","type":"string"},"nFCntDown":{"description":"Downlink network frame-counter.","format":"int64","type":"integer"},"nwkSEncKey":{"description":"Network session encryption key (HEX encoded).","type":"string"},"sNwkSIntKey":{"description":"Serving network session integrity key (HEX encoded).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Activate (re)activates the device with the given parameters (for ABP or for\nimporting OTAA activations).","tags":["DeviceService"]}},"/api/devices/{deviceKeys.devEui}/keys":{"post":{"operationId":"DeviceService_CreateKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"deviceKeys.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceKeys":{"description":"Device-keys object.","properties":{"appKey":{"description":"Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!","type":"string"},"nwkKey":{"description":"Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device-keys.","tags":["DeviceService"]},"put":{"operationId":"DeviceService_UpdateKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"deviceKeys.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceKeys":{"description":"Device-keys object.","properties":{"appKey":{"description":"Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!","type":"string"},"nwkKey":{"description":"Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device-keys.","tags":["DeviceService"]}},"/api/devices/{queueItem.devEui}/queue":{"post":{"operationId":"DeviceService_Enqueue","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"queueItem.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"queueItem":{"properties":{"confirmed":{"description":"Confirmed.","type":"boolean"},"data":{"description":"Data.\nOr use the json_object field when a codec has been configured.","format":"byte","type":"string"},"fCntDown":{"description":"Downlink frame-counter.\nDo not set this for plain-text data payloads. It will be automatically set\nby ChirpStack when the payload has been sent as downlink.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"},"id":{"description":"ID (UUID).\nThis is automatically generated on enqueue.","type":"string"},"isEncrypted":{"description":"Is encrypted.\nThis must be set to true if the end-application has already encrypted\nthe data payload. In this case, the f_cnt_down field must be set to\nthe corresponding frame-counter which has been used during the encryption.","type":"boolean"},"isPending":{"description":"Is pending.\nThis is set by ChirpStack to true when the downlink is pending (e.g. it\nhas been sent, but a confirmation is still pending).","type":"boolean"},"object":{"description":"Only use this when a codec has been configured that can encode this\nobject to bytes.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiEnqueueDeviceQueueItemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Enqueue adds the given item to the downlink queue.","tags":["DeviceService"]}},"/api/gateways":{"get":{"operationId":"GatewayService_List","parameters":[{"description":"Max number of gateways to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name (optional).","in":"query","name":"search","required":false,"type":"string"},{"description":"Tenant ID (UUID) to filter gateways on.\nTo list all gateways as a global admin user, this field can be left blank.","in":"query","name":"tenantId","required":false,"type":"string"},{"description":"Multicast-group ID (UUID) to filter gateways on.","in":"query","name":"multicastGroupId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListGatewaysResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of gateways.","tags":["GatewayService"]},"post":{"operationId":"GatewayService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateGatewayRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create creates the given gateway.","tags":["GatewayService"]}},"/api/gateways/{gateway.gatewayId}":{"put":{"operationId":"GatewayService_Update","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gateway.gatewayId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"gateway":{"description":"Gateway object.","properties":{"description":{"description":"Description.","type":"string"},"location":{"$ref":"#/definitions/commonLocation","description":"Gateway location."},"metadata":{"additionalProperties":{"type":"string"},"description":"Metadata (provided by the gateway).","type":"object"},"name":{"description":"Name.","type":"string"},"statsInterval":{"description":"Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.","format":"int64","type":"integer"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update updates the given gateway.","tags":["GatewayService"]}},"/api/gateways/{gatewayId}":{"delete":{"operationId":"GatewayService_Delete","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete deletes the gateway matching the given Gateway ID.","tags":["GatewayService"]},"get":{"operationId":"GatewayService_Get","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetGatewayResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get returns the gateway for the given Gateway ID.","tags":["GatewayService"]}},"/api/gateways/{gatewayId}/generate-certificate":{"post":{"operationId":"GatewayService_GenerateClientCertificate","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGenerateGatewayClientCertificateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Generate client-certificate for the gateway.","tags":["GatewayService"]}},"/api/gateways/{gatewayId}/metrics":{"get":{"operationId":"GatewayService_GetMetrics","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"},{"description":"Interval start timestamp.","format":"date-time","in":"query","name":"start","required":false,"type":"string"},{"description":"Interval end timestamp.","format":"date-time","in":"query","name":"end","required":false,"type":"string"},{"default":"HOUR","description":"Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.","enum":["HOUR","DAY","MONTH"],"in":"query","name":"aggregation","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetGatewayMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetMetrics returns the gateway metrics.","tags":["GatewayService"]}},"/api/multicast-groups":{"get":{"operationId":"MulticastGroupService_List","parameters":[{"description":"Max number of multicast groups to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name.","in":"query","name":"search","required":false,"type":"string"},{"description":"Application ID to list the multicast groups for.","in":"query","name":"applicationId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListMulticastGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the available multicast groups.","tags":["MulticastGroupService"]},"post":{"operationId":"MulticastGroupService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateMulticastGroupRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateMulticastGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{id}":{"delete":{"operationId":"MulticastGroupService_Delete","parameters":[{"description":"Multicast group iD.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the multicast-group with the given ID.","tags":["MulticastGroupService"]},"get":{"operationId":"MulticastGroupService_Get","parameters":[{"description":"Multicast group ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetMulticastGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get returns the multicast group for the given ID.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroup.id}":{"put":{"operationId":"MulticastGroupService_Update","parameters":[{"description":"ID (UUID).\nThis will be generated automatically on create.","in":"path","name":"multicastGroup.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"multicastGroup":{"description":"Multicast group object to update.","properties":{"applicationId":{"description":"Application ID.\nAfter creation, this can not be updated.","type":"string"},"classBPingSlotPeriod":{"description":"Ping-slot period (only for Class-B).","format":"int64","type":"integer"},"classCSchedulingType":{"$ref":"#/definitions/apiMulticastGroupSchedulingType","description":"Scheduling type (only for Class-C)."},"dr":{"description":"Data-rate.","format":"int64","type":"integer"},"fCnt":{"description":"Frame-counter.","format":"int64","type":"integer"},"frequency":{"description":"Frequency (Hz).","format":"int64","type":"integer"},"groupType":{"$ref":"#/definitions/apiMulticastGroupType","description":"Multicast group type."},"mcAddr":{"description":"Multicast address (HEX encoded DevAddr).","type":"string"},"mcAppSKey":{"description":"Multicast application session key (HEX encoded AES128 key).","type":"string"},"mcNwkSKey":{"description":"Multicast network session key (HEX encoded AES128 key).","type":"string"},"name":{"description":"Name.","type":"string"},"region":{"$ref":"#/definitions/commonRegion","description":"Region."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/devices":{"post":{"operationId":"MulticastGroupService_AddDevice","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"devEui":{"description":"Device EUI (HEX encoded).","type":"string"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add a device to the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/devices/{devEui}":{"delete":{"operationId":"MulticastGroupService_RemoveDevice","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"description":"Device EUI (HEX encoded).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Remove a device from the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/gateways":{"post":{"operationId":"MulticastGroupService_AddGateway","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"gatewayId":{"description":"Gateway ID (HEX encoded).","type":"string"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add a gateway to the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/gateways/{gatewayId}":{"delete":{"operationId":"MulticastGroupService_RemoveGateway","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"description":"Gateway ID (HEX encoded).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Remove a gateway from the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/queue":{"delete":{"operationId":"MulticastGroupService_FlushQueue","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Flush the queue for the given multicast group.","tags":["MulticastGroupService"]},"get":{"operationId":"MulticastGroupService_ListQueue","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListMulticastGroupQueueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the items in the multicast group queue.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{queueItem.multicastGroupId}/queue":{"post":{"operationId":"MulticastGroupService_Enqueue","parameters":[{"description":"Multicast group ID.","in":"path","name":"queueItem.multicastGroupId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"queueItem":{"description":"Multicast queue-item to enqueue.","properties":{"data":{"description":"Payload.","format":"byte","type":"string"},"fCnt":{"description":"Downlink frame-counter.\nThis will be automatically set on enqueue.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiEnqueueMulticastGroupQueueItemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add the given item to the multicast group queue.","tags":["MulticastGroupService"]}},"/api/tenants":{"get":{"operationId":"TenantService_List","parameters":[{"description":"Max number of tenants to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name.","in":"query","name":"search","required":false,"type":"string"},{"description":"If set, filters the result set to the tenants of the user.\nOnly global API keys are able to filter by this field.","in":"query","name":"userId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListTenantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of tenants.","tags":["TenantService"]},"post":{"operationId":"TenantService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateTenantRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateTenantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create a new tenant.","tags":["TenantService"]}},"/api/tenants/{id}":{"delete":{"operationId":"TenantService_Delete","parameters":[{"description":"Tenant ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the tenant with the given ID.","tags":["TenantService"]},"get":{"operationId":"TenantService_Get","parameters":[{"description":"Tenant ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetTenantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the tenant for the given ID.","tags":["TenantService"]}},"/api/tenants/{tenant.id}":{"put":{"operationId":"TenantService_Update","parameters":[{"description":"Tenant ID (UUID).\nNote: this value will be automatically generated on create.","in":"path","name":"tenant.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"tenant":{"description":"Tenant object.","properties":{"canHaveGateways":{"description":"Can the tenant create and \"own\" Gateways?","type":"boolean"},"description":{"description":"Tenant description.","type":"string"},"maxDeviceCount":{"description":"Max. device count for tenant.\nWhen set to 0, the tenant can have unlimited devices.","format":"int64","type":"integer"},"maxGatewayCount":{"description":"Max. gateway count for tenant.\nWhen set to 0, the tenant can have unlimited gateways.","format":"int64","type":"integer"},"name":{"description":"Tenant name,","type":"string"},"privateGatewaysDown":{"description":"Private gateways (downlink).\nIf enabled, then other tenants will not be able to schedule downlink\nmessages through the gateways of this tenant. For example, in case you\ndo want to share uplinks with other tenants (private_gateways_up=false),\nbut you want to prevent other tenants from using gateway airtime.","type":"boolean"},"privateGatewaysUp":{"description":"Private gateways (uplink).\nIf enabled, then uplink messages will not be shared with other tenants.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the tenant. These\ntags are NOT exposed in the integration events.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given tenant.","tags":["TenantService"]}},"/api/tenants/{tenantId}/users":{"get":{"operationId":"TenantService_ListUsers","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantId","required":true,"type":"string"},{"description":"Max number of tenants to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListTenantUsersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of tenant users.","tags":["TenantService"]}},"/api/tenants/{tenantId}/users/{userId}":{"delete":{"operationId":"TenantService_DeleteUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantId","required":true,"type":"string"},{"description":"User ID (UUID).","in":"path","name":"userId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the given tenant user.","tags":["TenantService"]},"get":{"operationId":"TenantService_GetUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantId","required":true,"type":"string"},{"description":"User ID (UUID).","in":"path","name":"userId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetTenantUserResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the the tenant user for the given tenant and user IDs.","tags":["TenantService"]}},"/api/tenants/{tenantUser.tenantId}/users":{"post":{"operationId":"TenantService_AddUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantUser.tenantId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"tenantUser":{"description":"Tenant user object.","properties":{"email":{"description":"Email (only used on get and when adding a user to a tenant).","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"userId":{"description":"User ID (UUID).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add an user to the tenant.\nNote: the user must already exist.","tags":["TenantService"]}},"/api/tenants/{tenantUser.tenantId}/users/{tenantUser.userId}":{"put":{"operationId":"TenantService_UpdateUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantUser.tenantId","required":true,"type":"string"},{"description":"User ID (UUID).","in":"path","name":"tenantUser.userId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"tenantUser":{"description":"Tenant user object.","properties":{"email":{"description":"Email (only used on get and when adding a user to a tenant).","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given tenant user.","tags":["TenantService"]}},"/api/users":{"get":{"operationId":"UserService_List","parameters":[{"description":"Max number of tenants to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListUsersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of users.","tags":["UserService"]},"post":{"operationId":"UserService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateUserRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateUserResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create a new user.","tags":["UserService"]}},"/api/users/{id}":{"delete":{"operationId":"UserService_Delete","parameters":[{"description":"User ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the user with the given ID.","tags":["UserService"]},"get":{"operationId":"UserService_Get","parameters":[{"description":"User ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetUserResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the user for the given ID.","tags":["UserService"]}},"/api/users/{user.id}":{"put":{"operationId":"UserService_Update","parameters":[{"description":"User ID (UUID).\nWill be set automatically on create.","in":"path","name":"user.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"user":{"description":"User object.","properties":{"email":{"description":"E-mail of the user.","type":"string"},"isActive":{"description":"Set to false to disable the user.","type":"boolean"},"isAdmin":{"description":"Set to true to make the user a global administrator.","type":"boolean"},"note":{"description":"Optional note to store with the user.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given user.","tags":["UserService"]}},"/api/users/{userId}/password":{"post":{"operationId":"UserService_UpdatePassword","parameters":[{"description":"User ID.","in":"path","name":"userId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"password":{"description":"Password to set.","type":"string"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the password for the given user.","tags":["UserService"]}}},"definitions":{"apiAdrAlgorithmListItem":{"properties":{"id":{"description":"Algorithm ID.","type":"string"},"name":{"description":"Algorithm name.","type":"string"}},"type":"object"},"apiApplication":{"properties":{"description":{"description":"Application description.","type":"string"},"id":{"description":"Application ID (UUID).\nNote: on create this will be automatically generated.","type":"string"},"name":{"description":"Application name.","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the application.\nThese tags are exposed in all the integration events of devices under\nthis application.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"},"apiApplicationListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"description":{"description":"Application description.","type":"string"},"id":{"description":"Application ID (UUID).","type":"string"},"name":{"description":"Application name.","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiAwsSnsIntegration":{"properties":{"accessKeyId":{"description":"AWS Access Key ID.","type":"string"},"applicationId":{"description":"Application ID (UUID).","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"region":{"description":"AWS region.","type":"string"},"secretAccessKey":{"description":"AWS Secret Access Key.","type":"string"},"topicArn":{"description":"Topic ARN.","type":"string"}},"type":"object"},"apiAzureServiceBusIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"connectionString":{"description":"Connection string.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"publishName":{"description":"Publish name.\nThis is the name of the topic or queue.","type":"string"}},"type":"object"},"apiCadPeriodicity":{"default":"SEC_1","description":"- SEC_1: 1 second.\n - MS_500: 500 milliseconds\n - MS_250: 250 milliseconds\n - MS_100: 100 milliseconds\n - MS_50: 50 milliseconds\n - MS_20: 20 milliseconds","enum":["SEC_1","MS_500","MS_250","MS_100","MS_50","MS_20"],"type":"string"},"apiCodecRuntime":{"default":"NONE","description":" - NONE: None.\n - CAYENNE_LPP: Cayenne LPP.\n - JS: JavaScript.","enum":["NONE","CAYENNE_LPP","JS"],"type":"string"},"apiCreateApplicationRequest":{"properties":{"application":{"$ref":"#/definitions/apiApplication","description":"Application object to create."}},"type":"object"},"apiCreateApplicationResponse":{"properties":{"id":{"description":"Application ID (UUID).","type":"string"}},"type":"object"},"apiCreateDeviceProfileRequest":{"properties":{"deviceProfile":{"$ref":"#/definitions/apiDeviceProfile","description":"Object to create."}},"type":"object"},"apiCreateDeviceProfileResponse":{"properties":{"id":{"description":"ID (UUID).","type":"string"}},"type":"object"},"apiCreateDeviceProfileTemplateRequest":{"properties":{"deviceProfileTemplate":{"$ref":"#/definitions/apiDeviceProfileTemplate","description":"Object to create."}},"type":"object"},"apiCreateDeviceRequest":{"properties":{"device":{"$ref":"#/definitions/apiDevice","description":"Device object."}},"type":"object"},"apiCreateGatewayRequest":{"properties":{"gateway":{"$ref":"#/definitions/apiGateway","description":"Gateway object."}},"type":"object"},"apiCreateMulticastGroupRequest":{"properties":{"multicastGroup":{"$ref":"#/definitions/apiMulticastGroup","description":"Multicast group to create."}},"type":"object"},"apiCreateMulticastGroupResponse":{"properties":{"id":{"description":"ID of created multicast group (UUID).","type":"string"}},"type":"object"},"apiCreateTenantRequest":{"properties":{"tenant":{"$ref":"#/definitions/apiTenant","description":"Tenant object to create."}},"type":"object"},"apiCreateTenantResponse":{"properties":{"id":{"description":"Tenant ID.","type":"string"}},"type":"object"},"apiCreateUserRequest":{"properties":{"password":{"description":"Password to set for the user.","type":"string"},"tenants":{"description":"Add the user to the following tenants.","items":{"$ref":"#/definitions/apiUserTenant"},"type":"array"},"user":{"$ref":"#/definitions/apiUser","description":"User object to create."}},"type":"object"},"apiCreateUserResponse":{"properties":{"id":{"description":"User ID.","type":"string"}},"type":"object"},"apiDevice":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"description":{"description":"Description.","type":"string"},"devEui":{"description":"DevEUI (EUI64).","type":"string"},"deviceProfileId":{"description":"Device-profile ID (UUID).","type":"string"},"isDisabled":{"description":"Device is disabled.","type":"boolean"},"joinEui":{"description":"JoinEUI (optional, EUI64).\nThis field will be automatically set / updated on OTAA. However, in some\ncases it must be pre-configured. For example to allow OTAA using a Relay.\nIn this case the Relay needs to know the JoinEUI + DevEUI combinations\nof the devices for which it needs to forward uplinks.","type":"string"},"name":{"description":"Name.","type":"string"},"skipFcntCheck":{"description":"Skip frame-counter checks (this is insecure, but could be helpful for\ndebugging).","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the device.\nThese tags are exposed in all the integration events.","type":"object"},"variables":{"additionalProperties":{"type":"string"},"description":"Variables (user defined).\nThese variables can be used together with integrations to store tokens /\nsecrets that must be configured per device. These variables are not\nexposed in the event payloads.","type":"object"}},"type":"object"},"apiDeviceActivation":{"properties":{"aFCntDown":{"description":"Downlink application frame-counter.","format":"int64","type":"integer"},"appSKey":{"description":"Application session key (HEX encoded).","type":"string"},"devAddr":{"description":"Device address (HEX encoded).","type":"string"},"devEui":{"description":"Device EUI (EUI64).","type":"string"},"fCntUp":{"description":"Uplink frame-counter.","format":"int64","type":"integer"},"fNwkSIntKey":{"description":"Forwarding network session integrity key (HEX encoded).","type":"string"},"nFCntDown":{"description":"Downlink network frame-counter.","format":"int64","type":"integer"},"nwkSEncKey":{"description":"Network session encryption key (HEX encoded).","type":"string"},"sNwkSIntKey":{"description":"Serving network session integrity key (HEX encoded).","type":"string"}},"type":"object"},"apiDeviceKeys":{"properties":{"appKey":{"description":"Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!","type":"string"},"devEui":{"description":"DevEUI (EUI64).","type":"string"},"nwkKey":{"description":"Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!","type":"string"}},"type":"object"},"apiDeviceListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"description":{"description":"Description.","type":"string"},"devEui":{"description":"DevEUI (EUI64).","type":"string"},"deviceProfileId":{"description":"Device-profile ID (UUID).","type":"string"},"deviceProfileName":{"description":"Device-profile name.","type":"string"},"deviceStatus":{"$ref":"#/definitions/apiDeviceStatus","description":"Device status."},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"name":{"description":"Name.","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiDeviceProfile":{"properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"allowRoaming":{"description":"Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming.","type":"boolean"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the\ndevice-status from the device.","format":"int64","type":"integer"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"id":{"description":"Device-profile ID (UUID).\nNote: on create this will be automatically generated.","type":"string"},"isRelay":{"description":"Device is a Relay device.\nEnable this in case the device is a Relay. A Relay device implements TS011\nand is able to relay data from relay capable devices.\nSee for more information the TS011 specification.","type":"boolean"},"isRelayEd":{"description":"Device is a Relay end-device.\nEnable this in case the device is an end-device that can operate under a\nRelay. Please refer to the TS011 specification for more information.","type":"boolean"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"regionConfigId":{"description":"Region configuration ID.\nIf set, devices will only use the associated region. If let blank, then\ndevices will use all regions matching the selected common-name. Note\nthat multiple region configurations can exist for the same common-name,\ne.g. to provide an 8 channel and 16 channel configuration for the US915\nband.","type":"string"},"relayCadPeriodicity":{"$ref":"#/definitions/apiCadPeriodicity","description":"Relay CAD periodicity."},"relayDefaultChannelIndex":{"description":"Relay default channel index.\nValid values are 0 and 1, please refer to the RP002 specification for\nthe meaning of these values.","format":"int64","type":"integer"},"relayEdActivationMode":{"$ref":"#/definitions/apiRelayModeActivation","description":"Relay end-device activation mode."},"relayEdBackOff":{"description":"Relay end-device back-off (in case it does not receive WOR ACK frame).\n0 = Always send a LoRaWAN uplink\n1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK","format":"int64","type":"integer"},"relayEdRelayOnly":{"description":"End-device only accept data through relay.\nOnly accept data for this device through a relay. This setting is useful\nfor testing as in case of a test-setup, the end-device is usually within\nrange of the gateway.","type":"boolean"},"relayEdSmartEnableLevel":{"description":"Relay end-device smart-enable level.","format":"int64","type":"integer"},"relayEdUplinkLimitBucketSize":{"description":"Relay end-device uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayEdUplinkLimitReloadRate":{"description":"Relay end-device uplink limit reload rate.\n\nValid values:\n * 0 - 62 = X tokens every hour\n * 63 = no limitation","format":"int64","type":"integer"},"relayEnabled":{"description":"Relay must be enabled.","type":"boolean"},"relayGlobalUplinkLimitBucketSize":{"description":"Relay globak uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayGlobalUplinkLimitReloadRate":{"description":"Relay global uplink limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayJoinReqLimitBucketSize":{"description":"Relay join-request limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayJoinReqLimitReloadRate":{"description":"Relay join-request limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayNotifyLimitBucketSize":{"description":"Relay notify limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayNotifyLimitReloadRate":{"description":"Relay notify limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayOverallLimitBucketSize":{"description":"Relay overall limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayOverallLimitReloadRate":{"description":"Relay overall limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relaySecondChannelAckOffset":{"$ref":"#/definitions/apiSecondChAckOffset","description":"Relay second channel ACK offset."},"relaySecondChannelDr":{"description":"Relay second channel DR.","format":"int64","type":"integer"},"relaySecondChannelFreq":{"description":"Relay second channel frequency (Hz).","format":"int64","type":"integer"},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information the the\ndevice-profile. These tags are exposed in all the integration events of\ndevices using this device-profile.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. If the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"}},"type":"object"},"apiDeviceProfileListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"id":{"description":"Device-profile ID (UUID).","type":"string"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"name":{"description":"Name.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class-B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiDeviceProfileTemplate":{"properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the device-status\nfrom the device.","format":"int64","type":"integer"},"firmware":{"description":"Firmware.","type":"string"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"id":{"description":"Device-profile template ID.","type":"string"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"User defined tags.","type":"object"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. When the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"},"vendor":{"description":"Vendor.","type":"string"}},"type":"object"},"apiDeviceProfileTemplateListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"firmware":{"description":"Firmware.","type":"string"},"id":{"description":"Device-profile template ID.","type":"string"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"name":{"description":"Name.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class-B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"},"vendor":{"description":"Vendor.","type":"string"}},"type":"object"},"apiDeviceQueueItem":{"properties":{"confirmed":{"description":"Confirmed.","type":"boolean"},"data":{"description":"Data.\nOr use the json_object field when a codec has been configured.","format":"byte","type":"string"},"devEui":{"description":"Device EUI (EUI64).","type":"string"},"fCntDown":{"description":"Downlink frame-counter.\nDo not set this for plain-text data payloads. It will be automatically set\nby ChirpStack when the payload has been sent as downlink.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"},"id":{"description":"ID (UUID).\nThis is automatically generated on enqueue.","type":"string"},"isEncrypted":{"description":"Is encrypted.\nThis must be set to true if the end-application has already encrypted\nthe data payload. In this case, the f_cnt_down field must be set to\nthe corresponding frame-counter which has been used during the encryption.","type":"boolean"},"isPending":{"description":"Is pending.\nThis is set by ChirpStack to true when the downlink is pending (e.g. it\nhas been sent, but a confirmation is still pending).","type":"boolean"},"object":{"description":"Only use this when a codec has been configured that can encode this\nobject to bytes.","type":"object"}},"type":"object"},"apiDeviceState":{"properties":{"name":{"description":"Name.","type":"string"},"value":{"description":"Value.","type":"string"}},"type":"object"},"apiDeviceStatus":{"properties":{"batteryLevel":{"description":"Device battery level as a percentage.\n-1 when the battery level is not available.","format":"float","type":"number"},"externalPowerSource":{"description":"Device is connected to an external power source.","type":"boolean"},"margin":{"description":"The device margin status\n-32..32: The demodulation SNR ration in dB","format":"int32","type":"integer"}},"type":"object"},"apiEncoding":{"default":"JSON","enum":["JSON","PROTOBUF"],"type":"string"},"apiEnqueueDeviceQueueItemResponse":{"properties":{"id":{"description":"ID (UUID).","type":"string"}},"type":"object"},"apiEnqueueMulticastGroupQueueItemResponse":{"properties":{"fCnt":{"description":"Frame-counter of the enqueued payload.","format":"int64","type":"integer"}},"type":"object"},"apiGateway":{"properties":{"description":{"description":"Description.","type":"string"},"gatewayId":{"description":"Gateway ID (EUI64).","type":"string"},"location":{"$ref":"#/definitions/commonLocation","description":"Gateway location."},"metadata":{"additionalProperties":{"type":"string"},"description":"Metadata (provided by the gateway).","type":"object"},"name":{"description":"Name.","type":"string"},"statsInterval":{"description":"Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.","format":"int64","type":"integer"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"},"apiGatewayListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"description":{"description":"Description.","type":"string"},"gatewayId":{"description":"Gateway ID (EUI64).","type":"string"},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"location":{"$ref":"#/definitions/commonLocation","description":"Location."},"name":{"description":"Name.","type":"string"},"properties":{"additionalProperties":{"type":"string"},"description":"Gateway properties.","type":"object"},"state":{"$ref":"#/definitions/apiGatewayState","description":"Gateway state.\nPlease note that the state of the gateway is driven by the stats\npackages that are sent by the gateway."},"tenantId":{"description":"Tenant ID.","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGatewayState":{"default":"NEVER_SEEN","description":" - NEVER_SEEN: The gateway has never sent any stats.\n - ONLINE: Online.\n - OFFLINE: Offline.","enum":["NEVER_SEEN","ONLINE","OFFLINE"],"type":"string"},"apiGcpPubSubIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"credentialsFile":{"description":"Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"projectId":{"description":"Project ID.","type":"string"},"topicName":{"description":"Topic name.\nThis is the name of the Pub/Sub topic.","type":"string"}},"type":"object"},"apiGenerateGatewayClientCertificateResponse":{"properties":{"caCert":{"description":"CA certificate.","type":"string"},"expiresAt":{"description":"Expires at defines the expiration date of the certificate.","format":"date-time","type":"string"},"tlsCert":{"description":"TLS certificate.","type":"string"},"tlsKey":{"description":"TLS key.","type":"string"}},"type":"object"},"apiGenerateMqttIntegrationClientCertificateResponse":{"properties":{"caCert":{"description":"CA certificate.","type":"string"},"expiresAt":{"description":"Expires at defines the expiration date of the certificate.","format":"date-time","type":"string"},"tlsCert":{"description":"TLS certificate.","type":"string"},"tlsKey":{"description":"TLS key.","type":"string"}},"type":"object"},"apiGetApplicationResponse":{"properties":{"application":{"$ref":"#/definitions/apiApplication","description":"Application object."},"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"measurementKeys":{"description":"Measurement keys.\nThis contains the measurement keys from all the device-profiles that\nare used by the devices under this application.","items":{"type":"string"},"type":"array"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetAwsSnsIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiAwsSnsIntegration","description":"Integration object."}},"type":"object"},"apiGetAzureServiceBusIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiAzureServiceBusIntegration","description":"Integration object."}},"type":"object"},"apiGetDeviceActivationResponse":{"properties":{"deviceActivation":{"$ref":"#/definitions/apiDeviceActivation","description":"Device activation object."},"joinServerContext":{"$ref":"#/definitions/commonJoinServerContext","description":"Join-Server context.\nA non-empty value indicatest that ChirpStack does not have access to\nthe AppSKey and that the encryption / decryption of the payloads is\nthe responsibility of the end-application."}},"type":"object"},"apiGetDeviceKeysResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"deviceKeys":{"$ref":"#/definitions/apiDeviceKeys","description":"Device-keys object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetDeviceLinkMetricsResponse":{"properties":{"errors":{"$ref":"#/definitions/commonMetric","description":"Errors."},"gwRssi":{"$ref":"#/definitions/commonMetric","description":"RSSI (as reported by the gateway(s))."},"gwSnr":{"$ref":"#/definitions/commonMetric","description":"SNR (as reported by the gateway(s))."},"rxPackets":{"$ref":"#/definitions/commonMetric","description":"Packets received from the device."},"rxPacketsPerDr":{"$ref":"#/definitions/commonMetric","description":"Packets received by DR."},"rxPacketsPerFreq":{"$ref":"#/definitions/commonMetric","description":"Packets received by frequency."}},"type":"object"},"apiGetDeviceMetricsResponse":{"properties":{"metrics":{"additionalProperties":{"$ref":"#/definitions/commonMetric"},"type":"object"},"states":{"additionalProperties":{"$ref":"#/definitions/apiDeviceState"},"type":"object"}},"type":"object"},"apiGetDeviceNextFCntDownResponse":{"properties":{"fCntDown":{"description":"FCntDown.","format":"int64","type":"integer"}},"type":"object"},"apiGetDeviceProfileResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"deviceProfile":{"$ref":"#/definitions/apiDeviceProfile","description":"Device-profile object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetDeviceProfileTemplateResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"deviceProfileTemplate":{"$ref":"#/definitions/apiDeviceProfileTemplate","description":"Device-profile template object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetDeviceQueueItemsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceQueueItem"},"type":"array"},"totalCount":{"description":"Total number of queue items.","format":"int64","type":"integer"}},"type":"object"},"apiGetDeviceResponse":{"properties":{"classEnabled":{"$ref":"#/definitions/commonDeviceClass","description":"Enabled device class."},"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"device":{"$ref":"#/definitions/apiDevice","description":"Device object."},"deviceStatus":{"$ref":"#/definitions/apiDeviceStatus","description":"Device status."},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetGatewayMetricsResponse":{"properties":{"rxPackets":{"$ref":"#/definitions/commonMetric","description":"RX packets."},"rxPacketsPerDr":{"$ref":"#/definitions/commonMetric","description":"RX packets / DR."},"rxPacketsPerFreq":{"$ref":"#/definitions/commonMetric","description":"RX packets / frequency."},"txPackets":{"$ref":"#/definitions/commonMetric","description":"TX packets."},"txPacketsPerDr":{"$ref":"#/definitions/commonMetric","description":"TX packets / DR."},"txPacketsPerFreq":{"$ref":"#/definitions/commonMetric","description":"TX packets / frequency."},"txPacketsPerStatus":{"$ref":"#/definitions/commonMetric","description":"TX packets per status."}},"type":"object"},"apiGetGatewayResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"gateway":{"$ref":"#/definitions/apiGateway","description":"Gateway object."},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetGcpPubSubIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiGcpPubSubIntegration","description":"Integration object."}},"type":"object"},"apiGetHttpIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiHttpIntegration","description":"Integration object."}},"type":"object"},"apiGetIftttIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiIftttIntegration","description":"Integration object."}},"type":"object"},"apiGetInfluxDbIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiInfluxDbIntegration","description":"Integration object."}},"type":"object"},"apiGetLoraCloudIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiLoraCloudIntegration","description":"Integration object."}},"type":"object"},"apiGetMulticastGroupResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"multicastGroup":{"$ref":"#/definitions/apiMulticastGroup","description":"Multicast group object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetMyDevicesIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiMyDevicesIntegration","description":"Integration object."}},"type":"object"},"apiGetPilotThingsIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiPilotThingsIntegration","description":"Integration object."}},"type":"object"},"apiGetRandomDevAddrResponse":{"properties":{"devAddr":{"description":"DevAddr.","type":"string"}},"type":"object"},"apiGetTenantResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"tenant":{"$ref":"#/definitions/apiTenant","description":"Tenant object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetTenantUserResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"tenantUser":{"$ref":"#/definitions/apiTenantUser","description":"Tenant user object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetThingsBoardIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiThingsBoardIntegration","description":"Integration object."}},"type":"object"},"apiGetUserResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"},"user":{"$ref":"#/definitions/apiUser","description":"User object."}},"type":"object"},"apiHttpIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Payload encoding."},"eventEndpointUrl":{"description":"Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"HTTP headers to set when making requests.","type":"object"}},"type":"object"},"apiIftttIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"arbitraryJson":{"description":"Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.","type":"boolean"},"eventPrefix":{"description":"Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.","type":"string"},"key":{"description":"Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.","type":"string"},"uplinkValues":{"description":"Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n \"batteryLevel\": 75.3,\n \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]","items":{"type":"string"},"type":"array"}},"type":"object"},"apiInfluxDbIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"bucket":{"description":"Bucket. (InfluxDb v2)","type":"string"},"db":{"description":"InfluxDb database name. (InfluxDb v1)","type":"string"},"endpoint":{"description":"InfluxDb API write endpoint (e.g. http://localhost:8086/write).","type":"string"},"organization":{"description":"Organization. (InfluxDb v2)","type":"string"},"password":{"description":"InfluxDb password. (InfluxDb v1)","type":"string"},"precision":{"$ref":"#/definitions/apiInfluxDbPrecision","description":"InfluxDb timestamp precision (InfluxDb v1)."},"retentionPolicyName":{"description":"InfluxDb retention policy name. (InfluxDb v1)","type":"string"},"token":{"description":"Token. (InfluxDb v2)","type":"string"},"username":{"description":"InfluxDb username. (InfluxDb v1)","type":"string"},"version":{"$ref":"#/definitions/apiInfluxDbVersion","description":"InfluxDb version."}},"type":"object"},"apiInfluxDbPrecision":{"default":"NS","enum":["NS","U","MS","S","M","H"],"type":"string"},"apiInfluxDbVersion":{"default":"INFLUXDB_1","enum":["INFLUXDB_1","INFLUXDB_2"],"type":"string"},"apiIntegrationKind":{"default":"HTTP","enum":["HTTP","INFLUX_DB","THINGS_BOARD","MY_DEVICES","LORA_CLOUD","GCP_PUB_SUB","AWS_SNS","AZURE_SERVICE_BUS","PILOT_THINGS","MQTT_GLOBAL","IFTTT"],"type":"string"},"apiIntegrationListItem":{"properties":{"kind":{"$ref":"#/definitions/apiIntegrationKind","description":"Integration kind."}},"type":"object"},"apiListApplicationsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiApplicationListItem"},"type":"array"},"totalCount":{"description":"Total number of applications.","format":"int64","type":"integer"}},"type":"object"},"apiListDeviceProfileAdrAlgorithmsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiAdrAlgorithmListItem"},"type":"array"},"totalCount":{"description":"Total number of algorithms.","format":"int64","type":"integer"}},"type":"object"},"apiListDeviceProfileTemplatesResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceProfileTemplateListItem"},"type":"array"},"totalCount":{"description":"Total number of device-profile templates.","format":"int64","type":"integer"}},"type":"object"},"apiListDeviceProfilesResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceProfileListItem"},"type":"array"},"totalCount":{"description":"Total number of device-profiles.","format":"int64","type":"integer"}},"type":"object"},"apiListDevicesResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceListItem"},"type":"array"},"totalCount":{"description":"Total number of devices.","format":"int64","type":"integer"}},"type":"object"},"apiListGatewaysResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiGatewayListItem"},"type":"array"},"totalCount":{"description":"Total number of gateways.","format":"int64","type":"integer"}},"type":"object"},"apiListIntegrationsResponse":{"properties":{"result":{"description":"Integrations within result-set.","items":{"$ref":"#/definitions/apiIntegrationListItem"},"type":"array"},"totalCount":{"description":"Total number of integrations available within the result-set.","format":"int64","type":"integer"}},"type":"object"},"apiListMulticastGroupQueueResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/apiMulticastGroupQueueItem"},"type":"array"}},"type":"object"},"apiListMulticastGroupsResponse":{"properties":{"result":{"description":"Result-test.","items":{"$ref":"#/definitions/apiMulticastGroupListItem"},"type":"array"},"totalCount":{"description":"Total number of multicast groups.","format":"int64","type":"integer"}},"type":"object"},"apiListTenantUsersResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiTenantUserListItem"},"type":"array"},"totalCount":{"description":"Total number of tenants.","format":"int64","type":"integer"}},"type":"object"},"apiListTenantsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiTenantListItem"},"type":"array"},"totalCount":{"description":"Total number of tenants.","format":"int64","type":"integer"}},"type":"object"},"apiListUsersResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiUserListItem"},"type":"array"},"totalCount":{"description":"Total number of users.","format":"int64","type":"integer"}},"type":"object"},"apiLoraCloudIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"modemGeolocationServices":{"$ref":"#/definitions/apiLoraCloudModemGeolocationServices","description":"Modem \u0026 Geolocation Services configuration."}},"type":"object"},"apiLoraCloudModemGeolocationServices":{"properties":{"forwardFPorts":{"description":"Forward FPorts.\nForward uplink messages matching the given FPorts to the MGS.","items":{"format":"int64","type":"integer"},"type":"array"},"geolocationBufferTtl":{"description":"Geolocation buffer TTL (in seconds).\nIf \u003e 0, uplink RX meta-data will be stored in a buffer so that\nthe meta-data of multiple uplinks can be used for geolocation.","format":"int64","type":"integer"},"geolocationGnss":{"description":"GNSS based geolocation is enabled (LR1110).","type":"boolean"},"geolocationGnssPayloadField":{"description":"GNSS payload field.\nThis holds the name of the field in the decoded payload object which\ncontains the GNSS payload bytes (as HEX string).","type":"string"},"geolocationGnssUseRxTime":{"description":"GNSS use RX time.\nIn case this is set to true, the resolver will use the RX time of the\nnetwork instead of the timestamp included in the LR1110 payload.","type":"boolean"},"geolocationMinBufferSize":{"description":"Geolocation minimum buffer size.\nIf \u003e 0, geolocation will only be performed when the buffer has\nat least the given size.","format":"int64","type":"integer"},"geolocationRssi":{"description":"RSSI based geolocation is enabled.","type":"boolean"},"geolocationTdoa":{"description":"TDOA based geolocation is enabled.","type":"boolean"},"geolocationWifi":{"description":"Wifi based geolocation is enabled.","type":"boolean"},"geolocationWifiPayloadField":{"description":"Wifi payload field.\nThis holds the name of the field in the decoded payload object which\ncontains an array of objects with the following fields:\n* macAddress - e.g. 01:23:45:67:89:ab\n* signalStrength - e.g. -51 (optional)","type":"string"},"gnssUseGatewayLocation":{"description":"Use gateway location for GNSS resolving.\nIn the case this is set to true, ChirpStack will provide the location of\none of the gateways to the MGS resolver to aid the resolving process.\nDisable this in case the gateway location is not accurate / incorrectly\nconfigured as an incorrect location will cause the resolver to return an\nerror.","type":"boolean"},"gnssUseRxTime":{"description":"Use rx time for GNSS resolving.\nIn case this is set to true, the MGS resolver will use the RX time of the\nnetwork instead of the timestamp included in the LR1110 payload.","type":"boolean"},"modemEnabled":{"description":"Device implements Modem / Modem-E stack.","type":"boolean"},"parseTlv":{"description":"Parse TLV records.\nIf enabled, stream records (expected in TLV format) are scanned for GNSS\ndata (0x06 or 0x07). If found, ChirpStack will make an additional\ngeolocation call to the MGS API for resolving the location of the detected\npayload.","type":"boolean"},"token":{"description":"API token.","type":"string"}},"type":"object"},"apiMeasurement":{"properties":{"kind":{"$ref":"#/definitions/apiMeasurementKind","description":"Kind."},"name":{"description":"Name (user defined).","type":"string"}},"type":"object"},"apiMeasurementKind":{"default":"UNKNOWN","description":" - UNKNOWN: Unknown (in which case it is not tracked).\n - COUNTER: Incrementing counters that never decrease (these are not reset on each\nreading).\n - ABSOLUTE: Counters that do get reset upon reading.\n - GAUGE: E.g. a temperature value.\n - STRING: E.g. a firmware version, true / false value.","enum":["UNKNOWN","COUNTER","ABSOLUTE","GAUGE","STRING"],"type":"string"},"apiMulticastGroup":{"properties":{"applicationId":{"description":"Application ID.\nAfter creation, this can not be updated.","type":"string"},"classBPingSlotPeriod":{"description":"Ping-slot period (only for Class-B).","format":"int64","type":"integer"},"classCSchedulingType":{"$ref":"#/definitions/apiMulticastGroupSchedulingType","description":"Scheduling type (only for Class-C)."},"dr":{"description":"Data-rate.","format":"int64","type":"integer"},"fCnt":{"description":"Frame-counter.","format":"int64","type":"integer"},"frequency":{"description":"Frequency (Hz).","format":"int64","type":"integer"},"groupType":{"$ref":"#/definitions/apiMulticastGroupType","description":"Multicast group type."},"id":{"description":"ID (UUID).\nThis will be generated automatically on create.","type":"string"},"mcAddr":{"description":"Multicast address (HEX encoded DevAddr).","type":"string"},"mcAppSKey":{"description":"Multicast application session key (HEX encoded AES128 key).","type":"string"},"mcNwkSKey":{"description":"Multicast network session key (HEX encoded AES128 key).","type":"string"},"name":{"description":"Name.","type":"string"},"region":{"$ref":"#/definitions/commonRegion","description":"Region."}},"type":"object"},"apiMulticastGroupListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"groupType":{"$ref":"#/definitions/apiMulticastGroupType","description":"Multicast group type."},"id":{"description":"ID.","type":"string"},"name":{"description":"Name.","type":"string"},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiMulticastGroupQueueItem":{"properties":{"data":{"description":"Payload.","format":"byte","type":"string"},"fCnt":{"description":"Downlink frame-counter.\nThis will be automatically set on enqueue.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"},"multicastGroupId":{"description":"Multicast group ID.","type":"string"}},"type":"object"},"apiMulticastGroupSchedulingType":{"default":"DELAY","description":" - DELAY: Delay.\nIf multicast downlinks must be sent through multiple gateways, then\nthese will be sent one by one with a delay between each gateway.\n - GPS_TIME: Time.\nIf multicast downlinks must be sent through multiple gateways, then\nthese will be sent simultaneously using GPS time synchronization.\nNote that this does require GPS time-synchronized LoRa gateways.","enum":["DELAY","GPS_TIME"],"type":"string"},"apiMulticastGroupType":{"default":"CLASS_C","description":" - CLASS_C: Class C.\n - CLASS_B: Class-B.","enum":["CLASS_C","CLASS_B"],"type":"string"},"apiMyDevicesIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"endpoint":{"description":"myDevices API endpoint.","type":"string"}},"type":"object"},"apiPilotThingsIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"server":{"description":"Server URL.","type":"string"},"token":{"description":"Authentication token.","type":"string"}},"type":"object"},"apiRelayModeActivation":{"default":"DISABLE_RELAY_MODE","description":" - DISABLE_RELAY_MODE: Disable the relay mode.\n - ENABLE_RELAY_MODE: Enable the relay model.\n - DYNAMIC: Dynamic.\n - END_DEVICE_CONTROLLED: End-device controlled.","enum":["DISABLE_RELAY_MODE","ENABLE_RELAY_MODE","DYNAMIC","END_DEVICE_CONTROLLED"],"type":"string"},"apiSecondChAckOffset":{"default":"KHZ_0","description":" - KHZ_0: 0 kHz.\n - KHZ_200: 200 kHz.\n - KHZ_400: 400 kHz.\n - KHZ_800: 800 kHz.\n - KHZ_1600: 1600 kHz.\n - KHZ_3200: 3200 kHz.","enum":["KHZ_0","KHZ_200","KHZ_400","KHZ_800","KHZ_1600","KHZ_3200"],"type":"string"},"apiTenant":{"properties":{"canHaveGateways":{"description":"Can the tenant create and \"own\" Gateways?","type":"boolean"},"description":{"description":"Tenant description.","type":"string"},"id":{"description":"Tenant ID (UUID).\nNote: this value will be automatically generated on create.","type":"string"},"maxDeviceCount":{"description":"Max. device count for tenant.\nWhen set to 0, the tenant can have unlimited devices.","format":"int64","type":"integer"},"maxGatewayCount":{"description":"Max. gateway count for tenant.\nWhen set to 0, the tenant can have unlimited gateways.","format":"int64","type":"integer"},"name":{"description":"Tenant name,","type":"string"},"privateGatewaysDown":{"description":"Private gateways (downlink).\nIf enabled, then other tenants will not be able to schedule downlink\nmessages through the gateways of this tenant. For example, in case you\ndo want to share uplinks with other tenants (private_gateways_up=false),\nbut you want to prevent other tenants from using gateway airtime.","type":"boolean"},"privateGatewaysUp":{"description":"Private gateways (uplink).\nIf enabled, then uplink messages will not be shared with other tenants.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the tenant. These\ntags are NOT exposed in the integration events.","type":"object"}},"type":"object"},"apiTenantListItem":{"properties":{"canHaveGateways":{"description":"Can the tenant create and \"own\" Gateways?","type":"boolean"},"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"id":{"description":"Tenant ID (UUID).","type":"string"},"maxDeviceCount":{"description":"Max device count.\n0 = unlimited.","format":"int64","type":"integer"},"maxGatewayCount":{"description":"Max gateway count.\n0 = unlimited.","format":"int64","type":"integer"},"name":{"description":"Tenant name.","type":"string"},"privateGatewaysDown":{"description":"Private gateways (downlink).","type":"boolean"},"privateGatewaysUp":{"description":"Private gateways (uplink).","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiTenantUser":{"properties":{"email":{"description":"Email (only used on get and when adding a user to a tenant).","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"userId":{"description":"User ID (UUID).","type":"string"}},"type":"object"},"apiTenantUserListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"email":{"description":"Email.","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"},"userId":{"description":"User ID (UUID).","type":"string"}},"type":"object"},"apiThingsBoardIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"server":{"description":"ThingsBoard server endpoint, e.g. https://example.com","type":"string"}},"type":"object"},"apiUser":{"properties":{"email":{"description":"E-mail of the user.","type":"string"},"id":{"description":"User ID (UUID).\nWill be set automatically on create.","type":"string"},"isActive":{"description":"Set to false to disable the user.","type":"boolean"},"isAdmin":{"description":"Set to true to make the user a global administrator.","type":"boolean"},"note":{"description":"Optional note to store with the user.","type":"string"}},"type":"object"},"apiUserListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"email":{"description":"Email of the user.","type":"string"},"id":{"description":"User ID (UUID).","type":"string"},"isActive":{"description":"Set to false to disable the user.","type":"boolean"},"isAdmin":{"description":"Set to true to make the user a global administrator.","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiUserTenant":{"properties":{"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"tenantId":{"description":"Tenant ID.","type":"string"}},"type":"object"},"commonAggregation":{"default":"HOUR","description":" - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.","enum":["HOUR","DAY","MONTH"],"type":"string"},"commonDeviceClass":{"default":"CLASS_A","description":" - CLASS_A: Class-A.\n - CLASS_B: Class-B.\n - CLASS_C: Class-C.","enum":["CLASS_A","CLASS_B","CLASS_C"],"type":"string"},"commonJoinServerContext":{"description":"Join-Server context.","properties":{"appSKey":{"$ref":"#/definitions/commonKeyEnvelope","description":"AppSKey envelope."},"sessionKeyId":{"description":"Session-key ID.","type":"string"}},"type":"object"},"commonKeyEnvelope":{"properties":{"aesKey":{"description":"AES key (when the kek_label is set, this value must first be decrypted).","format":"byte","type":"string"},"kekLabel":{"description":"KEK label.","type":"string"}},"type":"object"},"commonLocation":{"properties":{"accuracy":{"description":"Accuracy.","format":"float","type":"number"},"altitude":{"description":"Altitude.","format":"double","type":"number"},"latitude":{"description":"Latitude.","format":"double","type":"number"},"longitude":{"description":"Longitude.","format":"double","type":"number"},"source":{"$ref":"#/definitions/commonLocationSource","description":"Location source."}},"type":"object"},"commonLocationSource":{"default":"UNKNOWN","description":" - UNKNOWN: Unknown.\n - GPS: GPS.\n - CONFIG: Manually configured.\n - GEO_RESOLVER_TDOA: Geo resolver (TDOA).\n - GEO_RESOLVER_RSSI: Geo resolver (RSSI).\n - GEO_RESOLVER_GNSS: Geo resolver (GNSS).\n - GEO_RESOLVER_WIFI: Geo resolver (WIFI).","enum":["UNKNOWN","GPS","CONFIG","GEO_RESOLVER_TDOA","GEO_RESOLVER_RSSI","GEO_RESOLVER_GNSS","GEO_RESOLVER_WIFI"],"type":"string"},"commonMacVersion":{"default":"LORAWAN_1_0_0","enum":["LORAWAN_1_0_0","LORAWAN_1_0_1","LORAWAN_1_0_2","LORAWAN_1_0_3","LORAWAN_1_0_4","LORAWAN_1_1_0"],"type":"string"},"commonMetric":{"properties":{"datasets":{"description":"Datasets.","items":{"$ref":"#/definitions/commonMetricDataset"},"type":"array"},"kind":{"$ref":"#/definitions/commonMetricKind","description":"Kind."},"name":{"description":"Name.","type":"string"},"timestamps":{"description":"Timestamps.","items":{"format":"date-time","type":"string"},"type":"array"}},"type":"object"},"commonMetricDataset":{"properties":{"data":{"description":"Data.\nEach value index corresponds with the same timestamp index of the Metric.","items":{"format":"float","type":"number"},"type":"array"},"label":{"description":"Label.","type":"string"}},"type":"object"},"commonMetricKind":{"default":"COUNTER","description":" - COUNTER: Incrementing counters that never decrease (these are not reset on each\nreading).\n - ABSOLUTE: Counters that do get reset upon reading.\n - GAUGE: E.g. a temperature value.","enum":["COUNTER","ABSOLUTE","GAUGE"],"type":"string"},"commonRegParamsRevision":{"default":"A","enum":["A","B","RP002_1_0_0","RP002_1_0_1","RP002_1_0_2","RP002_1_0_3"],"type":"string"},"commonRegion":{"default":"EU868","description":"- EU868: EU868\n - US915: US915\n - CN779: CN779\n - EU433: EU433\n - AU915: AU915\n - CN470: CN470\n - AS923: AS923\n - AS923_2: AS923 with -1.80 MHz frequency offset\n - AS923_3: AS923 with -6.60 MHz frequency offset\n - AS923_4: (AS923 with -5.90 MHz frequency offset).\n - KR920: KR920\n - IN865: IN865\n - RU864: RU864\n - ISM2400: ISM2400 (LoRaWAN 2.4 GHz)","enum":["EU868","US915","CN779","EU433","AU915","CN470","AS923","AS923_2","AS923_3","AS923_4","KR920","IN865","RU864","ISM2400"],"type":"string"},"protobufAny":{"additionalProperties":{},"properties":{"@type":{"type":"string"}},"type":"object"},"protobufNullValue":{"default":"NULL_VALUE","description":"`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value.","enum":["NULL_VALUE"],"type":"string"},"rpcStatus":{"properties":{"code":{"format":"int32","type":"integer"},"details":{"items":{"$ref":"#/definitions/protobufAny"},"type":"array"},"message":{"type":"string"}},"type":"object"}}} +{"swagger":"2.0","basePath":"","info":{"title":"ChirpStack REST API","version":"v4.8.1","description":"For documentation, please refer to www.chirpstack.io."},"securityDefinitions":{"api_key":{"type":"apiKey","name":"Grpc-Metadata-Authorization","in":"header"}},"security":[{"api_key":[]}],"schemes":null,"consumes":["application/json"],"produces":["application/json"],"paths":{"/api/applications":{"get":{"operationId":"ApplicationService_List","parameters":[{"description":"Max number of applications to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name (optional).","in":"query","name":"search","required":false,"type":"string"},{"description":"Tenant ID to list the applications for.","in":"query","name":"tenantId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListApplicationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of applications.","tags":["ApplicationService"]},"post":{"operationId":"ApplicationService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateApplicationRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateApplicationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create creates the given application.","tags":["ApplicationService"]}},"/api/applications/{application.id}":{"put":{"operationId":"ApplicationService_Update","parameters":[{"description":"Application ID (UUID).\nNote: on create this will be automatically generated.","in":"path","name":"application.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"application":{"description":"Application object.","properties":{"description":{"description":"Application description.","type":"string"},"name":{"description":"Application name.","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the application.\nThese tags are exposed in all the integration events of devices under\nthis application.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update updates the given application.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations":{"get":{"operationId":"ApplicationService_ListIntegrations","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListIntegrationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List all configured integrations.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/aws-sns":{"delete":{"operationId":"ApplicationService_DeleteAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete AWS SNS integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetAwsSnsIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get AWS SNS integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/azure-service-bus":{"delete":{"operationId":"ApplicationService_DeleteAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete Azure Service-Bus integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetAzureServiceBusIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get Azure Service-Bus integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/gcp-pub-sub":{"delete":{"operationId":"ApplicationService_DeleteGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete GCP Pub/Sub integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetGcpPubSubIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get GCP Pub/Sub integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/http":{"delete":{"operationId":"ApplicationService_DeleteHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the HTTP integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetHttpIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the configured HTTP integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/ifttt":{"delete":{"operationId":"ApplicationService_DeleteIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete IFTTT integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetIftttIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get IFTTT integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/influxdb":{"delete":{"operationId":"ApplicationService_DeleteInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete InfluxDb integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetInfluxDbIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get InfluxDb integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/loracloud":{"delete":{"operationId":"ApplicationService_DeleteLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete LoRaCloud integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetLoraCloudIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get LoRaCloud integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/mqtt/certificate":{"post":{"operationId":"ApplicationService_GenerateMqttIntegrationClientCertificate","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGenerateMqttIntegrationClientCertificateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Generates application ID specific client-certificate.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/mydevices":{"delete":{"operationId":"ApplicationService_DeleteMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete myDevices integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetMyDevicesIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get myDevices integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/pilot-things":{"delete":{"operationId":"ApplicationService_DeletePilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete Pilot Things integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetPilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetPilotThingsIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get Pilot Things integration.","tags":["ApplicationService"]}},"/api/applications/{applicationId}/integrations/thingsboard":{"delete":{"operationId":"ApplicationService_DeleteThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete ThingsBoard integration.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_GetThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"applicationId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetThingsBoardIntegrationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get ThingsBoard integration.","tags":["ApplicationService"]}},"/api/applications/{id}":{"delete":{"operationId":"ApplicationService_Delete","parameters":[{"description":"Application ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the application for the given ID.","tags":["ApplicationService"]},"get":{"operationId":"ApplicationService_Get","parameters":[{"description":"Application ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetApplicationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the application for the given ID.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/aws-sns":{"post":{"operationId":"ApplicationService_CreateAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"accessKeyId":{"description":"AWS Access Key ID.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"region":{"description":"AWS region.","type":"string"},"secretAccessKey":{"description":"AWS Secret Access Key.","type":"string"},"topicArn":{"description":"Topic ARN.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create AWS SNS integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateAwsSnsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"accessKeyId":{"description":"AWS Access Key ID.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"region":{"description":"AWS region.","type":"string"},"secretAccessKey":{"description":"AWS Secret Access Key.","type":"string"},"topicArn":{"description":"Topic ARN.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update AWS SNS integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/azure-service-bus":{"post":{"operationId":"ApplicationService_CreateAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"connectionString":{"description":"Connection string.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"publishName":{"description":"Publish name.\nThis is the name of the topic or queue.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create Azure Service-Bus integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateAzureServiceBusIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"connectionString":{"description":"Connection string.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"publishName":{"description":"Publish name.\nThis is the name of the topic or queue.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update Azure Service-Bus integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/gcp-pub-sub":{"post":{"operationId":"ApplicationService_CreateGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"credentialsFile":{"description":"Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"projectId":{"description":"Project ID.","type":"string"},"topicName":{"description":"Topic name.\nThis is the name of the Pub/Sub topic.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create GCP Pub/Sub integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateGcpPubSubIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"credentialsFile":{"description":"Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"projectId":{"description":"Project ID.","type":"string"},"topicName":{"description":"Topic name.\nThis is the name of the Pub/Sub topic.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update GCP Pub/Sub integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/http":{"post":{"operationId":"ApplicationService_CreateHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"encoding":{"$ref":"#/definitions/apiEncoding","description":"Payload encoding."},"eventEndpointUrl":{"description":"Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"HTTP headers to set when making requests.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create HTTP integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateHttpIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"encoding":{"$ref":"#/definitions/apiEncoding","description":"Payload encoding."},"eventEndpointUrl":{"description":"Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"HTTP headers to set when making requests.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the HTTP integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/ifttt":{"post":{"operationId":"ApplicationService_CreateIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object.","properties":{"arbitraryJson":{"description":"Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.","type":"boolean"},"eventPrefix":{"description":"Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.","type":"string"},"key":{"description":"Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.","type":"string"},"uplinkValues":{"description":"Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n \"batteryLevel\": 75.3,\n \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]","items":{"type":"string"},"type":"array"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create IFTTT integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateIftttIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"arbitraryJson":{"description":"Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.","type":"boolean"},"eventPrefix":{"description":"Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.","type":"string"},"key":{"description":"Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.","type":"string"},"uplinkValues":{"description":"Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n \"batteryLevel\": 75.3,\n \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]","items":{"type":"string"},"type":"array"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update IFTTT integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/influxdb":{"post":{"operationId":"ApplicationService_CreateInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"bucket":{"description":"Bucket. (InfluxDb v2)","type":"string"},"db":{"description":"InfluxDb database name. (InfluxDb v1)","type":"string"},"endpoint":{"description":"InfluxDb API write endpoint (e.g. http://localhost:8086/write).","type":"string"},"organization":{"description":"Organization. (InfluxDb v2)","type":"string"},"password":{"description":"InfluxDb password. (InfluxDb v1)","type":"string"},"precision":{"$ref":"#/definitions/apiInfluxDbPrecision","description":"InfluxDb timestamp precision (InfluxDb v1)."},"retentionPolicyName":{"description":"InfluxDb retention policy name. (InfluxDb v1)","type":"string"},"token":{"description":"Token. (InfluxDb v2)","type":"string"},"username":{"description":"InfluxDb username. (InfluxDb v1)","type":"string"},"version":{"$ref":"#/definitions/apiInfluxDbVersion","description":"InfluxDb version."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create InfluxDb integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateInfluxDbIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"bucket":{"description":"Bucket. (InfluxDb v2)","type":"string"},"db":{"description":"InfluxDb database name. (InfluxDb v1)","type":"string"},"endpoint":{"description":"InfluxDb API write endpoint (e.g. http://localhost:8086/write).","type":"string"},"organization":{"description":"Organization. (InfluxDb v2)","type":"string"},"password":{"description":"InfluxDb password. (InfluxDb v1)","type":"string"},"precision":{"$ref":"#/definitions/apiInfluxDbPrecision","description":"InfluxDb timestamp precision (InfluxDb v1)."},"retentionPolicyName":{"description":"InfluxDb retention policy name. (InfluxDb v1)","type":"string"},"token":{"description":"Token. (InfluxDb v2)","type":"string"},"username":{"description":"InfluxDb username. (InfluxDb v1)","type":"string"},"version":{"$ref":"#/definitions/apiInfluxDbVersion","description":"InfluxDb version."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update InfluxDb integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/loracloud":{"post":{"operationId":"ApplicationService_CreateLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"modemGeolocationServices":{"$ref":"#/definitions/apiLoraCloudModemGeolocationServices","description":"Modem \u0026 Geolocation Services configuration."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create LoRaCloud integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateLoraCloudIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"modemGeolocationServices":{"$ref":"#/definitions/apiLoraCloudModemGeolocationServices","description":"Modem \u0026 Geolocation Services configuration."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update LoRaCloud integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/mydevices":{"post":{"operationId":"ApplicationService_CreateMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"endpoint":{"description":"myDevices API endpoint.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create myDevices integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateMyDevicesIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"endpoint":{"description":"myDevices API endpoint.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update myDevices integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/pilot-things":{"post":{"operationId":"ApplicationService_CreatePilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"server":{"description":"Server URL.","type":"string"},"token":{"description":"Authentication token.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create Pilot Things integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdatePilotThingsIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"server":{"description":"Server URL.","type":"string"},"token":{"description":"Authentication token.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update Pilot Things integration.","tags":["ApplicationService"]}},"/api/applications/{integration.applicationId}/integrations/thingsboard":{"post":{"operationId":"ApplicationService_CreateThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to create.","properties":{"server":{"description":"ThingsBoard server endpoint, e.g. https://example.com","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create ThingsBoard integration.","tags":["ApplicationService"]},"put":{"operationId":"ApplicationService_UpdateThingsBoardIntegration","parameters":[{"description":"Application ID (UUID).","in":"path","name":"integration.applicationId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"integration":{"description":"Integration object to update.","properties":{"server":{"description":"ThingsBoard server endpoint, e.g. https://example.com","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update ThingsBoard integration.","tags":["ApplicationService"]}},"/api/device-profile-templates":{"get":{"operationId":"DeviceProfileTemplateService_List","parameters":[{"description":"Max number of device-profile templates to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDeviceProfileTemplatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the available device-profile templates.","tags":["DeviceProfileTemplateService"]},"post":{"operationId":"DeviceProfileTemplateService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateDeviceProfileTemplateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device-profile template.","tags":["DeviceProfileTemplateService"]}},"/api/device-profile-templates/{deviceProfileTemplate.id}":{"put":{"operationId":"DeviceProfileTemplateService_Update","parameters":[{"description":"Device-profile template ID.","in":"path","name":"deviceProfileTemplate.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceProfileTemplate":{"description":"Object to update.","properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the device-status\nfrom the device.","format":"int64","type":"integer"},"firmware":{"description":"Firmware.","type":"string"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"User defined tags.","type":"object"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. When the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"},"vendor":{"description":"Vendor.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device-profile template.","tags":["DeviceProfileTemplateService"]}},"/api/device-profile-templates/{id}":{"delete":{"operationId":"DeviceProfileTemplateService_Delete","parameters":[{"description":"ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device-profile template with the given ID.","tags":["DeviceProfileTemplateService"]},"get":{"operationId":"DeviceProfileTemplateService_Get","parameters":[{"description":"ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceProfileTemplateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the device-profile template for the given ID.","tags":["DeviceProfileTemplateService"]}},"/api/device-profiles":{"get":{"operationId":"DeviceProfileService_List","parameters":[{"description":"Max number of device-profiles to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name.","in":"query","name":"search","required":false,"type":"string"},{"description":"Tenant ID to list the device-profiles for.","in":"query","name":"tenantId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDeviceProfilesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the available device-profiles.","tags":["DeviceProfileService"]},"post":{"operationId":"DeviceProfileService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateDeviceProfileRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateDeviceProfileResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device-profile.","tags":["DeviceProfileService"]}},"/api/device-profiles/adr-algorithms":{"get":{"operationId":"DeviceProfileService_ListAdrAlgorithms","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDeviceProfileAdrAlgorithmsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List available ADR algorithms.","tags":["DeviceProfileService"]}},"/api/device-profiles/{deviceProfile.id}":{"put":{"operationId":"DeviceProfileService_Update","parameters":[{"description":"Device-profile ID (UUID).\nNote: on create this will be automatically generated.","in":"path","name":"deviceProfile.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceProfile":{"description":"Device-profile object.","properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"allowRoaming":{"description":"Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming.","type":"boolean"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the\ndevice-status from the device.","format":"int64","type":"integer"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"isRelay":{"description":"Device is a Relay device.\nEnable this in case the device is a Relay. A Relay device implements TS011\nand is able to relay data from relay capable devices.\nSee for more information the TS011 specification.","type":"boolean"},"isRelayEd":{"description":"Device is a Relay end-device.\nEnable this in case the device is an end-device that can operate under a\nRelay. Please refer to the TS011 specification for more information.","type":"boolean"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"regionConfigId":{"description":"Region configuration ID.\nIf set, devices will only use the associated region. If let blank, then\ndevices will use all regions matching the selected common-name. Note\nthat multiple region configurations can exist for the same common-name,\ne.g. to provide an 8 channel and 16 channel configuration for the US915\nband.","type":"string"},"relayCadPeriodicity":{"$ref":"#/definitions/apiCadPeriodicity","description":"Relay CAD periodicity."},"relayDefaultChannelIndex":{"description":"Relay default channel index.\nValid values are 0 and 1, please refer to the RP002 specification for\nthe meaning of these values.","format":"int64","type":"integer"},"relayEdActivationMode":{"$ref":"#/definitions/apiRelayModeActivation","description":"Relay end-device activation mode."},"relayEdBackOff":{"description":"Relay end-device back-off (in case it does not receive WOR ACK frame).\n0 = Always send a LoRaWAN uplink\n1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK","format":"int64","type":"integer"},"relayEdRelayOnly":{"description":"End-device only accept data through relay.\nOnly accept data for this device through a relay. This setting is useful\nfor testing as in case of a test-setup, the end-device is usually within\nrange of the gateway.","type":"boolean"},"relayEdSmartEnableLevel":{"description":"Relay end-device smart-enable level.","format":"int64","type":"integer"},"relayEdUplinkLimitBucketSize":{"description":"Relay end-device uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayEdUplinkLimitReloadRate":{"description":"Relay end-device uplink limit reload rate.\n\nValid values:\n * 0 - 62 = X tokens every hour\n * 63 = no limitation","format":"int64","type":"integer"},"relayEnabled":{"description":"Relay must be enabled.","type":"boolean"},"relayGlobalUplinkLimitBucketSize":{"description":"Relay globak uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayGlobalUplinkLimitReloadRate":{"description":"Relay global uplink limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayJoinReqLimitBucketSize":{"description":"Relay join-request limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayJoinReqLimitReloadRate":{"description":"Relay join-request limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayNotifyLimitBucketSize":{"description":"Relay notify limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayNotifyLimitReloadRate":{"description":"Relay notify limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayOverallLimitBucketSize":{"description":"Relay overall limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayOverallLimitReloadRate":{"description":"Relay overall limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relaySecondChannelAckOffset":{"$ref":"#/definitions/apiSecondChAckOffset","description":"Relay second channel ACK offset."},"relaySecondChannelDr":{"description":"Relay second channel DR.","format":"int64","type":"integer"},"relaySecondChannelFreq":{"description":"Relay second channel frequency (Hz).","format":"int64","type":"integer"},"rx1Delay":{"description":"RX1 Delay.\n\nThis makes it possible to override the system RX1 Delay. Please note that\nthis values only has effect in case it is higher than the system value.\nIn other words, it can be used to increase the RX1 Delay but not to decrease\nit.\nValid options are 1 - 15 (0 = always use system RX1 Delay).","format":"int64","type":"integer"},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information the the\ndevice-profile. These tags are exposed in all the integration events of\ndevices using this device-profile.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. If the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device-profile.","tags":["DeviceProfileService"]}},"/api/device-profiles/{id}":{"delete":{"operationId":"DeviceProfileService_Delete","parameters":[{"description":"ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device-profile with the given ID.","tags":["DeviceProfileService"]},"get":{"operationId":"DeviceProfileService_Get","parameters":[{"description":"ID (UUID).","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceProfileResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the device-profile for the given ID.","tags":["DeviceProfileService"]}},"/api/devices":{"get":{"operationId":"DeviceService_List","parameters":[{"description":"Max number of devices to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name (optional).","in":"query","name":"search","required":false,"type":"string"},{"description":"Application ID (UUID) to filter devices on.","in":"query","name":"applicationId","required":false,"type":"string"},{"description":"Multicst-group ID (UUID) to filter devices on.","in":"query","name":"multicastGroupId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListDevicesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of devices.","tags":["DeviceService"]},"post":{"operationId":"DeviceService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateDeviceRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device.","tags":["DeviceService"]}},"/api/devices/{devEui}":{"delete":{"operationId":"DeviceService_Delete","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device with the given DevEUI.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_Get","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get returns the device for the given DevEUI.","tags":["DeviceService"]}},"/api/devices/{devEui}/activation":{"delete":{"operationId":"DeviceService_Deactivate","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Deactivate de-activates the device.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_GetActivation","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceActivationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetActivation returns the current activation details of the device (OTAA or\nABP).","tags":["DeviceService"]}},"/api/devices/{devEui}/dev-nonces":{"delete":{"operationId":"DeviceService_FlushDevNonces","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"FlushDevNonces flushes the OTAA device nonces.","tags":["DeviceService"]}},"/api/devices/{devEui}/get-next-f-cnt-down":{"post":{"operationId":"DeviceService_GetNextFCntDown","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceNextFCntDownResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetNextFCntDown returns the next FCntDown to use for enqueing encrypted\ndownlinks. The difference with the DeviceActivation f_cont_down is that\nthis method takes potential existing queue-items into account.","tags":["DeviceService"]}},"/api/devices/{devEui}/get-random-dev-addr":{"post":{"operationId":"DeviceService_GetRandomDevAddr","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetRandomDevAddrResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetRandomDevAddr returns a random DevAddr taking the NwkID prefix into\naccount.","tags":["DeviceService"]}},"/api/devices/{devEui}/keys":{"delete":{"operationId":"DeviceService_DeleteKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the device-keys for the given DevEUI.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_GetKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceKeysResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the device-keys for the given DevEUI.","tags":["DeviceService"]}},"/api/devices/{devEui}/link-metrics":{"get":{"operationId":"DeviceService_GetLinkMetrics","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"description":"Interval start timestamp.","format":"date-time","in":"query","name":"start","required":false,"type":"string"},{"description":"Interval end timestamp.","format":"date-time","in":"query","name":"end","required":false,"type":"string"},{"default":"HOUR","description":"Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.","enum":["HOUR","DAY","MONTH","MINUTE"],"in":"query","name":"aggregation","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceLinkMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetLinkMetrics returns the device link metrics.\nThis includes uplinks, downlinks, RSSI, SNR, etc...","tags":["DeviceService"]}},"/api/devices/{devEui}/metrics":{"get":{"operationId":"DeviceService_GetMetrics","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"description":"Interval start timestamp.","format":"date-time","in":"query","name":"start","required":false,"type":"string"},{"description":"Interval end timestamp.","format":"date-time","in":"query","name":"end","required":false,"type":"string"},{"default":"HOUR","description":"Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.","enum":["HOUR","DAY","MONTH","MINUTE"],"in":"query","name":"aggregation","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetMetrics returns the device metrics.\nNote that this requires a device-profile with codec and measurements\nconfigured.","tags":["DeviceService"]}},"/api/devices/{devEui}/queue":{"delete":{"operationId":"DeviceService_FlushQueue","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"FlushQueue flushes the downlink device-queue.","tags":["DeviceService"]},"get":{"operationId":"DeviceService_GetQueue","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"devEui","required":true,"type":"string"},{"description":"Return only the count, not the result-set.","in":"query","name":"countOnly","required":false,"type":"boolean"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetDeviceQueueItemsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetQueue returns the downlink device-queue.","tags":["DeviceService"]}},"/api/devices/{device.devEui}":{"put":{"operationId":"DeviceService_Update","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"device.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"device":{"description":"Device object.","properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"description":{"description":"Description.","type":"string"},"deviceProfileId":{"description":"Device-profile ID (UUID).","type":"string"},"isDisabled":{"description":"Device is disabled.","type":"boolean"},"joinEui":{"description":"JoinEUI (optional, EUI64).\nThis field will be automatically set / updated on OTAA. However, in some\ncases it must be pre-configured. For example to allow OTAA using a Relay.\nIn this case the Relay needs to know the JoinEUI + DevEUI combinations\nof the devices for which it needs to forward uplinks.","type":"string"},"name":{"description":"Name.","type":"string"},"skipFcntCheck":{"description":"Skip frame-counter checks (this is insecure, but could be helpful for\ndebugging).","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the device.\nThese tags are exposed in all the integration events.","type":"object"},"variables":{"additionalProperties":{"type":"string"},"description":"Variables (user defined).\nThese variables can be used together with integrations to store tokens /\nsecrets that must be configured per device. These variables are not\nexposed in the event payloads.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device.","tags":["DeviceService"]}},"/api/devices/{deviceActivation.devEui}/activate":{"post":{"operationId":"DeviceService_Activate","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"deviceActivation.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceActivation":{"description":"Device activation object.","properties":{"aFCntDown":{"description":"Downlink application frame-counter.","format":"int64","type":"integer"},"appSKey":{"description":"Application session key (HEX encoded).","type":"string"},"devAddr":{"description":"Device address (HEX encoded).","type":"string"},"fCntUp":{"description":"Uplink frame-counter.","format":"int64","type":"integer"},"fNwkSIntKey":{"description":"Forwarding network session integrity key (HEX encoded).","type":"string"},"nFCntDown":{"description":"Downlink network frame-counter.","format":"int64","type":"integer"},"nwkSEncKey":{"description":"Network session encryption key (HEX encoded).","type":"string"},"sNwkSIntKey":{"description":"Serving network session integrity key (HEX encoded).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Activate (re)activates the device with the given parameters (for ABP or for\nimporting OTAA activations).","tags":["DeviceService"]}},"/api/devices/{deviceKeys.devEui}/keys":{"post":{"operationId":"DeviceService_CreateKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"deviceKeys.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceKeys":{"description":"Device-keys object.","properties":{"appKey":{"description":"Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!","type":"string"},"nwkKey":{"description":"Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given device-keys.","tags":["DeviceService"]},"put":{"operationId":"DeviceService_UpdateKeys","parameters":[{"description":"DevEUI (EUI64).","in":"path","name":"deviceKeys.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"deviceKeys":{"description":"Device-keys object.","properties":{"appKey":{"description":"Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!","type":"string"},"nwkKey":{"description":"Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given device-keys.","tags":["DeviceService"]}},"/api/devices/{queueItem.devEui}/queue":{"post":{"operationId":"DeviceService_Enqueue","parameters":[{"description":"Device EUI (EUI64).","in":"path","name":"queueItem.devEui","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"queueItem":{"properties":{"confirmed":{"description":"Confirmed.","type":"boolean"},"data":{"description":"Data.\nOr use the json_object field when a codec has been configured.","format":"byte","type":"string"},"fCntDown":{"description":"Downlink frame-counter.\nDo not set this for plain-text data payloads. It will be automatically set\nby ChirpStack when the payload has been sent as downlink.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"},"id":{"description":"ID (UUID).\nThis is automatically generated on enqueue.","type":"string"},"isEncrypted":{"description":"Is encrypted.\nThis must be set to true if the end-application has already encrypted\nthe data payload. In this case, the f_cnt_down field must be set to\nthe corresponding frame-counter which has been used during the encryption.","type":"boolean"},"isPending":{"description":"Is pending.\nThis is set by ChirpStack to true when the downlink is pending (e.g. it\nhas been sent, but a confirmation is still pending).","type":"boolean"},"object":{"description":"Only use this when a codec has been configured that can encode this\nobject to bytes.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiEnqueueDeviceQueueItemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Enqueue adds the given item to the downlink queue.","tags":["DeviceService"]}},"/api/gateways":{"get":{"operationId":"GatewayService_List","parameters":[{"description":"Max number of gateways to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name (optional).","in":"query","name":"search","required":false,"type":"string"},{"description":"Tenant ID (UUID) to filter gateways on.\nTo list all gateways as a global admin user, this field can be left blank.","in":"query","name":"tenantId","required":false,"type":"string"},{"description":"Multicast-group ID (UUID) to filter gateways on.","in":"query","name":"multicastGroupId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListGatewaysResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of gateways.","tags":["GatewayService"]},"post":{"operationId":"GatewayService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateGatewayRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create creates the given gateway.","tags":["GatewayService"]}},"/api/gateways/{gateway.gatewayId}":{"put":{"operationId":"GatewayService_Update","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gateway.gatewayId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"gateway":{"description":"Gateway object.","properties":{"description":{"description":"Description.","type":"string"},"location":{"$ref":"#/definitions/commonLocation","description":"Gateway location."},"metadata":{"additionalProperties":{"type":"string"},"description":"Metadata (provided by the gateway).","type":"object"},"name":{"description":"Name.","type":"string"},"statsInterval":{"description":"Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.","format":"int64","type":"integer"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update updates the given gateway.","tags":["GatewayService"]}},"/api/gateways/{gatewayId}":{"delete":{"operationId":"GatewayService_Delete","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete deletes the gateway matching the given Gateway ID.","tags":["GatewayService"]},"get":{"operationId":"GatewayService_Get","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetGatewayResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get returns the gateway for the given Gateway ID.","tags":["GatewayService"]}},"/api/gateways/{gatewayId}/duty-cycle-metrics":{"get":{"operationId":"GatewayService_GetDutyCycleMetrics","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"},{"description":"Interval start timestamp.","format":"date-time","in":"query","name":"start","required":false,"type":"string"},{"description":"Interval end timestamp.","format":"date-time","in":"query","name":"end","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetGatewayDutyCycleMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetDutyCycleMetrics returns the duty-cycle metrics.\nNote that only the last 2 hours of data are stored. Currently only per minute aggregation is available.","tags":["GatewayService"]}},"/api/gateways/{gatewayId}/generate-certificate":{"post":{"operationId":"GatewayService_GenerateClientCertificate","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGenerateGatewayClientCertificateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Generate client-certificate for the gateway.","tags":["GatewayService"]}},"/api/gateways/{gatewayId}/metrics":{"get":{"operationId":"GatewayService_GetMetrics","parameters":[{"description":"Gateway ID (EUI64).","in":"path","name":"gatewayId","required":true,"type":"string"},{"description":"Interval start timestamp.","format":"date-time","in":"query","name":"start","required":false,"type":"string"},{"description":"Interval end timestamp.","format":"date-time","in":"query","name":"end","required":false,"type":"string"},{"default":"HOUR","description":"Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.","enum":["HOUR","DAY","MONTH","MINUTE"],"in":"query","name":"aggregation","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetGatewayMetricsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"GetMetrics returns the gateway metrics.","tags":["GatewayService"]}},"/api/multicast-groups":{"get":{"operationId":"MulticastGroupService_List","parameters":[{"description":"Max number of multicast groups to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name.","in":"query","name":"search","required":false,"type":"string"},{"description":"Application ID to list the multicast groups for.","in":"query","name":"applicationId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListMulticastGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the available multicast groups.","tags":["MulticastGroupService"]},"post":{"operationId":"MulticastGroupService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateMulticastGroupRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateMulticastGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create the given multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{id}":{"delete":{"operationId":"MulticastGroupService_Delete","parameters":[{"description":"Multicast group iD.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the multicast-group with the given ID.","tags":["MulticastGroupService"]},"get":{"operationId":"MulticastGroupService_Get","parameters":[{"description":"Multicast group ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetMulticastGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get returns the multicast group for the given ID.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroup.id}":{"put":{"operationId":"MulticastGroupService_Update","parameters":[{"description":"ID (UUID).\nThis will be generated automatically on create.","in":"path","name":"multicastGroup.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"multicastGroup":{"description":"Multicast group object to update.","properties":{"applicationId":{"description":"Application ID.\nAfter creation, this can not be updated.","type":"string"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period (only for Class-B).\nValid options are: 0 - 7;","format":"int64","type":"integer"},"classBPingSlotPeriod":{"description":"Ping-slot period (only for Class-B).\nDeprecated: use class_b_ping_slot_nb_k.","format":"int64","type":"integer"},"classCSchedulingType":{"$ref":"#/definitions/apiMulticastGroupSchedulingType","description":"Scheduling type (only for Class-C)."},"dr":{"description":"Data-rate.","format":"int64","type":"integer"},"fCnt":{"description":"Frame-counter.","format":"int64","type":"integer"},"frequency":{"description":"Frequency (Hz).","format":"int64","type":"integer"},"groupType":{"$ref":"#/definitions/apiMulticastGroupType","description":"Multicast group type."},"mcAddr":{"description":"Multicast address (HEX encoded DevAddr).","type":"string"},"mcAppSKey":{"description":"Multicast application session key (HEX encoded AES128 key).","type":"string"},"mcNwkSKey":{"description":"Multicast network session key (HEX encoded AES128 key).","type":"string"},"name":{"description":"Name.","type":"string"},"region":{"$ref":"#/definitions/commonRegion","description":"Region."}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/devices":{"post":{"operationId":"MulticastGroupService_AddDevice","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"devEui":{"description":"Device EUI (HEX encoded).","type":"string"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add a device to the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/devices/{devEui}":{"delete":{"operationId":"MulticastGroupService_RemoveDevice","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"description":"Device EUI (HEX encoded).","in":"path","name":"devEui","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Remove a device from the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/gateways":{"post":{"operationId":"MulticastGroupService_AddGateway","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"gatewayId":{"description":"Gateway ID (HEX encoded).","type":"string"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add a gateway to the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/gateways/{gatewayId}":{"delete":{"operationId":"MulticastGroupService_RemoveGateway","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"},{"description":"Gateway ID (HEX encoded).","in":"path","name":"gatewayId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Remove a gateway from the multicast group.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{multicastGroupId}/queue":{"delete":{"operationId":"MulticastGroupService_FlushQueue","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Flush the queue for the given multicast group.","tags":["MulticastGroupService"]},"get":{"operationId":"MulticastGroupService_ListQueue","parameters":[{"description":"Multicast group ID.","in":"path","name":"multicastGroupId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListMulticastGroupQueueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"List the items in the multicast group queue.","tags":["MulticastGroupService"]}},"/api/multicast-groups/{queueItem.multicastGroupId}/queue":{"post":{"operationId":"MulticastGroupService_Enqueue","parameters":[{"description":"Multicast group ID.","in":"path","name":"queueItem.multicastGroupId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"queueItem":{"description":"Multicast queue-item to enqueue.","properties":{"data":{"description":"Payload.","format":"byte","type":"string"},"fCnt":{"description":"Downlink frame-counter.\nThis will be automatically set on enqueue.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiEnqueueMulticastGroupQueueItemResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add the given item to the multicast group queue.","tags":["MulticastGroupService"]}},"/api/tenants":{"get":{"operationId":"TenantService_List","parameters":[{"description":"Max number of tenants to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"},{"description":"If set, the given string will be used to search on name.","in":"query","name":"search","required":false,"type":"string"},{"description":"If set, filters the result set to the tenants of the user.\nOnly global API keys are able to filter by this field.","in":"query","name":"userId","required":false,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListTenantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of tenants.","tags":["TenantService"]},"post":{"operationId":"TenantService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateTenantRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateTenantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create a new tenant.","tags":["TenantService"]}},"/api/tenants/{id}":{"delete":{"operationId":"TenantService_Delete","parameters":[{"description":"Tenant ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the tenant with the given ID.","tags":["TenantService"]},"get":{"operationId":"TenantService_Get","parameters":[{"description":"Tenant ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetTenantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the tenant for the given ID.","tags":["TenantService"]}},"/api/tenants/{tenant.id}":{"put":{"operationId":"TenantService_Update","parameters":[{"description":"Tenant ID (UUID).\nNote: this value will be automatically generated on create.","in":"path","name":"tenant.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"tenant":{"description":"Tenant object.","properties":{"canHaveGateways":{"description":"Can the tenant create and \"own\" Gateways?","type":"boolean"},"description":{"description":"Tenant description.","type":"string"},"maxDeviceCount":{"description":"Max. device count for tenant.\nWhen set to 0, the tenant can have unlimited devices.","format":"int64","type":"integer"},"maxGatewayCount":{"description":"Max. gateway count for tenant.\nWhen set to 0, the tenant can have unlimited gateways.","format":"int64","type":"integer"},"name":{"description":"Tenant name,","type":"string"},"privateGatewaysDown":{"description":"Private gateways (downlink).\nIf enabled, then other tenants will not be able to schedule downlink\nmessages through the gateways of this tenant. For example, in case you\ndo want to share uplinks with other tenants (private_gateways_up=false),\nbut you want to prevent other tenants from using gateway airtime.","type":"boolean"},"privateGatewaysUp":{"description":"Private gateways (uplink).\nIf enabled, then uplink messages will not be shared with other tenants.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the tenant. These\ntags are NOT exposed in the integration events.","type":"object"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given tenant.","tags":["TenantService"]}},"/api/tenants/{tenantId}/users":{"get":{"operationId":"TenantService_ListUsers","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantId","required":true,"type":"string"},{"description":"Max number of tenants to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListTenantUsersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of tenant users.","tags":["TenantService"]}},"/api/tenants/{tenantId}/users/{userId}":{"delete":{"operationId":"TenantService_DeleteUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantId","required":true,"type":"string"},{"description":"User ID (UUID).","in":"path","name":"userId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the given tenant user.","tags":["TenantService"]},"get":{"operationId":"TenantService_GetUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantId","required":true,"type":"string"},{"description":"User ID (UUID).","in":"path","name":"userId","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetTenantUserResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the the tenant user for the given tenant and user IDs.","tags":["TenantService"]}},"/api/tenants/{tenantUser.tenantId}/users":{"post":{"operationId":"TenantService_AddUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantUser.tenantId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"tenantUser":{"description":"Tenant user object.","properties":{"email":{"description":"Email (only used on get and when adding a user to a tenant).","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"userId":{"description":"User ID (UUID).","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Add an user to the tenant.\nNote: the user must already exist.","tags":["TenantService"]}},"/api/tenants/{tenantUser.tenantId}/users/{tenantUser.userId}":{"put":{"operationId":"TenantService_UpdateUser","parameters":[{"description":"Tenant ID (UUID).","in":"path","name":"tenantUser.tenantId","required":true,"type":"string"},{"description":"User ID (UUID).","in":"path","name":"tenantUser.userId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"tenantUser":{"description":"Tenant user object.","properties":{"email":{"description":"Email (only used on get and when adding a user to a tenant).","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given tenant user.","tags":["TenantService"]}},"/api/users":{"get":{"operationId":"UserService_List","parameters":[{"description":"Max number of tenants to return in the result-set.","format":"int64","in":"query","name":"limit","required":false,"type":"integer"},{"description":"Offset in the result-set (for pagination).","format":"int64","in":"query","name":"offset","required":false,"type":"integer"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiListUsersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the list of users.","tags":["UserService"]},"post":{"operationId":"UserService_Create","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/apiCreateUserRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiCreateUserResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Create a new user.","tags":["UserService"]}},"/api/users/{id}":{"delete":{"operationId":"UserService_Delete","parameters":[{"description":"User ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Delete the user with the given ID.","tags":["UserService"]},"get":{"operationId":"UserService_Get","parameters":[{"description":"User ID.","in":"path","name":"id","required":true,"type":"string"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/apiGetUserResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Get the user for the given ID.","tags":["UserService"]}},"/api/users/{user.id}":{"put":{"operationId":"UserService_Update","parameters":[{"description":"User ID (UUID).\nWill be set automatically on create.","in":"path","name":"user.id","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"user":{"description":"User object.","properties":{"email":{"description":"E-mail of the user.","type":"string"},"isActive":{"description":"Set to false to disable the user.","type":"boolean"},"isAdmin":{"description":"Set to true to make the user a global administrator.","type":"boolean"},"note":{"description":"Optional note to store with the user.","type":"string"}},"type":"object"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the given user.","tags":["UserService"]}},"/api/users/{userId}/password":{"post":{"operationId":"UserService_UpdatePassword","parameters":[{"description":"User ID.","in":"path","name":"userId","required":true,"type":"string"},{"in":"body","name":"body","required":true,"schema":{"properties":{"password":{"description":"Password to set.","type":"string"}},"type":"object"}}],"responses":{"200":{"description":"A successful response.","schema":{"properties":{},"type":"object"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/rpcStatus"}}},"summary":"Update the password for the given user.","tags":["UserService"]}}},"definitions":{"apiAdrAlgorithmListItem":{"properties":{"id":{"description":"Algorithm ID.","type":"string"},"name":{"description":"Algorithm name.","type":"string"}},"type":"object"},"apiApplication":{"properties":{"description":{"description":"Application description.","type":"string"},"id":{"description":"Application ID (UUID).\nNote: on create this will be automatically generated.","type":"string"},"name":{"description":"Application name.","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the application.\nThese tags are exposed in all the integration events of devices under\nthis application.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"},"apiApplicationListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"description":{"description":"Application description.","type":"string"},"id":{"description":"Application ID (UUID).","type":"string"},"name":{"description":"Application name.","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiAwsSnsIntegration":{"properties":{"accessKeyId":{"description":"AWS Access Key ID.","type":"string"},"applicationId":{"description":"Application ID (UUID).","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"region":{"description":"AWS region.","type":"string"},"secretAccessKey":{"description":"AWS Secret Access Key.","type":"string"},"topicArn":{"description":"Topic ARN.","type":"string"}},"type":"object"},"apiAzureServiceBusIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"connectionString":{"description":"Connection string.","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"publishName":{"description":"Publish name.\nThis is the name of the topic or queue.","type":"string"}},"type":"object"},"apiCadPeriodicity":{"default":"SEC_1","description":"- SEC_1: 1 second.\n - MS_500: 500 milliseconds\n - MS_250: 250 milliseconds\n - MS_100: 100 milliseconds\n - MS_50: 50 milliseconds\n - MS_20: 20 milliseconds","enum":["SEC_1","MS_500","MS_250","MS_100","MS_50","MS_20"],"type":"string"},"apiCodecRuntime":{"default":"NONE","description":" - NONE: None.\n - CAYENNE_LPP: Cayenne LPP.\n - JS: JavaScript.","enum":["NONE","CAYENNE_LPP","JS"],"type":"string"},"apiCreateApplicationRequest":{"properties":{"application":{"$ref":"#/definitions/apiApplication","description":"Application object to create."}},"type":"object"},"apiCreateApplicationResponse":{"properties":{"id":{"description":"Application ID (UUID).","type":"string"}},"type":"object"},"apiCreateDeviceProfileRequest":{"properties":{"deviceProfile":{"$ref":"#/definitions/apiDeviceProfile","description":"Object to create."}},"type":"object"},"apiCreateDeviceProfileResponse":{"properties":{"id":{"description":"ID (UUID).","type":"string"}},"type":"object"},"apiCreateDeviceProfileTemplateRequest":{"properties":{"deviceProfileTemplate":{"$ref":"#/definitions/apiDeviceProfileTemplate","description":"Object to create."}},"type":"object"},"apiCreateDeviceRequest":{"properties":{"device":{"$ref":"#/definitions/apiDevice","description":"Device object."}},"type":"object"},"apiCreateGatewayRequest":{"properties":{"gateway":{"$ref":"#/definitions/apiGateway","description":"Gateway object."}},"type":"object"},"apiCreateMulticastGroupRequest":{"properties":{"multicastGroup":{"$ref":"#/definitions/apiMulticastGroup","description":"Multicast group to create."}},"type":"object"},"apiCreateMulticastGroupResponse":{"properties":{"id":{"description":"ID of created multicast group (UUID).","type":"string"}},"type":"object"},"apiCreateTenantRequest":{"properties":{"tenant":{"$ref":"#/definitions/apiTenant","description":"Tenant object to create."}},"type":"object"},"apiCreateTenantResponse":{"properties":{"id":{"description":"Tenant ID.","type":"string"}},"type":"object"},"apiCreateUserRequest":{"properties":{"password":{"description":"Password to set for the user.","type":"string"},"tenants":{"description":"Add the user to the following tenants.","items":{"$ref":"#/definitions/apiUserTenant"},"type":"array"},"user":{"$ref":"#/definitions/apiUser","description":"User object to create."}},"type":"object"},"apiCreateUserResponse":{"properties":{"id":{"description":"User ID.","type":"string"}},"type":"object"},"apiDevice":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"description":{"description":"Description.","type":"string"},"devEui":{"description":"DevEUI (EUI64).","type":"string"},"deviceProfileId":{"description":"Device-profile ID (UUID).","type":"string"},"isDisabled":{"description":"Device is disabled.","type":"boolean"},"joinEui":{"description":"JoinEUI (optional, EUI64).\nThis field will be automatically set / updated on OTAA. However, in some\ncases it must be pre-configured. For example to allow OTAA using a Relay.\nIn this case the Relay needs to know the JoinEUI + DevEUI combinations\nof the devices for which it needs to forward uplinks.","type":"string"},"name":{"description":"Name.","type":"string"},"skipFcntCheck":{"description":"Skip frame-counter checks (this is insecure, but could be helpful for\ndebugging).","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the device.\nThese tags are exposed in all the integration events.","type":"object"},"variables":{"additionalProperties":{"type":"string"},"description":"Variables (user defined).\nThese variables can be used together with integrations to store tokens /\nsecrets that must be configured per device. These variables are not\nexposed in the event payloads.","type":"object"}},"type":"object"},"apiDeviceActivation":{"properties":{"aFCntDown":{"description":"Downlink application frame-counter.","format":"int64","type":"integer"},"appSKey":{"description":"Application session key (HEX encoded).","type":"string"},"devAddr":{"description":"Device address (HEX encoded).","type":"string"},"devEui":{"description":"Device EUI (EUI64).","type":"string"},"fCntUp":{"description":"Uplink frame-counter.","format":"int64","type":"integer"},"fNwkSIntKey":{"description":"Forwarding network session integrity key (HEX encoded).","type":"string"},"nFCntDown":{"description":"Downlink network frame-counter.","format":"int64","type":"integer"},"nwkSEncKey":{"description":"Network session encryption key (HEX encoded).","type":"string"},"sNwkSIntKey":{"description":"Serving network session integrity key (HEX encoded).","type":"string"}},"type":"object"},"apiDeviceKeys":{"properties":{"appKey":{"description":"Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!","type":"string"},"devEui":{"description":"DevEUI (EUI64).","type":"string"},"nwkKey":{"description":"Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!","type":"string"}},"type":"object"},"apiDeviceListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"description":{"description":"Description.","type":"string"},"devEui":{"description":"DevEUI (EUI64).","type":"string"},"deviceProfileId":{"description":"Device-profile ID (UUID).","type":"string"},"deviceProfileName":{"description":"Device-profile name.","type":"string"},"deviceStatus":{"$ref":"#/definitions/apiDeviceStatus","description":"Device status."},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"name":{"description":"Name.","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiDeviceProfile":{"properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"allowRoaming":{"description":"Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming.","type":"boolean"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the\ndevice-status from the device.","format":"int64","type":"integer"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"id":{"description":"Device-profile ID (UUID).\nNote: on create this will be automatically generated.","type":"string"},"isRelay":{"description":"Device is a Relay device.\nEnable this in case the device is a Relay. A Relay device implements TS011\nand is able to relay data from relay capable devices.\nSee for more information the TS011 specification.","type":"boolean"},"isRelayEd":{"description":"Device is a Relay end-device.\nEnable this in case the device is an end-device that can operate under a\nRelay. Please refer to the TS011 specification for more information.","type":"boolean"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"regionConfigId":{"description":"Region configuration ID.\nIf set, devices will only use the associated region. If let blank, then\ndevices will use all regions matching the selected common-name. Note\nthat multiple region configurations can exist for the same common-name,\ne.g. to provide an 8 channel and 16 channel configuration for the US915\nband.","type":"string"},"relayCadPeriodicity":{"$ref":"#/definitions/apiCadPeriodicity","description":"Relay CAD periodicity."},"relayDefaultChannelIndex":{"description":"Relay default channel index.\nValid values are 0 and 1, please refer to the RP002 specification for\nthe meaning of these values.","format":"int64","type":"integer"},"relayEdActivationMode":{"$ref":"#/definitions/apiRelayModeActivation","description":"Relay end-device activation mode."},"relayEdBackOff":{"description":"Relay end-device back-off (in case it does not receive WOR ACK frame).\n0 = Always send a LoRaWAN uplink\n1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK","format":"int64","type":"integer"},"relayEdRelayOnly":{"description":"End-device only accept data through relay.\nOnly accept data for this device through a relay. This setting is useful\nfor testing as in case of a test-setup, the end-device is usually within\nrange of the gateway.","type":"boolean"},"relayEdSmartEnableLevel":{"description":"Relay end-device smart-enable level.","format":"int64","type":"integer"},"relayEdUplinkLimitBucketSize":{"description":"Relay end-device uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayEdUplinkLimitReloadRate":{"description":"Relay end-device uplink limit reload rate.\n\nValid values:\n * 0 - 62 = X tokens every hour\n * 63 = no limitation","format":"int64","type":"integer"},"relayEnabled":{"description":"Relay must be enabled.","type":"boolean"},"relayGlobalUplinkLimitBucketSize":{"description":"Relay globak uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayGlobalUplinkLimitReloadRate":{"description":"Relay global uplink limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayJoinReqLimitBucketSize":{"description":"Relay join-request limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayJoinReqLimitReloadRate":{"description":"Relay join-request limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayNotifyLimitBucketSize":{"description":"Relay notify limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayNotifyLimitReloadRate":{"description":"Relay notify limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relayOverallLimitBucketSize":{"description":"Relay overall limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n 0 = 1\n 1 = 2\n 2 = 4\n 3 = 12","format":"int64","type":"integer"},"relayOverallLimitReloadRate":{"description":"Relay overall limit reload rate.\n\nValid values:\n * 0 - 126 = X tokens every hour\n * 127 = no limitation","format":"int64","type":"integer"},"relaySecondChannelAckOffset":{"$ref":"#/definitions/apiSecondChAckOffset","description":"Relay second channel ACK offset."},"relaySecondChannelDr":{"description":"Relay second channel DR.","format":"int64","type":"integer"},"relaySecondChannelFreq":{"description":"Relay second channel frequency (Hz).","format":"int64","type":"integer"},"rx1Delay":{"description":"RX1 Delay.\n\nThis makes it possible to override the system RX1 Delay. Please note that\nthis values only has effect in case it is higher than the system value.\nIn other words, it can be used to increase the RX1 Delay but not to decrease\nit.\nValid options are 1 - 15 (0 = always use system RX1 Delay).","format":"int64","type":"integer"},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information the the\ndevice-profile. These tags are exposed in all the integration events of\ndevices using this device-profile.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. If the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"}},"type":"object"},"apiDeviceProfileListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"id":{"description":"Device-profile ID (UUID).","type":"string"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"name":{"description":"Name.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class-B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiDeviceProfileTemplate":{"properties":{"abpRx1Delay":{"description":"RX1 delay (for ABP).","format":"int64","type":"integer"},"abpRx1DrOffset":{"description":"RX1 DR offset (for ABP).","format":"int64","type":"integer"},"abpRx2Dr":{"description":"RX2 DR (for ABP).","format":"int64","type":"integer"},"abpRx2Freq":{"description":"RX2 frequency (for ABP, Hz).","format":"int64","type":"integer"},"adrAlgorithmId":{"description":"ADR algorithm ID.","type":"string"},"autoDetectMeasurements":{"description":"Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.","type":"boolean"},"classBPingSlotDr":{"description":"Class-B ping-slot DR.","format":"int64","type":"integer"},"classBPingSlotFreq":{"description":"Class-B ping-slot freq (Hz).","format":"int64","type":"integer"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period.\nValid options are: 0 - 7.\n\nThe actual number of ping-slots per beacon period equals to 2^k.","format":"int64","type":"integer"},"classBTimeout":{"description":"Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"classCTimeout":{"description":"Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).","format":"int64","type":"integer"},"description":{"description":"Description.","type":"string"},"deviceStatusReqInterval":{"description":"Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the device-status\nfrom the device.","format":"int64","type":"integer"},"firmware":{"description":"Firmware.","type":"string"},"flushQueueOnActivate":{"description":"Flush queue on device activation.","type":"boolean"},"id":{"description":"Device-profile template ID.","type":"string"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"measurements":{"additionalProperties":{"$ref":"#/definitions/apiMeasurement"},"description":"Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.","type":"object"},"name":{"description":"Name.","type":"string"},"payloadCodecRuntime":{"$ref":"#/definitions/apiCodecRuntime","description":"Payload codec runtime."},"payloadCodecScript":{"description":"Payload codec script.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"User defined tags.","type":"object"},"uplinkInterval":{"description":"Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. When the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.","format":"int64","type":"integer"},"vendor":{"description":"Vendor.","type":"string"}},"type":"object"},"apiDeviceProfileTemplateListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"firmware":{"description":"Firmware.","type":"string"},"id":{"description":"Device-profile template ID.","type":"string"},"macVersion":{"$ref":"#/definitions/commonMacVersion","description":"LoRaWAN mac-version."},"name":{"description":"Name.","type":"string"},"regParamsRevision":{"$ref":"#/definitions/commonRegParamsRevision","description":"Regional parameters revision."},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"supportsClassB":{"description":"Supports Class-B.","type":"boolean"},"supportsClassC":{"description":"Supports Class-C.","type":"boolean"},"supportsOtaa":{"description":"Supports OTAA.","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"},"vendor":{"description":"Vendor.","type":"string"}},"type":"object"},"apiDeviceQueueItem":{"properties":{"confirmed":{"description":"Confirmed.","type":"boolean"},"data":{"description":"Data.\nOr use the json_object field when a codec has been configured.","format":"byte","type":"string"},"devEui":{"description":"Device EUI (EUI64).","type":"string"},"fCntDown":{"description":"Downlink frame-counter.\nDo not set this for plain-text data payloads. It will be automatically set\nby ChirpStack when the payload has been sent as downlink.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"},"id":{"description":"ID (UUID).\nThis is automatically generated on enqueue.","type":"string"},"isEncrypted":{"description":"Is encrypted.\nThis must be set to true if the end-application has already encrypted\nthe data payload. In this case, the f_cnt_down field must be set to\nthe corresponding frame-counter which has been used during the encryption.","type":"boolean"},"isPending":{"description":"Is pending.\nThis is set by ChirpStack to true when the downlink is pending (e.g. it\nhas been sent, but a confirmation is still pending).","type":"boolean"},"object":{"description":"Only use this when a codec has been configured that can encode this\nobject to bytes.","type":"object"}},"type":"object"},"apiDeviceState":{"properties":{"name":{"description":"Name.","type":"string"},"value":{"description":"Value.","type":"string"}},"type":"object"},"apiDeviceStatus":{"properties":{"batteryLevel":{"description":"Device battery level as a percentage.\n-1 when the battery level is not available.","format":"float","type":"number"},"externalPowerSource":{"description":"Device is connected to an external power source.","type":"boolean"},"margin":{"description":"The device margin status\n-32..32: The demodulation SNR ration in dB","format":"int32","type":"integer"}},"type":"object"},"apiEncoding":{"default":"JSON","enum":["JSON","PROTOBUF"],"type":"string"},"apiEnqueueDeviceQueueItemResponse":{"properties":{"id":{"description":"ID (UUID).","type":"string"}},"type":"object"},"apiEnqueueMulticastGroupQueueItemResponse":{"properties":{"fCnt":{"description":"Frame-counter of the enqueued payload.","format":"int64","type":"integer"}},"type":"object"},"apiGateway":{"properties":{"description":{"description":"Description.","type":"string"},"gatewayId":{"description":"Gateway ID (EUI64).","type":"string"},"location":{"$ref":"#/definitions/commonLocation","description":"Gateway location."},"metadata":{"additionalProperties":{"type":"string"},"description":"Metadata (provided by the gateway).","type":"object"},"name":{"description":"Name.","type":"string"},"statsInterval":{"description":"Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.","format":"int64","type":"integer"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags.","type":"object"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"}},"type":"object"},"apiGatewayListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"description":{"description":"Description.","type":"string"},"gatewayId":{"description":"Gateway ID (EUI64).","type":"string"},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"location":{"$ref":"#/definitions/commonLocation","description":"Location."},"name":{"description":"Name.","type":"string"},"properties":{"additionalProperties":{"type":"string"},"description":"Gateway properties.","type":"object"},"state":{"$ref":"#/definitions/apiGatewayState","description":"Gateway state.\nPlease note that the state of the gateway is driven by the stats\npackages that are sent by the gateway."},"tenantId":{"description":"Tenant ID.","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGatewayState":{"default":"NEVER_SEEN","description":" - NEVER_SEEN: The gateway has never sent any stats.\n - ONLINE: Online.\n - OFFLINE: Offline.","enum":["NEVER_SEEN","ONLINE","OFFLINE"],"type":"string"},"apiGcpPubSubIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"credentialsFile":{"description":"Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Encoding."},"projectId":{"description":"Project ID.","type":"string"},"topicName":{"description":"Topic name.\nThis is the name of the Pub/Sub topic.","type":"string"}},"type":"object"},"apiGenerateGatewayClientCertificateResponse":{"properties":{"caCert":{"description":"CA certificate.","type":"string"},"expiresAt":{"description":"Expires at defines the expiration date of the certificate.","format":"date-time","type":"string"},"tlsCert":{"description":"TLS certificate.","type":"string"},"tlsKey":{"description":"TLS key.","type":"string"}},"type":"object"},"apiGenerateMqttIntegrationClientCertificateResponse":{"properties":{"caCert":{"description":"CA certificate.","type":"string"},"expiresAt":{"description":"Expires at defines the expiration date of the certificate.","format":"date-time","type":"string"},"tlsCert":{"description":"TLS certificate.","type":"string"},"tlsKey":{"description":"TLS key.","type":"string"}},"type":"object"},"apiGetApplicationResponse":{"properties":{"application":{"$ref":"#/definitions/apiApplication","description":"Application object."},"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"measurementKeys":{"description":"Measurement keys.\nThis contains the measurement keys from all the device-profiles that\nare used by the devices under this application.","items":{"type":"string"},"type":"array"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetAwsSnsIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiAwsSnsIntegration","description":"Integration object."}},"type":"object"},"apiGetAzureServiceBusIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiAzureServiceBusIntegration","description":"Integration object."}},"type":"object"},"apiGetDeviceActivationResponse":{"properties":{"deviceActivation":{"$ref":"#/definitions/apiDeviceActivation","description":"Device activation object."},"joinServerContext":{"$ref":"#/definitions/commonJoinServerContext","description":"Join-Server context.\nA non-empty value indicatest that ChirpStack does not have access to\nthe AppSKey and that the encryption / decryption of the payloads is\nthe responsibility of the end-application."}},"type":"object"},"apiGetDeviceKeysResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"deviceKeys":{"$ref":"#/definitions/apiDeviceKeys","description":"Device-keys object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetDeviceLinkMetricsResponse":{"properties":{"errors":{"$ref":"#/definitions/commonMetric","description":"Errors."},"gwRssi":{"$ref":"#/definitions/commonMetric","description":"RSSI (as reported by the gateway(s))."},"gwSnr":{"$ref":"#/definitions/commonMetric","description":"SNR (as reported by the gateway(s))."},"rxPackets":{"$ref":"#/definitions/commonMetric","description":"Packets received from the device."},"rxPacketsPerDr":{"$ref":"#/definitions/commonMetric","description":"Packets received by DR."},"rxPacketsPerFreq":{"$ref":"#/definitions/commonMetric","description":"Packets received by frequency."}},"type":"object"},"apiGetDeviceMetricsResponse":{"properties":{"metrics":{"additionalProperties":{"$ref":"#/definitions/commonMetric"},"type":"object"},"states":{"additionalProperties":{"$ref":"#/definitions/apiDeviceState"},"type":"object"}},"type":"object"},"apiGetDeviceNextFCntDownResponse":{"properties":{"fCntDown":{"description":"FCntDown.","format":"int64","type":"integer"}},"type":"object"},"apiGetDeviceProfileResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"deviceProfile":{"$ref":"#/definitions/apiDeviceProfile","description":"Device-profile object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetDeviceProfileTemplateResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"deviceProfileTemplate":{"$ref":"#/definitions/apiDeviceProfileTemplate","description":"Device-profile template object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetDeviceQueueItemsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceQueueItem"},"type":"array"},"totalCount":{"description":"Total number of queue items.","format":"int64","type":"integer"}},"type":"object"},"apiGetDeviceResponse":{"properties":{"classEnabled":{"$ref":"#/definitions/commonDeviceClass","description":"Enabled device class."},"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"device":{"$ref":"#/definitions/apiDevice","description":"Device object."},"deviceStatus":{"$ref":"#/definitions/apiDeviceStatus","description":"Device status."},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetGatewayDutyCycleMetricsResponse":{"properties":{"maxLoadPercentage":{"$ref":"#/definitions/commonMetric","description":"Percentage relative to max load."},"windowPercentage":{"$ref":"#/definitions/commonMetric","description":"Percentage relative to tracking window."}},"type":"object"},"apiGetGatewayMetricsResponse":{"properties":{"rxPackets":{"$ref":"#/definitions/commonMetric","description":"RX packets."},"rxPacketsPerDr":{"$ref":"#/definitions/commonMetric","description":"RX packets / DR."},"rxPacketsPerFreq":{"$ref":"#/definitions/commonMetric","description":"RX packets / frequency."},"txPackets":{"$ref":"#/definitions/commonMetric","description":"TX packets."},"txPacketsPerDr":{"$ref":"#/definitions/commonMetric","description":"TX packets / DR."},"txPacketsPerFreq":{"$ref":"#/definitions/commonMetric","description":"TX packets / frequency."},"txPacketsPerStatus":{"$ref":"#/definitions/commonMetric","description":"TX packets per status."}},"type":"object"},"apiGetGatewayResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"gateway":{"$ref":"#/definitions/apiGateway","description":"Gateway object."},"lastSeenAt":{"description":"Last seen at timestamp.","format":"date-time","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetGcpPubSubIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiGcpPubSubIntegration","description":"Integration object."}},"type":"object"},"apiGetHttpIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiHttpIntegration","description":"Integration object."}},"type":"object"},"apiGetIftttIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiIftttIntegration","description":"Integration object."}},"type":"object"},"apiGetInfluxDbIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiInfluxDbIntegration","description":"Integration object."}},"type":"object"},"apiGetLoraCloudIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiLoraCloudIntegration","description":"Integration object."}},"type":"object"},"apiGetMulticastGroupResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"multicastGroup":{"$ref":"#/definitions/apiMulticastGroup","description":"Multicast group object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetMyDevicesIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiMyDevicesIntegration","description":"Integration object."}},"type":"object"},"apiGetPilotThingsIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiPilotThingsIntegration","description":"Integration object."}},"type":"object"},"apiGetRandomDevAddrResponse":{"properties":{"devAddr":{"description":"DevAddr.","type":"string"}},"type":"object"},"apiGetTenantResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"tenant":{"$ref":"#/definitions/apiTenant","description":"Tenant object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetTenantUserResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"tenantUser":{"$ref":"#/definitions/apiTenantUser","description":"Tenant user object."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiGetThingsBoardIntegrationResponse":{"properties":{"integration":{"$ref":"#/definitions/apiThingsBoardIntegration","description":"Integration object."}},"type":"object"},"apiGetUserResponse":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"},"user":{"$ref":"#/definitions/apiUser","description":"User object."}},"type":"object"},"apiHttpIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"encoding":{"$ref":"#/definitions/apiEncoding","description":"Payload encoding."},"eventEndpointUrl":{"description":"Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"HTTP headers to set when making requests.","type":"object"}},"type":"object"},"apiIftttIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"arbitraryJson":{"description":"Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.","type":"boolean"},"eventPrefix":{"description":"Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.","type":"string"},"key":{"description":"Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.","type":"string"},"uplinkValues":{"description":"Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n \"batteryLevel\": 75.3,\n \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]","items":{"type":"string"},"type":"array"}},"type":"object"},"apiInfluxDbIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"bucket":{"description":"Bucket. (InfluxDb v2)","type":"string"},"db":{"description":"InfluxDb database name. (InfluxDb v1)","type":"string"},"endpoint":{"description":"InfluxDb API write endpoint (e.g. http://localhost:8086/write).","type":"string"},"organization":{"description":"Organization. (InfluxDb v2)","type":"string"},"password":{"description":"InfluxDb password. (InfluxDb v1)","type":"string"},"precision":{"$ref":"#/definitions/apiInfluxDbPrecision","description":"InfluxDb timestamp precision (InfluxDb v1)."},"retentionPolicyName":{"description":"InfluxDb retention policy name. (InfluxDb v1)","type":"string"},"token":{"description":"Token. (InfluxDb v2)","type":"string"},"username":{"description":"InfluxDb username. (InfluxDb v1)","type":"string"},"version":{"$ref":"#/definitions/apiInfluxDbVersion","description":"InfluxDb version."}},"type":"object"},"apiInfluxDbPrecision":{"default":"NS","enum":["NS","U","MS","S","M","H"],"type":"string"},"apiInfluxDbVersion":{"default":"INFLUXDB_1","enum":["INFLUXDB_1","INFLUXDB_2"],"type":"string"},"apiIntegrationKind":{"default":"HTTP","enum":["HTTP","INFLUX_DB","THINGS_BOARD","MY_DEVICES","LORA_CLOUD","GCP_PUB_SUB","AWS_SNS","AZURE_SERVICE_BUS","PILOT_THINGS","MQTT_GLOBAL","IFTTT"],"type":"string"},"apiIntegrationListItem":{"properties":{"kind":{"$ref":"#/definitions/apiIntegrationKind","description":"Integration kind."}},"type":"object"},"apiListApplicationsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiApplicationListItem"},"type":"array"},"totalCount":{"description":"Total number of applications.","format":"int64","type":"integer"}},"type":"object"},"apiListDeviceProfileAdrAlgorithmsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiAdrAlgorithmListItem"},"type":"array"},"totalCount":{"description":"Total number of algorithms.","format":"int64","type":"integer"}},"type":"object"},"apiListDeviceProfileTemplatesResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceProfileTemplateListItem"},"type":"array"},"totalCount":{"description":"Total number of device-profile templates.","format":"int64","type":"integer"}},"type":"object"},"apiListDeviceProfilesResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceProfileListItem"},"type":"array"},"totalCount":{"description":"Total number of device-profiles.","format":"int64","type":"integer"}},"type":"object"},"apiListDevicesResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiDeviceListItem"},"type":"array"},"totalCount":{"description":"Total number of devices.","format":"int64","type":"integer"}},"type":"object"},"apiListGatewaysResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiGatewayListItem"},"type":"array"},"totalCount":{"description":"Total number of gateways.","format":"int64","type":"integer"}},"type":"object"},"apiListIntegrationsResponse":{"properties":{"result":{"description":"Integrations within result-set.","items":{"$ref":"#/definitions/apiIntegrationListItem"},"type":"array"},"totalCount":{"description":"Total number of integrations available within the result-set.","format":"int64","type":"integer"}},"type":"object"},"apiListMulticastGroupQueueResponse":{"properties":{"items":{"items":{"$ref":"#/definitions/apiMulticastGroupQueueItem"},"type":"array"}},"type":"object"},"apiListMulticastGroupsResponse":{"properties":{"result":{"description":"Result-test.","items":{"$ref":"#/definitions/apiMulticastGroupListItem"},"type":"array"},"totalCount":{"description":"Total number of multicast groups.","format":"int64","type":"integer"}},"type":"object"},"apiListTenantUsersResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiTenantUserListItem"},"type":"array"},"totalCount":{"description":"Total number of tenants.","format":"int64","type":"integer"}},"type":"object"},"apiListTenantsResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiTenantListItem"},"type":"array"},"totalCount":{"description":"Total number of tenants.","format":"int64","type":"integer"}},"type":"object"},"apiListUsersResponse":{"properties":{"result":{"description":"Result-set.","items":{"$ref":"#/definitions/apiUserListItem"},"type":"array"},"totalCount":{"description":"Total number of users.","format":"int64","type":"integer"}},"type":"object"},"apiLoraCloudIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"modemGeolocationServices":{"$ref":"#/definitions/apiLoraCloudModemGeolocationServices","description":"Modem \u0026 Geolocation Services configuration."}},"type":"object"},"apiLoraCloudModemGeolocationServices":{"properties":{"forwardFPorts":{"description":"Forward FPorts.\nForward uplink messages matching the given FPorts to the MGS.","items":{"format":"int64","type":"integer"},"type":"array"},"geolocationBufferTtl":{"description":"Geolocation buffer TTL (in seconds).\nIf \u003e 0, uplink RX meta-data will be stored in a buffer so that\nthe meta-data of multiple uplinks can be used for geolocation.","format":"int64","type":"integer"},"geolocationGnss":{"description":"GNSS based geolocation is enabled (LR1110).","type":"boolean"},"geolocationGnssPayloadField":{"description":"GNSS payload field.\nThis holds the name of the field in the decoded payload object which\ncontains the GNSS payload bytes (as HEX string).","type":"string"},"geolocationGnssUseRxTime":{"description":"GNSS use RX time.\nIn case this is set to true, the resolver will use the RX time of the\nnetwork instead of the timestamp included in the LR1110 payload.","type":"boolean"},"geolocationMinBufferSize":{"description":"Geolocation minimum buffer size.\nIf \u003e 0, geolocation will only be performed when the buffer has\nat least the given size.","format":"int64","type":"integer"},"geolocationRssi":{"description":"RSSI based geolocation is enabled.","type":"boolean"},"geolocationTdoa":{"description":"TDOA based geolocation is enabled.","type":"boolean"},"geolocationWifi":{"description":"Wifi based geolocation is enabled.","type":"boolean"},"geolocationWifiPayloadField":{"description":"Wifi payload field.\nThis holds the name of the field in the decoded payload object which\ncontains an array of objects with the following fields:\n* macAddress - e.g. 01:23:45:67:89:ab\n* signalStrength - e.g. -51 (optional)","type":"string"},"gnssUseGatewayLocation":{"description":"Use gateway location for GNSS resolving.\nIn the case this is set to true, ChirpStack will provide the location of\none of the gateways to the MGS resolver to aid the resolving process.\nDisable this in case the gateway location is not accurate / incorrectly\nconfigured as an incorrect location will cause the resolver to return an\nerror.","type":"boolean"},"gnssUseRxTime":{"description":"Use rx time for GNSS resolving.\nIn case this is set to true, the MGS resolver will use the RX time of the\nnetwork instead of the timestamp included in the LR1110 payload.","type":"boolean"},"modemEnabled":{"description":"Device implements Modem / Modem-E stack.","type":"boolean"},"parseTlv":{"description":"Parse TLV records.\nIf enabled, stream records (expected in TLV format) are scanned for GNSS\ndata (0x06 or 0x07). If found, ChirpStack will make an additional\ngeolocation call to the MGS API for resolving the location of the detected\npayload.","type":"boolean"},"token":{"description":"API token.","type":"string"}},"type":"object"},"apiMeasurement":{"properties":{"kind":{"$ref":"#/definitions/apiMeasurementKind","description":"Kind."},"name":{"description":"Name (user defined).","type":"string"}},"type":"object"},"apiMeasurementKind":{"default":"UNKNOWN","description":" - UNKNOWN: Unknown (in which case it is not tracked).\n - COUNTER: Incrementing counters that never decrease (these are not reset on each\nreading).\n - ABSOLUTE: Counters that do get reset upon reading.\n - GAUGE: E.g. a temperature value.\n - STRING: E.g. a firmware version, true / false value.","enum":["UNKNOWN","COUNTER","ABSOLUTE","GAUGE","STRING"],"type":"string"},"apiMulticastGroup":{"properties":{"applicationId":{"description":"Application ID.\nAfter creation, this can not be updated.","type":"string"},"classBPingSlotNbK":{"description":"Class-B ping-slots per beacon period (only for Class-B).\nValid options are: 0 - 7;","format":"int64","type":"integer"},"classBPingSlotPeriod":{"description":"Ping-slot period (only for Class-B).\nDeprecated: use class_b_ping_slot_nb_k.","format":"int64","type":"integer"},"classCSchedulingType":{"$ref":"#/definitions/apiMulticastGroupSchedulingType","description":"Scheduling type (only for Class-C)."},"dr":{"description":"Data-rate.","format":"int64","type":"integer"},"fCnt":{"description":"Frame-counter.","format":"int64","type":"integer"},"frequency":{"description":"Frequency (Hz).","format":"int64","type":"integer"},"groupType":{"$ref":"#/definitions/apiMulticastGroupType","description":"Multicast group type."},"id":{"description":"ID (UUID).\nThis will be generated automatically on create.","type":"string"},"mcAddr":{"description":"Multicast address (HEX encoded DevAddr).","type":"string"},"mcAppSKey":{"description":"Multicast application session key (HEX encoded AES128 key).","type":"string"},"mcNwkSKey":{"description":"Multicast network session key (HEX encoded AES128 key).","type":"string"},"name":{"description":"Name.","type":"string"},"region":{"$ref":"#/definitions/commonRegion","description":"Region."}},"type":"object"},"apiMulticastGroupListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"groupType":{"$ref":"#/definitions/apiMulticastGroupType","description":"Multicast group type."},"id":{"description":"ID.","type":"string"},"name":{"description":"Name.","type":"string"},"region":{"$ref":"#/definitions/commonRegion","description":"Region."},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiMulticastGroupQueueItem":{"properties":{"data":{"description":"Payload.","format":"byte","type":"string"},"fCnt":{"description":"Downlink frame-counter.\nThis will be automatically set on enqueue.","format":"int64","type":"integer"},"fPort":{"description":"FPort (must be \u003e 0).","format":"int64","type":"integer"},"multicastGroupId":{"description":"Multicast group ID.","type":"string"}},"type":"object"},"apiMulticastGroupSchedulingType":{"default":"DELAY","description":" - DELAY: Delay.\nIf multicast downlinks must be sent through multiple gateways, then\nthese will be sent one by one with a delay between each gateway.\n - GPS_TIME: Time.\nIf multicast downlinks must be sent through multiple gateways, then\nthese will be sent simultaneously using GPS time synchronization.\nNote that this does require GPS time-synchronized LoRa gateways.","enum":["DELAY","GPS_TIME"],"type":"string"},"apiMulticastGroupType":{"default":"CLASS_C","description":" - CLASS_C: Class C.\n - CLASS_B: Class-B.","enum":["CLASS_C","CLASS_B"],"type":"string"},"apiMyDevicesIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"endpoint":{"description":"myDevices API endpoint.","type":"string"}},"type":"object"},"apiPilotThingsIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"server":{"description":"Server URL.","type":"string"},"token":{"description":"Authentication token.","type":"string"}},"type":"object"},"apiRelayModeActivation":{"default":"DISABLE_RELAY_MODE","description":" - DISABLE_RELAY_MODE: Disable the relay mode.\n - ENABLE_RELAY_MODE: Enable the relay model.\n - DYNAMIC: Dynamic.\n - END_DEVICE_CONTROLLED: End-device controlled.","enum":["DISABLE_RELAY_MODE","ENABLE_RELAY_MODE","DYNAMIC","END_DEVICE_CONTROLLED"],"type":"string"},"apiSecondChAckOffset":{"default":"KHZ_0","description":" - KHZ_0: 0 kHz.\n - KHZ_200: 200 kHz.\n - KHZ_400: 400 kHz.\n - KHZ_800: 800 kHz.\n - KHZ_1600: 1600 kHz.\n - KHZ_3200: 3200 kHz.","enum":["KHZ_0","KHZ_200","KHZ_400","KHZ_800","KHZ_1600","KHZ_3200"],"type":"string"},"apiTenant":{"properties":{"canHaveGateways":{"description":"Can the tenant create and \"own\" Gateways?","type":"boolean"},"description":{"description":"Tenant description.","type":"string"},"id":{"description":"Tenant ID (UUID).\nNote: this value will be automatically generated on create.","type":"string"},"maxDeviceCount":{"description":"Max. device count for tenant.\nWhen set to 0, the tenant can have unlimited devices.","format":"int64","type":"integer"},"maxGatewayCount":{"description":"Max. gateway count for tenant.\nWhen set to 0, the tenant can have unlimited gateways.","format":"int64","type":"integer"},"name":{"description":"Tenant name,","type":"string"},"privateGatewaysDown":{"description":"Private gateways (downlink).\nIf enabled, then other tenants will not be able to schedule downlink\nmessages through the gateways of this tenant. For example, in case you\ndo want to share uplinks with other tenants (private_gateways_up=false),\nbut you want to prevent other tenants from using gateway airtime.","type":"boolean"},"privateGatewaysUp":{"description":"Private gateways (uplink).\nIf enabled, then uplink messages will not be shared with other tenants.","type":"boolean"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags (user defined).\nThese tags can be used to add additional information to the tenant. These\ntags are NOT exposed in the integration events.","type":"object"}},"type":"object"},"apiTenantListItem":{"properties":{"canHaveGateways":{"description":"Can the tenant create and \"own\" Gateways?","type":"boolean"},"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"id":{"description":"Tenant ID (UUID).","type":"string"},"maxDeviceCount":{"description":"Max device count.\n0 = unlimited.","format":"int64","type":"integer"},"maxGatewayCount":{"description":"Max gateway count.\n0 = unlimited.","format":"int64","type":"integer"},"name":{"description":"Tenant name.","type":"string"},"privateGatewaysDown":{"description":"Private gateways (downlink).","type":"boolean"},"privateGatewaysUp":{"description":"Private gateways (uplink).","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiTenantUser":{"properties":{"email":{"description":"Email (only used on get and when adding a user to a tenant).","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"userId":{"description":"User ID (UUID).","type":"string"}},"type":"object"},"apiTenantUserListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"email":{"description":"Email.","type":"string"},"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"tenantId":{"description":"Tenant ID (UUID).","type":"string"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"},"userId":{"description":"User ID (UUID).","type":"string"}},"type":"object"},"apiThingsBoardIntegration":{"properties":{"applicationId":{"description":"Application ID (UUID).","type":"string"},"server":{"description":"ThingsBoard server endpoint, e.g. https://example.com","type":"string"}},"type":"object"},"apiUser":{"properties":{"email":{"description":"E-mail of the user.","type":"string"},"id":{"description":"User ID (UUID).\nWill be set automatically on create.","type":"string"},"isActive":{"description":"Set to false to disable the user.","type":"boolean"},"isAdmin":{"description":"Set to true to make the user a global administrator.","type":"boolean"},"note":{"description":"Optional note to store with the user.","type":"string"}},"type":"object"},"apiUserListItem":{"properties":{"createdAt":{"description":"Created at timestamp.","format":"date-time","type":"string"},"email":{"description":"Email of the user.","type":"string"},"id":{"description":"User ID (UUID).","type":"string"},"isActive":{"description":"Set to false to disable the user.","type":"boolean"},"isAdmin":{"description":"Set to true to make the user a global administrator.","type":"boolean"},"updatedAt":{"description":"Last update timestamp.","format":"date-time","type":"string"}},"type":"object"},"apiUserTenant":{"properties":{"isAdmin":{"description":"User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.","type":"boolean"},"isDeviceAdmin":{"description":"User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).","type":"boolean"},"isGatewayAdmin":{"description":"User is able to modify gateways.","type":"boolean"},"tenantId":{"description":"Tenant ID.","type":"string"}},"type":"object"},"commonAggregation":{"default":"HOUR","description":" - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.","enum":["HOUR","DAY","MONTH","MINUTE"],"type":"string"},"commonDeviceClass":{"default":"CLASS_A","description":" - CLASS_A: Class-A.\n - CLASS_B: Class-B.\n - CLASS_C: Class-C.","enum":["CLASS_A","CLASS_B","CLASS_C"],"type":"string"},"commonJoinServerContext":{"description":"Join-Server context.","properties":{"appSKey":{"$ref":"#/definitions/commonKeyEnvelope","description":"AppSKey envelope."},"sessionKeyId":{"description":"Session-key ID.","type":"string"}},"type":"object"},"commonKeyEnvelope":{"properties":{"aesKey":{"description":"AES key (when the kek_label is set, this value must first be decrypted).","format":"byte","type":"string"},"kekLabel":{"description":"KEK label.","type":"string"}},"type":"object"},"commonLocation":{"properties":{"accuracy":{"description":"Accuracy.","format":"float","type":"number"},"altitude":{"description":"Altitude.","format":"double","type":"number"},"latitude":{"description":"Latitude.","format":"double","type":"number"},"longitude":{"description":"Longitude.","format":"double","type":"number"},"source":{"$ref":"#/definitions/commonLocationSource","description":"Location source."}},"type":"object"},"commonLocationSource":{"default":"UNKNOWN","description":" - UNKNOWN: Unknown.\n - GPS: GPS.\n - CONFIG: Manually configured.\n - GEO_RESOLVER_TDOA: Geo resolver (TDOA).\n - GEO_RESOLVER_RSSI: Geo resolver (RSSI).\n - GEO_RESOLVER_GNSS: Geo resolver (GNSS).\n - GEO_RESOLVER_WIFI: Geo resolver (WIFI).","enum":["UNKNOWN","GPS","CONFIG","GEO_RESOLVER_TDOA","GEO_RESOLVER_RSSI","GEO_RESOLVER_GNSS","GEO_RESOLVER_WIFI"],"type":"string"},"commonMacVersion":{"default":"LORAWAN_1_0_0","enum":["LORAWAN_1_0_0","LORAWAN_1_0_1","LORAWAN_1_0_2","LORAWAN_1_0_3","LORAWAN_1_0_4","LORAWAN_1_1_0"],"type":"string"},"commonMetric":{"properties":{"datasets":{"description":"Datasets.","items":{"$ref":"#/definitions/commonMetricDataset"},"type":"array"},"kind":{"$ref":"#/definitions/commonMetricKind","description":"Kind."},"name":{"description":"Name.","type":"string"},"timestamps":{"description":"Timestamps.","items":{"format":"date-time","type":"string"},"type":"array"}},"type":"object"},"commonMetricDataset":{"properties":{"data":{"description":"Data.\nEach value index corresponds with the same timestamp index of the Metric.","items":{"format":"float","type":"number"},"type":"array"},"label":{"description":"Label.","type":"string"}},"type":"object"},"commonMetricKind":{"default":"COUNTER","description":" - COUNTER: Incrementing counters that never decrease (these are not reset on each\nreading).\n - ABSOLUTE: Counters that do get reset upon reading.\n - GAUGE: E.g. a temperature value.","enum":["COUNTER","ABSOLUTE","GAUGE"],"type":"string"},"commonRegParamsRevision":{"default":"A","enum":["A","B","RP002_1_0_0","RP002_1_0_1","RP002_1_0_2","RP002_1_0_3","RP002_1_0_4"],"type":"string"},"commonRegion":{"default":"EU868","description":"- EU868: EU868\n - US915: US915\n - CN779: CN779\n - EU433: EU433\n - AU915: AU915\n - CN470: CN470\n - AS923: AS923\n - AS923_2: AS923 with -1.80 MHz frequency offset\n - AS923_3: AS923 with -6.60 MHz frequency offset\n - AS923_4: (AS923 with -5.90 MHz frequency offset).\n - KR920: KR920\n - IN865: IN865\n - RU864: RU864\n - ISM2400: ISM2400 (LoRaWAN 2.4 GHz)","enum":["EU868","US915","CN779","EU433","AU915","CN470","AS923","AS923_2","AS923_3","AS923_4","KR920","IN865","RU864","ISM2400"],"type":"string"},"protobufAny":{"additionalProperties":{},"properties":{"@type":{"type":"string"}},"type":"object"},"protobufNullValue":{"default":"NULL_VALUE","description":"`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value.","enum":["NULL_VALUE"],"type":"string"},"rpcStatus":{"properties":{"code":{"format":"int32","type":"integer"},"details":{"items":{"$ref":"#/definitions/protobufAny"},"type":"array"},"message":{"type":"string"}},"type":"object"}}}