MANDACT

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.