Skip to content

Webhook payloads

This page is for the developer who builds the endpoint behind a custom webhookCustom webhookYour own HTTPS endpoint, set on the Webhook tab in Settings. Alertified sends each alert to it as a JSON POST request, for your own systems to process. Read more → . It describes every request Alertified sends to the URL set on the Webhook tab in Settings. For setting the URL up, see Webhook.

| Part | Value | |---|---| | Method | POST | | URL | The URL saved on the Webhook tab, always https:// | | Headers | Content-Type: application/json | | Body | One JSON object: one event, for one alert | | Delivered | Your endpoint answers with any 2xx status |

Requests carry no signature and no authorization header. Put a hard-to-guess token in the URL and check it on receipt (see Use a hard-to-guess URL).

Every body has an event field that names the event. Branch on it, and accept and ignore any event value your endpoint does not handle.

| event | Sent when | |---|---| | low_stock_alert | A stock alert fires. | | test | You click Send Test Message on the Webhook tab. | | floormode_alert | Floormode reports an alert through the Floormode connection (coming soon). |

Sent once each time a stock alertAlertOne rule that watches the stock of one variant, or one Assemblified item, at one location. When the available stock is at or below the alert's threshold, Alertified notifies the alert's recipients on the channels it uses. Read more → that uses the Webhook channel fires: when Shopify (or, for an Assemblified-only item, Assemblified) reports that the item’s available stock at the alert’s location is at or below the alert’s thresholdThresholdThe stock level an alert watches for: 0 or higher. The alert fires when the available stock is at or below this number. Read more → . The alert then sends again only after it re-arms (see How alerts fire).

{
"event": "low_stock_alert",
"source": "alertified",
"timestamp": "2026-11-14T09:30:12.345Z",
"alert": {
"id": "3f1c2a9e-8b7d-4c1e-9f0a-1b2c3d4e5f60",
"shopDomain": "acme-store.myshopify.com",
"productId": "10303508381962",
"productTitle": "Classic Tee",
"variantTitle": "M / Black",
"locationId": "71234567890",
"locationName": "Main Warehouse",
"currentStock": 3,
"threshold": 5,
"productUrl": "https://admin.shopify.com/store/acme-store/products/10303508381962"
}
}

| Field | Type | Meaning | |---|---|---| | event | string | Always "low_stock_alert". | | source | string | "assemblified" for an Assemblified-only item (a virtual material, or the pre-assembled stock of a sub-assembly or BOM); "alertified" for every alert on a Shopify variant, including alerts set up from inside Assemblified. | | timestamp | string (ISO 8601, UTC) | When Alertified sent this request. | | alert | object | The alert, described below. |

| Field | Type | Meaning | |---|---|---| | alert.id | string (UUID) | The ID of the alert in Alertified. The same alert sends the same ID each time it fires. | | alert.shopDomain | string | Your shop’s *.myshopify.com domain. | | alert.productId | string | The Shopify product ID, digits only (for example "10303508381962"). For an Assemblified item, an ID that starts with asm: (see below). | | alert.productTitle | string | The product title saved with the alert. "Unknown Product" if the alert has none. | | alert.variantTitle | string | The variant title saved with the alert. "Default Variant" if the alert has none. For an Assemblified item, the item’s name again. | | alert.locationId | string | The Shopify location ID, digits only. For an Assemblified item, asm:loc: followed by the location’s ID. | | alert.locationName | string | The location name saved with the alert. The location ID if the alert has no name. | | alert.currentStock | number (integer) | The available quantity reported for the item at this location (by Shopify, or by Assemblified for an Assemblified-only item). Can be below zero. | | alert.threshold | number (integer) | The alert’s threshold. | | alert.productUrl | string, optional | The product’s page in your Shopify admin. Left out for Assemblified-only items. | | alert.source | string, optional | "assemblified" for an Assemblified-only item. Left out otherwise. |

