Tell me when this happens
Pick an alert recipe, draw the area you care about, and say how strong a signal has to be before it is worth interrupting you. You read the exact request and one plain sentence about what will fire, and only then does anything get created.
1. What you are watching
An alert layer is a recipe that scores every cell in a grid, on the cadence its source publishes. A subscription is your standing question about that score.
- alert layer
loading- cells
- loading
- scored value
loading- refreshes on
- loading
- suggested cooldown
loading
The evaluator matches this against the refresh event's own alert_layer by exact
string equality, so a subscription on alerts/firms-fire never hears from a
driver publishing catalog://alerts/firms-fire@v1. The default here is the
spelling the end-to-end script uses. Change it only to match your driver.
Recipe source: loading
2. Connect your gateway key
This is a gateway key, not an account. It is held in memory for this tab and is never written to storage, never put in the URL, and never baked into the build. Close the tab and it is gone. Changing the base clears it: a key is scoped to the gateway that issued it.
The key authorizes the request; it does not identify you. Who a subscription belongs to is
the owner field you type below, which the gateway stores as written.
3. Where
Point, Polygon or MultiPolygon. This page checks the shape so a bad paste is caught before a round trip; the gateway parses it for real and its answer is the one that counts.
4. When it should reach you
How many cells have to cross in a single refresh before anything fires. It reads like a "do not wake me for one noisy pixel" knob and it is not one: cells still inside their cooldown are removed before this number is counted, so a minimum above 1 paired with a long cooldown can fire nothing while new cells keep crossing a few at a time. Leave it at 1 unless you can say why. Section 6 states the combination you have picked.
A duration (6h, 30m, 2d, 90s) or bare
seconds. Empty means no cooldown, and the request carries 0 for it: an empty
string is not a duration the gateway will parse, so the preview shows the 0 that replaces
it rather than sending something that comes back 400.
Layer parameters
These belong to the layer's own maths, not to your notification taste. They are shown with the values the recipe declares.
5. Where a firing goes
Required. Every firing is signed with it, and a signature over an empty key proves nothing to your receiver. Note that the gateway echoes the stored secret back on a read; this page never prints it.
Off by default, matching the gateway. A loopback target is reachable only where the person creating the subscription owns the machine, which means local development, and everywhere else it is a way to make the gateway POST to its own neighbours.
A subscription's delivery list cannot be edited afterwards, by design: each entry's position is its identity in the per-endpoint delivery record, so reordering one would silently re-point every firing already in flight. Changing delivery means creating a new subscription.
6. Exactly what will fire
The request, verbatim
This is the body, not a rendering of it. The only thing held back is your secret, which is sent as typed.
There is no layer_params key in it, and that is deliberate: the subscription API
declares no such field and does not reject unknown ones, so a parameter block sent today
would come back 201 and be discarded. Rather than print a key the gateway throws away, this
page sends none and refuses to create a subscription whose parameters differ from the
layer's declared defaults.
7. Confirm, then create
Editing any field above unticks this box. Consent is to a specific subscription, and a tick that survived an edit would be consent to a different one.
8. The subscription
- id
-- state
-- created
-- last fired
-- delivery keys
-
Read-back is by id. The gateway has no list-by-owner route, so this page shows the subscription you just made and does not pretend to an inbox it cannot fill. Keep the id.
Archiving does not delete the row. Firing history keeps a subscription to point at, so an archived subscription stays readable and simply stops being evaluated.
9. Make it fire, once
Alert layers are evaluated when their source refreshes, which is a service and not something a browser can stand in for. So this pushes one synthetic observation through the real evaluator: a single cell inside your geometry, with a value past your threshold.
The firings table is append-only, so a test fire against an operated gateway is test data
in a production table for good. Its inputs_hash and cell id are both prefixed
synthetic-page-test- so it can be found again. If a webhook is configured and
reachable, it will be POSTed to for real.
A fired firing is a queued firing. The evaluator appends and queues; a separate delivery worker drains that queue and is what actually POSTs. So "fired" here does not yet mean your receiver has it, and the honest place to check that is your receiver.