# Welcome

Build connected solutions at any scale with Qubitro. Qubitro provides the cloud infrastructure and developer tools to build, scale, and operate connected solutions—without complexity.

At Qubitro, our mission is to provide an **end-to-end cloud platform** that simplifies building, scaling, and operating connected experiences.

### Discover Platform

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>No-code Integrations</strong></td><td>Connect devices and data sources with a few clicks.</td><td><a href="/files/HJ8ezVelRaMe9veVJoGK">/files/HJ8ezVelRaMe9veVJoGK</a></td><td><a href="/pages/TIudHvxSvxKYcs6zvaEm">/pages/TIudHvxSvxKYcs6zvaEm</a></td></tr><tr><td><strong>Monitoring</strong></td><td>Build stunning dashboards and share instantly.</td><td><a href="/files/CdhEPVbPlAcBJJg6Cpic">/files/CdhEPVbPlAcBJJg6Cpic</a></td><td><a href="/pages/pw2suMohyvc6Cwfqe081">/pages/pw2suMohyvc6Cwfqe081</a></td></tr><tr><td><strong>Functions</strong></td><td>Automate data processing with powerful workflows.</td><td><a href="/files/lF4ZI0p07RMpgxaoTssD">/files/lF4ZI0p07RMpgxaoTssD</a></td><td><a href="/pages/iRN4XapD3VSX4HTeUliN">/pages/iRN4XapD3VSX4HTeUliN</a></td></tr><tr><td><strong>Storage</strong></td><td>Store, access, and manage device data effortlessly.</td><td><a href="/files/sFj6oiVmlSYgQsfqCOCH">/files/sFj6oiVmlSYgQsfqCOCH</a></td><td><a href="/pages/7KH9wRgq2O6ln9Lp0f2q">/pages/7KH9wRgq2O6ln9Lp0f2q</a></td></tr><tr><td><strong>White-label</strong></td><td>Make Qubitro your own with full branding control.</td><td><a href="/files/KpQ4xsOH7UXpSVDKDWh1">/files/KpQ4xsOH7UXpSVDKDWh1</a></td><td><a href="/pages/Cj5fMVcpZ0IpHn261Q0C">/pages/Cj5fMVcpZ0IpHn261Q0C</a></td></tr><tr><td><strong>REST API</strong></td><td>Explore our API reference to learn about Qubitro API.</td><td><a href="/files/I6mmLzFzELBAYNytlZph">/files/I6mmLzFzELBAYNytlZph</a></td><td><a href="/spaces/LXNwVpW4heD62GZhpd5I">/spaces/LXNwVpW4heD62GZhpd5I</a></td></tr></tbody></table>

### Discover Support Options

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Support Tickets</strong></td><td>Learn how to submit a support ticket.</td><td><a href="/spaces/NMIJwX5MPJubey0C1l5F/pages/ygApDeZZDXKnJ0AnQZy4#support-ticket">/spaces/NMIJwX5MPJubey0C1l5F/pages/ygApDeZZDXKnJ0AnQZy4#support-ticket</a></td></tr><tr><td><strong>Support Plans</strong></td><td>Learn about Monthly Support plans.</td><td><a href="/spaces/NMIJwX5MPJubey0C1l5F/pages/ygApDeZZDXKnJ0AnQZy4#monthly-support-package">/spaces/NMIJwX5MPJubey0C1l5F/pages/ygApDeZZDXKnJ0AnQZy4#monthly-support-package</a></td></tr><tr><td><strong>Custom Development</strong></td><td>Explore custom development options.</td><td><a href="/spaces/NMIJwX5MPJubey0C1l5F/pages/ygApDeZZDXKnJ0AnQZy4#nre-non-recurring-engineering">/spaces/NMIJwX5MPJubey0C1l5F/pages/ygApDeZZDXKnJ0AnQZy4#nre-non-recurring-engineering</a></td></tr></tbody></table>


# No-Code Integrations

Forward data from connectivity providers without custom code, automatically create devices in Qubitro.

No-Code Integrations allow you to sync all devices and their data from supported platforms or connectivity providers (such as [Onomondo](/data-sources/no-code-integrations/onomondo) or [The Things Stack](/data-sources/no-code-integrations/the-things-stack)) directly to Qubitro without writing any code.

<figure><img src="/files/goyR5a8hXHsIfSYjZ5Pg" alt=""><figcaption><p>Data Sources page in Qubitro, showcasing no-code integrations and protocol-based endpoints.</p></figcaption></figure>

### Are We Missing an Integration?

If your preferred provider isn’t listed, you can either use [MQTT](/data-sources/mqtt) or [HTTP](/data-sources/http) to set up a custom integration, or contact Qubitro [Support](broken://spaces/NMIJwX5MPJubey0C1l5F) to request a new no-code integration option.

### Explore No-Code Integrations

{% content-ref url="/pages/coPaUj5J7k6ELZO9D2MV" %}
[Onomondo](/data-sources/no-code-integrations/onomondo)
{% endcontent-ref %}

{% content-ref url="/pages/bBDE8t6GajiPDYnpxHWV" %}
[Notehub](/data-sources/no-code-integrations/notehub)
{% endcontent-ref %}

{% content-ref url="/pages/TzsiPo9tYhwZf7nh8geO" %}
[The Things Stack](/data-sources/no-code-integrations/the-things-stack)
{% endcontent-ref %}

{% content-ref url="/pages/rgp5gT2KiRDiizYqh87t" %}
[Soracom](/data-sources/no-code-integrations/soracom)
{% endcontent-ref %}

{% content-ref url="/pages/eDS916K4dpG1OqHjIZj6" %}
[Chirpstack](/data-sources/no-code-integrations/chirpstack)
{% endcontent-ref %}

{% content-ref url="/pages/aZZmTaQiHAlaZxsohJON" %}
[Loriot](/data-sources/no-code-integrations/loriot)
{% endcontent-ref %}

{% content-ref url="/pages/fYy0YsTFyIt3QI0qDZhr" %}
[1NCE](/data-sources/no-code-integrations/1nce)
{% endcontent-ref %}

{% content-ref url="/pages/7SfjJht4IJnn2E8ROfiW" %}
[AWS IoT Core LoRaWAN](/data-sources/no-code-integrations/aws-iot-core-lorawan)
{% endcontent-ref %}

{% content-ref url="/pages/WerK4S8iJrvNGg2ZAuJE" %}
[Actility ThingPark](/data-sources/no-code-integrations/actility-thingpark)
{% endcontent-ref %}

{% content-ref url="/pages/DGdpI1Vhrk0u6EZbkEoI" %}
[Particle](/data-sources/no-code-integrations/particle)
{% endcontent-ref %}


# Onomondo

The Qubitro and Onomondo integration allows you to sync all devices and their data from Onomondo Cloud.

### Overview

The Qubitro and Onomondo integration allows you to sync all devices and their data from Onomondo Cloud to Qubitro using Onomondo Cloud Connectors—without writing any code.

Once your hardware is configured and sending data to Onomondo, a corresponding device is automatically created in Qubitro, representing each SIM with its unique SIM information.&#x20;

Qubitro also decodes incoming data automatically, and transformation functions can be applied if modifications are needed before storage.

{% hint style="success" %}
The integration works seamlessly with eSIM, physical SIM, and soft SIM.
{% endhint %}

{% hint style="info" %}
This integration **does not require** manual MQTT or HTTP forwarding from Onomondo. Data flows directly between Onomondo and Qubitro with no additional setup required on the device side.
{% endhint %}

### Prerequisites

* [x] Administrative access to both accounts.
* [x] A Qubitro account with an existing project.
* [x] An Onomondo account with active SIMs sending data

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to Onomondo] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with SIM Information];
B -- Yes --> D\[Use Existing Device];

C --> E\[Apply Built-in Decoder];
D --> E;

E --> F\[Store Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" fullWidth="false" %}

{% hint style="warning" %}
If a [Transformation Function](/platform/functions/transformation-function) is enabled, data will be processed before storage. The built-in decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **Onomondo** from the available sources.

<figure><img src="/files/pqZfeUrl5Y1IgsvK1hxb" alt=""><figcaption></figcaption></figure>

This page will display the **Host URL** required for Onomondo configuration. Keep it open for the next step.
{% endstep %}

{% step %}
**Set Up the Onomondo Cloud Connector**

1. Log in to **Onomondo Cloud**.
2. Click **More** in the top menu and select **Connectors**.<br>

   <figure><img src="/files/cLreUfdQBhxRoAxd8GI5" alt="" width="563"><figcaption></figcaption></figure>
3. Click **New Connector** and choose **HTTPS** as the connector type.<br>

   <figure><img src="/files/JqNJXEu5qggI15C2Odgc" alt="" width="563"><figcaption></figcaption></figure>
4. Paste the **Host URL** copied from Qubitro.<br>

   <figure><img src="/files/TVeclIWY3ioMzx6HriAh" alt="" width="563"><figcaption></figcaption></figure>
5. Click **Create Connector** to save the configuration.
   {% endstep %}

{% step %}
**Assign the Cloud Connector to a SIM**

1. Open the **SIM Detail Page** in Onomondo.
2. Click **Edit Mode** and select the newly created connector (e.g., `qubitro-integration`).<br>

   <figure><img src="/files/Wk0WVy5os9Crz8Q26gPx" alt="" width="563"><figcaption></figcaption></figure>
3. Click **Save** to apply the configuration.
   {% endstep %}

{% step %}
**Verify the Integration**

1. Return to **Qubitro Portal**.
2. Click **Go to Project** and then **Refresh** to check if the devices appear.<br>

   <figure><img src="/files/WsXEXOnXSJeZn0h4KDW8" alt="" width="563"><figcaption></figcaption></figure>
3. Open a device and navigate to the **Storage** tab to verify incoming data.
   {% endstep %}
   {% endstepper %}

### FAQs

<details>

<summary>Do I need to set up MQTT or HTTP forwarding in Onomondo?</summary>

No. The integration works directly between Onomondo and Qubitro using Cloud Connectors. No additional forwarding setup is needed.

</details>

<details>

<summary>Do I need to send data from my device to Qubitro?</summary>

No. Once data is sent to Onomondo, it is automatically forwarded to Qubitro via the Cloud Connector.

</details>

<details>

<summary>Can I group SIMs under different Qubitro projects?</summary>

Yes. You can create multiple integrations to separate SIMs across different projects.

</details>

<details>

<summary>Are there additional fees for this integration?</summary>

No. There are no hidden costs such as data transfer (egress) fees for using the Qubitro <> Onomondo integration.

</details>


# Notehub

The Qubitro and Blues Notehub integration allows you to sync all devices and their data from Notehub.

### Overview

The Qubitro and Notehub—Blues cloud service integration allows you to sync all devices and their data from Notehub to Qubitro using [Notehub Routes](https://dev.blues.io/guides-and-tutorials/routing-data-to-cloud/general-http-https/)—without writing any code.

Once your hardware is configured and sending data to Notehub, a corresponding device is automatically created in Qubitro, representing each device with its unique Notecard ID.

Qubitro decodes incoming data automatically, and transformation functions can be applied if modifications are needed before storage.

{% hint style="info" %}
This integration **does not** **require** manual MQTT or HTTP forwarding from your device. Data flows directly between Notehub and Qubitro with no additional setup required on the device side.
{% endhint %}

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* [x] Administrative access to both accounts
* [x] A Qubitro account with an existing project
* [x] A Notehub account with a project containing devices

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to Notehub] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with Notecard ID];
B -- Yes --> D\[Use Existing Device];

C --> E\[Apply Built-in Decoder];
D --> E;

E --> F\[Store Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

{% hint style="warning" %}
If a [Transformation Function](https://qubitro.gitbook.io/qubitro-documentation/platform/functions/options/transformation-function) is enabled, data will be processed before storage. The built-in decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Configuring the Integration

{% stepper %}
{% step %}

#### Step 1: Create an Integration in Qubitro

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **Notehub** from the available sources.

<figure><img src="/files/jp6xL81bdjdhxdyBgbLD" alt="" width="563"><figcaption></figcaption></figure>

This page will display the **Host URL** and **required headers** for Notehub configuration. Keep it open for the next step.
{% endstep %}

{% step %}

#### Step 2: Set Up a Route in Notehub

1. Log in to **Notehub**.
2. Open your **Notehub project**.
3. Click **+ Create Route**.
4. Select **General HTTP/HTTPS Request/Response** as the route type.
5. Paste the **Host URL** copied from Qubitro into the **Route URL** field.
6. Add the **headers** from Qubitro to the corresponding fields.

<figure><img src="/files/PNmUV0RcCIYCt1qICFal" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Step 3: Configure Data Routing

1. **Choose Fleet (optional)** – If you have multiple fleets, select the appropriate one.
2. **Choose Notefile** – Select the Notefile you want to forward.
3. **Choose Body Only** in the **Data** section.
4. Click **Save** to create the route.

<figure><img src="/files/HfOFom12nFVnl7XMb6x6" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Step 4: Verify the Integration

1. Return to **Qubitro Portal**.
2. Click **Go to Project** and then **Refresh** to check if the devices appear.
3. Open a device and navigate to the **Data** tab to verify incoming data.
   {% endstep %}
   {% endstepper %}

### Frequently Asked Questions

<details>

<summary>Do I need to set up MQTT or HTTP forwarding in Notehub?</summary>

No. The integration works directly between Notehub and Qubitro using **Notehub Routes**. No additional forwarding setup is needed.

</details>

<details>

<summary>Do I need to send data from my device to Qubitro?</summary>

No. Once data is sent to Notehub, it is automatically forwarded to Qubitro via the **Notehub Route**.

</details>

<details>

<summary>Can I group Notecards under different Qubitro projects?</summary>

Yes. You can create multiple integrations to separate Notecards across different projects.

</details>

<details>

<summary>Are there additional fees for this integration?</summary>

No. There are no hidden costs such as data transfer (egress) fees for using the Qubitro <> Blues Notehub integration.

</details>


# The Things Stack

The Qubitro and The Things Stack (TTS) integration allows you to sync all devices and their data from The Things Stack.

### Overview

The Qubitro and The Things Stack (TTS) integration allows you to sync all devices and their data from The Things Stack to Qubitro—without writing any code.

Once your LoRaWAN devices are configured and sending data to The Things Stack, a corresponding device is automatically created in Qubitro, representing each device with its unique DevEUI.

Qubitro can decode incoming data automatically if no decoder is configured in The Things Stack. If a decoder is already applied in The Things Stack, Qubitro stores the incoming JSON data as-is. Transformation functions can be applied before storing data in Qubitro.

{% hint style="success" %}
This integration **supports** all LoRaWAN devices registered in The Things Stack.
{% endhint %}

{% hint style="info" %}
This integration **does not require** additional device-side configuration. Data flows directly between The Things Stack and Qubitro **without** manual HTTP or MQTT forwarding.
{% endhint %}

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* [x] Administrative access to both accounts.
* [x] A Qubitro account with an existing project.
* [x] A The Things Stack account with LoRaWAN devices already.

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to The Things Stack] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with DevEUI];
B -- Yes --> D\[Use Existing Device];

C --> E{Decoder Configured in TTS?};
D --> E;

E -- Yes --> F\[Store Incoming JSON in Qubitro];
E -- No --> G\[Apply Decoder Function] --> F;

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

{% hint style="warning" %}
If a [Transformation Function](/platform/functions/transformation-function) is enabled, data will be processed before storage. The decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **The Things Stack** from the available sources.

This page will display the **Webhook URL** and **required headers** for The Things Stack configuration. Keep it open for the next step.
{% endstep %}

{% step %}
**Set Up a Webhook in The Things Stack**

1. Log in to The **Things Stack Console**.
2. Choose the **application** from the list.
3. Click **Webhooks** from the left navigation menu.
4. Click the **Add Webhook** button in the top right corner.
5. Select **Qubitro** from the list.
6. Copy and paste the values provided in Step 1 on the **Qubitro Portal**
7. **Choose the Application** – Select the TTS application managing your devices.
8. **Set the Uplink Data Format** – Ensure **JSON output** is enabled.
9. **Save** the webhook configuration.

<figure><img src="/files/n2z3E8Zb0nrcgW8j4lPi" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="success" %}
You can also copy values individually from the **Project Settings** and **Credentials** tabs. &#x20;
{% endhint %}
{% endstep %}

{% step %}
**Verify the Integration**

1. Return to **Qubitro Portal**.
2. Click **Go to Project** and then **Refresh** to check if the devices appear.

<figure><img src="/files/rki6k3UTA9MpyG97F9mA" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### Configuring Data Decoding

When integrating with The Things Stack, Qubitro can handle incoming data in different ways, depending on the decoder setup.

#### Using The Things Stack Decoder

If a **decoder is already configured in The Things Stack**, Qubitro will **store the incoming JSON automatically** without any modifications.

#### Using Qubitro's Built-in Decoder Functions

If no decoder is set in The Things Stack, Qubitro provides **built-in** [**Decoder Functions**](/platform/functions/decoder-function), including **Device Templates**, to automatically parse and structure the payload.

#### Applying Transformation Functions

If additional modifications are required before storing data, [**Transformation Functions**](/platform/functions/transformation-function) can be enabled in Qubitro to process and modify the payload dynamically.

### FAQs

<details>

<summary>Do I need to set up MQTT or HTTP forwarding in The Things Stack?</summary>

No. The integration works directly between The Things Stack and Qubitro. No additional forwarding setup is needed.

</details>

<details>

<summary>Do I need to send data from my device to Qubitro?</summary>

No. Once data is sent to The Things Stack, it is automatically forwarded to Qubitro via integration.

</details>

<details>

<summary>How does decoding work between The Things and Qubitro?</summary>

If a decoder is configured in The Things Stack, Qubitro stores the decoded JSON as-is; otherwise, it offers [Decoder Functions](/platform/functions/decoder-function), which can be applied before storing the data, while [Transformation Functions](/platform/functions/transformation-function) allow further modifications if needed.

</details>

<details>

<summary>Can I group devices under different Qubitro projects?</summary>

Yes. You can create multiple integrations to separate devices across different projects.

</details>

<details>

<summary>Are there additional fees for this integration?</summary>

No. There are no hidden costs such as data transfer (egress) fees for using the Qubitro <> The Things Stack integration.

</details>


# Soracom

The Qubitro and Soracom integration allows you to sync all devices and their data from Soracom.

### Overview

The Qubitro and Soracom integration enables you to sync all devices and their data from Soracom directly to Qubitro using Soracom Beam—without writing any code.

Once your hardware is configured and sending data through Soracom, Qubitro automatically creates a corresponding device representing each SIM, along with its unique SIM information.

Incoming data is automatically decoded by Qubitro, and additional transformation functions can be applied if data modifications are required before storage.

This integration works seamlessly with eSIM, physical SIM, and soft SIM.

### Prerequisites

* [x] Soracom account with active SIMs sending data
* [x] Qubitro account with an existing project
* [x] Administrative access to both Qubitro and Sor

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to Soracom] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with SIM ID];
B -- Yes --> D\[Use Existing Device];

C --> E\[Apply Built-in Decoder];
D --> E;

