@sigilum/api) is the backend control plane for namespace-based agent authorization. It manages namespace identities, authorization request lifecycles, DID resolution, and dashboard authentication.
Architecture Role
The API serves as the control plane in Sigilum’s architecture:- Control Plane (API): Manages identity, authorization state, and audit logs
- Data Plane (Gateway): Enforces approved claims and proxies requests to third-party APIs
- SDK Layer: Libraries that sign requests and verify authorization
Core Features
Namespace Identity
- Each namespace receives a unique DID:
did:sigilum:<namespace> - DID documents expose verification methods and approved service endpoints
- Ed25519 key pairs for agent signing
- WebAuthn passkey authentication for namespace owners
Authorization Lifecycle
The API manages a complete request-approve-revoke flow:- Submit: Service submits authorization request with signed headers
- Approve/Reject: Namespace owner reviews and approves/rejects
- Verify: Service checks authorization status via
/v1/verifyor claims feed - Revoke: Owner can revoke approved authorization at any time
DID Resolution
Expose namespace identity as W3C DID documents:/.well-known/did/{did}- DID document (application/did+json)/1.0/identifiers/{did}- DID resolution envelope- Includes verification methods, authentication relationships, and service endpoints
Webhook Delivery
- Durable webhook delivery for authorization lifecycle events
- Events:
request.submitted,request.approved,request.rejected,request.revoked - Exponential backoff with configurable retry window
- Terminal failure email alerts via Resend
Blockchain Audit Log
Optional on-chain audit trail:- Records authorization approvals and revocations
- Supports testnet (Sepolia) and mainnet (Base)
- Multiple modes:
queue,sync,memory,disabled
Deployment
The API is built on Cloudflare Workers using Hono framework with an adapter architecture:Runtime Stack
- Framework: Hono
- Platform: Cloudflare Workers (default adapter)
- Database: D1 (SQLite at edge)
- Durable Storage: Durable Objects (nonce replay protection)
- Queues: Webhook queue, blockchain queue
Required Bindings
Cloudflare Worker Bindings
Cloudflare Worker Bindings
Local Development
http://localhost:8787 by default.
API Endpoints
All protected endpoints require Sigilum signed headers:signature-inputsignaturesigilum-namespacesigilum-subjectsigilum-agent-keysigilum-agent-certcontent-digest(when request body is present)
Health
Authentication (Dashboard)
Dashboard Auth Endpoints
Dashboard Auth Endpoints
WebAuthn passkey-based authentication for namespace owners:
Namespaces & Verification
Authorization Requests
DID Resolution
Services
Service Management Endpoints
Service Management Endpoints
Configuration
The API uses environment variables for configuration. See the Environment Variables reference for full details.Core Configuration
Core Environment Variables
Core Environment Variables
| Variable | Required | Description |
|---|---|---|
JWT_SECRET | Yes | JWT signing key for dashboard sessions |
WEBAUTHN_ALLOWED_ORIGINS | Yes | Trusted WebAuthn origins |
ALLOWED_ORIGINS | No | CORS allowed origins (default: http://localhost:3000) |
ENVIRONMENT | Recommended | local, development, staging, production |
ADAPTER_PROVIDER | No | Adapter implementation (default: cloudflare) |
Blockchain Configuration
Blockchain Environment Variables
Blockchain Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
BLOCKCHAIN_MODE | No | disabled | queue, sync, memory, or disabled |
BLOCKCHAIN_NETWORK | Recommended | mainnet | testnet or mainnet |
BLOCKCHAIN_RPC_URL | No | Auto-detected | Override RPC endpoint |
SIGILUM_REGISTRY_ADDRESS | Required for writes | - | Contract address |
RELAYER_PRIVATE_KEY | Required for writes | - | Relayer transaction key |
disabled: Skip blockchain writes (fastest, local dev)sync: Execute inline (simple, low-volume)memory: In-memory async queue (testing)queue: Durable queue-backed writes (production)
Webhook Configuration
Webhook Environment Variables
Webhook Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
WEBHOOK_SECRET_ENCRYPTION_KEY | Yes | - | Encryption key for stored webhook secrets |
WEBHOOK_RETRY_WINDOW_HOURS | No | 24 | Retry window for failed deliveries |
WEBHOOK_FAILURE_THRESHOLD | No | 10 | Max retries before terminal failure |
WEBHOOK_ALERT_EMAIL_FROM | Optional | - | Sender address for failure alerts |
RESEND_API_KEY | Optional | - | Resend API key for email alerts |
WEBHOOK_ALLOW_PRIVATE_TARGETS | No | false | Allow private/internal webhook targets |
WEBHOOK_DNS_RESOLVER_URL | No | https://cloudflare-dns.com/dns-query | DNS-over-HTTPS resolver |
Limits & Policy
Policy Environment Variables
Policy Environment Variables
| Variable | Default | Description |
|---|---|---|
MAX_PENDING_AUTHORIZATIONS | 20 | Max pending requests per namespace |
MAX_API_KEYS_PER_SERVICE | 5 | Max active API keys per service |
MAX_WEBHOOKS_PER_SERVICE | 5 | Max active webhooks per service |
PENDING_AUTHORIZATION_EXPIRY_HOURS | 24 | Auto-expire window for pending requests |
CHALLENGE_EXPIRY_HOURS | 1 | Cleanup window for WebAuthn challenges |
Request Signing
The API requires RFC 9421 HTTP message signatures for protected endpoints.Required Signature Components
Nonce Replay Protection
The API uses Durable Objects for distributed nonce tracking:- Each nonce is valid for one request only
- Nonces are partitioned by namespace
- Replay window: 5 minutes
- Duplicate nonce returns
409 Conflict
Authentication Patterns
Service API Key
Services authenticate with API keys to:- Submit authorization requests (
POST /v1/claims) - Fetch approved claims feed (
GET /v1/namespaces/claims) - Verify agent authorization (
GET /v1/verify)
Namespace Owner (Dashboard)
Namespace owners authenticate with WebAuthn passkeys to:- Approve/reject/revoke authorization requests
- Manage services and webhooks
- View namespace claims
Testing
Local Seeding Endpoint
For local end-to-end testing only:ENABLE_TEST_SEED_ENDPOINT=trueENVIRONMENT=localortestSIGILUM_TEST_SEED_TOKENmust be set- Only accepts loopback hosts (
localhost,127.0.0.1,::1)
scripts/test-agent-simulator.mjs for local authorization state seeding.
Build & Test Commands
Integration Examples
Submit Authorization Request
Verify Authorization
Fetch Approved Claims
Related Documentation
- Gateway - Data plane enforcement
- CLI - Local development tools
- SDK Reference - Client libraries
- Environment Variables - Full configuration reference