# How to integrate with Particle by Digi

**URL:** <https://community.tago.io/t/how-to-integrate-with-particle-by-digi/1913>\
**Category:** Tutorials\
**Tags:** tutorials\
**Created:** [July 30, 2026, 5:52pm UTC](https://community.tago.io/t/how-to-integrate-with-particle-by-digi/1913 "2026-07-30T17:52:15Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![mateus.silva](https://avatars.discourse-cdn.com/v4/letter/m/77aa72/32.png) [@mateus.silva](https://community.tago.io/u/mateus.silva)\
**Post date:** [July 30, 2026, 5:52pm UTC](https://community.tago.io/t/how-to-integrate-with-particle-by-digi/1913/1 "2026-07-30T17:52:15Z")

</div>

This tutorial provides a step-by-step guide to integrate Particle ([Particle.io](http://Particle.io) by Digi International) with the TagoIO platform. By following these instructions, you will enable uplink and downlink operations, allowing data exchange between your Particle devices and your TagoIO application.

Uplink is the process of sending data from the devices to TagoIO: every event your device publishes with `Particle.publish` is forwarded by a Particle webhook to TagoIO. Downlink is used to send data back to the devices.

* * *

## Prerequisites

Before you begin, ensure you have the following:

- **TagoIO account** : if you don’t have one, [register here](https://admin.tago.io/signup).
- **Particle account and device** : your device must be claimed on the [Particle Console](https://console.particle.io/) and publishing events with `Particle.publish`.

* * *

## Step 1: Create Authorization in TagoIO

1. **Access Authorizations**

2. **Create a New Authorization**

3. **Copy the Authorization Token**

> ℹ **Note:** You only need one authorization for all your Particle devices. Create additional authorizations only if you want to separate integrations based on your specific needs.

* * *

## Step 2: Add Your Device to TagoIO

1. **Find your Device ID on Particle**

2. **Create the device in TagoIO**

For detailed instructions on adding devices, visit the [Adding Devices](https://docs.tago.io/docs/tagoio/devices/) page.

 ![Screenshot 2026-07-31 at 16.51.43](https://canada1.discourse-cdn.com/flex034/uploads/tagoio1/original/2X/4/4e2c3a42279992181df0111b4cbf3941e8d79ca2.png)

* * *

## Step 3: Create the TagoIO integration in the Particle Console

Particle provides a ready-made TagoIO integration template, so there is no URL to type.

1. In the Particle Console, go to **Integrations** , click **Add New Integration** , and select **TagoIO**.

2. Fill in the form:

3. The auth token is stored as a cloud secret. Click **Or click here to create a new secret.** in the Parameters section, give the secret a name (for example, `TAGOIO_AUTHORIZATION`), paste the Authorization token from Step 1 as its value, and save. Back in the form, select the secret in the **TagoIO auth token** field. If it does not show up, reload the page and it will appear.

4. Click **Enable integration**.

 ![Screenshot 2026-08-05 at 14.52.46](https://canada1.discourse-cdn.com/flex034/uploads/tagoio1/original/2X/7/7e9cb9da1994d14471bbfad9b0ab2c93330e2a07.png)

### Using TagoDeploy?

The TagoIO template targets the `us-e1` and `eu-w1` regions. If your account runs on a [TagoDeploy](https://tago.io/deploy) instance, the Particle middleware URL is specific to your environment, so the region parameter does not apply. In the integration form, click **Go to advanced view** and enter the middleware URL of your instance directly:

```auto
https://<your-particle-middleware-domain>/uplink?authorization=YOUR_AUTHORIZATION

```

* * *

## Finalizing Setup

1. **Publish an event**

2. **Verify data reception**

You also can [create your own parser](https://docs.tago.io/docs/tagoio/devices/payload-parser/building-your-own-parser) to change how the published payload is decoded into variables.

* * *

## Downlink Configuration

The Particle integration supports two ways of sending data back to the device.

### Option A: Downlink on the next uplink (class A)

The middleware answers each uplink webhook with any pending downlink payload, and the Particle Cloud republishes that response to your device as a `hook-response/<event>` event. No Particle credential is needed.

1. **Subscribe to the response in your firmware**

2. **Queue the downlink in TagoIO**

> ℹ **Note:** With more than one device on your Particle account, open the integration’s advanced view and set the **Response Topic** to `{{{PARTICLE_DEVICE_ID}}}/hook-response/{{{PARTICLE_EVENT_NAME}}}` and subscribe with `System.deviceID() + "/hook-response/"` so each device only receives its own downlinks. Responses above 512 bytes arrive split into chunks (`/0`, `/1`, …).

### Option B: Immediate downlink

The middleware can also call a [Particle cloud function](https://docs.particle.io/reference/device-os/api/cloud-functions/particle-function/) on your device right away. This requires:

1. **A cloud function in your firmware**

2. **A Particle API token stored in TagoIO**

3. **Send the downlink**

> ⚠ The device must be online for the immediate downlink; otherwise the request returns an error. For devices that sleep between transmissions, use Option A.

* * *

## Troubleshooting

### Error 401 - Unauthorized

- **Invalid Authorization Token** : verify that the secret selected in **TagoIO auth token** holds the exact token from Step 1 (or the `authorization` query parameter, if you entered the URL through the advanced view).
- **Device not found (downlink)**: the `device` sent to `/downlink` does not match the Core ID of any device in your TagoIO account. Both must match exactly.
- **Wrong region** : confirm the URL region (`us-e1` or `eu-w1`) matches your TagoIO account region.

### Error 400 - Bad Request

- **Missing Particle token** : the immediate downlink requires the Particle API token in the Additional Parameters of your authorization (Option B, item 2).
- **Invalid or expired Particle token** : the error message includes the reason returned by Particle (e.g., `invalid_token`). Generate a new API user token and update the Additional Parameters field.
- **Function not registered** : the cloud function name called by the middleware does not exist on the firmware. Check the `downlink_function` parameter and the name registered with `Particle.function`.
- **Payload too large** : downlink payloads are limited to 1024 bytes.

### Error 502 - Bad Gateway

- **Device offline** : the `immediate downlink` only works while the device is connected to the Particle Cloud. Queue it as a class A downlink instead (Option A).

### No Data Received

- **Device ID mismatch** : compare the Device ID on the Particle Console with the device serial on TagoIO.
- **Webhook throttled by Particle** : when a webhook returns more errors than successes, the Particle Cloud starts skipping attempts and publishes a `hook-error` event reading “Sleeping, too many errors, please wait and try again”. Skipped events are retried twice and then dropped. Check the webhook logs in the Particle Console and fix the reported error.
- **Check the Live Inspector** : open the [Live Inspector](https://docs.tago.io/docs/tagoio/devices/live-inspector) while the device publishes to see the requests reaching TagoIO.

* * *

With data flowing into TagoIO, you can start creating [Dashboards](https://docs.tago.io/docs/tagoio/dashboards/), [Analyses](https://docs.tago.io/docs/tagoio/analysis/), and [Actions](https://docs.tago.io/docs/tagoio/actions/) to visualize and manage your device data.

---

<div class="post-metadata">

**Author:** ![philip.cotrin](https://avatars.discourse-cdn.com/v4/letter/p/b487fb/32.png) [@philip.cotrin](https://community.tago.io/u/philip.cotrin)\
**Post date:** [July 30, 2026, 5:52pm UTC](https://community.tago.io/t/how-to-integrate-with-particle-by-digi/1913/2 "2026-07-30T17:52:36Z")

</div>



---

<div class="post-metadata">

**Author:** ![vitorfdl](https://yyz2.discourse-cdn.com/flex034/user_avatar/community.tago.io/vitorfdl/32/1728_2.png) [@vitorfdl](https://community.tago.io/u/vitorfdl)\
**Post date:** [August 7, 2026, 8:56pm UTC](https://community.tago.io/t/how-to-integrate-with-particle-by-digi/1913/3 "2026-08-07T20:56:21Z")

</div>


