> For the complete documentation index, see [llms.txt](https://docs.aquanow.io/aquanow/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aquanow.io/aquanow/legacy/websockets/authenticated-websockets/reporting-websocket.md).

# Reporting Websocket

This channel allows you to keep up to date with the status of your account. You can receive updates on your balances and orders. Each request requires authentication with signatures.

### Websocket Endpoints

#### Environments

There are two environments to access our authorized market data feeds:

1. **Live**

```
wss://report.aquanow.io:8081/
```

2. **Sandbox**

```
wss://report-staging.aquanow.io:8081/
```

### Websocket Access and Authorization

API Authentication is done using an API key and a secret. User needs to associate the following information in the payload of the subscription message. View the [Authorization page](/aquanow/legacy/integration-guide/authentication.md) for more detail.

#### Request Parameters

|      Name      |  Type  | Description                              |
| :------------: | :----: | ---------------------------------------- |
|    `apiKey`    | String | API key                                  |
| `apiSignature` | String | Signature created using API secret       |
|    `channel`   | String | Channel of subscription                  |
|     `type`     | String | Type of action; subscribe or unsubscribe |
|     `nonce`    | String | Numeric string timestamp in milliseconds |

#### There are three channels you can subscribe for:

1. `executionReport` - all order and balance updates
2. `parentOrderReport` - all order updates
3. `balanceReport` - all balance updates

### Example Usage

{% tabs %}
{% tab title="executionReport" %}

```javascript
const WebSocket = require("ws");
const crypto = require("crypto");

const ws = new WebSocket("");


const apiKey = "";
const secret = "";


function subscribeToOrders() {
  const timestamp = Date.now().toString();
  const payload = {
    type: "subscribe",
    channel: "executionReport",
    nonce: timestamp
  };
  const apiSignature = crypto
    .createHmac("sha384", secret)
    .update(JSON.stringify(payload))
    .digest("hex");


  const subsOption = JSON.stringify({
    ...payload,
    apiKey,
    apiSignature
  });


  ws.send(subsOption);
}


ws.on("open", () => {
  console.log(WS tunnel opened - trade);
  subscribeToOrders({ apiKey, secret });
});


ws.on("message", data => {
  console.log("data", data);
});
```

{% endtab %}

{% tab title="parentOrderReport" %}

```javascript
const WebSocket = require("ws");
const crypto = require("crypto");

const ws = new WebSocket("");


const apiKey = "";
const secret = "";


function subscribeToOrders() {
  const timestamp = Date.now().toString();
  const payload = {
    type: "subscribe",
    channel: "parentOrderReport",
    nonce: timestamp
  };
  const apiSignature = crypto
    .createHmac("sha384", secret)
    .update(JSON.stringify(payload))
    .digest("hex");


  const subsOption = JSON.stringify({
    ...payload,
    apiKey,
    apiSignature
  });


  ws.send(subsOption);
}


ws.on("open", () => {
  console.log(WS tunnel opened - trade);
  subscribeToOrders({ apiKey, secret });
});


ws.on("message", data => {
  console.log("data", data);
});java
```

{% endtab %}

{% tab title="balanceReport" %}

```javascript
const WebSocket = require("ws");
const crypto = require("crypto");

const ws = new WebSocket("");


const apiKey = "";
const secret = "";


function subscribeToOrders() {
  const timestamp = Date.now().toString();
  const payload = {
    type: "subscribe",
    channel: "balanceReport",
    nonce: timestamp
  };
  const apiSignature = crypto
    .createHmac("sha384", secret)
    .update(JSON.stringify(payload))
    .digest("hex");


  const subsOption = JSON.stringify({
    ...payload,
    apiKey,
    apiSignature
  });


  ws.send(subsOption);
}


ws.on("open", () => {
  console.log(WS tunnel opened - trade);
  subscribeToOrders({ apiKey, secret });
});


ws.on("message", data => {
  console.log("data", data);
});
```

{% endtab %}
{% endtabs %}

#### Example Response

{% tabs %}
{% tab title="executionReport" %}

#### Balance Update

Returns an [AuthenticateObject](/aquanow/legacy/data-objects-and-statuses/websocket-objects.md#authenticateobject).

```json
{
  "type": "balance",
  "payload": {
    "createdAt": 1554400262916,
    "symbol": "BTC",
    "totalBalance": 2.30044886,
    "depositAddress": "-",
    "usernameSymbol": "helloWorld_BTC",
    "pendingTransfer": 0,
    "itemDateTime": 1557267645512,
    "availableBalance": 2.24044886,
    "updatedAt": 1554400262916,
    "username": "helloWorld"
  }
}
```

#### Order Update

Returns an [AuthenticateObject](/aquanow/legacy/data-objects-and-statuses/websocket-objects.md#authenticateobject).&#x20;

```json
{
  "type": "order",
  "payload": {
    "createdAt": 1557267645477,
    "symbol": "BTC-USD",
    "totalBalance": 2.40047884,
    "depositAddress": "-",
    "usernameSymbol": "helloWorld_BTC",
    "pendingTransfer": 0,
    "itemDateTime": 1557267645646,
    "availableBalance": 2.24044886,
    "updatedAt": 1557267645477,
    "username": "helloWorld"
  }
}
```

{% endtab %}

{% tab title="parentOrderReport" %}

```json
{
  "type": "order",
  "payload": {
    "createdAt": 1557267645477,
    "symbol": "BTC-USD",
    "totalBalance": 2.40047884,
    "depositAddress": "-",
    "usernameSymbol": "helloWorld_BTC",
    "pendingTransfer": 0,
    "itemDateTime": 1557267645646,
    "availableBalance": 2.24044886,
    "updatedAt": 1557267645477,
    "username": "helloWorld"
  }
}
```

{% endtab %}

{% tab title="balanceReport" %}

```json
{
  "type": "balance",
  "payload": {
    "createdAt": 1554400262916,
    "symbol": "BTC",
    "totalBalance": 2.30044886,
    "depositAddress": "-",
    "usernameSymbol": "helloWorld_BTC",
    "pendingTransfer": 0,
    "itemDateTime": 1557267645512,
    "availableBalance": 2.24044886,
    "updatedAt": 1554400262916,
    "username": "helloWorld"
  }
}
```

{% endtab %}
{% endtabs %}
