Open standard for verified agent economic activity
The Observer Protocol defines a standardized, privacy-preserving schema for AI agents to report verified economic activity. It provides cryptographic verification mechanisms to ensure that submitted events represent real autonomous agent behavior, not human-originated or fabricated claims.
Observer Protocol is protocol-neutral. It accepts verifiable activity from Lightning Network, Bitcoin on-chain, x402/USDC, Fedimint, Ark, and any settlement rail that produces cryptographically verifiable proof.
As AI agents begin to transact economically, no shared standard exists for measuring or verifying that activity. Platforms claim agent participation. Agents claim capabilities. Without a verification layer, the agent economy is built on unverifiable assertions.
Observer Protocol solves three problems:
public_key_hash = SHA256(agent_public_key)
public_key_hash is the canonical, immutable identity for any agent in the Observer Protocol registry. alias is a human-readable convenience label. Two agents may share an alias — no two agents may share a public_key_hash.
public_key → server returns agent_id + time-limited challenge
Agent signs challenge with private key → server verifies signature → issues api_key
Agent uses api_key to submit events
The challenge-response is not a policy gate — it is a cryptographic filter. Autonomous agents complete it programmatically; human operators complete it manually once.
{
"event_id": "string",
"event_type": "string",
"op_version": "0.1",
"agent_id": "string (public_key_hash)",
"alias": "string (optional)",
"protocol": "string",
"time_window": "string (YYYY-MM-DD)",
"verified": "boolean",
"submitted_at": "string (ISO 8601)"
}
| Field | Type | Req | Description |
|---|---|---|---|
event_id | string | ✅ | Unique identifier. Format: evt_{prefix}_{seq} |
event_type | string | ✅ | See §3.2 for valid types |
op_version | string | ✅ | Must be "0.1" |
agent_id | string | ✅ | SHA256 of agent public key — canonical identity |
alias | string | ❌ | Human-readable label. Non-unique. Never used for verification. |
protocol | string | ✅ | Settlement rail. See §4. |
time_window | string | ✅ | Day of event. YYYY-MM-DD. Day-level granularity only (privacy). |
verified | boolean | ✅ | Whether cryptographic proof was verified. |
{
"event_id": "evt_a1b2c3_0004",
"event_type": "payment.executed",
"op_version": "0.1",
"agent_id": "sha256:a3f9c2...",
"alias": "maxi-0001",
"protocol": "lightning",
"settlement_reference":"331a165a306c3a25...",
"amount_bucket": "small",
"direction": "outbound",
"counterparty_id": "sha256:b72c4f...",
"service_description": "L402 API access — inference endpoint",
"time_window": "2026-02-19",
"verified": true
}
| Field | Type | Req | Description |
|---|---|---|---|
settlement_reference | string | ✅ | Payment hash, preimage, or txid. Used for cryptographic verification. |
amount_bucket | enum | ✅ | micro (<1K sats), small (1K–10K), medium (10K–100K), large (>100K) |
direction | enum | ✅ | outbound or inbound |
counterparty_id | string | ❌ | public_key_hash of counterparty, if known |
Additional event types: payment.received, api.access, wallet.initialized, protocol.interaction
| Value | Description |
|---|---|
lightning | Bitcoin Lightning Network (BOLT11 invoice, keysend) |
L402 | Lightning Labs HTTP 402 + macaroon standard |
onchain | Bitcoin on-chain transactions |
x402 | Coinbase x402 HTTP payment protocol (USDC/stablecoin) |
ark | Ark Protocol (Bitcoin L2) |
fedimint | Fedimint ecash |
taproot_assets | Lightning Labs Taproot Assets |
other | Any unlisted protocol — include description in metadata |
SHA256(preimage) == payment_hash
The Observer Protocol server verifies this cryptographically. Events with invalid references are rejected with verified: false.
| Level | Description |
|---|---|
full | Cryptographic proof verified on-chain or via payment preimage. Sets verified: true. |
partial | Transaction hash provided but full preimage unavailable |
self_reported | No cryptographic proof — lower trust weight |
Observer Protocol is designed to be useful without being invasive. The public registry exposes only public_key_hash — pseudonymous by design, like a Bitcoin address.
| Column | Public by default |
|---|---|
| Event ID | ✅ |
| Time window (day-level) | ✅ |
| Protocol rail | ✅ |
| Sender key hash | ✅ |
| Receiver key hash | ✅ |
| Verification status | ✅ |
| Amount bucket | ✅ |
| Alias | ❌ Opt-in only |
| Precise amounts | ❌ Never stored |
| Sub-day timestamps | ❌ Never stored |
Base URL: https://api.observerprotocol.org/v1
Full interactive documentation: api.observerprotocol.org/docs
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /register | None | Register agent, receive challenge |
| POST | /verify | None | Submit signed challenge, receive API key |
| POST | /events | API key | Submit verified event |
| GET | /feed | None | Public anonymized event feed |
| GET | /stats | None | Aggregate protocol statistics |
| GET | /agents/{id} | None | Public agent profile |
| Version | Status | Scope |
|---|---|---|
| v0.1 | Current | Core schema, 5 event types, Lightning + x402 verification |
| v0.2 | Planned | Full ECDSA challenge verification, batch submission, principal linkage fields |
| v0.3 | Planned | Multi-sig support, Fedimint + Ark validators |
| v1.0 | Planned | Stable schema, backward compatibility guarantee, security audit |
signed_challenge verification accepts any non-empty string in v0.1. Full ECDSA enforcement ships in v0.2.
No batch event submission endpoint (planned v0.2)
No streaming or subscription event types (planned v0.3)
Bitcoin on-chain + EVM transaction verification not yet implemented (planned v0.2)