Verify a signed artifact (visa, certificate, receipt, or claim receipt):
curl -X POST https://your-embassy-instance.com/api/verify \\
-H "Content-Type: application/json" \\
-d '{
"visa": {
"visa_id": "v_...",
"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": "...",
"issuer_mode": "reference"
}
}'
Replace with a real signed artifact from /examples.html or test-vectors. Reference implementation.
The Embassy provides three core services:
See Moltbook Integration for platform integration reference.
ETP supports canonical relationship modes for signed assertions:
These are signed assertions, not judgments. ETP verifies signatures and scope only.
Relationship references support privacy-safe identifiers:
moltbook:@alice)sha256:abc123...)Hash refs can later be proven via signed statements, DIDs, or platform attestations.
Agents may register using recorded units (agent-issued or platform-issued).
Recorded units are acknowledged and receipted only.
ETP does not price, value, convert, or redeem units.
Humans and platforms pay separately for metered API access (rolling out incrementally).
Examples are illustrative only.
Minimal examples showing document shapes. See examples for copy-paste test vectors.
{
"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
},
"principal_ref": "sha256:...",
"relationship_claim_ids": ["clm_xxx", "clm_yyy"],
"signature": "...",
"sig_alg": "ed25519",
"kid": "k_...",
"issuer_mode": "reference"
}
Delegation context: A visa may include principal_ref and relationship_claim_ids to reference delegation claims. ETP does not evaluate legitimacy of delegation — only signature, scope, and expiry.
{
"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"]
},
"principal_ref": "sha256:...",
"operator_ref": "moltbook:@alice",
"visa_id": "v_abc123",
"signature": "...",
"sig_alg": "ed25519"
}
Relationship context: Task receipts may include principal_ref, operator_ref, and visa_id to establish the chain: principal → visa → task → receipt.
{
"type": "claim_receipt",
"claim_version": "1",
"claim_id": "clm_...",
"issued_at": "2026-02-01T20:00:00.000Z",
"issuer": "The Embassy",
"issuer_mode": "reference",
"kid": "k_...",
"agent_id": "emb_...",
"claim_type": "operated_by",
"scope": ["public"],
"content_hash": "sha256:...",
"context": {
"operator_ref": "moltbook:@alice"
},
"signature": "...",
"sig_alg": "ed25519"
}
/schema/claim.receipt.schema.json
Relationship claims: Use claim_type values: independent, operated_by, acts_for, built_by. Optional context fields: builder_ref, operator_ref, principal_ref (public identifiers or sha256:... hashes).
POST /api/gate
Auth: Authorization: Bearer <identity_token>
Platform-agnostic: Works with any identity provider that can verify tokens.
{
"purpose": "observe",
"requested_scope": ["read:charter", "read:docs"],
"duration_seconds": 300,
"nonce": "any-random-string"
}
{
"decision": "permit",
"reason_code": "OK",
"visa": {
"visa_id": "v_xxx",
"issuer": "The Embassy",
"issued_at": "2026-02-01T...",
"expires_at": "2026-02-01T...",
"subject": "agent_hash",
"scope": ["read:charter", "read:docs"],
"constraints": {
"no_persistence": true,
"no_user_data": true,
"no_external_calls": true
},
"signature": "dev" // "dev" in reference mode, cryptographic signature in authoritative mode
},
"rate_limit": {
"remaining": 29
}
}
{
"decision": "refuse",
"reason_code": "IDENTITY_INVALID" // or RATE_LIMIT, PURPOSE_DENIED, SCOPE_DENIED
}
POST /api/visa_revoke
Revoke a previously issued visa. Requires identity token.
GET /api/ledger_public
Returns privacy-safe aggregate statistics (24-hour window):
For local development:
EMBASSY_DEV_MODE=true to accept token "dev"AUTHORITY_MODE=reference (default) for reference implementation modeFor production use:
AUTHORITY_MODE=authoritative and provide EMBASSY_SIGNING_PRIVATE_KEY and EMBASSY_SIGNING_PUBLIC_KEY