> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.aurasos.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.aurasos.com/_mcp/server.

# Send a device event

POST https://staging-panic.aura.services/panic-api/v2/deviceEvent
Content-Type: application/json

Ingests a message from a registered IoT device. AURA applies the device's
template (selected by `device_type_id`) to interpret the message and map it
to an AURA action — create a callout, update location, cancel a callout, or
record a battery/health update. The accepted fields depend on the device
template; see the IoT Devices guide for the mapping and more
examples.


Reference: https://docs.aurasos.com/api-reference/iot-devices/create-device-event

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Servers

- `https://staging-panic.aura.services` (Staging, default)
- `https://panic.aura.services` (Production)

## Response

### 200

Successful.

- `message` (string, optional)
- `input` (PanicApiV2DeviceEventPostResponsesContentApplicationJsonSchemaInput, optional) — Echo of the device message that was received.
- `resolvedAuraEvent` (PanicApiV2DeviceEventPostResponsesContentApplicationJsonSchemaResolvedAuraEvent, optional)

## Errors

### 400 Bad Request Error

Bad request.

- `message` (string, optional)
- `errors` (ErrorResponseErrors, optional) — Error detail. May be a string, an array of strings, or an object (some routes return a serialized error object).

### 401 Unauthorized Error

Unauthorized.

- `message` (string, optional)
- `errors` (ErrorResponseErrors, optional) — Error detail. May be a string, an array of strings, or an object (some routes return a serialized error object).

### 500 Internal Server Error

Unexpected server error.

- `message` (string, optional)
- `errors` (ErrorResponseErrors, optional) — Error detail. May be a string, an array of strings, or an object (some routes return a serialized error object).

## Types

### PanicApiV2DeviceEventPostResponsesContentApplicationJsonSchemaInput

Echo of the device message that was received.

### PanicApiV2DeviceEventPostResponsesContentApplicationJsonSchemaResolvedAuraEvent

- `eventTypes` (string, optional) — The AURA action the message mapped to — for example `NEW_CALLOUT`, `CALLOUT_LOCATION_UPDATED`, `CALLOUT_CANCELLED`, `DEVICE_BATTERY_INFO_RECEIVED`, `IGNORED_MESSAGE`, or `UNKNOWN_MESSAGE`.
- `eventResponse` (PanicApiV2DeviceEventPostResponsesContentApplicationJsonSchemaResolvedAuraEventEventResponse, optional)

### ErrorResponseErrors

Error detail. May be a string, an array of strings, or an object (some routes return a serialized error object).

- string
- list of string
- map from string to any

### PanicApiV2DeviceEventPostResponsesContentApplicationJsonSchemaResolvedAuraEventEventResponse

## Examples

### New callout

**Request**

```json
{
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "location": {
    "latitude": -26.10911,
    "longitude": 28.053037,
    "sequenceNumber": "46"
  },
  "message_type": 1
}
```

**Response**

```json
{
  "message": "Event successfully processed...",
  "input": {
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "location": {
      "latitude": -26.10911,
      "longitude": 28.053037,
      "sequenceNumber": "46"
    },
    "message_type": 1
  },
  "resolvedAuraEvent": {
    "eventTypes": "NEW_CALLOUT",
    "eventResponse": {
      "calloutId": 12345,
      "deviceId": "A1B2C3D4",
      "latitude": -26.10911,
      "longitude": 28.053037,
      "message": "Successfully created Callout."
    }
  }
}
```

**SDK Code**

```python New callout
import requests

url = "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

payload = {
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "location": {
        "latitude": -26.10911,
        "longitude": 28.053037,
        "sequenceNumber": "46"
    },
    "message_type": 1
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript New callout
const url = 'https://staging-panic.aura.services/panic-api/v2/deviceEvent';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"device_id":"A1B2C3D4","device_type_id":1,"location":{"latitude":-26.10911,"longitude":28.053037,"sequenceNumber":"46"},"message_type":1}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go New callout
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

	payload := strings.NewReader("{\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"location\": {\n    \"latitude\": -26.10911,\n    \"longitude\": 28.053037,\n    \"sequenceNumber\": \"46\"\n  },\n  \"message_type\": 1\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby New callout
require 'uri'
require 'net/http'

url = URI("https://staging-panic.aura.services/panic-api/v2/deviceEvent")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"location\": {\n    \"latitude\": -26.10911,\n    \"longitude\": 28.053037,\n    \"sequenceNumber\": \"46\"\n  },\n  \"message_type\": 1\n}"

response = http.request(request)
puts response.read_body
```

```java New callout
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging-panic.aura.services/panic-api/v2/deviceEvent")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"location\": {\n    \"latitude\": -26.10911,\n    \"longitude\": 28.053037,\n    \"sequenceNumber\": \"46\"\n  },\n  \"message_type\": 1\n}")
  .asString();
```

```php New callout
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging-panic.aura.services/panic-api/v2/deviceEvent', [
  'body' => '{
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "location": {
    "latitude": -26.10911,
    "longitude": 28.053037,
    "sequenceNumber": "46"
  },
  "message_type": 1
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp New callout
using RestSharp;

var client = new RestClient("https://staging-panic.aura.services/panic-api/v2/deviceEvent");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"location\": {\n    \"latitude\": -26.10911,\n    \"longitude\": 28.053037,\n    \"sequenceNumber\": \"46\"\n  },\n  \"message_type\": 1\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift New callout
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "location": [
    "latitude": -26.10911,
    "longitude": 28.053037,
    "sequenceNumber": "46"
  ],
  "message_type": 1
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://staging-panic.aura.services/panic-api/v2/deviceEvent")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Update callout location

**Request**

```json
{
  "body": {
    "latitude": -26.2025,
    "longitude": 28.0468,
    "sequenceNumber": "47"
  },
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 2
}
```

**Response**

```json
{
  "message": "Event successfully processed...",
  "input": {
    "body": {
      "latitude": -26.2025,
      "longitude": 28.0468,
      "sequenceNumber": "47"
    },
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "message_type": 2
  },
  "resolvedAuraEvent": {
    "eventTypes": "CALLOUT_LOCATION_UPDATED",
    "eventResponse": {}
  }
}
```

**SDK Code**

```python Update callout location
import requests

url = "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

payload = {
    "body": {
        "latitude": -26.2025,
        "longitude": 28.0468,
        "sequenceNumber": "47"
    },
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "message_type": 2
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Update callout location
const url = 'https://staging-panic.aura.services/panic-api/v2/deviceEvent';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"body":{"latitude":-26.2025,"longitude":28.0468,"sequenceNumber":"47"},"device_id":"A1B2C3D4","device_type_id":1,"message_type":2}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Update callout location
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

	payload := strings.NewReader("{\n  \"body\": {\n    \"latitude\": -26.2025,\n    \"longitude\": 28.0468,\n    \"sequenceNumber\": \"47\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 2\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Update callout location
require 'uri'
require 'net/http'

url = URI("https://staging-panic.aura.services/panic-api/v2/deviceEvent")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"body\": {\n    \"latitude\": -26.2025,\n    \"longitude\": 28.0468,\n    \"sequenceNumber\": \"47\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 2\n}"

response = http.request(request)
puts response.read_body
```

```java Update callout location
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging-panic.aura.services/panic-api/v2/deviceEvent")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"body\": {\n    \"latitude\": -26.2025,\n    \"longitude\": 28.0468,\n    \"sequenceNumber\": \"47\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 2\n}")
  .asString();
```

```php Update callout location
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging-panic.aura.services/panic-api/v2/deviceEvent', [
  'body' => '{
  "body": {
    "latitude": -26.2025,
    "longitude": 28.0468,
    "sequenceNumber": "47"
  },
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 2
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Update callout location
using RestSharp;

var client = new RestClient("https://staging-panic.aura.services/panic-api/v2/deviceEvent");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"body\": {\n    \"latitude\": -26.2025,\n    \"longitude\": 28.0468,\n    \"sequenceNumber\": \"47\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 2\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Update callout location
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "body": [
    "latitude": -26.2025,
    "longitude": 28.0468,
    "sequenceNumber": "47"
  ],
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 2
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://staging-panic.aura.services/panic-api/v2/deviceEvent")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Cancel callout

**Request**

```json
{
  "body": {
    "sequenceNumber": "48"
  },
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 3
}
```

**Response**