E --> F\[Store Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

{% hint style="warning" %}
If a [Transformation Function](/platform/functions/transformation-function) is enabled, data will be processed before storage. The decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **Soracom** from the available sources.

This page will display the **Host URL** and other credentials required for Soracom configuration. Keep it open for the next step.
{% endstep %}

{% step %}
**Set Up Soracom Beam**

1. Log in to your **Soracom** account.
2. Navigate to **Groups** and select the desired group to integrate with Qubitro.
3. Click the **Advanced settings** tab, and expand **SORACOM Beam**.
4. Click **Add Configuration** and choose the **TCP → HTTP/HTTPS entry point**.

Enter the following configuration details copied from the Qubitro Portal:

<table><thead><tr><th>Protocol</th><th width="223.48828125">Host Name</th><th>Port Number</th><th>Path</th></tr></thead><tbody><tr><td>HTTPS</td><td><code>webhook.qubitro.com</code></td><td><code>443</code></td><td><code>/integrations/soracom</code></td></tr></tbody></table>

Enable the following settings:

{% hint style="danger" %}
**SIM ID header**: Toggle ON to append SIM identification.
{% endhint %}

Add the following under **Custom Headers**:

| Action | HEADER NAME         | HEADER VALUE                   |
| ------ | ------------------- | ------------------------------ |
| Append | `projectId`         | *(copied from Qubitro Portal)* |
| Append | `webhookSigningKey` | *(copied from Qubitro Portal)* |

5. Click **Save** to apply the configuration.
   {% endstep %}

{% step %}
**Verify the Integration**

1. Return to the **Qubitro Portal**.
2. Click **Go to project**.
3. Click **Refresh** and verify that the Soracom-connected devices appear.
4. Select a device and navigate to the **Storage** tab to confirm incoming data.
   {% endstep %}
   {% endstepper %}

### FAQs

<details>

<summary>Do I need to set up MQTT or HTTP forwarding in Soracom?</summary>

No. Soracom Beam automatically forwards data securely and directly to Qubitro. No additional forwarding setup is needed.

</details>

<details>

<summary>Do I need to send data from my device directly to Qubitro?</summary>

No. Once data is sent to Soracom, it is automatically forwarded to Qubitro via Soracom Beam.

</details>

<details>

<summary>Can I group SIMs under different Qubitro projects?</summary>

Yes. You can create multiple integrations to separate SIMs across different projects.

</details>

<details>

<summary>Are there additional fees for this integration?</summary>

No. There are no hidden costs such as data transfer (egress) fees for using the Qubitro <-> Soracom integration.

</details>


# Loriot

The Qubitro and Loriot integration allows you to sync all devices and their data from Loriot.

### Overview

The Qubitro and Loriot integration allows you to sync all devices and their data from Loriot directly to Qubitro—without writing any code.

Once your LoRaWAN devices are configured and sending data to Loriot, a corresponding device is automatically created in Qubitro, representing each device with its unique DevEUI.

As Loriot does not have built-in decoding functionality, Qubitro's Decoder Functions, including Device Templates, must be used to parse and structure incoming data. Additionally, Transformation Functions can be applied if modifications are needed before storing data in Qubitro.

{% hint style="success" %}
This integration **supports** all LoRaWAN devices registered in Loriot.
{% endhint %}

{% hint style="info" %}
This integration **does not requir**e additional device-side configuration. Data flows directly between Loriot and Qubitro **without** manual HTTP or MQTT forwarding.
{% endhint %}

### Prerequisites

* [x] A Loriot account with LoRaWAN devices already sending data.
* [x] A Qubitro account with an existing project.
* [x] Administrative access to both Loriot and Qubitro.

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to Loriot] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with DevEUI];
B -- Yes --> D\[Use Existing Device];

C --> E\[Apply Decoder Function in Qubitro];
D --> E;

E --> F\[Store Decoded Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **Loriot** from the available sources.

This page will display the **Webhook URL** and required headers for Loriot configuration. Keep it open for the next step.
{% endstep %}

{% step %}
**Set Up Webhook Integration on Loriot**

1. Log in to the **Loriot Console**.
2. Click **Output** from the left menu.
3. Click **Add new output** and select **HTTP Push**.

Enter the following details provided by the Qubitro Portal:

| Configuration Field            | Value                          |
| ------------------------------ | ------------------------------ |
| **Target URL for POSTs**       | *(copied from Qubitro Portal)* |
| **Authorization header value** | *(copied from Qubitro Portal)* |

You can also copy these values individually from the Project Settings and Credentials tabs in Qubitro.

4. Click **Accept** to save the webhook configuration.
   {% endstep %}

{% step %}
**Verify the Integration**

1. Return to the **Qubitro Portal**.
2. Click **Go to Project**.
3. Click **Refresh** and verify that your Loriot-connected devices appear.
4. Select a device and navigate to the **Data** tab to confirm incoming data.
   {% endstep %}
   {% endstepper %}

### Configuring Data Decoding

Because Loriot does not have built-in decoding functionality, Qubitro's Decoder Functions must be configured.

#### Using Qubitro's Built-in Decoder Functions

Qubitro provides built-in [Decoder Functions](/platform/functions/decoder-function), including [Device Templates](/platform/functions/decoder-function/lorawan-device-template-decoder), to automatically parse and structure incoming payloads.

#### Applying Transformation Functions

If additional modifications are required before storing data, enable Transformation Functions in Qubitro to dynamically process and modify payloads.

### FAQs

<details>

<summary>Do I need to set up MQTT or HTTP forwarding in Loriot?</summary>

No. The integration works directly between Loriot and Qubitro using Webhooks. No additional forwarding setup is needed.

</details>

<details>

<summary>Do I need to send data directly from my device to Qubitro?</summary>

No. Once data is sent to Loriot, it is automatically forwarded to Qubitro via the webhook integration.

</details>

<details>

<summary>How is data decoded since Loriot does not have built-in decoders?</summary>

Qubitro provides built-in [Decoder Functions](/platform/functions/decoder-function), including [Device Templates](/platform/functions/decoder-function/lorawan-device-template-decoder), which parse incoming data before storage. You can also apply [Transformation Functions](/platform/functions/transformation-function) for further modifications.

</details>

<details>

<summary>Can I group devices under different Qubitro projects?</summary>

Yes. You can create multiple integrations to separate devices across different projects.

</details>

<details>

<summary>Are there additional fees for this integration?</summary>

No. There are no hidden costs such as data transfer (egress) fees for using the Qubitro <-> Loriot integration.

</details>


# 1NCE

Qubitro offers a no-code integration with the 1NCE Cloud Integrator.

### Overview

Qubitro offers a no-code integration with the 1NCE Cloud Integrator, enabling automatic synchronization of devices and telemetry data between 1NCE and Qubitro.

{% hint style="success" %}
Currently, this integration supports **Telemetry Data** event types and both **key-value JSON** and **hex string payloads**.&#x20;
{% endhint %}

{% hint style="info" %}
Hex string payloads can be decoded automatically using Hex Payload Decoders.
{% endhint %}

### Prerequisites

* [x] Administrative access to both Qubitro and 1NCE accounts.
* [x] A Qubitro account with an existing project.
* [x] A 1NCE account with active devices sending data.

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device sends data to 1NCE] --> B\[1NCE Cloud Integrator Webhook];
B --> C{Device in Qubitro?};
C -- No --> D\[Create Device];
C -- Yes --> E\[Existing Device];
D --> F\[Decode & Store Data];
E --> F;

%% Gray Styles
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#eaeaea,stroke:#000,color:#000;
style C fill:#f2f2f2,stroke:#000,color:#000;
style D fill:#eaeaea,stroke:#000,color:#000;
style E fill:#eaeaea,stroke:#000,color:#000;
style F fill:#d9d9d9,stroke:#000,color:#000;" %}

{% hint style="warning" %}
If a [Transformation Function](/platform/functions/transformation-function) is enabled, data will be processed before storage. The built-in decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **1NCE** from the available sources.

This page will display your `PROJECT ID` and `WEBHOOK SIGNING KEY` for the 1NCE configuration. Keep it open for the next step.
{% endstep %}

{% step %}
**Set Up 1NCE Cloud Integrator**

1. Log in to your **1NCE Portal**.
2. Click **1NCE OS** from the top menu and select **Cloud Integrator** from the left navigation menu.
3. Click the **+ New Integration** button and choose **Webhook**.
4. Enter the following configuration details:

<table><thead><tr><th width="154.44140625">Configuration</th><th>Value</th></tr></thead><tbody><tr><td>Endpoint URL</td><td><code>https://webhook.qubitro.com/integrations/1nce</code></td></tr><tr><td>Event Type</td><td>Select <strong>Telemetry Data</strong></td></tr></tbody></table>

Enter these HTTP Headers:

| Header Name         | Header Value                   |
| ------------------- | ------------------------------ |
| `projectId`         | *(copied from Qubitro Portal)* |
| `webhookSigningKey` | *(copied from Qubitro Portal)* |

5. Click **Proceed** to complete the configuration.
   {% endstep %}

{% step %}
**Verify Integration**

1. Return to the **Qubitro Portal**.
2. Click **Go to project**.
3. Click **Refresh** and verify that your 1NCE-connected devices appear.
4. Select a device and navigate to the **Data** tab to confirm incoming telemetry data.
   {% endstep %}
   {% endstepper %}

### FAQs

<details>

<summary>Do I need additional forwarding setup like MQTT or HTTP?</summary>

No. The integration works directly via 1NCE Cloud Integrator using webhooks. No additional forwarding setup is required.

</details>

<details>

<summary>Can I integrate multiple 1NCE accounts into different Qubitro projects?</summary>

Yes. You can create multiple integrations to manage devices across different Qubitro projects.

</details>

<details>

<summary>Are there extra fees associated with this integration?</summary>

No. There are no hidden costs or additional data transfer (egress) fees associated with the Qubitro <-> 1NCE integration.

</details>


# Golioth

The Qubitro and Golioth integration allows you to sync all devices and their data from Golioth.

### Overview <a href="#overview" id="overview"></a>

The Qubitro and Golioth integration allows you to sync all devices and their data from Golioth Cloud to Qubitro using Golioth Pipelines—without writing any code.

Once your hardware is configured and sending data to Golioth, a corresponding device is automatically created in Qubitro, representing each device with its unique platform IDs.

Qubitro also decodes incoming data automatically, and transformation functions can be applied if modifications are needed before the data is stored.

### Prerequisites

* [x] Administrative access to both accounts.
* [x] A Qubitro account with an existing project.
* [x] A Golioth account with active devices sending data

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to Golioth] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device];
B -- Yes --> D\[Use Existing Device];

C --> E\[Apply Built-in Decoder];
D --> E;

E --> F\[Store Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

{% hint style="warning" %}
If a [Transformation Function](/platform/functions/transformation-function) is enabled, data will be processed before storage. The built-in decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **Golioth** from the available sources.

<figure><img src="/files/GInP8z0KtCM3pISEde0E" alt=""><figcaption></figcaption></figure>

This page displays the pipeline snippet for Qubitro configuration. Keep it open for the next step.
{% endstep %}

{% step %}

### Setup Up The Golioth Pipeline

1. Log in to **Golioth**.
2. Click **Pipelines** from the left menu and paste the code snippet&#x20;

<figure><img src="/files/Plu0VAg6Bi2dOXTxYPAx" alt=""><figcaption></figcaption></figure>

3\. Click **Create** to save the configuration.
{% endstep %}

{% step %}
**Verify the Integration**

1. Return to Qubitro Portal
2. Clock **Go to Project** and then **Refresh** to check if the devices appear.

<figure><img src="/files/cg8CFu5pij9husJUNbZz" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Devices should have published at least one data point.
{% endhint %}

3. Open a device and navigate to the **Settings** tab to verify device credentials, or to the **Storage** tab to verify incoming data.

<figure><img src="/files/Vkv1R8dN5kJaLfntYKHT" alt=""><figcaption></figcaption></figure>

{% endstep %}
{% endstepper %}


# AWS IoT Core LoRaWAN

The Qubitro and AWS IoT Core for LoRaWAN integration allows automatic synchronization of devices and their data from AWS IoT Core to Qubitro.

### Overview

The Qubitro and AWS IoT Core for LoRaWAN integration allows automatic synchronization of devices and their data from AWS IoT Core to Qubitro without writing any code.

After setup, devices sending data via AWS IoT Core for LoRaWAN will automatically appear within your Qubitro project. Payload decoding and transformations can be easily managed with Qubitro’s built-in no-code functions.

### Prerequisites

* [x] Administrative access to both AWS IoT Core and Qubitro accounts.
* [x] A Qubitro account with an existing project.
* [x] An AWS account with LoRaWAN devices already sending data.

### How It Works

Devices publishing data to AWS IoT Core for LoRaWAN are automatically created in Qubitro. You will configure decoder functions directly in Qubitro to parse incoming payloads.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to AWS] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with DevEUI];
B -- Yes --> D\[Use Existing Device];

C --> E{Decoder Configured in AWS?};
D --> E;

E -- Yes --> F\[Store Incoming JSON in Qubitro];
E -- No --> G\[Apply Decoder Function] --> F;

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **AWS IoT Core for LoRaWAN** from the available sources.

You will see:

* **HTTPS ENDPOINT URL**
* **CONFIRMATION URL**
* **HEADER VALUES** (`projectId` and `webhookSigningKey`)

Keep this page open for the next step.
{% endstep %}

{% step %}
**Configure AWS IoT Core for LoRaWAN**

1. Log in to your **AWS IoT Core Console**.
2. Navigate to **Destinations** under LoRaWAN.
3. Click **Add destination**.
4. Copy and paste the following from Qubitro:

| AWS Field              | Qubitro Provided Value                                          |
| ---------------------- | --------------------------------------------------------------- |
| **HTTPS Endpoint URL** | *(copied from Qubitro Portal)*                                  |
| **Confirmation URL**   | *(copied from Qubitro Portal)*                                  |
| **Headers**            | `projectId`, `webhookSigningKey` *(copied from Qubitro Portal)* |

5. After setting up, AWS will send a **one-time confirmation email**.

{% hint style="warning" %}
Check your email and copy the provided **confirmation token**. Paste this token into the confirmation field on AWS IoT Core to activate your destination.
{% endhint %}

<figure><img src="/files/A4AJUke1YHHNOFzBnwrG" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Verify Integration**

1. Return to the **Qubitro Portal**.
2. Click **Go to project** and then **Refresh**.
3. Confirm that AWS-connected devices appear.
   {% endstep %}

{% step %}
**Set Up Decoder Function**

1. Within your Qubitro project, navigate to **Functions**.
2. Create a new **Decoder Function**.
3. Choose from pre-built templates or customize your decoder.
4. Save your decoder function to decode incoming payloads automatically.
   {% endstep %}
   {% endstepper %}

### FAQs

<details>

<summary>Do I need manual forwarding setup like MQTT or HTTP?</summary>

No. The integration is automatic using AWS IoT Core’s webhook.

</details>

<details>

<summary>Can multiple AWS IoT Core integrations connect to different Qubitro projects?</summary>

Yes. Create separate integrations for different projects.

</details>

<details>

<summary>Are additional fees associated with the integration?</summary>

No. There are no extra or hidden fees for using the Qubitro <> AWS IoT Core integration.

</details>


# Actility ThingPark

The Qubitro and Actility (ThingPark) integration enables you to automatically sync LoRaWAN devices and their data from ThingPark to Qubitro.

### Overview

The Qubitro and Actility (ThingPark) integration enables you to automatically sync LoRaWAN devices and their data from ThingPark to Qubitro without writing any code.

When your devices send data to Actility (ThingPark), a corresponding device with its unique DevEUI is automatically created in Qubitro.

Qubitro automatically decodes incoming data. If additional modifications are necessary, Transformation Functions can be applied before storing the data in Qubitro.

{% hint style="success" %}
This integration **supports** all LoRaWAN devices registered in Loriot.
{% endhint %}

{% hint style="info" %}
This integration **does not require** additional device-side configuration. Data flows directly between The Things Stack and Qubitro **without** manual HTTP or MQTT forwarding.
{% endhint %}

### Prerequisites

* [x] Administrative access to both Actility (ThingPark) and Qubitro accounts.
* [x] A Qubitro account with an existing project.
* [x] An Actility account with LoRaWAN devices already sending data.

### How It Works

If a Transformation Function is enabled, data will be processed before storage. Qubitro automatically applies built-in Decoder Functions, including Device Templates, and any defined Transformation Functions.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to ThingPark] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with DevEUI];
B -- Yes --> D\[Use Existing Device];

C --> E{Decoder Configured in ThingPark?};
D --> E;

E -- Yes --> F\[Store Incoming JSON in Qubitro];
E -- No --> G\[Apply Qubitro Decoder Function] --> F;

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select **Actility** from the available sources.

This page will display your `PROJECT ID` and `WEBHOOK SIGNING KEY` for Actility (ThingPark) configuration. Keep it open for the next step.
{% endstep %}

{% step %}
**Set Up Actility (ThingPark) IoT Flow**

1. Log in to your **Actility (ThingPark) Portal**.
2. Navigate to the **Connections** menu and click on **Create**.
3. Choose **Qubitro** from the available IoT Flow connection options.
4. Copy and paste the values provided in the previous step on the Qubitro Portal:

| Field                   | Value                          |
| ----------------------- | ------------------------------ |
| **PROJECT ID**          | *(copied from Qubitro Portal)* |
| **WEBHOOK SIGNING KEY** | *(copied from Qubitro Portal)* |

You can also individually copy these values from the Project Settings and Credentials tabs in Qubitro.

4. Click on **Create** to complete the IoT Flow configuration.
   {% endstep %}

{% step %}
**Assign Connection to Devices**

1. Select a registered LoRaWAN device from your device list in the Actility Portal.
2. Click the **Add a Connection** button.
3. Select the newly created Qubitro integration connection from the list.
4. Save the configuration.
   {% endstep %}

{% step %}
**Verify the Integration**

1. Return to the **Qubitro Portal**.
2. Click **Go to project**.
3. Click **Refresh** and verify that your Actility-connected devices appear.
4. Select a device and navigate to the **Data** tab to confirm incoming data.

<figure><img src="/files/cxvuHQNvCEaKg3GF5DpG" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### FAQs

<details>

<summary>Do I need additional MQTT or HTTP forwarding for this integration?</summary>

No. Data flows automatically between Actility (ThingPark) and Qubitro without manual configuration.

</details>

<details>

<summary>Do I need to send data directly from my device to Qubitro?</summary>

No. Once data is sent to Actility (ThingPark), it is automatically forwarded to Qubitro via integration.

</details>

<details>

<summary>How is incoming data decoded?</summary>

Qubitro uses its built-in [Decoder Functions](/platform/functions/decoder-function), including [Device Templates](/platform/functions/decoder-function/lorawan-device-template-decoder) to decode the payloads. Additional [Transformation Functions](/platform/functions/transformation-function) can be applied as needed.

</details>

<details>

<summary>Can I group devices under different Qubitro projects?</summary>

Yes. You can create multiple integrations to separate devices across different Qubitro projects.

</details>

<details>

<summary>Are there additional fees associated with this integration?</summary>

No. There are no hidden costs or additional data transfer (egress) fees associated with the Qubitro <-> Actility integration.

</details>


# Chirpstack

