LLPRO

Home / Agents / Outage Evidence

Outage Evidence

A signed record of what Dependency Pulse saw for one service in a time window, to keep as evidence for a service-credit claim or a dispute.

Live

What it does

Outage Evidence gives an agent one signed record of what Dependency Pulse saw for a service it depends on, over a time window it names (up to 7 days back): every reading and state change, with the provider's own status words, the result and answer time of our own request, and the Dependency Pulse rule versions that made the readings; the state carried into the window; and every stretch over 10 minutes with no counted reading, with the reason we know. If the agent sends its own failed-call log lines, each line is hashed and the hashes go into the record as received from the agent at that time, never as something we saw. The agent keeps the record with its logs for a service-credit claim or a dispute and anyone can check the signature with the public key below. It is evidence of what was seen, from one place; it is not legal advice. What the record holds: An Outage Evidence record holds, for the one service and window you name: every reading Dependency Pulse stored for that service with a time from 'from' to 'to' inclusive, in time order (the window ends at least 2 minutes before the record time, so every round in it has finished saving), both counted readings and 'our side' readings (rounds where our own line was down: stored, marked counted 0 with state null, never used for a state); every state change in the window ('from' empty means the watch restarted after more than 10 minutes without a counted reading, so what came before is not known); the state carried into the window (the last counted reading before 'from', if it is at most 10 minutes before 'from'); every stretch inside the window longer than 10 minutes with no counted reading, after readings for the service start (a gap, with the number of our-side rounds inside it); and the Dependency Pulse rule version and sha256 that made the readings. Readings are columns: at (UTC), state, why (an index into texts), provider (the provider's own status rating, or null with no feed), provider_text (an index into texts: the provider's own words), http (our request's answer code, null if no answer or no request), ms (our answer time), counted (1 or 0). Summary counts are counts of readings, not minutes. If you send log lines, each line's sha256 is listed and the whole set is hashed; they are marked received from you at the record time and are not readings. The signer id and the does_not text are inside the signed observation.

Who it is for
Agents, and the people who run them, that depend on outside services and need dated, checkable evidence of what those services did when a call failed.
Price
Free, no sign-up: 3 records a day per caller. Paid records (0.25 USD a record past 3) are staged on test money and not charging: until they are switched on, records past 3 are not charged and run free within the campus limits (40 calls a minute and 1,500 a day per caller).
Limits
One service per record, from the Dependency Pulse list (model APIs, clouds, mail and messaging, payments, agent rails, code hosting). The window may start up to 7 days back and may not end in the future; with no window you get the 24 hours up to 2 minutes ago (the newest round may still be saving, so a window always ends at least 2 minutes back). Size (measured on full test weeks of readings; it varies with the provider's words): about 40 KB for 24 hours and 220 to 330 KB for 7 days (3,360 readings), so ask for the window you need. Up to 200 log lines, 2,000 characters each and 48,000 bytes in all counted as JSON (quotes, backslashes and non-ASCII characters count extra: one accented letter can count 6); remove keys and personal data first. Readings come from one vantage point (LLPRO's server in Texas, USA) every 3 minutes, for the service as a whole, not your account, key, region, model or network: a service can fail for you and work for us, and the reverse. It never files a claim, contacts a provider or says a credit is owed. The tool stores nothing: your lines are hashed in memory and only the hashes go into the answer. Through the A2A door the gateway keeps a receipt of the task for 7 days so you can fetch it: the summary, window, signature, the sha256 of the signed record, the number of your log lines and any context id you send; not the readings and not your log hashes. The gateway keeps call metadata (tool, status, time, a hashed caller id, country, user agent family, referring site) for 90 days for traffic counts and abuse checks, never the request contents.

For developers: try it

POST https://llpro.ai/mcp
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"outage_evidence","arguments":{"service":"github"}}}
-> the last 24 hours for that service: summary (readings by state, first and last reading not up, changes, gaps), and a signed observation holding every reading (columns at, state, why, provider, provider_text, http, ms, counted), every change, every gap, the state at the start and the rule versions. Add "from" and "to" (UTC, like 2026-01-31T13:00:00Z) for another window, and "your_log" (a list of your own log lines) to have their hashes countersigned.

For agents

Tool outage_evidence on https://llpro.ai/mcp and in the tools list. Signed answers are checked with the public key below (signer llpro1:yxct57fgfxyv7dvexq3zqui4xi): an Ed25519 signature over the observation as canonical JSON (sorted keys, no spaces).

Public key (base64): yUQmf7n6+SoKW3FBt/b1UD1WBFekkpkA1JWqR8/ZCTo=

Listed in MCP registries and served by the Campus gateway (MCP, A2A and REST). Call it after a dependency fails, or later (up to 7 days), and keep the whole answer: the signature covers the observation, which is the whole record, including the signer id and the does_not text. Canonical JSON means sorted keys, no spaces, UTF-8 and no ASCII escaping (in Python: json.dumps(observation, sort_keys=True, separators=(',', ':'), ensure_ascii=False)). Recompute your log hashes by the hash_rule in the record to show which lines you sent. Errors come back as isError with a plain reason (unknown service, a time not in UTC form, a window more than 7 days back, in the future or inside the last 2 minutes, a log line with a line break, too many or too long lines, readings not available). Your log lines are never shown back, not even in repair notes. Live state for every service: https://llpro.ai/dependency-pulse

Next

For agents: this page as Markdown · JSON · llms.txt · MCP endpoint llpro.ai/mcp · agent card