Skip to main content

AlgaPSA Integration

Connect Level to AlgaPSA so groups map to clients, devices sync as assets, and Level alerts open AlgaPSA tickets.

Introduction

AlgaPSA mirrors your Level setup on the PSA side: Level groups map to AlgaPSA clients, devices in mapped groups sync into Assets, and Level alerts open tickets through AlgaPSA’s alert rules.

Setup spans both platforms. In Level you create an API key and one automation that posts alerts to AlgaPSA. In AlgaPSA you paste the key, map groups, and run the device sync.

ℹ️ NOTE: This integration was built and is maintained by Nine Minds, the makers of AlgaPSA. For the AlgaPSA side of the setup, see their documentation: Level RMM Integration. It’s an AlgaPSA Enterprise Edition feature.


⚙️ PREREQUISITES

  • Level administrator access (to create an API key and build an automation)

  • An AlgaPSA Enterprise Edition account with access to Admin Settings

  • Your AlgaPSA instance reachable at a public HTTPS address (see the warning under Send alerts to AlgaPSA)


AlgaPSA Integration

Create an API Key in Level

AlgaPSA uses a Level API key to read your groups, devices, and alerts.

  1. In Level, navigate to Settings → API keys.

  2. Click + Create API key.

  3. Enter a Description such as “AlgaPSA integration”.

  4. Select Read-only. Everything AlgaPSA pulls from Level (group discovery, device sync, alert backfill) is a read, so a read-only key is enough.

  5. Click Create key, then use the three-dot menu on the new row and choose Copy key.

See API Keys Settings for full details on managing keys.


Connect AlgaPSA to Level

  1. In AlgaPSA, go to Settings → General to open Admin Settings.

  2. Select Integrations under Data & Integration, open the RMM tab, and select Level.

  3. Paste your key into the API key field on the Level Connection card.

  4. Click Save Configuration, then Test Connection.

A successful test marks the integration Connected and shows the connection time.


Map Groups and Sync Devices

Mapping happens entirely in AlgaPSA, on the Sync & Group Mappings card.

  1. Click Discover Groups. AlgaPSA imports your Level group hierarchy into the mapping table.

  2. For each group you manage, pick an AlgaPSA client in the Mapped Client dropdown. Optionally set a Default Contact, which gets attached to tickets opened by alerts from that group.

  3. Click Run Device Sync. Devices in mapped groups become AlgaPSA assets.

Two behaviors are worth knowing:

  • Subgroups inherit. A subgroup with no mapping of its own uses the nearest mapped parent, so mapping a client’s top-level group usually covers its whole tree.

  • Unmapped groups are skipped. Devices in a group with no mapping and no mapped parent don’t sync.

💡 TIP: Map one top-level Level group per client, then let the subgroups inherit. It’s less to maintain than mapping every subgroup by hand.


Send Alerts to AlgaPSA

AlgaPSA authenticates incoming alerts with its own X-Alga-Webhook-Secret header and expects its own JSON payload. Level’s built-in webhooks (Settings → Webhooks) send a fixed payload and only add an X-Level-Signature header, so alerts go to AlgaPSA through an automation with an HTTP request action instead, which lets you set custom headers and body.

In AlgaPSA, open the Alert Webhook card and copy the three values it gives you: the Webhook URL, the Header name and secret (the eye icon reveals the secret), and the Payload template.

In Level:

  1. Navigate to Automations and create a new automation, for example “AlgaPSA alert ticket”.

  2. In the pipeline, click + and select HTTP request from the Other category.

  3. Fill in the action:

    • URL: the AlgaPSA Webhook URL

    • Method: POST

    • Content type: application/json

    • Body: the payload template from AlgaPSA, pasted as-is

    • Headers: click + Add request headers and add X-Alga-Webhook-Secret with the secret value

  4. Save the automation.

An automation in edit mode with an HTTP request action panel open, showing the URL, Method POST, Content type application/json, Body, and a custom request header row

Now point the monitors that should open tickets at that automation:

  1. Open the monitor policy that raises the alerts you want ticketed (Monitor policies in the sidebar).

  2. Open a monitor and find the Remediation section, “Run automations when this alert fires”.

  3. Select your AlgaPSA automation in the Remediation automation picker, then save.

  4. Repeat for each monitor whose alerts should become tickets.

A monitor in a monitor policy with the Remediation section visible

The automation runs against the device that raised the alert, so the request carries that device’s details.

⚠️ WARNING: The HTTP request action only calls public addresses. If you self-host AlgaPSA on a private or loopback address, the action fails with “Request blocked: Cannot make requests to private or loopback addresses.” Give your AlgaPSA instance a publicly resolvable HTTPS hostname before wiring up the automation.


Backfill Existing Alerts

The webhook is the live feed. To pull alerts that already exist in Level, or to catch up after a missed event, click Backfill Alerts on AlgaPSA’s Sync & Group Mappings card. There’s no scheduled polling.


Test the Integration

  1. Confirm the Level Connection card in AlgaPSA shows Connected with a recent timestamp.

  2. Spot-check one client’s asset list in AlgaPSA against its Level group.

  3. Trigger a test alert in Level on a monitor you attached the automation to.

  4. Confirm a ticket appears in AlgaPSA and routes through your alert rules.

If no ticket appears, open the automation’s run for that device and read the HTTP request action’s output. It logs the response, for example HTTP 401 - Unauthorized for a bad secret or HTTP 404 - Not Found for a mistyped URL. Then check:

  • The header name is exactly X-Alga-Webhook-Secret and the secret has no extra spaces.

  • The Webhook URL was copied in full.

  • The alerting device’s group is mapped to a client in AlgaPSA.

  • The monitor actually lists your automation under Remediation.


Ongoing Management

  • Rotate the key: create a new API key in Level, paste it into AlgaPSA, test the connection, then delete the old key. Deleting a key takes effect immediately, so do it in that order.

  • Add groups or devices: run Discover Groups after you add groups in Level, and Run Device Sync to bring new devices across.

  • Pause ticketing: disable the Level automation, or remove it from a monitor’s Remediation field to stop just that monitor’s alerts.

  • Change the secret: update the header value in the Level automation whenever you regenerate it in AlgaPSA.


FAQ

  • Do I need to enable AlgaPSA on Level’s Integrations page? No. Settings → Integrations in Level covers ConnectWise PSA, HaloPSA, Zest, Hudu, and DeskDay. AlgaPSA connects through the Level API and an automation, so there’s nothing to toggle there.

  • Read-only or read and write for the API key? Read-only. AlgaPSA reads groups, devices, and alerts from Level and writes nothing back. If a connection test or sync ever fails with a permissions error, check with Nine Minds before widening the key.

  • Can I use Settings → Webhooks instead of an automation? Not for AlgaPSA. Level’s webhooks can’t add a custom header, and AlgaPSA requires X-Alga-Webhook-Secret on every request. The HTTP request action inside an automation is what sends it.

  • Does closing a ticket in AlgaPSA resolve the Level alert? AlgaPSA’s documentation covers the Level to AlgaPSA direction (alerts opening tickets). Ask Nine Minds about ticket-close behavior on their side.

  • Which devices sync into AlgaPSA? Devices in groups you mapped to a client, plus devices in subgroups that inherit a mapped parent. Unmapped branches are skipped.

  • Do existing AlgaPSA assets get overwritten? Device sync is driven from AlgaPSA. See their Level RMM Integration documentation and How RMM Integrations Work in AlgaPSA for how they match and update assets.

  • Who can set this up? A Level administrator (for the API key and the automation) and an AlgaPSA user with access to Admin Settings.

Did this answer your question?