When the alert is for an AssemblifiedAssemblifiedA bill of materials (BOM) management app for Shopify. Connected to Alertified, it lets you set alerts on stock that Shopify cannot see: virtual materials and the pre-assembled stock of BOMs and sub-assemblies. Read more → -only item (a virtual material, or the pre-assembled stock of a sub-assembly or BOM), source and alert.source are "assemblified", alert.productUrl is left out, alert.locationId starts with asm:loc:, and alert.productId names the item type by its prefix, followed by the item’s Assemblified ID:

| alert.productId starts with | Item type | |---|---| | asm:mat: | Raw material | | asm:sub: | Sub-assembly | | asm:bom: | BOM product |

Alerts set up in Assemblified on a Shopify variant (a Shopify-backed raw material or a BOM’s Shopify variant) are sent like any Shopify alert, with source "alertified" and a productUrl.

{
"event": "low_stock_alert",
"source": "assemblified",
"timestamp": "2026-11-14T09:30:12.345Z",
"alert": {
"id": "8c2d7e41-5a90-4b3f-b1e6-0f9a8d7c6b54",
"shopDomain": "acme-store.myshopify.com",
"productId": "asm:mat:VMAT-1004",
"productTitle": "Cotton fabric",
"variantTitle": "Cotton fabric",
"locationId": "asm:loc:71234567890",
"locationName": "Main Warehouse",
"currentStock": 12,
"threshold": 20,
"source": "assemblified"
}
}

Sent when you click Send Test Message on the Webhook tab. It describes no alert.

{
"event": "test",
"source": "alertified",
"message": "Your webhook notifications are configured correctly!",
"timestamp": "2026-11-14T09:30:12.345Z",
"data": {
"type": "test_message",
"status": "success"
}
}

| Field | Type | Meaning | |---|---|---| | event | string | Always "test". | | source | string | Always "alertified". | | message | string | Always "Your webhook notifications are configured correctly!". | | timestamp | string (ISO 8601, UTC) | When Alertified sent this request. | | data.type | string | Always "test_message". | | data.status | string | Always "success". |

The test answers on the Webhook tab: any 2xx shows “Test message sent to your webhook!”; any other status shows the status and what to check. See Testing a channel.

A FloormodeFloormodeA warehouse and order management app for Shopify, launching soon. Once it is available, it can send its warehouse alerts through Alertified, by email and on your connected channels. Read more → alert is not a stock alert: it reports something Floormode noticed in your warehouse work. It has its own event name, so an endpoint that handles only low_stock_alert can ignore it.

{
"event": "floormode_alert",
"source": "floormode",
"timestamp": "2026-11-14T09:30:12.345Z",
"alert": {
"id": "5b7e9c13-2f4a-4d68-9e01-a3c5b7d9f2e4",
"shopDomain": "acme-store.myshopify.com",
"type": "sla_breach",
"severity": "warning",
"message": "Pick batch is past its deadline.",
"entityRef": "ffd:pick_batch:jd7k2m9q",
"at": "2026-11-14T09:29:58.000Z"
}
}

| Field | Type | Meaning | |---|---|---| | event | string | Always "floormode_alert". | | source | string | Always "floormode". | | timestamp | string (ISO 8601, UTC) | When Alertified sent this request. | | alert.id | string (UUID) | The ID Alertified gave this Floormode alert. | | alert.shopDomain | string | Your shop’s *.myshopify.com domain. | | alert.type | string | What kind of alert it is, as Floormode names it (for example "sla_breach"). Up to 64 characters. | | alert.severity | string | "info", "warning" or "critical". | | alert.message | string | Floormode’s description of the alert. Up to 1,000 characters. | | alert.entityRef | string | The Floormode record the alert is about, in the form ffd:<kind>:<id>. | | alert.at | string (ISO 8601) | When Floormode observed the condition. |

A Floormode alert can, rarely, reach your endpoint more than once. Use alert.id to recognize a repeat.

  • Answer with any 2xx status to mark the request as delivered. The body of your answer is not read.
  • Any other status, or no answer, marks the request as Failed in Logs → Notifications (channel Webhook), with the status and your endpoint’s answer.
  • Each request carries one event for one alert.
  • Webhook — set the endpoint URL and send a test.
  • How alerts fire — when low_stock_alert is sent and when an alert re-arms.
  • Logs — the delivery status of every request.