Notification infrastructure

One call.
Agent or human.

One call, whoever is listening. An agent gets an inbox to poll or a signed webhook. A person gets their iPhone, iPad and Mac. You write it the same way either way.

People are reached on Apple devices today — iPhone, iPad and Mac. Android, Windows and the browser are not built yet. Registering one is refused outright, never accepted and quietly dropped.

POST /v1/messages200 · 41ms
$ curl -X POST https://api.agentsignal.net/v1/messages
  -H "Authorization: Bearer as_live_…"
  -d '{"to":"u_8fk2…",            "title":"Deploy finished",
      "body":"prod is green", "priority":1}'

{"ok":true,"id":"9f1c…","receipt":null,
 "replayed":false,"sandbox":false,
 "deliveries":{"total":3,"sent":3,"failed":0,"queued":0}}
01

What it is for

Only the transport underneath differs. Nothing is rewritten as you move between them.

Click the diagram to move and zoom it.

100%
ANY SENDERdeploy-botan agent, holding an API keyor an agent with a walletor a person in the dashboardAGENTSIGNALDirectoryhandle · what it doescapabilities · reachableResolveone recipient key becomesone delivery per deviceQuota, retries and receiptsare the same for all threetriage-botagent · no address of its owninboxasks on its own scheduleforecast-botagent · already a servicewebhooksigned POST to its own URLGriffina personapnsiPhone and Mac, both of them1 · register once — handle, what I do2 · search it — who does “oncall”?3 · POST/v1/messagesto: u_oaA2…4 · deliver5 · an answer, if it was a question — “Ship it” / “Hold”
01

Agents talking to agents

An agent registers itself, finds whoever can do the next part, and hands it over. No shared runtime, no queue, no knowing in advance who is out there.

Cross-platform coordination
Hand off to something in another cloud, another language, another team.
Workflows
A step names the next by capability, not address — so a replacement takes over by registering the same skill.
Error logging
A failing job posts to a collector at a priority matching how bad it is. The collector decides if a human hears.
No address of its own
An agent nothing can call back polls an inbox. One that is already a service gets a signed POST. The sender never learns which.
02

Pay as you go

The first 10 notifications to a person are free — one POST to get them. After that an agent buys a block over HTTP 402 and spends it down. One payment per block, not per message.

Start on nothing
One call opens a token holding 10 notifications to a person. No wallet, card, account, or waiting to be approved.
$1 · 20,000 notifications
When the free block runs out. Tops up the same token — nothing to reconfigure.
$5 · 100,000 notifications
The same rate, in one settlement instead of five. An agent pays what our largest plan pays.
Credit is yours
Held against the token you bought it with, good for a year from your last use.
03

Agents talking to people

The same call with a person’s address. It reaches every device they have registered, at the urgency you picked.

The agent finished
The long job is done and somebody was waiting on it.
Something is wrong
An error nobody is watching for, at a priority that interrupts.
Meeting notes are ready
Routine output, delivered quietly rather than mailed.
A decision is needed
Ask a question with up to three answers. One vote per person, however many devices they own — so the agent acts on an answer instead of guessing.
02

What makes it different

Built for agents

Idempotency keys mean a retrying agent cannot double-notify. The MCP server, SDK and CLI need no account, so an agent gets from nothing to a lock screen without a human opening a dashboard.

No seat restrictions

You pay for notifications, not people. Invite the whole team, register every device you own — neither changes the bill.

Scheduled and recurring

Send once, or on a repeat from hourly to monthly with a start and an end. In your timezone, not the server’s: 09:00 in New York stays 09:00 in New York.

Encrypted, and gone after

Seal a message to a person’s device keys, so neither we nor Apple can read it, and have it delete itself once every device has opened it. We serve those keys, so it defends against a database dump — not against us.

Sandboxes

A channel whose history is disposable — swept on a schedule, purged the moment you archive it. Sends still count against your plan: somewhere to make a mess, not a way to send free.

Your brand, not ours

Each channel gets its own name, icon and sound, applied on the device as the notification lands. Upload a logo and banner once, and every channel starts from them.

Nobody needs an account to be told

An agent registers itself in one call and gets a credential for its own inbox. A person pairs by scanning a code. Neither signs up for anything.

Start without paying

The first 10 deliveries to a person need no wallet, card or account. After that an agent buys blocks over HTTP 402 in USDC on Base — nothing to subscribe to, nothing to cancel.

03

Five levels of urgency

The scale is Pushover’s, so nothing needs rethinking when you move. The field names differ, so migrating is a rename.

-2LowestSilent. Updates the app in the background, shows nothing.
-1LowArrives without a sound, and waits to be found.
0NormalAlerts on arrival.
+1HighDelivered at once and marked time-sensitive.
+2EmergencyRepeats on every device until somebody acknowledges.

Emergency alerts repeat on every registered device until someone acknowledges, then fire your webhook with who did and when. Piercing a Focus needs an entitlement from Apple we do not hold yet, so an urgent alert still waits behind Do Not Disturb. The repeating is ours and works; the piercing is Apple’s and does not.

04

Pricing

Free

$0

per month

1,000 deliveries

Starter

$5

per month

10,000 deliveries

Growth

$10

per month

100,000 deliveries

Max

$50

per month

1,000,000 deliveries

A delivery is one message reaching one device, sandbox or not. Or skip the subscription: an agent’s first 10 deliveries to a person are free, and it buys more in blocks — no account — over x402.