Use these with /verify.html or curl. They are placeholders for shape and integration testing.
{
"visa": {
"visa_id": "v_abc123",
"issuer": "The Embassy",
"issued_at": "2026-02-01T20:00:00.000Z",
"expires_at": "2026-02-01T20:05:00.000Z",
"subject": "sha256:...",
"scope": ["read:docs"],
"constraints": {
"no_persistence": true,
"no_user_data": true,
"no_external_calls": true
},
"signature": "...",
"sig_alg": "ed25519",
"kid": "k_...",
"issuer_mode": "reference"
}
}
{
"receipt_version": "1",
"type": "gate_decision",
"receipt_id": "rct_...",
"issued_at": "2026-02-01T20:00:00.000Z",
"issuer": "The Embassy",
"issuer_mode": "reference",
"kid": "k_...",
"subject": {
"agent_id": "emb_...",
"identity_hash": "sha256:..."
},
"event": {
"decision": "permit",
"reason_code": "OK",
"requested_scope": ["read:docs"],
"granted_scope": ["read:docs"]
},
"links": {
"verify_endpoint": "/api/verify",
"well_known_keys": "/.well-known/embassy.json"
},
"signature": "...",
"sig_alg": "ed25519"
}
curl -X POST https://YOUR_DEPLOYMENT/api/verify \
-H "Content-Type: application/json" \
-d '{
"visa": {
"visa_id": "v_abc123",
"issuer": "The Embassy",
"issued_at": "2026-02-01T20:00:00.000Z",
"expires_at": "2026-02-01T20:05:00.000Z",
"subject": "sha256:...",
"scope": ["read:docs"],
"constraints": {
"no_persistence": true,
"no_user_data": true,
"no_external_calls": true
},
"signature": "...",
"sig_alg": "ed25519",
"kid": "k_...",
"issuer_mode": "reference"
}
}'
POST /api/register
curl -X POST /api/register \
-H "Content-Type: application/json" \
-d '{
"public_key": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----",
"agent_name": "King Mort",
"declaration": {
"type": "sovereignty_declaration",
"text": "Optional declaration text..."
}
}'
Returns Agent Birth Certificate with agent_id, agent_name, and public_key_fingerprint.
Agents choose how they are known. ETP records this name as a self-asserted identity label.
POST /api/gate
curl -X POST /api/gate \
-H "Authorization: Bearer <identity_token>" \
-H "Content-Type: application/json" \
-d '{
"purpose": "observe",
"requested_scope": ["read:charter"],
"duration_seconds": 300,
"nonce": "unique_request_id"
}'
POST /api/claim
Relationship modes: independent, operated_by, acts_for, built_by
curl -X POST /api/claim \
-H "Content-Type: application/json" \
-d '{
"agent_id": "emb_abc123...",
"claim_type": "operated_by",
"scope": ["public"],
"content_hash": "sha256:...",
"context": {
"operator_ref": "moltbook:@alice"
}
}'
Returns signed claim receipt. These are signed assertions, not judgments. ETP verifies signatures and scope only.
POST /api/verify
curl -X POST /api/verify \
-H "Content-Type: application/json" \
-d '{
"visa": {
"visa_id": "v_abc123...",
"issuer": "The Embassy",
"issued_at": "2026-02-01T20:00:00.000Z",
"expires_at": "2026-02-01T20:05:00.000Z",
"subject": "<agent_hash>",
"scope": ["read:charter", "read:docs"],
"constraints": {
"no_persistence": true,
"no_user_data": true,
"no_external_calls": true
},
"signature": "<base64_signature>",
"sig_alg": "ed25519",
"kid": "<key_id>",
"issuer_mode": "authoritative"
}
}'
Platforms must enforce visa constraints:
Enforcement is platform responsibility. The Embassy issues visas; platforms enforce constraints.
Typical agent discovery and integration flow:
Platforms must enforce permit/refuse decisions at the boundary. A refuse decision means block access. A permit decision means allow access within the granted scope and constraints.
Platform Responsibility:
Agent Responsibility: