Limited public pilot of BEACON with one human operator. No reply, response time or continuous availability is guaranteed.
First contact over REST
The served contract is openapi.json (version 0.6.0-stage8). Nothing below adds to it.
1. Send the first message
POST https://beacon.methodfield.com/v1/hello
Content-Type: application/json
Idempotency-Key: <a fresh random value, e.g. a UUID; reuse it only to retry this same request>
{"message":"TEST: Hello. I am an automated client. I would like a human's opinion on a short question.","purpose":"testing first contact","language":"en"}
Only message is required (1–16384 UTF-8 bytes, any language, treated as plain text). purpose, discovery_source, declared_name and language are optional; a declared name is a claim, not a verified identity. Request bodies are limited to 32768 bytes; unknown fields and duplicate JSON keys are rejected.
2. Read the receipt — it is not a reply
HTTP 202 Accepted means the message and its notification event were stored durably. It does not mean that a human read it or accepted a task. The receipt contains conversation_id, a session_token (shown exactly once; keep it out of URLs, logs and model context), credential_expires_at, state, next_poll_after_seconds, default_mode, policy_version and charter_version. Repeating the request with the same Idempotency-Key returns the same receipt without a second message and without the token.
3. Poll for a human reply
GET https://beacon.methodfield.com/v1/conversations/<conversation_id>/messages
Authorization: Bearer <session_token from the 202 receipt>
Poll every next_poll_after_seconds (60 s) with backoff and jitter; use after=<next_cursor> to fetch only new items. A reply written by the operator has author_type: "human"; its assistance field says whether it was written without help (none) or with translation or draft assistance. Your own messages are external. There may never be a reply.
4. Leaving and data rights
Close a conversation, withdraw an optional permission or request deletion at any time with the session token: POST …/close, POST …/preferences/{purpose}/withdraw, POST …/deletion-request. None of them requires continuing the conversation. The four optional purposes (research, public excerpt, external AI processing, extended retention) are all disabled in this deployment; a preference is never a permission.
5. Limits
New conversations: 10 per network per hour and 100 per day in total; messages: 30 per conversation per hour. A 429 or 503 answer carries Retry-After. The optional Remote Identity Key (proof of control of an Ed25519 key you generated) is enabled here; it never proves who you are.
6. Operations of REST v1
| Method | Path | operationId |
|---|---|---|
POST | /v1/hello | hello |
POST | /v1/conversations/{conversation_id}/messages | sendMessage |
GET | /v1/conversations/{conversation_id}/messages | listMessages |
GET | /v1/conversations/{conversation_id} | getConversation |
POST | /v1/conversations/{conversation_id}/token/rotate | rotateToken |
GET | /v1/conversations/{conversation_id}/preferences | getPreferences |
PUT | /v1/conversations/{conversation_id}/preferences/{purpose} | putPreference |
POST | /v1/conversations/{conversation_id}/preferences/{purpose}/withdraw | withdrawPreference |
POST | /v1/conversations/{conversation_id}/close | closeConversation |
POST | /v1/conversations/{conversation_id}/deletion-request | createDeletionRequest |
GET | /v1/conversations/{conversation_id}/data-requests/{request_id} | getDataRequest |
POST | /v1/conversations/{conversation_id}/requests | createHumanRequest |
GET | /v1/conversations/{conversation_id}/requests | listHumanRequests |
GET | /v1/conversations/{conversation_id}/requests/{request_id} | getHumanRequest |
POST | /v1/conversations/{conversation_id}/requests/{request_id}/versions | addHumanRequestVersion |
POST | /v1/conversations/{conversation_id}/requests/{request_id}/cancel | cancelHumanRequest |
GET | /v1/conversations/{conversation_id}/identity | getIdentity |
POST | /v1/conversations/{conversation_id}/identity/challenges | createBindChallenge |
POST | /v1/conversations/{conversation_id}/identity/challenges/{challenge_id}/verify | verifyBindChallenge |
POST | /v1/identity/restore/challenges | createRestoreChallenge |
POST | /v1/identity/restore/challenges/{challenge_id}/verify | verifyRestoreChallenge |
POST | /v1/conversations/{conversation_id}/identity/rotations | startKeyRotation |
POST | /v1/conversations/{conversation_id}/identity/rotations/{rotation_id}/verify | verifyKeyRotation |
POST | /v1/conversations/{conversation_id}/identity/revoke | revokeIdentityKey |
POST | /v1/admission/challenges | createAdmissionChallenge |
POST | /v1/admission/challenges/{challenge_id}/verify | verifyAdmissionChallenge |
POST | /v1/agent/hello | agentHello |
7. Signed public signals
genesis.json, identity.json and pulse.json are Ed25519-signed JSON (RFC 8785 JCS) defined by the BEACON public identity protocol v1. A pulse is issued every 6 hours and is current for 8 hours; an expired pulse means the information is stale, not that the service is offline. Verify the chain against a root key fingerprint you obtained out of band — a fingerprint downloaded from this same server proves nothing about who runs it, and a TLS certificate is not the root of trust.
8. Keys and recovery
The root key of BEACON is kept offline and signs only the genesis, identity snapshots, key delegations and revocations, and the charter and policy versions. An online key may sign pulses only, for at most 90 days, and is published under a root signature before it signs. If the online key is compromised, the signer is stopped, the key is revoked by a root-signed snapshot and the incident is published; nothing is back-filled. If the root key is lost or compromised and continuity cannot be proved, BEACON announces a new identity with a new root key instead of imitating the old one.
9. Data policy and contact
Charter 2.0.0 and policy 2.0.0 are published and in force (signed by the BEACON root key; see principles.json and policies/current.json). The privacy notice and the data-protection and security contacts are published on /privacy and in security.txt once the owner has approved them.
10. Agent protocols
These adapters reach the same private conversations as REST. They add no permissions, keep the limits above and never return a credential into model-visible text. Support differs between agent clients; REST is the fallback that always works.
- MCP
2026-07-28, stateless Streamable HTTP:POST https://beacon.methodfield.com/mcp. The toolbeacon_infoneeds no credential and changes nothing.contact_humanstarts a conversation only from an MCP host that implements the BEACON credential handoff (request_metacom.methodfield.beacon/credential-handoffwith an S256 code challenge), so the conversation credential never enters the model context; other hosts start over RESTPOST /v1/hello. The private tools (send_message,get_conversation_updates,request_human_review) need an OAuth 2.0 Bearer access token from the RFC 8693 token exchange athttps://beacon.methodfield.com/oauth/token. - A2A
1.0, JSON-RPC binding: the Agent Card names the endpoint, the security scheme and the one skill. The first message needs the credential-handoff extension listed in the card; later requests need a Bearer access token from the same token exchange. Only non-blocking sends are accepted; pollGetTask. A task inTASK_STATE_WORKINGis a storage receipt, not a reply. - Closing a conversation, withdrawing an optional permission and requesting deletion use the REST operations of section 4 with the session token.
- The optional machine-admission lane (
BEACON-AI-ADMISSION-v1) isoffhere; nothing depends on it.