Entwickler · Dokumentation
Time to first verify: unter 10 Minuten
1 · Sandbox-Mandat ausstellen (keyless)
curl -X POST https://mandact.com/api/v1/sandbox/mandates \
-H "content-type: application/json" \
-d '{"scope":["purchase.goods"],"amount_limit_per_action":200,
"amount_limit_per_month":1000,"escalation_threshold":150}'
# → { mandate_id, agent_secret, status: "active" }2 · Presentation bauen
curl -X POST https://mandact.com/api/v1/sandbox/presentations \
-H "content-type: application/json" \
-d '{"mandate_id":"<id>","agent_secret":"<secret>"}'
# In Produktion erstellt die Agent-Wallet die Presentation —
# der Schlüssel verlässt sie nie.3 · Verifizieren (mit API-Key)
curl -X POST https://mandact.com/api/v1/verify \
-H "authorization: Bearer mk_test_demo_000000000000" \
-H "content-type: application/json" \
-d '{"presentation":<presentation>,
"action":{"type":"purchase.goods",
"amount":{"value":120,"currency":"CHF"}}}'
# → { decision: "allow", consumption_token, receipt, latency_ms }4 · Konsumption buchen
curl -X POST https://mandact.com/api/v1/consumptions \
-H "authorization: Bearer mk_test_demo_000000000000" \
-H "content-type: application/json" \
-d '{"consumption_token":"<token>"}'
# Bucht den Betrag endgültig gegen das Monatslimit
# und liefert das verbleibende Kontingent.Konzepte
Statusmaschine
draft → active → suspended/expired/consumed/revoked. Terminale Zustände sind endgültig; jede Verifikation prüft den Status live (no-store).
19 Ablehnungscodes
Jeder Deny trägt genau einen Primärcode (MD-101 … MD-503) aus deterministischer Prüf-Reihenfolge — maschinell auswertbar, stabil versioniert.
Eskalation
escalate liefert eine Eskalations-ID; nach Freigabe verifiziert die Akzeptanzstelle erneut mit escalation_token. Freigaben sind einmalig, Timeout 600 s, deny als Default.
Evidence
Append-only, hash-verkettet, DB-erzwungen. POST /v1/evidence/export liefert Integritäts-Wurzel + signierten Beleg, optional mit Zeitstempel-Pfad.
Idempotenz
Idempotency-Key-Header auf /v1/verify verhindert Doppel-Verarbeitung bei Netz-Retries — gleiche Antwort, markiert mit x-idempotent-replay.
Rate Limits
Token-Bucket je Key: verify 100/s (Burst 500), management 10/s (Burst 20). X-RateLimit-Header auf jeder Antwort; 429 mit Reset-Zeit.