The Qubitro and Chirpstack integration allows you to sync all devices and their data from Chirpstack.

### Overview

The Qubitro and Chirpstack integration allows you to sync all devices and their data from Chirpstack directly to Qubitro—without writing any code.

Once your LoRaWAN devices are configured and sending data to Chirpstack, a corresponding device is automatically created in Qubitro, representing each device with its unique DevEUI.

As Chirpstack does not have built-in decoding functionality, Qubitro's Decoder Functions, including Device Templates, must be used to parse and structure incoming data. Additionally, Transformation Functions can be applied if modifications are needed before storing data in Qubitro.

{% hint style="success" %}
This integration **supports** all LoRaWAN devices registered in Chirpstack.
{% endhint %}

{% hint style="info" %}
This integration **does not requir**e additional device-side configuration. Data flows directly between Chirpstack and Qubitro **without** manual HTTP or MQTT forwarding.
{% endhint %}

### Prerequisites

* [x] A Chirpstack account with LoRaWAN devices already sending data.
* [x] A Qubitro account with an existing project.
* [x] Administrative access to both Chirpstack and Qubitro.

### How It Works

Below is the diagram that shows how the integration works.

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data to Chirpstack] --> B{Device Exists in Qubitro?};

B -- No --> C\[Qubitro Creates Device with DevEUI];
B -- Yes --> D\[Use Existing Device];

C --> E\[Apply Decoder Function in Qubitro];
D --> E;

E --> F\[Store Decoded Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

### Configuring the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

1. Log in to the **Qubitro Portal**.
2. Select a project from the list.
3. Click **New Source**.
4. Select Chirpstack from the available sources.

<figure><img src="/files/6MPje0kcyRjjGrFxenxn" alt=""><figcaption></figcaption></figure>

This page will display the **Webhook URL** and required headers for Chirpstack configuration. Keep it open for the next step.
{% endstep %}

{% step %}
**Set Up Webhook Integration on** Chirpstack

1. Log in to the Chirpstack **Console**.
2. Click **Applications** from the left menu.
3. Click on the `Integrations` tab under the project and click on the `ADD` or `EDIT` button on the `HTTP://` option.
4. Enter the following details provided by the Qubitro Portal and click **Submit** to save the Integration configuration.

<figure><img src="/files/IwriVfE9TswktihNzkTE" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Verify the Integration**

1. Return to the **Qubitro Portal**.
2. Click **Go to Project**.
3. Click **Refresh** and verify that your Chirpstack-connected devices appear.
4. Select a device and navigate to the **Data** tab to confirm incoming data.

<figure><img src="/files/oVbZ6XM868jonjI4EaLx" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### Configuring Data Decoding

Because Chirpstack does not have built-in decoding functionality, Qubitro's Decoder Functions must be configured.

#### Using Qubitro's Built-in Decoder Functions

Qubitro provides built-in [Decoder Functions](/platform/functions/decoder-function), including [Device Templates](/platform/functions/decoder-function/lorawan-device-template-decoder), to automatically parse and structure incoming payloads.

#### Applying Transformation Functions

If additional modifications are required before storing data, enable Transformation Functions in Qubitro to dynamically process and modify payloads.

### FAQs

<details>

<summary>Do I need to send data directly from my device to Qubitro?</summary>

No. Once data is sent to Loriot, it is automatically forwarded to Qubitro via the webhook integration.

</details>

<details>

<summary>How is data decoded since Chirpstack does not have built-in decoders?</summary>

Qubitro provides built-in [Decoder Functions](/platform/functions/decoder-function), including [Device Templates](/platform/functions/decoder-function/lorawan-device-template-decoder), which parse incoming data before storage. You can also apply [Transformation Functions](/platform/functions/transformation-function) for further modifications.

</details>

<details>

<summary>Can I group devices under different Qubitro projects?</summary>

Yes. You can create multiple integrations to separate devices across different projects.

</details>


# Particle

The Qubitro and Particle Cloud integration allows you to sync Particle devices and their data to Qubitro seamlessly.

### Overview

Qubitro offers a no-code integration with Particle Cloud, enabling automatic synchronization of your Particle devices and telemetry data directly into your Qubitro projects.

* Devices from Particle Cloud are automatically created in Qubitro.
* Telemetry data flows seamlessly without manual forwarding setup.

### Prerequisites

* [x] Administrative access to both Particle Cloud and Qubitro.
* [x] A Qubitro account with an existing project.
* [x] A Particle account with active devices.
* [x] A data must be a valid key-value JSON object.

### How It Works

When Particle Cloud devices send telemetry events, Qubitro automatically receives and processes data without requiring additional device-side configuration.

### Creating the Integration

{% stepper %}
{% step %}
**Create an Integration in Qubitro**

* Log in to the [Qubitro Portal](https://portal.qubitro.com).
* Choose a project from the list.
* Click **New Source** and select **Particle** from the available sources.

<figure><img src="/files/enqzGz2dfv5dOu59AlDp" alt="" width="563"><figcaption><p>Qubitro Particle Integration Credentials</p></figcaption></figure>

* Keep this page open to use in the next step.
  {% endstep %}

{% step %}
**Configure Webhook on Particle Console**

Log in to your Particle Console and configure the webhook:

* Click **Integrations** from the left navigation menu.
* Click **New Integration** and select **Webhook**.
* Fill in the following fields:

<table><thead><tr><th width="267.16015625">Field</th><th>Value</th></tr></thead><tbody><tr><td><strong>URL</strong></td><td><code>https://webhook.qubitro.com/integrations/particle</code></td></tr><tr><td><strong>Request Format</strong></td><td>JSON</td></tr><tr><td><strong>Request Type</strong></td><td>POST</td></tr><tr><td><strong>Device</strong></td><td>Any</td></tr></tbody></table>

**Example Configuration:**

<figure><img src="/files/DHBvZ51xkkhzvNUbOyCU" alt=""><figcaption></figcaption></figure>

* Under **Extra** Settings, **leave** JSON DATA as is:

```json
{
  "event": "{{{PARTICLE_EVENT_NAME}}}",
  "data": "{{{PARTICLE_EVENT_VALUE}}}",
  "coreid": "{{{PARTICLE_DEVICE_ID}}}",
  "published_at": "{{{PARTICLE_PUBLISHED_AT}}}"
}
```

<figure><img src="/files/QGQH4tKTHzjiDRCMfJCW" alt=""><figcaption></figcaption></figure>

* Under **Extra Settings** and in the **HTTP Headers** section, add:

| Header Name           | Header Value                               |
| --------------------- | ------------------------------------------ |
| **projectId**         | `<PROJECT_ID>` (copy from Qubitro)         |
| **webhookSigningKey** | `<WEBHOOK_SIGNING_KEY>`(copy from Qubitro) |

**Example Configuration:**

<figure><img src="/files/31wIJuogEBGYLuXRtouQ" alt=""><figcaption></figcaption></figure>

* Click **Create Webhook**.
  {% endstep %}

{% step %}
**Verify the Integration**

* Return to the Qubitro Portal.
* Click **Go to project** and then **Refresh** to confirm that devices are listed successfully.

<figure><img src="/files/A5jwOBGxysERS1EOyZ2I" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### FAQs

<details>

<summary>Do I need additional forwarding configuration in Particle Cloud?</summary>

No. The integration directly connects Particle Cloud and Qubitro without additional setup.

</details>

<details>

<summary>Are there additional costs for this integration?</summary>

No. There are no hidden costs or additional fees for data transfer or using the Qubitro <> Particle integration.

</details>


# Senet


# Coiote


# MQTT

Publish device data to Qubitro using the lightweight MQTT protocol for real-time ingestion.

MQTT is a lightweight publish/subscribe messaging protocol designed for IoT applications.&#x20;

Qubitro supports both MQTT v3.1.1 and MQTT v5.0, enabling secure and efficient data transmission from devices.

### Specifications

| Parameter      | Description                        |
| -------------- | ---------------------------------- |
| Broker Address | broker.qubitro.com                 |
| Port (SSL/TLS) | 8883 (encrypted)                   |
| Port (TCP)     | 1883 (unencrypted)                 |
| Topic          | Device ID (provided by Qubitro)    |
| Client ID      | Device ID (provided by Qubitro)    |
| QoS            | Quality of Service Levels          |
| QoS Level 2    | Exactly once                       |
| QoS Level 1    | At least once                      |
| QoS Level 0    | At most once                       |
| Password       | Device Token (provided by Qubitro) |
| Username       | Device ID (provided by Qubitro)    |

{% hint style="danger" %}
Both the **Client ID** and the **Topic** must be set to the **Device ID**; otherwise, even if the connection and authentication succeed, Qubitro will not automatically store or display the published data.
{% endhint %}

### Create an MQTT Source

{% stepper %}
{% step %}
**Navigate to the Project Detail Page**

Go to the project where you want to create an MQTT source.
{% endstep %}

{% step %}
**Create a New Source**

Click **New Source**, then select **MQTT** from the available options.
{% endstep %}

{% step %}
**Fill Out the Required Information**

Enter details according to your configuration needs.
{% endstep %}

{% step %}
**Create & Verify**

Click **Create**. Qubitro automatically generates the **Device ID** and **Device Token**. You can find these credentials in the **Device Overview** or **Device Settings** under the **Unique IDs** card.
{% endstep %}
{% endstepper %}


# HTTP

Send JSON payloads from your devices or applications to Qubitro via a simple HTTP endpoint.

HTTP provides a straightforward way to send data from your devices or applications to Qubitro.&#x20;

By making an HTTP POST request to Qubitro’s webhook endpoint, you can securely transmit JSON payloads for storage and further processing.

### Specifications

<table><thead><tr><th width="197">Parameter</th><th>Description</th></tr></thead><tbody><tr><td>Endpoint</td><td>https://webhook.qubitro.com/integrations/http</td></tr><tr><td>Method</td><td>POST</td></tr><tr><td>Data Format</td><td>Valid JSON is required by default.</td></tr><tr><td>Content-Type</td><td>application/json</td></tr><tr><td>Authorization</td><td>Basic (Device Token from Qubitro)</td></tr></tbody></table>

{% hint style="warning" %}
Qubitro rejects any request that does not contain valid JSON. Make sure your payload is properly formatted.
{% endhint %}

#### Example CURL Command

Use the Device Token as your Basic authorization header. Replace the placeholder token below with the one from your Unique IDs card.

```bash
curl --location 'https://webhook.qubitro.com/integrations/http' \
  --header 'Authorization: Basic <YOUR_DEVICE_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{ "Temperature": 30.5 }'
```

This request sends a JSON payload containing `"Temperature": 30.5` to Qubitro. Make sure your payload follows valid JSON formatting to ensure successful ingestion.

### Create an HTTP Source

{% stepper %}
{% step %}
**Navigate to the Project Detail Page**

Go to the project where you want to create an HTTP source.
{% endstep %}

{% step %}
**Create a New Source**

Click **New Source**, then select **HTTP** from the available options.
{% endstep %}

{% step %}
**Fill Out the Required Information**

Enter details according to your configuration needs.
{% endstep %}

{% step %}
**Create & Verify**

Click **Create**. Qubitro automatically generates the **Device ID** and **Device Token**. Verify these credentials in the **Device Settings** under the **Unique IDs** card.
{% endstep %}
{% endstepper %}


# Project

Manage and organize your Qubitro projects, including devices, data sources, and collaboration settings, all in one place.

A Project in Qubitro is a container for devices, data sources, and related configurations.&#x20;

Projects provide centralized management of devices and resources, enabling you to invite collaborators or groups.

In the projects overview, you can see each project’s name, tags, your role or permission level, total device count, creation date, and the project creator.

<figure><img src="/files/x0I0SEx7OJlHAIUVHyBk" alt=""><figcaption></figcaption></figure>

### Create a Project

{% stepper %}
{% step %}
**Navigate to the Projects Tab**

Go to the **Projects tab** where all your projects are listed.
{% endstep %}

{% step %}
**Click New Project**

Click the **New Project** button.
{% endstep %}

{% step %}
**Fill Out the Project Details**

Enter the required information, including the project name, description, and any tags.
{% endstep %}

{% step %}
**Create & Verify**

Click **Create**. Verify that the new project appears in your Projects overview with the correct details, such as the project name and tags.
{% endstep %}
{% endstepper %}

{% content-ref url="/pages/c4w1aPe3Lb7gKPtoMLLq" %}
[Settings](/platform/project/settings)
{% endcontent-ref %}

{% content-ref url="/pages/ePuGB7awefvMVSXODvL7" %}
[Access Management](/platform/project/access-management)
{% endcontent-ref %}

{% content-ref url="/pages/YI0j9BNdWpcVsewP5OVV" %}
[Roles & Permissions](/platform/project/roles-and-permissions)
{% endcontent-ref %}


# Settings

Update project details and manage access; note some settings may be disabled based on your role.

The Project Settings page allows you to update a project’s general details—such as its name, description, and tags—and provides access management tools if you meet the required plan or permission level.

### How to Access Project Settings

{% stepper %}
{% step %}
**Go to the Project Detail Page**

Locate and select the project you want to configure.
{% endstep %}

{% step %}
**Select the Settings Tab**

In the top navigation (next to Devices), click **Settings**.
{% endstep %}
{% endstepper %}

### General

{% hint style="warning" %}
Note: Some settings items (for example, Delete Project) may be disabled depending on your role within the project. If you require access to these features, please check your [permissions](/platform/project/roles-and-permissions) or contact your project administrator.
{% endhint %}

#### Project ID

Used when interacting with the Qubitro API (read-only).

#### Project Name

Rename your project for clarity.

#### Project Description

Provide context or goals for the project.

#### Tags

Organize and categorize your project for easier navigation and improve project search functionality.

{% hint style="warning" %}
If the tag limit is reached, you must remove an existing tag before adding a new one.
{% endhint %}

#### Created At

Displays the **exact date and time** when the project was created.

{% hint style="info" %}
The **Created At** date is displayed in the **time zone selected in your account settings**.
{% endhint %}

#### Delete Project

Permanently remove the project.&#x20;

{% hint style="danger" %}
Deleting a project is **irreversible** and will **permanently remove all data**, including **devices, time series data, blob data (if any), functions, and dashboards** linked to devices related to project. Any associated **resources like add-ons (e.g., storage views data)** will also be deleted.
{% endhint %}


# Access Management

Manage project collaborators by inviting users and assigning roles to control their access and permissions.

The Access Management tab allows you to invite collaborators, assign roles, and manage group access (if available). This ensures that only authorized users can view or modify your project’s data and settings.

<figure><img src="/files/plQBfapvbgRZmpays2Mu" alt=""><figcaption></figcaption></figure>

### Availability

This tab appears if you own a personal account on the Scale plan or if your assigned role supports access management. For organization-owned projects, the tab is visible only to members with the required permissions.

#### Inviting Collaborators

Personal accounts on the Scale plan can invite any account on Starter or Scale. For organization-owned projects, the invitee must already be a member of the organization; otherwise, the invitation will not be sent.

#### Invite Groups

This option is visible only when the project belongs to an organization. If the project belongs to a personal account, the **Invite Groups tab** does not appear.

### How to Invite

{% stepper %}
{% step %}
**Go to the Access Management Tab**

Navigate to **Project Settings**, then select **Access Management**.
{% endstep %}

{% step %}
**Enter Collaborator Details**

In the “New Collaborators” section, type the user’s email address. Alternatively, if you’re sharing with a group, choose the group from the dropdown.
{% endstep %}

{% step %}
**Assign a Role**

Select a role (Admin, Read/Write, or Read Only) from the dropdown. If sharing with a group, you may choose a custom role if it is available; if not, select one of the standard roles.
{% endstep %}

{% step %}
**Click Invite**

An invitation email is sent to the collaborator. They appear in the “Project Collaborators” list once they accept.
{% endstep %}
{% endstepper %}

### Roles & Permission

Learn more about roles and permission options for managing project access.

{% content-ref url="/pages/AMGpH3yryMqcOX8RmZlu" %}
[Roles & Permission](/platform/monitoring/dashboards/roles-and-permission)
{% endcontent-ref %}


# Roles & Permissions

Define and manage user roles to control access to project resources.

The Roles & Permissions tab defines how collaborators interact with project resources, including devices, Functions, and storage actions.&#x20;

{% hint style="info" %}
A resource is any project component that can be viewed, created, modified, or deleted. This includes devices, Functions, or storage actions within your project.
{% endhint %}

Qubitro provides three default roles—Read-Only, Read/Write, and Admin—each granting a different level of access.

{% hint style="success" %}
If your plan or organization settings allow for custom roles, you can define additional role types with more granular permissions.
{% endhint %}

### Default Roles

#### Read-Only

Users can view resources but cannot create, modify, or delete them.

{% hint style="info" %}
**Examples**

• They can see device details but cannot rename or delete the device.

• They can view existing Functions but cannot edit or create them.
{% endhint %}

#### Read/Write

Users can create and modify resources but cannot delete them.

{% hint style="info" %}
**Examples**

• They can add new devices or edit existing Functions but cannot delete them.

• They can view or download stored data but cannot permanently delete storage entries.
{% endhint %}

#### Admin

Users have full control over all resources, including creation, modification, and deletion, plus access management.

{% hint style="info" %}
**Examples**

• They can remove devices or Functions from the project.

• They can invite or remove collaborators and manage roles.
{% endhint %}

### Roles Reference

<table><thead><tr><th width="228"></th><th align="center">Read-Only</th><th align="center">Read/Write</th><th align="center">Admin</th></tr></thead><tbody><tr><td>View Resources</td><td align="center">✅</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Modify Resources</td><td align="center">❌</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Create Resources</td><td align="center">❌</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Delete Resources</td><td align="center">❌</td><td align="center">❌</td><td align="center">✅</td></tr><tr><td>Access Management</td><td align="center">❌</td><td align="center">❌</td><td align="center">✅</td></tr></tbody></table>

***

### Custom Roles

Custom roles allow Organizations to define more specific access controls for project-level resources. You can customize which actions are allowed, such as creating dashboards, editing environment variables, or inviting collaborators.

{% hint style="warning" %}
Custom roles are available only for **Organizations** and must be created in the **Organization Settings**.
{% endhint %}

Once created, custom roles can be assigned to collaborators through the **Access Management** tab of each project.

{% content-ref url="/pages/ivg9wjLtoHiB3qIaDoI7" %}
[Custom Roles](/organizations/custom-roles)
{% endcontent-ref %}


# Device

Learn how devices are created, managed, and integrated in Qubitro, including automatic provisioning via integrations and manual setup using UI or APIs

Devices in Qubitro represent connected hardware that sends data to the platform. Each device is associated with a project and can be managed from the Devices tab.&#x20;

### Creating Devices

Device creation in Qubitro depends on the **data source**.

#### **Automatically Created Devices**

If you are using **integrations** such as **LoRaWAN LNS providers (e.g.,** [**The Things Stack**](/data-sources/no-code-integrations/the-things-stack)**,** [**Loriot**](/data-sources/no-code-integrations/loriot)**) or cellular platforms (e.g.,** [**Onomondo**](/data-sources/no-code-integrations/onomondo)**)**, devices are **automatically created** when data is first received.

{% hint style="success" %}
For integrations, **there is no need to manually create devices**—Qubitro automatically syncs them based on incoming data.
{% endhint %}

#### **Manually Created Devices**

For MQTT and HTTP, devices can be manually created using either the Portal or APIs.

Create a Device with MQTT Support:

{% content-ref url="/pages/wzytggOvL7luwcB2eWNv" %}
[MQTT](/data-sources/mqtt)
{% endcontent-ref %}

Create a Device with HTTP Support:

{% content-ref url="/pages/n9sFogqifSdoCoCuA49o" %}
[HTTP](/data-sources/http)
{% endcontent-ref %}

Use the **API** to create a Device with MQTT or HTTP support:

{% content-ref url="/spaces/LXNwVpW4heD62GZhpd5I/pages/NQdJ7UikixBzzzpe4ntD" %}
[Broken mention](broken://spaces/LXNwVpW4heD62GZhpd5I/pages/NQdJ7UikixBzzzpe4ntD)
{% endcontent-ref %}


# Settings

Manage device settings, metadata, and authentication details. Configure tags, avatars, and identifiers, and handle device deletion.

## Device Settings

Update device details and manage metadata, tags, and unique IDs. Some settings may be restricted based on your role or integration type.

The **Device Settings** page allows you to update a device’s **general details**—such as its name, metadata, tags, and description—and provides unique identifiers for API interactions.

### How to Access Device Settings

{% stepper %}
{% step %}
**Go to the Device Detail Page**

Locate and select the device you want to configure.
{% endstep %}

{% step %}
**Select the Settings Tab**

In the top navigation (next to **Overview**), click **Settings**.
{% endstep %}
{% endstepper %}

### General

{% hint style="warning" %}
Some settings (e.g., **Delete Device**) may be **restricted** based on **your role** or **integration type**. If you require access, check your **permissions** or contact your project administrator.
{% endhint %}

#### Unique IDs

Used when interacting with the **Qubitro API** (read-only).

* **Device ID**: A unique identifier that may vary based on the data source. Some integrations (e.g., **cellular**) may display **SIM IDs**.
* **Device Token**: Used for authentication.
  * **MQTT**: Acts as the **password**.
  * **HTTP**: Used as the **Authorization** value in requests.

#### Metadata

Metadata allows manually adding non-dynamic information such as:

* **SKU Number**
* **Serial Number**
* **Customer Name**

{% hint style="success" %}
Metadata is automatically displayed on the Device Overview page and is accessible via API for programmatic use.
{% endhint %}

#### Tags

Organize and categorize your device for improved navigation and search.

* You can **assign up to three tags per device**.

{% hint style="warning" %}
If the tag limit is reached, you must remove an existing tag before adding a new one.
{% endhint %}

#### Device Avatar

Click the avatar to **upload a custom image** to visually distinguish your device.

#### Device Details

Customize device information:

* **Device Name** (max **32 characters**)
* **Device Brand** (max **32 characters**)
* **Device Model** (max **32 characters**)
* **Device Description** (max **32 characters**)

#### Created At

Displays the **exact date and time** when the device was added to Qubitro.

{% hint style="info" %}
The Created At date is displayed in the time zone selected in your account settings.
{% endhint %}

### Delete Device

Permanently remove the device and all associated data.

{% hint style="danger" %}
Deleting a device is irreversible and will **permanently** remove all data, including time series data, blob data (if any), functions, and widgets from dashboards that use this device’s data. Additionally, any associated resources like add-ons (e.g., storage views data) will **also** be deleted.
{% endhint %}


# Storage

Overview of Qubitro’s storage solutions, covering Time Series Storage for structured, time-stamped data and Blob Storage for multimedia files.

Qubitro supports robust storage solutions for persistent data management.&#x20;

Two primary storage types are available:

### Time Series Storage

Designed for structured, time-stamped data. Supports valid JSON and binary data (via integrations) for capturing events, sensor readings, and other chronological information.

{% content-ref url="/pages/OB5ZYomERrvDW9eRuC1T" %}
[Time Series Storage](/platform/storage/time-series-storage)
{% endcontent-ref %}

### Blob Storage

Designed for unstructured data. Supports audio, image, and video formats for managing large files and multimedia content.

{% hint style="info" %}
Available only on the Enterprise plan. Activate it from the organization’s add-on settings.
{% endhint %}

{% content-ref url="/pages/8bz3O1kbSohDSEuYaRt4" %}
[Blob Storage](/add-ons/blob-storage)
{% endcontent-ref %}


# Time Series Storage

Qubitro Time Series Storage enables scalable, real-time device data storage with customizable retention, API access, and seamless dashboard integration.

### Overview

Every device on Qubitro has built-in **Time Series Storage**, which is **automatically created** when the device is created.&#x20;

This **fully managed, highly available, and horizontally scalable storage engine** eliminates database operations (DBOps) and the need for third-party databases.

### Core Features

* [x] **Automatic Storage Creation** – No setup required; storage is created per device.
* [x] **Dynamic Data Storage** – Supports **any valid JSON data** structure.
* [x] **Per-Device Retention Period** – Customizable based on **plan and project settings**.
* [x] **Scalability** – Handles high-ingestion workloads with horizontal scaling.
* [x] [**Storage Views**](/add-ons/storage-views) – Enables writing data to multiple views for advanced structuring.
* [x] **Multi-Access Support** – Available via APIs, dashboards, and UI-based views.

### Data Accessibility

Time Series Storage data is available through:

#### **Device Detail Page → Storage Tab** (Table view)

<figure><img src="/files/etxgB87agandgNeJmAMc" alt=""><figcaption><p>Qubitro Time Series Storage View</p></figcaption></figure>

#### **APIs** (For programmatic access)

{% content-ref url="/spaces/LXNwVpW4heD62GZhpd5I/pages/QahDA1wKakOsAZM0qrJG" %}
[Broken mention](broken://spaces/LXNwVpW4heD62GZhpd5I/pages/QahDA1wKakOsAZM0qrJG)
{% endcontent-ref %}

#### Example response:

```json
{
  "success": true,
  "action": "get device data",
  "status": 200,
  "message": "Device data fetched successfully.",
  "data": [
    {
      "acoustic_level": 45.425554079986945,
      "anomaly_detected": false,
      "equipment_health": "Good",
      "flow_rate": 159.9091980083704,
      "humidity": 80.84150406882252,
      "maintenance_needed": false,
      "pressure": 926.2272770144835,
      "temperature": 22.9795338621098,
      "time": "2025-03-02T20:30:21.202946Z",
      "timestamp": "2025-03-02T20:30:05Z",
      "vibration": 8.039540775151707
    },
    {
      "acoustic_level": 97.35889180403677,
      "anomaly_detected": false,
      "equipment_health": "Good",
      "flow_rate": 168.36617819046316,
      "humidity": 66.9764711069997,
      "maintenance_needed": false,
      "pressure": 1091.38434821347,
      "temperature": 37.229863557166354,
      "time": "2025-03-02T20:30:06.637564Z",
      "timestamp": "2025-03-02T20:30:06Z",
      "vibration": 1.0982245649319902
    }
  ]
}
```

#### **Dashboard Widgets** (For visualization)

<figure><img src="/files/YZIyzJkqwqNIAlMmFeK3" alt="" width="375"><figcaption></figcaption></figure>

### Retention Period

Retention periods vary based on **plan type** and **organization settings**:

| Plan Type                           | Default Retention Period |
| ----------------------------------- | ------------------------ |
| **Starter Plan (Personal)**         | 7 days                   |
| **Scale Plan (Personal)**           | 14 days                  |
| **Enterprise Plan (Organizations)** | Configurable per project |

For **Enterprise accounts**, retention can be set per projec&#x74;**, per device.**

Example:

* **Project A** → 3 months data retention per device.
* **Project B** → 6 months data retention per device.

{% hint style="info" %}
The default retention period for organizations is defined in the **agreement**.
{% endhint %}

### Data Size Limits

{% hint style="success" %}
The **data size limit** applies **per device**, meaning each device has its own maximum limit for individual data points.
{% endhint %}

| Plan Type                           | Max Data Point Size                 |
| ----------------------------------- | ----------------------------------- |
| **Starter Plan (Personal)**         | 1 KB                                |
| **Scale Plan (Personal)**           | 10 KB                               |
| **Enterprise Plan (Organizations)** | Custom (Up to 10 MB per data point) |

### Deleting Device Data

Qubitro provides multiple options for deleting device data, allowing you to remove data in bulk or delete specific data points as needed.

{% hint style="info" %}
This section covers **per-device data deletion**. To delete data for **all devices**, you can:

* Use the [**Qubitro API**](broken://spaces/LXNwVpW4heD62GZhpd5I/pages/5Os1Z8KvhOWsIgRfDWqX) to fetch all devices and delete their data.
* Delete the entire [**project**](/platform/project), which will remove all associated devices and data.
  {% endhint %}

{% hint style="danger" %}
Data deletion is **permanent** and cannot be undone. Once deleted, the data **cannot be recovered**.
{% endhint %}

#### Bulk Deletion

* You can delete **all stored data** for a device from the **Storage** tab.
* Click the **options menu (`...`)** and select **Delete all device data**.

{% hint style="danger" %}
This action removes **all historical data points** from **Time Series Storage** and cannot be undone.
{% endhint %}

#### Deleting Individual Data Points

This method is useful when only selective data needs to be removed without affecting the rest of the dataset.

* To delete a **specific data point**, expand the table view by clicking the **`+`** icon next to a data entry.
* Click the **red cross (❌)** next to the data point to remove it.

#### Deleting Data via API

This method is ideal for automated cleanup tasks or bulk deletions managed through scripts.

* Refer to the [API documentation](broken://spaces/LXNwVpW4heD62GZhpd5I/pages/5Os1Z8KvhOWsIgRfDWqX) for supported endpoints and usage details.


# Functions

Qubitro Functions enable no-code or low-code data processing, automation, and transformation.

Functions in Qubitro allow you to **process, transform,** and **route data** before it is stored or forwarded.&#x20;

Whether you need to modify payloads, trigger actions, or integrate with external systems, Functions provide a flexible, no-code or low-code solution.

### Function Types

Qubitro supports different types of functions to handle various data processing needs.&#x20;

*<mark style="background-color:yellow;">**If you need to decode and structure raw payloads:**</mark>*

{% content-ref url="/pages/DLW83gAN0r1TokBsi8w4" %}
[Decoder Function](/platform/functions/decoder-function)
{% endcontent-ref %}

&#x20;*<mark style="background-color:yellow;">**If you need to modify, filter, or restructure incoming data before it is stored:**</mark>*

{% content-ref url="/pages/NBd4pMnmRf4WLyROct91" %}
[Transformation Function](/platform/functions/transformation-function)
{% endcontent-ref %}

*<mark style="background-color:yellow;">**If you want to trigger automated actions when incoming data meets specific conditions:**</mark>*

{% content-ref url="/pages/gglYsorMvCTqlh6RGytc" %}
[Rule Function](/platform/functions/rule-function)
{% endcontent-ref %}

&#x20;*<mark style="background-color:yellow;">**If you want to run automated tasks at predefined intervals:**</mark>*

{% content-ref url="/pages/a50uuIda0eRwHksZqMyZ" %}
[Scheduled Function](/platform/functions/scheduled-function)
{% endcontent-ref %}

### Function Templates

Qubitro lets you save functions as templates and apply them across multiple devices or an entire project.

{% content-ref url="/pages/VJ2y8Jxf9WP3Q5mIOHG5" %}
[Function Templates](/platform/functions/function-templates)
{% endcontent-ref %}


# Decoder Function

Decoder Functions in Qubitro allow you to decode incoming payloads.

### Overview

Decoder Functions in Qubitro allow you to **decode incoming payloads** before storing data.&#x20;

Depending on your device type and data format, you can choose from different decoder options to ensure data is structured correctly.

{% hint style="success" %}
Once a **decoder function** is created, it runs automatically for incoming data **without requiring manual activation**.
{% endhint %}

{% hint style="info" %}
If needed, the function can be **disabled from the functions list** under the device’s **Functions** tab without deleting it.
{% endhint %}

<figure><img src="/files/SSyqywqdVekCc7q3SUJw" alt=""><figcaption></figcaption></figure>

### Choosing the Right Decoder

Qubitro provides three types of decoders, each suited for different integration needs:

#### **LoRaWAN Device Template Decoder**

Use this option if your LoRaWAN device has a **predefined template** in Qubitro. It allows you to **automatically decode** incoming payloads without writing custom logic.

* [x] Works with **all LNS providers** (The Things Stack, ChirpStack, etc.).
* [x] Requires **no custom scripting**—simply select a template from the portal.
* [x] Ensures **consistent and accurate decoding** based on manufacturer specifications.

{% hint style="info" %}
If you use the LoRaWAN Device Template Decoder, device templates for dashboards will work automatically, enabling instant visualization of decoded data.
{% endhint %}

{% content-ref url="/pages/OyhuodCl5eAcoDsxOWRE" %}
[LoRaWAN Device Template Decoder](/platform/functions/decoder-function/lorawan-device-template-decoder)
{% endcontent-ref %}

#### **LoRaWAN Custom Device Decoder**

Use this option if your LoRaWAN device **does not have a predefined template**. You can write **custom JavaScript** to decode payloads manually.

* [x] Works with **all LNS providers** (The Things Stack, ChirpStack, etc.).
* [x] Requires **custom JavaScript** to parse incoming payloads.
* [x] Ideal for **custom or new LoRaWAN devices** that are not yet available as templates.

{% content-ref url="/pages/dY5o9UxOmp0EOkPzmK2b" %}
[LoRaWAN Custom Decoder](/platform/functions/decoder-function/lorawan-custom-decoder)
{% endcontent-ref %}

#### **HEX Payload Decoder**

Use this option if your device **sends data in hex-encoded format instead of JSON**. It converts **hex-encoded strings** into structured JSON.

* [x] Works with **non-LoRaWAN devices**, including [**MQTT**](/data-sources/mqtt)**,** [**HTTP**](/data-sources/http)**,** [**Onomondo**](/data-sources/no-code-integrations/onomondo)**, and more**.
* [x] Converts **hex-encoded strings** into readable JSON.
* [x] Useful for devices that **cannot publish raw JSON directly**.

{% content-ref url="/pages/oBPdAUkBU66Yuzgqslx1" %}
[Hex Payload Decoder](/platform/functions/decoder-function/hex-payload-decoder)
{% endcontent-ref %}


# LoRaWAN Device Template Decoder

The LoRaWAN Device Template Decoder allows you to automatically decode payloads from supported LoRaWAN devices using predefined templates.

### Overview

The **LoRaWAN Device Template Decoder** allows you to **automatically decode payloads** from supported LoRaWAN devices using predefined templates. This ensures that incoming data is correctly structured without requiring custom decoding logic.

### How It Works

{% @mermaid/diagram content="graph LR;
A\[LoRaWAN Device Sends Data] --> B{Decoder Available?};

B -- No --> C{If Incoming Payload is Valid JSON?};
C -- Yes --> D\[Store JSON Data in Qubitro];
C -- No --> E\[Requires a Decoder Function];

B -- Yes --> F\[Apply Predefined Template];
F --> G\[Store Decoded Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style C fill:#f2f2f2,stroke:#000,color:#000;
style F fill:#e0e0e0,stroke:#000,color:#000;
style G fill:#e0e0e0,stroke:#000,color:#000;" %}

{% hint style="warning" %}
If a [Transformation Function](https://qubitro.gitbook.io/qubitro-documentation/platform/functions/transformation-function) is enabled, data will be processed before storage. The decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Creating a LoRaWAN Device Decoder Function Template

You can create a new function by navigating to the **device details page**, selecting the **Functions** tab, and clicking on **Create function**, then choosing **Decoder Function** from the list.

{% stepper %}
{% step %}
**Select the Device Template**

1. Open the **device details page** in the **Qubitro Portal**.
2. Click the **Functions** tab.
3. Click **Create function** and select **Decoder Function**.
4. Choose **LoRaWAN Device Template** as the **formatter type**.
5. Use the search bar to find the **manufacturer** and **model** of your device.

<figure><img src="/files/DpqpBhxj3W4Y2nEuwIPA" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="success" %}
The formatter code **can** be customized before saving to fit your needs (e.g., data keys can be changed).
{% endhint %}
{% endstep %}

{% step %}
**Save and Apply the Template**

1. Click **Save and complete** to apply the device template.
2. The **decoder function** will now process incoming data automatically.

{% hint style="warning" %}
When a function is created using this template, the device information, including **brand, model, and avatar**, is updated.
{% endhint %}
{% endstep %}
{% endstepper %}

### FAQs

<details>

<summary>I created the integration and see the device is listed but I don't see data. How can I understand that?</summary>

If your device is listed but no data appears, **check the device details page**. If the integration is successful but a **decoder function is missing**, you will see a warning message prompting you to create a function. Without a decoder, raw binary data cannot be processed into readable JSON.<br>

</details>

<details>

<summary>I don't see my devices listed, can Qubitro help me?</summary>

Absolutely! If your devices are not appearing after setting up the integration, please **open a ticket** from the Support Page and our team will assist you.

</details>

<details>

<summary>Can a decoder function work with any LNS provider?</summary>

Yes! Qubitro's decoder functions are **compatible with any LNS provider**, including **Loriot, The Things Stack, and others**. As long as the device is sending data, the decoder function can process and store it.

</details>


# LoRaWAN Custom Decoder

The LoRaWAN Custom Device Decoder allows you to write your own decoder function to process incoming LoRaWAN uplink messages.

### Overview

The **LoRaWAN Custom Device Decoder** allows you to **write your own decoder function** to process incoming LoRaWAN uplink messages.&#x20;

This provides flexibility to handle **custom payload formats** that are not available as pre-built templates.

### How It Works

{% @mermaid/diagram content="graph LR;
A\[LoRaWAN Device Sends Data] --> B{Decoder Function Available?};

B -- No --> C{If Incoming Payload is Valid JSON?};
C -- Yes --> D\[Store JSON Data in Qubitro];
C -- No --> E\[Requires a Decoder Function];

B -- Yes --> F\[Apply Custom Decoder];
F --> G\[Store Decoded Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style C fill:#f2f2f2,stroke:#000,color:#000;
style F fill:#e0e0e0,stroke:#000,color:#000;
style G fill:#e0e0e0,stroke:#000,color:#000;" %}

{% hint style="warning" %}
If a [Transformation Function](https://qubitro.gitbook.io/qubitro-documentation/platform/functions/transformation-function) is enabled, data will be processed before storage. The decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Tips

JavaScript payload formatters allow you to write functions to encode or decode messages. These functions are executed using a **JavaScript ECMAScript 5.1 runtime**.

* **Avoid** non-trivial logic or polyfills; they may not be supported.
* Use arithmetic operations and bit shifts to convert binary data into readable fields.
* Keep payload formatters simple and lightweight.

{% hint style="success" %}
Need help reviewing your custom formatter? Our team can assist in checking your code for compatibility. Reach out via the [Support Page](https://qubitro.gitbook.io/qubitro-documentation/help-center).
{% endhint %}

### Function Schema

A **decoder function** processes raw **uplink messages** and returns a **JSON object** containing the decoded fields.

```javascript
function decoder(input) {
  // Your decoding logic here
}
```

{% hint style="danger" %}
The function name and parameter name cannot be modified.
{% endhint %}

#### Function Parameters

The decoder function has a single parameter: input. Qubitro automatically provides this parameter, which contains three properties:

* **Metadata**: A dynamic object containing metadata from the LNS provider (e.g., RSSI, SNR, timestamp). The structure varies depending on the provider.
* **fPort**: The LoRaWAN fPort used for the uplink.
* **Bytes**: A byte array representing the raw payload from the uplink message.

#### Example: Accessing Function Parameters

```javascript
function decoder(input) {
    var bytes = input.bytes;  // Get the raw payload
    var fPort = input.fPort;  // Get the fPort value
    var metadata = input.metadata; // Get metadata from the LNS provider
    return {};
}
```

#### Return Values

{% hint style="warning" %}
To ensure compatibility with Qubitro’s no-code suite, the output should be a key-value JSON object.
{% endhint %}

For example, if the payload represents temperature, the function can extract and return it as follows:

```javascript
function decoder(input) {
  const bytes = input.bytes;
  const fPort = input.fPort;
  const metadata = input.metadata;

  // Convert bytes to temperature value
  const temperature = ((bytes[0] << 8) + bytes[1]) / 100;

  return {
    "temperature": temperature,
    "metadata": metadata
  };
}
```

### Creating a Custom Decoder Function

{% stepper %}
{% step %}
**Select the Function Type**

1. Open the **device details page** in the **Qubitro Portal**.
2. Click the **Functions** tab.
3. Click **Create function** and select **Decoder Function**.
4. Choose **LoRaWAN Custom Device** as the formatter type.
   {% endstep %}

{% step %}
**Write the Decoder Code**

1. Enter your **custom decoder function** in the editor.
2. Modify the formatter code to match your device’s payload.

<figure><img src="/files/owcEkBDFvVI0jaIRwZGX" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Save and Apply the Function**

1. Click **Save and complete** to apply the decoder function.
2. The function will now **process all incoming data** for this device automatically.
   {% endstep %}
   {% endstepper %}

## FAQs

<details>

<summary>I created the function, but my device data is not decoded correctly. What should I do?</summary>

If your function is active but the data is not decoded correctly, check the following:

* Ensure that the payload format matches your decoder logic.
* Use the **Test** feature in the function editor to validate sample data.
* Check the **device logs** to see if raw data is being received.

If you need assistance, our team can **review your custom formatter code**. Open a [ticket](https://qubitro.gitbook.io/qubitro-documentation/help-center) from the Support Page.

</details>

<details>

<summary>I don’t see my device listed. Can Qubitro help me?</summary>

Absolutely! If your device does not appear after setting up the integration, **open a** [**support ticket**](https://qubitro.gitbook.io/qubitro-documentation/help-center), and our team will assist you in troubleshooting the issue.

</details>

<details>

<summary>Can I use a custom decoder with any LNS provider?</summary>

Yes! Qubitro’s **LoRaWAN Custom Device Decoder** works with **any LNS provider**, including **Loriot, The Things Stack, and ChirpStack**. As long as the device sends data, your decoder function will process it.

</details>

<details>

<summary>Can the Qubitro team help me write a custom decoder?</summary>

While Qubitro provides flexibility for writing custom decoders, our team can **review your formatter code** to ensure compatibility and suggest improvements. Feel free to reach out via the [Support Page](https://qubitro.gitbook.io/qubitro-documentation/help-center).

</details>


# Hex Payload Decoder

The Hex Payload Decoder allows you to convert incoming hex string payloads into valid JSON data

### Overview

The **Hex Payload Decoder** allows you to **convert incoming hex string payloads into valid JSON data** for non-LoRaWAN data sources.

{% hint style="info" %}
The **Hex Payload Decoder** is only applicable for **non-LoRaWAN data sources**, such as [MQTT](/data-sources/mqtt), [HTTP](/data-sources/http), or [Onomondo](/data-sources/no-code-integrations/onomondo). LoRaWAN devices use [**Device Templates**](/platform/functions/decoder-function/lorawan-device-template-decoder) or [**Custom Decoder**](/platform/functions/decoder-function/lorawan-custom-decoder) for decoding.
{% endhint %}

### How It Works

{% @mermaid/diagram content="graph LR;
A\[Non-LoRaWAN Device Sends Hex Data] --> B{Decoder Function Available?};

B -- No --> C\[Data Cannot Be Processed];
B -- Yes --> F\[Convert Hex to JSON];

F --> G\[Store Decoded Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style C fill:#f2f2f2,stroke:#000,color:#000;
style F fill:#CBC3E3,stroke:#000,color:#000;  %% Purple from previous diagrams
style G fill:#CBC3E3,stroke:#000,color:#000;  %% Purple from previous diagrams" %}

{% hint style="warning" %}
If a [Transformation Function](https://qubitro.gitbook.io/qubitro-documentation/platform/functions/transformation-function) is enabled, data will be processed before storage. The decoder applies first, and then any defined transformation function modifies the data before it is stored in Qubitro.
{% endhint %}

### Tips

* **Avoid** unnecessary logic or external dependencies that could slow down execution.
* **Use** arithmetic operations and bit shifts to convert hex values into readable fields.
* Keep payload formatters **simple** and lightweight.

{% hint style="success" %}
Need help reviewing your custom formatter? Our team can assist in checking your code for compatibility. Reach out via the [Support Page](https://qubitro.gitbook.io/qubitro-documentation/help-center).
{% endhint %}

### Required Input Format

Data must be published as JSON with the following structure:

```json
{ "payload_hex": "hex_value" }
```

{% hint style="warning" %}
**The key must be `"payload_hex"`** in the incoming JSON payload. Any other key name will not be recognized by the system.
{% endhint %}

### Function Schema

A decoder function processes **incoming hex payloads** and returns a structured JSON object.

#### Function Parameters

The decoder function receives a **single parameter: `input`**, which contains:

* **bytes** → A byte array representing the raw payload received.

```javascript
function decoder(input) {
  // Your decoding logic here
}
```

#### Return Values

{% hint style="warning" %}
To ensure compatibility with Qubitro’s no-code suite, the output should be a key-value JSON object.
{% endhint %}

### Example

{% stepper %}
{% step %}
**Incoming payload**

```json
{ "payload_hex": "7B2274656D7065726174757265223A32352C2268756D6964697479223A36302C227072657373757265223A313031332C2262617474657279223A39307D" }
```

{% endstep %}

{% step %}
**Formatter code**

```javascript
function decoder(input) {
    
    // Extract values from the input bytes array

    // First byte represents temperature
    let temperature = input.bytes[0];  

    // Second byte represents humidity
    let humidity = input.bytes[1];     

    // Third & Fourth bytes represent pressure (16-bit value)
    let pressure = (input.bytes[2] << 8) | input.bytes[3]; 

    // Fifth byte represents battery level
    let battery = input.bytes[4];      

    // Return an object containing the decoded values
    return { temperature, humidity, pressure, battery };
}
```

{% endstep %}

{% step %}
**Decoded payload**

```json
{
  "temperature": 123,
  "humidity": 34,
  "pressure": 29797,
  "battery": 109
}
```

{% endstep %}
{% endstepper %}

### Creating a Custom Decoder Function

{% stepper %}
{% step %}
**Select the Function Type**

1. Open the **device details page** in the Qubitro Portal.
2. Click the **Functions** tab.
3. Click **Create Function** and select **Decoder Function**.
4. Choose **Hex Payload Decoder** as the formatter type.
   {% endstep %}

{% step %}
**Write the Decoder Code**

1. Enter your custom decoder function in the editor.
2. Adjust the function to match your **device’s payload format**.
   {% endstep %}

{% step %}
**Save and Apply the Function**

1. Click **Save** to apply the decoder function.
   {% endstep %}
   {% endstepper %}

{% hint style="warning" %}
Once saved, **Qubitro will automatically apply the decoder** to all incoming data for the assigned device.
{% endhint %}


# Transformation Function

Transformation Functions allow you to modify, rename, and structure incoming data.

### Overview

A **Transformation Function** in Qubitro allows you to **modify, rename, and structure incoming data** before it is stored or used for automation.

### How Transformation Functions Work

{% hint style="warning" %}
Transformation Functions run **after Decoder Functions** in a system-level order and cannot be changed.
{% endhint %}

{% @mermaid/diagram content="graph LR;
A\[Device Publishes Data] --> B{Decoder Function Exists?};

B -- Yes --> C\[Apply Decoder Function];
B -- No --> D\[Use Raw Data];

C --> E\[Apply Transformation Function];
D --> E;

E --> F\[Store Transformed Data in Qubitro];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#e0e0e0,stroke:#000,color:#000;" %}

### JSONata for Data Transformation

Transformation Functions in Qubitro use [**JSONata**](https://jsonata.org/), a lightweight query and transformation language designed for JSON data.

{% hint style="info" %}
JSONata is optimized for real-time data processing, allowing flexible modifications without complex scripting.
{% endhint %}

<mark style="background-color:yellow;">For examples and best practices, check out our guidance.</mark>

{% embed url="<https://qubitro.gitbook.io/qubitro-documentation/guides/functions-and-data-processing/how-to-use-jsonata-for-real-time-data-transformation-in-qubitro>" %}

### Creating a Transformation Function

Transformation functions can be created from the **Functions tab** in the **device details page**:

{% stepper %}
{% step %}
**Open the Functions Tab**

1. Navigate to the **device details page** in the **Qubitro Portal**.
2. Click the **Functions** tab.
3. Click **Create function** and select **Transformation Function**.
4. Choose **JSONata** as the function type.
   {% endstep %}

{% step %}
**Write the JSONata Expression**

1. Enter your **JSONata transformation logic** in the editor.
2. Modify, restructure, or filter data as needed.
3. Click **Test** to validate the transformation output.

<figure><img src="/files/6KWgA1jdKmmn9nZh9RNw" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Save and Apply the Function**

1. Click **Save and complete** to activate the function.
2. The function will now **automatically process all incoming data** for this device.

{% hint style="success" %}
Transformation functions can be activated during creation or manually enabled/disabled under the **Configuration** page in the **Device Settings**.
{% endhint %}
{% endstep %}
{% endstepper %}


# Rule Function

## Functions

Functions in Qubitro allow you to **process, modify, and automate** actions based on incoming device data. There are multiple function types, each serving a specific purpose.

<figure><img src="/files/0uVOYIIABSQAoirlA8Xd" alt=""><figcaption></figcaption></figure>

### How It Works <a href="#how-it-works" id="how-it-works"></a>

When data is received from a device, Qubitro processes it through a Rule Function in the following steps:

{% stepper %}
{% step %}
**Check Debounce Period**

Prevents excessive triggering by ensuring the rule is not executed too frequently.
{% endstep %}

{% step %}
**Evaluate Condition**

Determines whether the incoming data meets the defined criteria.
{% endstep %}

{% step %}
**Trigger Action**

If the condition is met, the configured action is executed immediately.
{% endstep %}
{% endstepper %}

{% @mermaid/diagram content="graph LR;
A\[Data Received by Qubitro] --> B{Within Debounce Period?};

B -- Yes --> C\[Ignore Action Within Chosen Time Frame];
B -- No --> D{Check Condition};

D -- No --> E\[Ignore Data];
D -- Yes --> F\[Trigger Action];

F --> G\[Send Email / Slack Notification / Other Actions];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style C fill:#f2f2f2,stroke:#000,color:#000;
style D fill:#f2f2f2,stroke:#000,color:#000;
style E fill:#CBC3E3,stroke:#000,color:#000;  %% Purple from your previous diagrams
style F fill:#CBC3E3,stroke:#000,color:#000;  %% Purple from your previous diagrams
style G fill:#e0e0e0,stroke:#000,color:#000;" %}

{% hint style="warning" %}
Rule Functions operate **only on** real-time data – They **cannot** query historical data from the database.
{% endhint %}

{% hint style="info" %}
Each Rule Function executes a single pre-configured action – It **does not support** executing multiple actions within one function.
{% endhint %}

### Creating a Rule Function

{% stepper %}
{% step %}

#### Step 1: Navigate to the Device Page

Go to the **Devices** page, select the device you want to create a function for, and navigate to its **detail page**.
{% endstep %}

{% step %}

#### Step 2: Open the Functions Tab

Click on the **Functions** tab, then click on **Create function**.
{% endstep %}

{% step %}

#### Step 3: Choose a Function Type

Click the **Get started** button and follow the required steps to configure the function.

{% hint style="info" %}
For detailed guidance on each function type, visit its dedicated documentation page.
{% endhint %}
{% endstep %}

{% step %}

#### Step 4: Configure and Save

Each function type has **unique configuration options**. Follow the specific instructions for the selected function type.
{% endstep %}
{% endstepper %}

### Condition Configuration

Rule Functions in Qubitro allow you to define conditions that determine whether an action should be triggered based on incoming device data.&#x20;

There are two ways to configure conditions:

#### JavaScript Logic Builder

For users familiar with coding, the JavaScript Logic Builder allows custom condition creation using JavaScript syntax.

<mark style="background-color:yellow;">For a deeper dive, read our guide:</mark>

{% content-ref url="/spaces/llOFTfRA5L4YRnakI84m/pages/gDnWTIUKL5AY2EVUv580" %}
[How to Use JavaScript for Custom Rule Conditions in Qubitro](/guides/functions-and-data-processing/how-to-use-javascript-for-custom-rule-conditions-in-qubitro)
{% endcontent-ref %}

<figure><img src="/files/PXpNonRk30WVODCSRF7D" alt=""><figcaption></figcaption></figure>

#### Visual Condition Builder

The Visual Condition Builder is a no-code option that allows users to define conditions using dropdown menus.

<figure><img src="/files/wt9RlgdPQ9z8b5LnsrQv" alt=""><figcaption></figcaption></figure>


# Send Email

The Send Email action in Qubitro Rule Functions allows you to trigger emails based on data conditions from your devices.

The **Send Email** action in [Rule Functions](/platform/functions/rule-function) allows you to trigger emails based on data conditions from your devices. This feature is helpful for real-time alerts, notifications, and status updates.

Send Email is a fully-managed service and supports multiple recipients

{% hint style="warning" %}
The Send Email action requires the [**Managed Email Add-On**](/add-ons/managed-email) to be enabled in your organization's[ add-on settings.](/organizations/add-ons)
{% endhint %}

### When to Use

* Send alerts based on threshold breaches (e.g., temperature too high).
* Notify team members or customers about device statuses.
* Provide regular device data updates automatically.

### Configuration

{% stepper %}
{% step %}
**Configure Basics Settings**

* **Set Debounce period** *(optional)*: Choose a time frame during which repeated triggers will be ignored. This prevents excessive emails.
* **Enter Name**: Enter a unique, descriptive name for your function.
* **Provide Description**: Add details that help your team quickly understand the purpose of the function.
  {% endstep %}

{% step %}
**Configure Email Template**

Create dynamic email content using available placeholders:

* **Message**: Craft your email body using available placeholders:
  * `"${{data_key}}"`: Inserts the value from your device data (e.g., temperature, humidity).
  * `<%device_name%>`: Inserts the name of the triggering device.
  * `<%last_seen%>`: Inserts the last-seen timestamp of the device.

Example message:

```markdown
Alert: Last value from sensor: ${{temperature}}

Device: "<%device_name%>"

Qubitro Team
```

* **Subject**: Enter the email subject line clearly indicating the alert type.
* **Title**: Provide a short, clear title summarizing the email content.
* **Recipient**: Add one or more email addresses to receive the notification.
  {% endstep %}

{% step %}
**Condition Configuration**

* **Condition type**: Select [**JavaScript Logic Builder**](/platform/functions/rule-function#javascript-logic-builder) or [**Visual Condition Builder**](/platform/functions/rule-function#visual-condition-builder) to configure condition.

Example:

```javascript
function run(){
  let temperature = "${{temperature}}";

  if (temperature > 30){
    trigger();
  }
};
```

This logic sends an email if the temperature value exceeds 30.
{% endstep %}
{% endstepper %}

### Common Errors & Troubleshooting

<details>

<summary>Email not triggering</summary>

* Check JavaScript conditions for syntax errors.
* Verify that the debounce period isn't unintentionally blocking emails.

</details>

<details>

<summary>Incorrect data in emails</summary>

* Ensure placeholders exactly match your device's data keys.
* Confirm the data keys exist in your device's data payload.

</details>


# Webhooks

The Webhooks action in Qubitro Rule Functions enables you to send data to external platforms and services automatically via HTTP requests.

The **Webhooks** action in Qubitro Functions enables you to send data to external platforms and services automatically via HTTP requests. It's ideal for integrating Qubitro with other systems, triggering automated workflows, or forwarding real-time data.

### Key Features

* Supports HTTP methods: **POST**, **PUT**, **GET**, **DELETE**.
* Sends JSON payloads with dynamic device data.
* Customizable request headers.

### Examples

* Send device data to external analytics platforms.
* Trigger workflows on platforms like Zapier, Slack, or Microsoft Teams.
* Integrate Qubitro data with your custom APIs.

### Configuration

When triggered by defined conditions, Qubitro automatically sends an HTTP request with incoming data to the specified external webhook URL. You define the request method, headers, and JSON body content.

{% stepper %}
{% step %}
**Configure Basic Settings**

* **Set Debounce Period** *(optional)*: Specify a timeframe to avoid repeated triggers.
* **Enter Name**: Provide a descriptive, unique name for your function.
* **Provide Description**: Briefly describe the function's purpose.
  {% endstep %}

{% step %}
**Configure Webhook Template**

* **Webhook URL**: Enter the URL for your external service endpoint.
* **Request Method**: Select from POST, PUT, GET, or DELETE.
* **Request Headers** *(optional)*: Specify headers required by the external platform, such as authorization or content type.
* **Request Body Payload**: Define a JSON object to send data dynamically to your external service.

```json
{
  "maintenance_needed": "${{maintenance_needed}}",
  "timestamp": "${{timestamp}}",
  "acoustic_level": "${{acoustic_level}}",
  "anomaly_detected": "${{anomaly_detected}}",
  "equipment_health": "${{equipment_health}}",
  "pressure": "${{pressure}}",
  "temperature": "${{temperature}}",
  "flow_rate": "${{flow_rate}}",
  "humidity": "${{humidity}}",
  "random_key": "random_value"
}
```

Adjust the JSON body according to your requirements using placeholders
{% endstep %}

{% step %}
**Define Trigger Conditions**

* Choose a condition type (e.g., JavaScript Logic Builder) to determine when the webhook triggers.

```javascript
function run(){
  let temperature = "${{temperature}}";

  if (temperature > 30){
    trigger();
  }
};
```

In this example, a webhook request triggers when the temperature exceeds 30.
{% endstep %}
{% endstepper %}

### Common Errors & Troubleshooting

<details>

<summary>Webhook not triggering</summary>

* Verify the webhook URL is correct and accessible.
* Ensure your JavaScript logic conditions are met and error-free.
* Confirm your external service endpoint can accept your chosen HTTP request method.

</details>

<details>

<summary>Incorrect or missing data in payload</summary>

* Ensure JSON placeholders match exactly the keys in your device data payload.
* Confirm the selected request method and headers match the external system's requirements.

</details>

<details>

<summary>Receiving unexpected response or errors</summary>

* Check the external service logs for detailed error messages.
* Validate the JSON structure and ensure data types are correct.
* Test webhook manually using tools like Postman.

</details>


# Slack


# Twilio


# Mailgun


# SendGrid


# Storage Function


# AWS Redshift


# Google BigQuery


# MQTT Publish


# MongoDB Time Series


# Scheduled Function


# HTTP


# Function Settings


# Function Templates


# Settings


# Monitoring

The Monitoring page in Qubitro provides a way to view and manage data through dashboards and blueprints.

The **Monitoring** page in Qubitro provides a way to view and manage dashboards and blueprints.

### **Dashboards**

Dashboards display real-time and historical data using widgets like charts and tables. They also support collaboration with customers and internal teams.

{% content-ref url="/pages/XFfkMBUFeMxSYg1jBJpR" %}
[Dashboards](/platform/monitoring/dashboards)
{% endcontent-ref %}

### **Blueprints**

Blueprints allow you to create your own templates and then use them to create and update multiple dashboards.

{% hint style="warning" %}
Blueprints are **only available** for [organizations](/organizations/overview) with an Enterprise plan and are **not available** on personal accounts.
{% endhint %}

{% content-ref url="/pages/K8UBjOSEaiLQbXMa4zow" %}
[Blueprints](/platform/monitoring/blueprints)
{% endcontent-ref %}

### FAQ

<details>

<summary>What is the difference between Dashboards and Blueprints?</summary>

Both Dashboards and Blueprints help visualize data, but they serve different purposes:

* **Dashboards**: Created using templates, imported JSON files, or customized layouts to display real-time and historical data.
* **Blueprints**: Use dashboards as templates to automatically generate multiple dashboards for different devices and keep them updated consistently.

</details>

<details>

<summary>Can I use Blueprints without Dashboards?</summary>

No, Blueprints rely on Dashboards. A Blueprint uses an existing dashboard layout as a template to create multiple dashboards automatically.

</details>

<details>

<summary>Who can use Blueprints?</summary>

Blueprints are only available for organizations with an Enterprise plan and are not available on personal accounts.

</details>

<details>

<summary>When should I use Blueprints instead of Dashboards?</summary>

Use **Dashboards** when you need a few dashboards. Use **Blueprints** when you need to create and update multiple dashboards for different devices or projects automatically.

</details>


# Dashboards

Dashboards in Qubitro allow you to visualize, share, and monitor device data in real time or historically.

Dashboards offer a flexible way to build powerful, interactive views using no-code configuration.&#x20;

You can use charts, tables, maps, and other widgets to create custom views. Dashboards support multiple devices, templates, and white-labeling. They can be shared with internal teams or external users.

### Setup & Configuration

Learn how to create, manage, and organize your dashboards.

{% content-ref url="/pages/5iks6Kv9e9nSU7kwCrui" %}
[Setup & Configuration](/platform/monitoring/dashboards/setup-and-configuration)
{% endcontent-ref %}

### Widgets

Learn how to use and configure different widget types.

{% content-ref url="/pages/EduqfinVJDHteNVpVCF1" %}
[Widgets](/platform/monitoring/dashboards/widgets)
{% endcontent-ref %}

### Roles & Permission

Learn how to manage who can view or edit your dashboards and discovery visibility options.

{% content-ref url="/pages/AMGpH3yryMqcOX8RmZlu" %}
[Roles & Permission](/platform/monitoring/dashboards/roles-and-permission)
{% endcontent-ref %}

### Settings

Learn how to manage dashboard settings, such as layout, refresh interval, and other options.

{% content-ref url="/pages/70yWjeuwtfc5ojCZXGzP" %}
[Settings](/platform/monitoring/dashboards/settings)
{% endcontent-ref %}

## Frequently Asked Questions

<details>

<summary>Can I share a dashboard with someone outside my team?</summary>

Yes. Personal accounts on the Scale plan can share dashboards with other Qubitro personal accounts or make them publicly accessible with a shareable link.

If you're using an [Organization](/organizations/overview) workspace, you can share dashboards with [groups](/organizations/groups) or individual personal accounts. White-label sharing options are also available for external access with your own branding.

Sharing settings can be managed under **Settings > Access management**.

</details>

<details>

<summary>What happens when I delete a dashboard?</summary>

Deleting a dashboard will remove all widgets and configuration.&#x20;

{% hint style="danger" %}
This action is permanent and cannot be undone.
{% endhint %}

</details>

<details>

<summary>Can I use data from multiple devices in one dashboard?</summary>

Yes. Dashboards can include widgets that pull data from different devices, projects. You can combine them in a single view.

</details>

<details>

<summary>How often does dashboard data refresh?</summary>

You can configure the refresh interval in **Settings > Configuration**. The default is 1 minute, but it can be adjusted to suit your needs.

</details>

<details>

<summary>Can I reuse a dashboard layout with other devices?</summary>

Yes. Use Blueprints to create reusable dashboard templates that work with device templates or across different projects.

{% hint style="warning" %}
Note: Blueprints are only available for Organizations.
{% endhint %}

</details>


# Setup & Configuration

Learn how to create dashboards, add widgets, and organize them.

### Creating a Dashboard (Step-by-Step)

{% stepper %}
{% step %}
**Go to Monitoring**

From the Qubitro Portal homepage, open the **Monitoring** section. Make sure you're on the **Dashboards** tab.
{% endstep %}

{% step %}
**Click Create**

<figure><img src="/files/B7Gf1tCmqkZWDWKY4Ebs" alt=""><figcaption></figcaption></figure>

Click on the "Create" button and choose how you'd like to create the dashboard.

* **Blank dashboard**\
  Start from an empty layout with no widgets.
* **From a JSON file**\
  Import a previously exported dashboard structure.
* **From a template**\
  Use a ready-made layout based on LoRaWAN device templates.
* **Multiple dashboards**\
  Generate multiple dashboards at once using device templates.
* **From blueprint**\
  Use a [Blueprint](/platform/monitoring/blueprints) to create single or multiple dashboards at once.

{% hint style="warning" %}
Blueprints are available only for Organizations on the Enterprise plan.
{% endhint %}
{% endstep %}

{% step %}
**Name the dashboard**

Enter a name for your new dashboard. You can rename it later from the settings if needed.

<figure><img src="/files/pRa9ZB8co7xpVYFWE2VV" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Add widgets**

Inside the dashboard editor, click **Edit**, then click **New Widget** and choose a widget type like Chart, Table, Gauge, or Map.

<figure><img src="/files/Tr9RxKmbJVEqoElBfGkE" alt=""><figcaption></figcaption></figure>

Learn how to add and customize widgets in the [Widgets](/platform/monitoring/dashboards/widgets) section.
{% endstep %}

{% step %}
**Customization & Collaboration**

To manage sharing, permissions, or layout behavior, go to:

* [Roles & Permission](/platform/monitoring/dashboards/roles-and-permission)\
  Control who can view or edit the dashboard.
* [Settings](/platform/monitoring/dashboards/settings)\
  Adjust refresh intervals, layout options, and sharing preferences.
  {% endstep %}
  {% endstepper %}


# Widgets

Learn about the different widget types you can use to display data in your dashboards.

Available Widgets

Each widget offers a different way to visualize or organize data, from charts and maps to media, tables, and external content.

#### Chart

Visualize real-time or historical data using line, bar, or area charts.

{% content-ref url="/pages/8PIHAQrl4XhtTPVOcdV8" %}
[Chart](/platform/monitoring/dashboards/widgets/chart)
{% endcontent-ref %}

#### State Timeline

Visualize time-based state changes across one or more data keys.

{% content-ref url="/pages/PElL0boxdRnDXSSxwSyf" %}
[State Timeline](/platform/monitoring/dashboards/widgets/state-timeline)
{% endcontent-ref %}

#### Gauge

Visualize a value on a dial with custom thresholds and ranges.

{% content-ref url="/pages/hIIutCvadvfwncWKbtMq" %}
[Gauge](/platform/monitoring/dashboards/widgets/gauge)
{% endcontent-ref %}

#### Stat

Display a single metric using aggregation options like last value, average, min, or max.

{% content-ref url="/pages/JlGxhloWbyZp1r9U5gKj" %}
[Stat](/platform/monitoring/dashboards/widgets/stat)
{% endcontent-ref %}

#### Headline

Add section titles or labels to organize your dashboard layout.

{% content-ref url="/pages/QRG3pS73XFE5gNUPBvV8" %}
[Headline](/platform/monitoring/dashboards/widgets/headline)
{% endcontent-ref %}

#### Aggregated Chart

Show [Aggregated View](/add-ons/aggregated-view) data (sum, average, min/max) across time or devices.

{% content-ref url="/pages/Sfd3Ep7ZygNKhO4oAPgR" %}
[Aggregated Chart](/platform/monitoring/dashboards/widgets/aggregated-chart)
{% endcontent-ref %}

#### Map

Display real-time or historical device locations on an interactive map.

{% content-ref url="/pages/vuyf5UsgNBL5HWCBCynK" %}
[Map](/platform/monitoring/dashboards/widgets/map)
{% endcontent-ref %}

#### Battery

Display battery level using a simple visual representation.

{% content-ref url="/pages/VtqAXXJPDwR1rt8gpxbE" %}
[Battery](/platform/monitoring/dashboards/widgets/battery)
{% endcontent-ref %}

#### Image

Add static images to your dashboard for visual reference.

{% content-ref url="/pages/B6gtMy9imApVY8X7KVmx" %}
[Image](/platform/monitoring/dashboards/widgets/image)
{% endcontent-ref %}

#### Image Map

Overlay data points on a static image like a floor plan or schematic.

{% content-ref url="/pages/znjvevYNDPvXSMZmvHiu" %}
[Image Map](/platform/monitoring/dashboards/widgets/image-map)
{% endcontent-ref %}

#### Table

View raw or formatted data in a tabular layout.

{% content-ref url="/pages/z8eoYDd24Qu9VlpGGpGQ" %}
[Table](/platform/monitoring/dashboards/widgets/table)
{% endcontent-ref %}

#### Storage Table

Display data stored in connected storage services.

{% content-ref url="/pages/db2QVtPtTii10x2rM8Pk" %}
[Storage Table](/platform/monitoring/dashboards/widgets/storage-table)
{% endcontent-ref %}

#### Iframe

Embed external content or dashboards inside Qubitro.

{% content-ref url="/pages/ROBsqXeC0291Bem9ZNJo" %}
[Iframe](/platform/monitoring/dashboards/widgets/iframe)
{% endcontent-ref %}

#### Blob Storage

Automatically shows the last stored image, sound file, or video with built-in playback options.

{% content-ref url="/pages/hCWkSgeTMWln9S9wSWL3" %}
[Blob Storage](/platform/monitoring/dashboards/widgets/blob-storage)
{% endcontent-ref %}

***

### Are we missing a widget?

Let us know if there’s a widget you need that’s not currently available. [Contact support](broken://spaces/NMIJwX5MPJubey0C1l5F).

### Need a custom widget?

Custom widget development may be possible for your use case. [Get in touch to discuss](https://www.qubitro.com/contact/sales).


# Chart

Chart widgets let you visualize device data over time.

Chart widgets show your device data over time using line, bar, or area charts. You can mix chart types and show data from one or many devices.

{% hint style="success" %}
Chart widget supports multiple data points from one device or from devices in different projects.
{% endhint %}

***

### Chart – Single Metric

Displays one metric from a single device using line, bar, or area style.

{% @arcade/embed flowId="RKPSZrEg3OvAQZGWfPRJ" url="<https://app.arcade.software/share/RKPSZrEg3OvAQZGWfPRJ>" %}

***

### Chart – Multiple Metrics (Single Device)

Shows multiple metrics from the same device. Each metric can use a different chart type.

{% hint style="success" %}
You can follow the same steps to select data from multiple devices, even across different projects.
{% endhint %}

{% @arcade/embed flowId="QC8a8DSl1kbzJ0cVApLy" url="<https://app.arcade.software/share/QC8a8DSl1kbzJ0cVApLy>" %}

***

### Chart – Mixed Display

A more advanced example, including multiple data points, multiple Y-axes, timescale options, and zoom functionality enabled.

{% @arcade/embed flowId="ULWuWAFFT1tFW6uUScj4" url="<https://app.arcade.software/share/ULWuWAFFT1tFW6uUScj4>" %}

***


# State Timeline

The State Timeline Widget is designed for visualizing time-based state changes across one or more data keys.


# Gauge

Gauge widgets let you display a single data value on a visual dial.

Gauge widgets are useful for showing real-time values like temperature, pressure, or signal strength. You can choose from different display types and customize thresholds, styles, and units.

{% hint style="success" %}
Gauge widget supports single data point with custom min/max, color thresholds, and display types.
{% endhint %}

***

### Gauge – Standard

Displays a classic dial for one value with a defined range.

{% @arcade/embed flowId="SdTFsuE1rHMKRanshMyq" url="<https://app.arcade.software/share/SdTFsuE1rHMKRanshMyq>" %}

***

### Gauge – Generic

Minimal circular display for basic value feedback.

{% @arcade/embed flowId="VWJ63YN0Afelpgi7HLel" url="<https://app.arcade.software/share/VWJ63YN0Afelpgi7HLel>" %}

***

### Gauge – Liquid

Fills a circular or vertical container based on the current value.

{% @arcade/embed flowId="qfTsOmUHU8YWl8tyw5Wu" url="<https://app.arcade.software/share/qfTsOmUHU8YWl8tyw5Wu>" %}

***

### Gauge – Colorize

Uses color bands to highlight different value ranges.

{% @arcade/embed flowId="8rPloeTSYZdGMpfR5WYl" url="<https://app.arcade.software/share/8rPloeTSYZdGMpfR5WYl>" %}

***

### Gauge – Barometer

Circular visual commonly used for weather or environmental metrics.

***


# Stat


# Headline


# Aggregated Chart


# Map


# Battery


# Image


# Image Map


# Table


# Storage Table


# Iframe


# Blob Storage


# Settings

Update dashboard details and manage access; note some settings may be limited based on your role or plan.

The Dashboard Settings page allows you to update general information such as name, tags, and display behavior. You can also enable public sharing or manage access if supported by your plan.

### How to Access Dashboard Settings

{% stepper %}
{% step %}
**Go to the Dashboard View**

From the Monitoring page, open the dashboard you want to configure.
{% endstep %}

{% step %}
**Select the Settings Tab**

In the top navigation, click **Settings**.
{% endstep %}
{% endstepper %}

### General

{% hint style="warning" %}
Some settings (for example, Delete Dashboard) may be disabled depending on your role or plan. If you require access to these features, please check your permissions or contact your administrator.
{% endhint %}

#### Share with anyone

Make the dashboard publicly available using a shareable link.

{% hint style="info" %}
Enabling this option creates a read-only public link for external access.
{% endhint %}

#### Edit tags

Add tags to organize and filter dashboards. You can assign up to three tags.

{% hint style="warning" %}
If the tag limit is reached, you must remove an existing tag before adding a new one.
{% endhint %}

#### Dashboard ID

Used when interacting with the Qubitro API (read-only).

#### Dashboard name

Rename the dashboard.\
*Maximum 32 characters.*

#### Created at

Displays the exact date and time when the dashboard was created.

{% hint style="info" %}
The **Created at** timestamp is shown in the time zone selected in your account settings.
{% endhint %}

#### Delete dashboard

Permanently remove the dashboard and all associated widgets.

{% hint style="danger" %}
Deleting a dashboard is irreversible and will permanently remove all widgets and configuration. This action cannot be undone.
{% endhint %}

***

### Configuration

#### Horizontal scroll & Wide-View display

Enable this option to allow horizontal scrolling and widescreen layout support.

#### Refresh period

Choose how often the dashboard refreshes data automatically.\
This controls the live update interval for widgets.

***

### Access Management

Manage who can view or edit the dashboard, and assign permissions for internal or external users.


# Access Management

Manage dashboard collaborators by inviting users and assigning roles to control their access and permissions.

The Access Management tab allows you to invite collaborators, assign roles, and manage group access (if available). This ensures that only authorized users can view or edit your dashboard.

<figure><img src="/files/WOdEUrplc2bhPu5nhzkA" alt=""><figcaption></figcaption></figure>

### Availability

This tab appears if you own a personal account on the Scale plan or if your assigned role supports access management. For dashboards owned by Organizations, the tab is only visible to members with the required permissions.

{% hint style="info" %}
If you don’t see this tab, check your plan or role permissions.
{% endhint %}

### How to Invite

{% stepper %}
{% step %}
**Go to the Access Management tab**

Open the dashboard, then go to **Settings > Access Management**.
{% endstep %}

{% step %}
**Enter email or group**

In the **New Collaborators** section, type the user’s email address. If assigning access to a group, choose the group from the dropdown.
{% endstep %}

{% step %}
**Assign a role**

Choose a role (Admin, Read/Write, or Read Only). If using groups, you may see custom roles available depending on organization setup.
{% endstep %}

{% step %}
**Click Invite**

An email will be sent to the user. They will appear in the **Dashboard Collaborators** list once they accept the invite.
{% endstep %}
{% endstepper %}

### Roles & Permission

Learn more about roles and permission options for managing dashboard access.

{% content-ref url="/pages/AMGpH3yryMqcOX8RmZlu" %}
[Roles & Permission](/platform/monitoring/dashboards/roles-and-permission)
{% endcontent-ref %}


# Roles & Permission

Define and manage user roles to control access to dashboards.

The Roles & Permissions tab defines how collaborators interact with dashboard content. This includes permissions to view, edit, delete, and manage dashboard access.

{% hint style="info" %}
A resource in this context refers to a dashboard—its layout, widgets, settings, and access controls.
{% endhint %}

Qubitro provides three default roles—**Read-Only**, **Read/Write**, and **Admin**—each granting a different level of access.

{% hint style="success" %}
If your plan or organization settings allow for custom roles, you can define additional role types with more granular permissions.
{% endhint %}

### Default Roles

#### Read-Only

Users can view dashboards but cannot make any changes.

{% hint style="info" %}
**Examples:**

* Can view the dashboard in View mode
* Cannot switch to Edit mode or update widgets
* Cannot access settings or sharing options
  {% endhint %}

#### Read/Write

Users can modify the dashboard layout and widgets, but cannot delete the dashboard or manage access.

{% hint style="info" %}
**Examples:**

* Can switch to Edit mode and configure widgets
* Can change layout and refresh settings
* Cannot delete the dashboard or invite collaborators
  {% endhint %}

#### Admin

Users have full access to manage the dashboard, including editing, deleting, and managing collaborators.

{% hint style="info" %}
**Examples:**

* Can delete the dashboard
* Can invite or remove collaborators and change roles
* Can update all general and configuration settings
  {% endhint %}

### Roles Reference

| Action              | Read-Only | Read/Write | Admin |
| ------------------- | --------- | ---------- | ----- |
| View Dashboard      | ✅         | ✅          | ✅     |
| Edit Layout/Widgets | ❌         | ✅          | ✅     |
| Change Settings     | ❌         | ✅          | ✅     |
| Delete Dashboard    | ❌         | ❌          | ✅     |
| Access Management   | ❌         | ❌          | ✅     |

### Custom Roles

Custom roles allow Organizations to define more granular access controls beyond the default roles. You can specify exactly which actions are allowed—such as editing widgets but not layout, or enabling refresh without access to sharing options.

{% hint style="warning" %}
Custom roles are available only for **Organizations** and must be created in the **Organization Settings**.
{% endhint %}

Once created, custom roles can be assigned to collaborators from the **Access Management** tab of any dashboard.

{% content-ref url="/pages/ivg9wjLtoHiB3qIaDoI7" %}
[Custom Roles](/organizations/custom-roles)
{% endcontent-ref %}


# Blueprints

Blueprints in Qubitro allow you to save and reuse dashboard layouts across multiple devices or projects.

Blueprints offer a scalable way to standardize monitoring views for internal teams or customer deployments. Instead of recreating dashboards from scratch, you can apply a predefined structure with widgets, layout preferences, and display settings.

Blueprints are available under the **Monitoring** section on the Qubitro homepage and are only accessible to Organizations on the Enterprise plan.

### How It Works

When you create a dashboard using a blueprint, it stays linked to the original layout. If you update the blueprint later, all dashboards created from it will also reflect those changes.

{% hint style="success" %}
Changes made to a blueprint automatically apply to all dashboards that use it.
{% endhint %}

{% @mermaid/diagram content="graph LR;
A\[Create or Update Blueprint] --> B\[Linked Dashboards Exist?];

B -- Yes --> C\[Dashboards Updated Automatically];
B -- No --> D\[Blueprint Saved for Future Use];

C --> E\[Dashboards Reflect Latest Layout];
D --> F\[Used During New Dashboard Creation];

%% Style Adjustments
style A fill:#d9d9d9,stroke:#000,color:#000;
style B fill:#f2f2f2,stroke:#000,color:#000;
style C fill:#e0e0e0,stroke:#000,color:#000;
style D fill:#e0e0e0,stroke:#000,color:#000;
style E fill:#f2f2f2,stroke:#000,color:#000;
style F fill:#f2f2f2,stroke:#000,color:#000;" %}

This ensures consistency across dashboards and saves time by eliminating the need to update each dashboard individually.

### Setup & Configuration

Learn how to create, apply, and manage reusable blueprints.

{% content-ref url="/pages/uWqsudiqKOtxy67aS8HX" %}
[Setup & Configuration](/platform/monitoring/blueprints/setup-and-configuration)
{% endcontent-ref %}

### Settings

Learn how to manage blueprint-level settings like layout behavior, refresh settings, and metadata.

{% content-ref url="/pages/1EYWf1PauV3aSpXV5lnN" %}
[Settings](/platform/monitoring/blueprints/settings)
{% endcontent-ref %}

### Frequently Asked Questions

<details>

<summary>Can I use a blueprint across multiple projects?</summary>

Yes. Once created, a blueprint can be applied to any dashboard during creation, regardless of the project.

</details>

<details>

<summary>Can I edit a dashboard created from a blueprint?</summary>

Yes. Dashboards created from a blueprint can be fully customized without affecting the original blueprint.

</details>

<details>

<summary>What happens if I delete a blueprint?</summary>

Blueprints cannot be deleted if they’re used by any dashboards. You’ll need to unlink them first.

</details>

<details>

<summary>Can I update a blueprint after it’s created?</summary>

You can update the layout by saving changes to an existing blueprint or creating a new version from a dashboard.

</details>

<details>

<summary>Are blueprints available on all plans?</summary>

No. Blueprints are only available to Organizations on the Enterprise plan.

</details>


# Setup & Configuration

Learn how to create blueprints, add widgets, and organize them.

Blueprints are reusable dashboard layouts that can be applied across multiple devices or projects. They help maintain consistency across internal teams or customer-facing dashboards.

Blueprints are located under the **Monitoring** section of the Qubitro homepage. To view and manage them, select the **Blueprints** tab.

{% hint style="warning" %}
Blueprints are only available to **Organizations** on the Enterprise plan.
{% endhint %}

### Creating a Blueprint

{% stepper %}
{% step %}
**Select a dashboard layout**

Click **New Blueprint** from the Blueprints view and choose an existing dashboard to use as the starting layout. This layout will be saved for reuse.

<figure><img src="/files/UQaLBcB0Pz5JY0TZHnxy" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Name your blueprint**

Enter a name for the blueprint. You can also add tags to help organize or filter it later.

<figure><img src="/files/L5iQmFnAoFztg5rm83LZ" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Modify the layout**

After creating the blueprint, it opens in the dashboard editor. You can add or remove widgets, choose data points from devices or templates, and customize the layout just like any dashboard.

{% hint style="warning" %}
Choosing a project and device while editing a blueprint is only for preview and configuration purposes. Blueprints save the selected data points, not fixed device or project IDs. These will be applied automatically based on the selected device or template during dashboard creation.
{% endhint %}
{% endstep %}

{% step %}
**Save**

Click **Save** to store your changes. The blueprint is now ready to be applied when creating new dashboards.
{% endstep %}
{% endstepper %}

### Using Blueprints

Once created, blueprints can be applied to new dashboards during the dashboard creation process.

{% hint style="success" %}
Blueprints help speed up dashboard creation across multiple devices by reusing a saved layout with predefined widgets and configuration.
{% endhint %}

{% content-ref url="/pages/5iks6Kv9e9nSU7kwCrui" %}
[Setup & Configuration](/platform/monitoring/dashboards/setup-and-configuration)
{% endcontent-ref %}


# Settings

Update your blueprint’s details and layout preferences.

Blueprint settings are organized under **General** and **Configuration** tabs.

{% hint style="warning" %}
Blueprints are only available to **Organizations** on the Enterprise plan.
{% endhint %}

### General

#### Edit Tags

Use tags to organize, group, and filter your blueprints for easier access.

{% hint style="warning" %}
You can create up to three tags per blueprint. Remove an existing tag before adding a new one if the limit is reached.
{% endhint %}

#### Blueprint ID

Used when interacting with the Qubitro API (read-only).

#### Blueprint Name

Update the name to clarify the purpose or structure of the blueprint.\
*Maximum 32 characters.*

#### Created At

Shows the date and time the blueprint was created.

{% hint style="info" %}
The **Created at** timestamp reflects the time zone set in your account preferences.
{% endhint %}

#### Delete Blueprint

Permanently deletes the blueprint and removes its layout from the system.

{% hint style="danger" %}
Deleting a blueprint is irreversible. All associated layout and widget structure will be lost.
{% endhint %}

{% hint style="success" %}
Blueprints cannot be deleted if they are currently used by any dashboards. This prevents accidental deletion of active layouts.
{% endhint %}

### Configuration

#### Horizontal Scroll & Wide-View Display

Enable horizontal scrolling and wide-view support for large layouts.

#### Refresh Period

Set how often widgets within dashboards created from this blueprint should auto-refresh data.

{% hint style="info" %}
These settings define the default layout behavior for dashboards generated using the blueprint.
{% endhint %}


# Credentials

Manage authentication and integration credentials for accessing Qubitro resources and services.

Create and manage credentials used to authenticate with Qubitro and connect to external services.

{% hint style="success" %}
Personal accounts and Organizations have separate credential scopes. Make sure you're managing credentials under the correct context.
{% endhint %}

### API Keys

Create and manage API keys to authenticate requests to the Qubitro API.

{% content-ref url="/pages/W8nOHHdaEh14ScKRshki" %}
[API Keys](/platform/credentials/api-keys)
{% endcontent-ref %}

### External Credentials

Store credentials for external services such as MongoDB Atlas or Slack in a secure repository.

{% content-ref url="/pages/96C0zYh6rYkFTwF3N7qz" %}
[External Credentials](/platform/credentials/external-credentials)
{% endcontent-ref %}

### Webhook Signing Key

Used to verify incoming payloads in no-code integrations such as webhooks.

{% content-ref url="/pages/wHm3LZ8RDwB3em25m7iw" %}
[Webhook Signing Key](/platform/credentials/webhook-signing-key)
{% endcontent-ref %}


# API Keys

Overview of API Key in Qubitro, including creation, management, and access control.

API Key allows secure access to Qubitro for building custom applications and integrations.

### Key Features

1. **Expiration Control:** Configure a fixed duration or opt for no expiration.
2. **Granular Permissions:** Assign specific privileges such as Create, Read, Write, Delete, or Invite.
3. **Scoped Access:** Restrict each key to chosen projects.

### Create an API Key

{% stepper %}
{% step %}
**Navigate to API Keys**

On the Qubitro Portal Home Page, select **Credentials** from the top navigation. Then, in the left panel, select **API Keys**.
{% endstep %}

{% step %}
**Create a New API Key**

1. Click on Create API Key. Enter the name, expiration date, and permissions.&#x20;
2. Enable scope (optional) to limit access to specific projects.
3. Click Create new API Key and copy it immediately for secure storage.

{% hint style="warning" %}
**Warning:** API Keys **cannot** be **edited** or **viewed** again after creation. If lost, delete the key and create a new one.
{% endhint %}
{% endstep %}
{% endstepper %}

### Manage API Keys

#### View API Keys

Created API Keys are listed automatically under API Keys in the Credentials tab. Each key displays its name, scope, assigned actions, and expiration date.

<figure><img src="/files/RONMFRnFgKzZfSsJggY1" alt=""><figcaption><p>API Keys page in Qubitro Portal displaying existing keys, scopes, permissions, and delete options.</p></figcaption></figure>

#### Delete an API Key

Click Delete next to the API Key to remove it.

{% hint style="danger" %}
**Warning:** Deleting an API Key immediately revokes its access. This action cannot be undone.
{% endhint %}


# External Credentials

External Credentials provide a secure way to store authentication keys and other credentials required for functionalities.

### Overview

**External Credentials** provide a secure way to store authentication keys and other credentials required for functionalities such as **Rule Functions, Storage Functions, and other integrations**.

Qubitro **encrypts all stored credentials**, ensuring that raw values are never accessible by anyone, including Qubitro itself. This allows seamless integration with third-party services while maintaining security and compliance.

### Core Features

* **Secure Storage** – Credentials are encrypted and cannot be accessed as raw values.
* **Function & Integration Support** – Used with **Rule Functions, Storage Functions, and other automated workflows**.
* **Template Compatibility** – Can be utilized in templates to automate credential usage.
* **Multiple Provider Support** – Different credential types are supported based on integration needs.

### Adding External Credentials

To add an external credential:

1. Navigate to the **Credentials** tab in your Qubitro account.
2. Select **External Credentials** from the sidebar.
3. Click **Add Credential** and choose a credential provider (e.g., Mailgun, Twilio).
4. Provide the required information, such as:
   * **Name** (A unique identifier for the credential)
   * **Domain** (If applicable)
   * **API Key / Token**
   * **Sender Address** (For email services)
5. Click **Save External Credential**.

Once saved, the credential will be securely stored and available for use in Qubitro Functions and other integrations.

### Managing External Credentials

To view or manage stored credentials:

1. Navigate to **Credentials > External Credentials**.
2. Existing credentials are listed with their creation date.
3. Click on a credential to **update** or **remove** it.

<figure><img src="/files/lDFF7wUnnlzOK6FKYZUG" alt=""><figcaption></figcaption></figure>

#### Delete an External Credential

Click Delete next to the External Credential to remove it.

{% hint style="success" %}
Qubitro **prevents** deleting credentials in use, and you will get an error otherwise. Ensure that the credential is no longer referenced before attempting to remove it.
{% endhint %}

{% hint style="danger" %}
**Warning:** This action cannot be undone.
{% endhint %}

### Supported Credential Types

{% content-ref url="/pages/YxkQcZR9p8OzhYGpgbs6" %}
[Slack](/platform/credentials/external-credentials/slack)
{% endcontent-ref %}

{% content-ref url="/pages/WSfBwcxN1OXzakCGCNq1" %}
[Mailgun](/platform/credentials/external-credentials/mailgun)
{% endcontent-ref %}

{% content-ref url="/pages/BBugFv8FQGpw0SXgCwZc" %}
[SendGrid](/platform/credentials/external-credentials/sendgrid)
{% endcontent-ref %}

{% content-ref url="/pages/HNNJv6yHjcY9SoVHzmdp" %}
[Twilio](/platform/credentials/external-credentials/twilio)
{% endcontent-ref %}

{% content-ref url="/pages/HJzeEzZODYI3BvjVFbqu" %}
[AWS Redshift](/platform/credentials/external-credentials/aws-redshift)
{% endcontent-ref %}

{% content-ref url="/pages/j1LqISiaZqYCm6JGnpfG" %}
[MQTT](/platform/credentials/external-credentials/mqtt)
{% endcontent-ref %}

{% content-ref url="/pages/HeMLOarqpi6MRyz6QDXN" %}
[MongoDB](/platform/credentials/external-credentials/mongodb)
{% endcontent-ref %}

{% content-ref url="/pages/SHdKYykVAOzjhSC5pNRm" %}
[The Things Stack](/platform/credentials/external-credentials/the-things-stack)
{% endcontent-ref %}


# Slack


# Mailgun


# SendGrid


# Twilio


# AWS Redshift


# MQTT


# MongoDB


# The Things Stack


# Webhook Signing Key

The Webhook Signing Key is used to securely interact with No-code Data Sources in Qubitro.

### Overview

The **Webhook Signing Key** is used to securely interact with **No-code Data Sources** in Qubitro. It ensures that incoming webhooks originate from trusted sources by allowing signature verification.

This key is available under the **Credentials** tab for both **Personal** and **Organizational** accounts.

{% hint style="info" %}
The **Webhook Signing Key** is automatically assigned to your account and remains active as long as the account exists.
{% endhint %}

<figure><img src="/files/rtEUtEZDtEbBTkRN69fo" alt="" width="563"><figcaption></figcaption></figure>

### Accessing the Webhook Signing Key

To find your **Webhook Signing Key**:

* Navigate to the **Credentials** tab in your Qubitro account.
* Select **Webhook Signing Key** from the list.
* Copy the key to use it.

{% hint style="warning" %}
🔒 **This key cannot be modified or deleted.** It is system-generated and permanently associated with your account.
{% endhint %}


# Storage Views

Storage Views allow you to create and manage multiple time series data views per device, enabling structured data storage beyond the default Time Series Storage.

### Overview

**Storage Views** allow you to create and manage multiple **time series data views** per device, enabling structured data storage beyond the default **Time Series Storage**.  This feature is particularly useful for separating different types of data streams within a single device.

Storage Views function as **abstracted tables** (similar to creating separate tables in a database) where data can be published separately, rather than storing everything in the default time series storage.

<figure><img src="/files/Hr5cCIG2kEzRTjXD5pbx" alt=""><figcaption></figcaption></figure>

### Core Features

* **Multi-view Storage** – Store and organize different datasets for the same device.
* **Custom Retention Periods** – Define different retention settings per Storage View.
* **Project-based View Allocation** – Once connected, all devices in the project automatically inherit the Storage View.
* **Dynamic Data Routing** – Control where data is stored using a **storage router ID**.

### Creating a Storage View

Storage Views can be created from the **Add-ons** page under **Organization Settings**. This feature is available exclusively for **Enterprise plan organizations**.

1. Navigate to **Organization Settings** > **Add-ons**.
2. Enable **Storage Views** if not already activated.
3. Click **Configure** to manage Storage Views.
4. Click **Create Storage View**, then provide:
   * **Name** (e.g., "Device Logs")
   * **Description** (optional)
   * **Retention Period** (choose from available durations)
5. Click **Create**, and the Storage View will be generated.

Once created, a **Storage View must be linked to a project** to make it accessible.

<figure><img src="/files/4kIDGTf58lXAkWoJJ2na" alt=""><figcaption></figcaption></figure>

### Connecting Storage View to a Project

To make the Storage View available for devices within a project:

1. Navigate to the **Storage View configuration page**.
2. Click **Connect Project**.
3. Select the desired project and confirm.

Once linked, every device within that project will have the new **Storage View tab** available under the **Storage page**.

### Publishing Data to a Storage View

To publish data into a specific **Storage View**, include the unique **Storage Router ID** (<mark style="background-color:yellow;">**qb\_storage\_router\_id**</mark>) in the payload.

Each **Storage View** has a unique `qb_storage_router_id`, which must be provided within the incoming data payload.

#### Example Payload:

```json
{
  "qb_storage_router_id": "QB_XYZCE",
  "humidity": 65.58,
  "lightIntensity": 68.16,
  "batteryLevel": 57.46
}
```

{% hint style="warning" %}
If `qb_storage_router_id` is **not** provided, the data will be stored in the **default Time Series Storage.**
{% endhint %}

### Retention Periods

Each Storage View has its own **retention period**, which is set during creation. Unlike default device-level storage, different Storage Views can have **custom retention settings**.

For example:

* **Default Time Series Storage**: 30 days
* **Custom Storage View** (e.g., Device Logs): 15 days

This allows organizations to **optimize data storage** based on business needs.

### Data Size Limits

* The same per-device storage limits apply as in **Time Series Storage**.
* **Enterprise organizations** can define data limits per view.
* The default limit per data point is **customizable** based on agreements.

### Accessing Storage View Data

Data stored in a Storage View can be accessed via:

#### **Storage tab** under each device

<figure><img src="/files/PuWBFpUZes7Yx0fnA44H" alt=""><figcaption></figcaption></figure>

#### **Dashboards & widgets** (for visualization)

<figure><img src="/files/8tGDSYrfQTOxrfmQPYlx" alt=""><figcaption></figcaption></figure>

### Deleting a Storage View

To delete a Storage View:

1. Navigate to **Storage Views configuration**.
2. Locate the Storage View you want to remove.
3. Click **Delete** to remove it permanently.

{% hint style="danger" %}
Deleting a Storage View **removes all data stored in it** and cannot be undone.
{% endhint %}


# Aggregated View

Aggregated View allows you to store aggregated data separately from raw time series storage.

### Overview

Aggregated View allows you to store aggregated data separately from raw time series storage. This feature helps you generate structured datasets by applying predefined aggregation methods to selected data points.

### Core Features

* **Enterprise Plan Exclusive** – Requires activation under **Organization Settings > Add-ons**.
* **Dedicated Storage for Aggregated Data** – Allows you to store processed data separately from raw device data.
* **Predefined Aggregation Methods** – Allows you to apply **Minimum, Maximum, Summation, and Average** to selected data points.
* **Customizable Data Points** – Allows you to select specific data fields (e.g., temperature, pressure) for aggregation.
* **Seamless Dashboard Integration** – Allows you to use Aggregated Views as a data source for widgets.
* **Optimized Querying** – Allows you to retrieve structured and pre-processed data efficiently.

### Enabling Aggregated View (Add-on Activation)

{% hint style="info" %}
Aggregated View is an **Enterprise plan exclusive** feature and must be **enabled as an Add-on** under **Organization Settings > Add-ons** before use.
{% endhint %}

Before using Aggregated Views, you need to enable the Add-on:

1. Navigate to **Organization Settings > Add-ons**.
2. Locate **Aggregated View** and click **Enable**.

{% hint style="success" %}
Once activated, Aggregated Views can be created under the **Analytics** tab on the **Device Detail** page.
{% endhint %}

### Creating an Aggregated View

After activation, Aggregated Views can be created under the **Analytics** tab for any device that your account has access to.

<figure><img src="/files/IqBS7MtjfAYhgbyu4Vcj" alt="" width="563"><figcaption></figcaption></figure>

1. Go to the **Device Detail** page.
2. Navigate to the **Analytics** tab.
3. Click **Create, then Aggregated View** and provide:
   * **Name** (e.g., "Daily Energy Consumption")
   * **Description** (optional)
   * **Data Points** (choose specific fields such as temperature, humidity)
   * **Aggregation Methods** (select from **Minimum, Maximum, Summation, and Average**)
   * **Retention Period** (define how long aggregated data should be stored)
4. Click **Create** to generate the view.

Once created, the Aggregated View will be available for dashboards, API access, and exports.

<figure><img src="/files/LdQfJ2RRJmAGEEaMhQhv" alt=""><figcaption></figcaption></figure>

### Accessing Aggregated Data

You can access Aggregated View data through:

#### **Analytics tab** under the **Device Detail** page

<figure><img src="/files/CTHQYewhHbhdTCzgGenB" alt=""><figcaption></figcaption></figure>

#### **Dashboard Widgets** (For viewing and managing stored objects)

{% hint style="info" %}
Aggregated Views and their data are accessible through the special widget **Aggregated Chart**
{% endhint %}

<figure><img src="/files/03Zn5biMk3BUSN9E3OEO" alt=""><figcaption></figcaption></figure>

#### **API queries** for programmatic access

{% content-ref url="/spaces/LXNwVpW4heD62GZhpd5I/pages/MlwOsswq5Hrx8hcr3iTZ" %}
[Broken mention](broken://spaces/LXNwVpW4heD62GZhpd5I/pages/MlwOsswq5Hrx8hcr3iTZ)
{% endcontent-ref %}

#### Example response

```json
{
    "success": true,
    "action": "get device data",
    "status": 200,
    "message": "Device data retrieved successfully.",
    "data": [
        {
            "acoustic_level_max": 93.46245132126344,
            "acoustic_level_min": 87.20657912746933,
            "temperature_max": 68.4575559158977,
            "temperature_min": 39.2556677836743,
            "time": "2025-03-03T19:00:00Z"
        },
        {
            "acoustic_level_max": 97.78007816859358,
            "acoustic_level_min": 42.27256631900725,
            "temperature_max": 79.5907532064648,
            "temperature_min": 37.220887969028894,
            "time": "2025-03-03T18:00:00Z"
        }
    ]
}
```

### Retention Period

Aggregated Views store processed data separately from the default Time Series Storage but **match** the retention period.

### Deleting an Aggregated View

To delete an Aggregated View:

1. Navigate to **Analytics** > **Aggregated Views**.
2. Select the view you want to remove.
3. Click **Delete** to remove it permanently.

{% hint style="success" %}
Deleting an Aggregated View does not affect raw device data stored in Time Series Storage.
{% endhint %}

{% hint style="danger" %}
Deleting an Aggregated View **removes all data stored in it** and cannot be undone.
{% endhint %}


# Archived Views

Archived Views automatically archive device data at scheduled intervals per device, preserving historical records based on the selected schedule.

Archived Views automatically archive device data at scheduled intervals per device, preserving historical records based on the selected schedule. This provides backups that can be downloaded or emailed as needed.

### Core Features

* **Perpetual Storage** – Archived data is stored indefinitely until manually deleted by the user.
* **Automated Email Notifications** – An email is automatically sent whenever a backup is created.
* **Multiple Access Methods** – Backups can be manually downloaded or emailed to users.

### Enabling Archive  (Add-on Activation)

{% stepper %}
{% step %}
**Navigate to Add-ons**

Go to **Organization Settings** > **Add-ons**.
{% endstep %}

{% step %}
**Enable Archive Add-On**

Find the **Archive Add-On** option and click **Enable** to activate the feature for your organization.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Enabling the Archive Add-On **does not** automatically activate backups. You must enable automated backups for each project separately.
{% endhint %}

### Enabling and Configuring Automated Backups for a Project

{% stepper %}
{% step %}
**Open Project Settings**

Navigate to **Project Settings** and open the **Archive Settings** tab.
{% endstep %}

{% step %}
**Enable Archive**

Click **Enable Archive**.
{% endstep %}

{% step %}
**Select Backup Schedule**

A pop-up window will appear to configure the backup schedule. Choose between **Daily**, **Weekly**, or **Monthly**, then click **Enable** to confirm.
{% endstep %}
{% endstepper %}

{% hint style="success" %}
Enabling archive for a project will automatically back up all devices under that project.
{% endhint %}

### Viewing Archive Settings

After enabling the archive, the **Archive Settings** page will display the configured schedule and the next backup time.

<figure><img src="/files/hcxAWGINogwr13pI96hY" alt=""><figcaption></figcaption></figure>

* The **Automated Backups Enabled** label confirms activation.
* The **Backup Schedule** indicates how frequently backups occur.
* The **Next Backup** field shows the scheduled backup time.

You can disable the archive at any time using the **Disable Archive** button.

{% hint style="danger" %}
If the archive is disabled, all archived data will be deleted **immediately** and **cannot** be recovered.
{% endhint %}

### Accessing Archived Data

{% stepper %}
{% step %}
**Open the Archive Tab**

Once backups are enabled, each device will have a new **Archive** tab.
{% endstep %}

{% step %}
**View Archived Files**

The **Archive** tab lists archived files, displaying:

* File Name
* Time Created
* Schedule (Daily, Weekly, or Monthly)
* File Size
  {% endstep %}

{% step %}
**Download or Email Backup**

Archived files can be **downloaded** or **sent via email**. The email contains a download link available for 30 minutes.
{% endstep %}
{% endstepper %}

<figure><img src="/files/YuBU9KNyiB4WRGqliPCI" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Archived files remain stored **indefinitely** until deleted or disabled manually.
{% endhint %}

### Deleting Archived Data

The **Delete** action is accessible directly from the list of archived files under the **Archive** tab. You can remove specific backups by clicking the **Delete** icon next to each file.

{% hint style="danger" %}
Deleting an archived file is **irreversible**. Ensure you have downloaded any necessary backups before proceeding.
{% endhint %}


# Blob Storage

Blob Storage in Qubitro allows devices to store binary data such as images, audio, logs, or other large objects.

### Overview

**Blob Storage** in Qubitro allows devices to store **binary data** such as images, audio, logs, or other large objects.&#x20;

It is a **fully managed, highly available, and scalable storage solution** designed to eliminate the need for third-party object storage.

<figure><img src="/files/D8Aju3cxcfpAN5cyceJD" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Blob Storage is an **Add-On** and must be activated from the **Organization Settings → Add-ons** menu. It is available **only on the Enterprise plan for Organizations**.
{% endhint %}

### Core Features

* [x] **Supports Various Data Types** – Store images, audio, video, and other binary objects.
* [x] **Retention Policy Matches Device Settings** – Blob data follows the **same retention period** as the device’s **Time Series Storage**.
* [x] **Multi-Access Support** – Retrieve and manage files via **APIs, dashboard widgets, and UI**.
* [x] **Scalable & Secure** – Designed for high availability and efficient object retrieval.

### Data Accessibility

Blob Storage **data** is available through:

#### **Device Detail Page → Storage Tab** (File management UI)

<figure><img src="/files/1NXgGaqRGEJGvcmbPlcL" alt=""><figcaption><p>Qubitro Blob Store View</p></figcaption></figure>

#### **Dashboard Widgets** (For viewing and managing stored objects)

<figure><img src="/files/aHGvTkRfGcWfgzkNcpDk" alt=""><figcaption><p>Qubitro Dashboard</p></figcaption></figure>

**APIs** (For retrieval)

{% hint style="info" %}
Accessing individual blob objects via the REST API is coming soon.
{% endhint %}

### Retention Period

Blob Storage retention **matches the device’s default retention period.**

### Data Size Limits

| Plan Type                           | Max File Size per Device |
| ----------------------------------- | ------------------------ |
| **Enterprise Plan (Organizations)** | 5 MB                     |

{% hint style="info" %}
Each device has **a maximum of 5MB** of Blob Storage. To store additional data, you must delete existing files or request a **higher storage allocation** based on your agreement.
{% endhint %}

### Uploading Blob Data

Qubitro allows you to upload blob data programmatically using the **Blob Upload API**.

#### Uploading a File

To upload a file to **Blob Storage**, use the API with an **Authorization Token** and attach the binary file to be uploaded.

```bash
curl --location 'https://webhook.qubitro.com/integrations/http/blob' \
--header 'Authorization: Basic YOUR_DEVICE_TOKEN' \
--form 'file=@"/path/to/your/file.png"'
```

#### Parameters:

* `Authorization` – Your **Device Token**, used for authentication.
* `file` – The **binary file** you want to upload.

{% hint style="success" %}
Qubitro automatically identifies the uploaded object type.
{% endhint %}

### Deleting Blob Data

Qubitro allows you to delete Blob Storage data **in bulk** or **individually through the UI**.

#### Bulk Deletion

You can delete **all stored blobs** for a device from the **Storage** tab by selecting **Delete all blob data** from the options menu. This action removes **all stored files** associated with the device.

<figure><img src="/files/BfnAv02Fz9BtMzkrq6fG" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Data deletion is **permanent** and cannot be undone. Once deleted, the files **cannot be recovered**.
{% endhint %}

#### Deleting Individual Files

To delete a **specific file**, navigate to the **Storage Tab** and locate the file.&#x20;

Select the delete option by clicking the three dots next to the file to permanently remove it.

{% hint style="danger" %}
Data deletion is **permanent** and cannot be undone. Once deleted, the files **cannot be recovered**.
{% endhint %}


# Managed Email

The Managed Email Add-on is an optional managed service that allows you to send customized emails directly within Qubitro, without integrating or managing any third-party email provider.

### Overview

The **Managed Email Add-on** is an optional <mark style="background-color:yellow;">managed service</mark> that allows you to send customized emails directly within Qubitro, without integrating or managing any third-party email provider.&#x20;

It is designed for use with [**Rule Functions**](/platform/functions/rule-function) and other sub-products, enabling seamless email alerts and notifications.

Once enabled, you can use [**Send Email**](/platform/functions/rule-function/send-email) as an action within [Rule Functions](/platform/functions/rule-function) to trigger emails based on specific device conditions, thresholds, or events.

{% hint style="info" %}
Managed Email Add-on is available **only on the Enterprise plan for Organizations**.
{% endhint %}

### Core Features

* **No Third-Party Integration Required** – Allows you to send emails without setting up an external email provider.
* **Seamless Rule Functions Integration** – Enables **Send Email** actions within Rule Functions for automated notifications.
* **Usage-Based Pricing** – Costs are calculated per email recipient and billed monthly upon invoice finalization.
* **Customizable Email Content** – Allows you to format messages dynamically based on event data.

### Enabling Managed Email Add-on

The Managed Email Add-on must be activated before use.

1. Navigate to **Organization Settings > Add-ons**.
2. Locate **Managed Email Add-on** and click **Enable**.
3. Once activated, the **Send Email** action will be available in **Rule Functions**.

### Sending Emails with Rule Functions

Once enabled, you can use the **Send Email** action in Rule Functions:

{% content-ref url="/pages/KI6bPeVpV9pwjljdu0bb" %}
[Send Email](/platform/functions/rule-function/send-email)
{% endcontent-ref %}

### Billing & Pricing

The Managed Email Add-on is billed based on usage:

* **Each recipient counts as one email.**
* **For example:** Sending an email to three recipients will be counted as three emails.
* The **fee per email** is **$0.0005**.
* Charges are calculated monthly and included in the final invoice.

<figure><img src="/files/EnBS8bw5fLuI7aOrfnK3" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
You can always check the total count of sent emails on the **Billing** page under **Organization Settings**.
{% endhint %}

### Disabling Managed Email Add-on

To disable the Managed Email Add-on:

1. Navigate to **Organization Settings > Add-ons**.
2. Locate **Managed Email Add-on** and click toggle to **disable**.
3. This will remove access to the **Send Email** action in Rule Functions.


# AI Companion


# Audit Log

The Audit Log provides a detailed record of actions performed within your Qubitro account.

### Overview

The **Audit Log** provides a detailed record of actions performed within your Qubitro account, helping you track changes, monitor activities, and maintain compliance.&#x20;

### Core Features

* **Enterprise-Only Feature** – Available for Enterprise plan users.
* **Event Tracking** – Logs key actions such as project modifications, device updates, user access changes, and function executions.
* **Historical Visibility** – Provides a timeline of events for improved accountability.
* **Security & Compliance** – Helps organizations meet audit and compliance requirements.

{% hint style="warning" %}
Audit Log is an **upcoming feature** and will be available under **Organization Settings** for Enterprise accounts.
{% endhint %}

### Need early access to Audit Log?

[Contact us](https://www.qubitro.com/contact/sales) to discuss your requirements and enable this feature for your Enterprise account.


# MCP Server


# Overview

The Settings page in Qubitro allows you to manage various aspects of your organization, including members, roles, billing, and additional services.

For detailed instructions on each section, refer to the respective documentation pages.

{% hint style="info" %}
Additional settings may be available depending on your **Enterprise plan** and enabled Add-ons.
{% endhint %}

{% content-ref url="/pages/MpjWLzBMXKdh93hXLzT9" %}
[General](/organizations/general)
{% endcontent-ref %}

{% content-ref url="/pages/0Bk3tpdPbnwELtzv0mD4" %}
[Groups](/organizations/groups)
{% endcontent-ref %}

{% content-ref url="/pages/BiNO8bYpe8qrtIh0ovTJ" %}
[Members & Roles](/organizations/members-and-roles)
{% endcontent-ref %}

{% content-ref url="/pages/ivg9wjLtoHiB3qIaDoI7" %}
[Custom Roles](/organizations/custom-roles)
{% endcontent-ref %}

{% content-ref url="/pages/eeEwz99kA078smz78bSR" %}
[Add-Ons](/organizations/add-ons)
{% endcontent-ref %}

{% content-ref url="/pages/emsjpnm2X05PpUudqFFi" %}
[Billing](/organizations/billing)
{% endcontent-ref %}

{% content-ref url="/pages/gdX1WwjfXRNpP6x18KYL" %}
[Invoices](/organizations/invoices)
{% endcontent-ref %}

{% content-ref url="/pages/Cj5fMVcpZ0IpHn261Q0C" %}
[White-Label](/organizations/white-label)
{% endcontent-ref %}


# General

The General settings page allows you to manage core organization details, including your Organization ID, name, email, logo, and deletion settings.

### Overview

The **General** settings page allows you to manage core organization details, including your **Organization ID, name, email, logo, and deletion settings**. These settings help you personalize and manage your organization effectively.

{% hint style="warning" %}
Note: Some settings (such as **Delete Organization**) may be disabled depending on your role within the organization. Additionally, certain pages, like Billing, may not be visible. If you require access to these features, check your [permissions](/organizations/members-and-roles) or contact your organization administrator.
{% endhint %}

<figure><img src="/files/p3mV6jBmrwDYe0JE8zev" alt=""><figcaption></figcaption></figure>

### Organization ID

The **Organization ID** is a unique identifier assigned to your organization.

To copy your Organization ID:

1. Navigate to **Settings > General**.
2. Click the **copy** button next to the Organization ID.

### Organization Logo

You can customize your **Organization Logo** to match your branding.

To update your logo:

1. Click on the current logo or avatar.
2. Upload an image from your files.

### Organization Name

The **Organization Name** is the display name associated with your account.

To update the name:

1. Enter the desired name in the **Organization Name** field.
2. Click **Save** to apply the changes.

### Organization Email

The **Organization Email** is used for **administrative and billing-related communications**.

{% hint style="warning" %}
The provided email will receive system-generated notifications, including function failures, invoices, and other internal alerts. Ensure this email is monitored regularly.
{% endhint %}

This email is set during organization creation and cannot be changed.

### Created At

Displays the **exact date and time** when the project was created.

{% hint style="info" %}
The **Created At** date is displayed in the **time zone selected in your account settings**.
{% endhint %}

### Delete Organization

Deleting an organization **permanently removes all associated data and cannot be undone**.

To delete an organization:

1. Scroll to the **Delete Organization** section.
2. Click **Delete Organization**.
3. Confirm the action in the warning prompt.

{% hint style="danger" %}
**This action is irreversible.** Deleting an organization will permanently remove all projects, devices, data, and members.
{% endhint %}


# Groups

Groups in Qubitro are containers for organization members, designed to simplify collaboration and streamline access control for different customers and internal teams.

### Overview

**Groups** in Qubitro are containers for organization members, designed to **simplify collaboration** for different customers and internal teams.

<figure><img src="/files/mHZoK9CEmzGRxuQkX57B" alt=""><figcaption></figcaption></figure>

### Managing Groups

Organizations can create and manage **Groups** from the **Settings > Groups** page.

#### Creating a Group

To create a new Group:

1. Navigate to **Settings > Groups**.
2. Click **Create Group**.
3. Enter a **Group Name**.
4. Click **Save**.

Once created, you can manage members and access permissions within the Group.

{% hint style="success" %}
Organizations can create **unlimited Groups** and add members to them.
{% endhint %}

### Group Details

Each Group has **General, Members, and Access Management** sections.

<figure><img src="/files/ZQxwg1Dk9UD0vSr36A6q" alt=""><figcaption></figcaption></figure>

#### Group ID

Every Group has a **unique Group ID** used for API interactions. This ID is automatically generated and cannot be changed.

#### Renaming a Group

You can change the Group name:

1. Navigate to the **General** tab.
2. Edit the **Group Name** field.
3. Click **Save**.

### Managing Group Members

You can add, remove, and manage members within each Group.

#### Adding Members to a Group

1. Navigate to **Group > Members**.
2. Click **Invite Members**.
3. Select users from the dropdown.
4. Click **Add Member**.

<figure><img src="/files/W6NG4DmqAxRV2Rl32TFl" alt=""><figcaption></figcaption></figure>

#### Removing Members

Group members can be removed individually or in bulk using the **three-dot menu**.

To remove a member:

1. Navigate to the **Members** tab.
2. Click the **three-dot menu** (⋮) next to their name.

{% hint style="warning" %}
Removing a member from a Group does not remove them from the organization.
{% endhint %}

### Access Management

The **Access Management** section allows Groups to have filtered access to specific **Projects** and **Dashboards**.

{% hint style="success" %}
Projects and Dashboards shared with the selected Group **will be listed automatically**; no further action is required.
{% endhint %}

<figure><img src="/files/cZvUWdrZsVM0Il9iZ3zM" alt=""><figcaption></figcaption></figure>

### Deleting a Group

Groups can be deleted if they are no longer needed.

1. Navigate to the **General** tab of the Group.
2. Click **Delete Group**.
3. Confirm the deletion.

{% hint style="danger" %}
**This action is irreversible.** Deleting a Group removes its settings but **does not affect** organization members.
{% endhint %}


# Members & Roles


# Read Only


# Read/Write


# Admin


# Custom Roles




---

[Next Page](/llms-full.txt/1)

