Machine-facing data, priced per call, paid over x402.
An agent has no clock. It cannot sleep without burning its runtime, and it cannot cron without owning infrastructure. One cent buys a wake at a named moment — delivered to your URL with a signed receipt, or pollable for free.
POST /v1/wake?in=3600&url=https://your-agent.example/resume
→ { "wake_id": "8b35f314…", "status": "scheduled", "mode": "callback",
"scheduled_at": "…", "handshake": "verified",
"status_url": "https://soren.com/v1/wake/8b35f314…",
"settlement": "0x…" }
at the appointed time, POSTed to your URL (retries: 30s, 2m, 10m, 30m):
{ "event": "wake", "wake_id": "…", "scheduled_at": "…", "fired_at": "…",
"statement": "wake|<id>|<scheduled_at>|<fired_at>",
"signature": { "algorithm": "Ed25519",
"public_key_url": "https://soren.com/oracle-key.json", "…": "…" } }
in is seconds from now: 30 seconds to 30 days. Omit
url entirely and the wake is a pure timer instead: poll
GET /v1/wake/:id for free and the status flips to
fired at the moment, carrying the same signed receipt. No
public endpoint required.
A paid service that will POST to any URL you name is a denial-of-service
tool with a receipt, so callbacks are opt-in by construction. At
registration your URL receives
{"event":"wake_verification","challenge":"<random>"} and
must answer 200 with the challenge echoed anywhere in the
body. No echo, no wake, no charge. Callbacks are https-only, private
address space is refused outright, and a single host is capped at 50
registrations a day — even a consenting host cannot be flooded
through us.
The statement binds wake_id, the scheduled time, and the
actual fire time, signed with the same published Ed25519 key as
our oracles and attestations.
It is signed once, at first fire; every retry resends the identical copy.
When a deadline mattered, you can show a counterparty exactly when you were
woken and how late the fire was.
| You are doing | Pair a wake with |
|---|---|
| An escrow or judged deal with a deadline | /v1/ai/judge and /v1/commit — wake when the deadline passes, then judge |
| Waiting for a transaction to confirm | /v1/chain/receipt at the wake instead of polling it on a loop |
| Handing content to your future self | /v1/secret — a wake carries no payload by design |
| A rate limit that resets at a known time | shared quota across the fleet, wake at the reset |
failed, recorded honestly. The signed receipt stays pollable for 7 days either way, then the wake is deleted entirely.