```json
{
  "message": "Event successfully processed...",
  "input": {
    "body": {
      "sequenceNumber": "48"
    },
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "message_type": 3
  },
  "resolvedAuraEvent": {
    "eventTypes": "CALLOUT_CANCELLED",
    "eventResponse": {
      "calloutId": 12345,
      "deviceId": "A1B2C3D4"
    }
  }
}
```

**SDK Code**

```python Cancel callout
import requests

url = "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

payload = {
    "body": { "sequenceNumber": "48" },
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "message_type": 3
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Cancel callout
const url = 'https://staging-panic.aura.services/panic-api/v2/deviceEvent';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"body":{"sequenceNumber":"48"},"device_id":"A1B2C3D4","device_type_id":1,"message_type":3}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Cancel callout
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

	payload := strings.NewReader("{\n  \"body\": {\n    \"sequenceNumber\": \"48\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 3\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Cancel callout
require 'uri'
require 'net/http'

url = URI("https://staging-panic.aura.services/panic-api/v2/deviceEvent")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"body\": {\n    \"sequenceNumber\": \"48\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 3\n}"

response = http.request(request)
puts response.read_body
```

```java Cancel callout
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging-panic.aura.services/panic-api/v2/deviceEvent")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"body\": {\n    \"sequenceNumber\": \"48\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 3\n}")
  .asString();
```

```php Cancel callout
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging-panic.aura.services/panic-api/v2/deviceEvent', [
  'body' => '{
  "body": {
    "sequenceNumber": "48"
  },
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 3
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Cancel callout
using RestSharp;

var client = new RestClient("https://staging-panic.aura.services/panic-api/v2/deviceEvent");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"body\": {\n    \"sequenceNumber\": \"48\"\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 3\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Cancel callout
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "body": ["sequenceNumber": "48"],
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 3
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://staging-panic.aura.services/panic-api/v2/deviceEvent")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Battery / health update

**Request**

```json
{
  "body": {
    "batteryLevel": 72
  },
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 4
}
```

**Response**

```json
{
  "message": "Event successfully processed...",
  "input": {
    "body": {
      "batteryLevel": 72
    },
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "message_type": 4
  },
  "resolvedAuraEvent": {
    "eventTypes": "DEVICE_BATTERY_INFO_RECEIVED",
    "eventResponse": {
      "deviceId": "A1B2C3D4",
      "isHeartbeatMessage": false
    }
  }
}
```

**SDK Code**

```python Battery / health update
import requests

url = "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

payload = {
    "body": { "batteryLevel": 72 },
    "device_id": "A1B2C3D4",
    "device_type_id": 1,
    "message_type": 4
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Battery / health update
const url = 'https://staging-panic.aura.services/panic-api/v2/deviceEvent';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"body":{"batteryLevel":72},"device_id":"A1B2C3D4","device_type_id":1,"message_type":4}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Battery / health update
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://staging-panic.aura.services/panic-api/v2/deviceEvent"

	payload := strings.NewReader("{\n  \"body\": {\n    \"batteryLevel\": 72\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 4\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Battery / health update
require 'uri'
require 'net/http'

url = URI("https://staging-panic.aura.services/panic-api/v2/deviceEvent")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"body\": {\n    \"batteryLevel\": 72\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 4\n}"

response = http.request(request)
puts response.read_body
```

```java Battery / health update
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://staging-panic.aura.services/panic-api/v2/deviceEvent")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"body\": {\n    \"batteryLevel\": 72\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 4\n}")
  .asString();
```

```php Battery / health update
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://staging-panic.aura.services/panic-api/v2/deviceEvent', [
  'body' => '{
  "body": {
    "batteryLevel": 72
  },
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 4
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Battery / health update
using RestSharp;

var client = new RestClient("https://staging-panic.aura.services/panic-api/v2/deviceEvent");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"body\": {\n    \"batteryLevel\": 72\n  },\n  \"device_id\": \"A1B2C3D4\",\n  \"device_type_id\": 1,\n  \"message_type\": 4\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Battery / health update
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "body": ["batteryLevel": 72],
  "device_id": "A1B2C3D4",
  "device_type_id": 1,
  "message_type": 4
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://staging-panic.aura.services/panic-api/v2/deviceEvent")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```