{"openapi":"3.1.0","info":{"title":"Payguard merchant control-plane API","version":"0.1.0","description":"Tenant-scoped merchant operations for x402 route policy revisions, attempts, evidence, remediation, and contribution reporting. Browser mutations require the payguard_session cookie plus x-payguard-csrf."},"servers":[{"url":"/"}],"tags":[{"name":"Authentication"},{"name":"Organizations"},{"name":"Routes"},{"name":"Attempts"},{"name":"Economics"}],"components":{"securitySchemes":{"sessionCookie":{"type":"apiKey","in":"cookie","name":"payguard_session"},"csrfHeader":{"type":"apiKey","in":"header","name":"x-payguard-csrf"}},"parameters":{"organization":{"name":"x-payguard-organization","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"An organization in the authenticated wallet's membership set."}}},"paths":{"/api/auth/nonce":{"post":{"tags":["Authentication"],"summary":"Create a one-time EIP-4361 message","operationId":"issueSiweNonce","responses":{"201":{"description":"SIWE message created"}}}},"/api/auth/verify":{"post":{"tags":["Authentication"],"summary":"Verify the explicit wallet signature and create a session","operationId":"verifySiwe","responses":{"200":{"description":"Session cookies set"}}}},"/api/auth/session":{"get":{"tags":["Authentication"],"summary":"Read the current session and memberships","operationId":"getSession","responses":{"200":{"description":"Current session state"}}}},"/api/organizations":{"get":{"tags":["Organizations"],"security":[{"sessionCookie":[]}],"operationId":"listOrganizations","responses":{"200":{"description":"Memberships"}}},"post":{"tags":["Organizations"],"security":[{"sessionCookie":[],"csrfHeader":[]}],"operationId":"createOrganization","responses":{"201":{"description":"Organization and owner membership created atomically"}}}},"/api/routes":{"get":{"tags":["Routes"],"security":[{"sessionCookie":[]}],"parameters":[{"$ref":"#/components/parameters/organization"}],"operationId":"listRoutes","responses":{"200":{"description":"Routes with active and latest immutable policy snapshots"}}},"post":{"tags":["Routes"],"security":[{"sessionCookie":[],"csrfHeader":[]}],"parameters":[{"$ref":"#/components/parameters/organization"}],"operationId":"createRoute","responses":{"201":{"description":"Route and revision one created"}}}},"/api/routes/{routeId}/revisions":{"get":{"tags":["Routes"],"security":[{"sessionCookie":[]}],"operationId":"listRouteRevisions","responses":{"200":{"description":"Immutable route policy revisions"}}},"post":{"tags":["Routes"],"security":[{"sessionCookie":[],"csrfHeader":[]}],"operationId":"createRouteRevision","responses":{"201":{"description":"New immutable revision"}}}},"/api/routes/{routeId}/activate":{"post":{"tags":["Routes"],"security":[{"sessionCookie":[],"csrfHeader":[]}],"operationId":"activateRouteRevision","responses":{"200":{"description":"Existing revision selected as active"}}}},"/api/attempts":{"get":{"tags":["Attempts"],"security":[{"sessionCookie":[]}],"parameters":[{"$ref":"#/components/parameters/organization"}],"operationId":"listAttempts","responses":{"200":{"description":"Keyset-paginated, secret-free attempt summaries"}}}},"/api/attempts/{attemptId}/evidence":{"get":{"tags":["Attempts"],"security":[{"sessionCookie":[]}],"operationId":"getAttemptEvidence","responses":{"200":{"description":"Hash-chained transition evidence"}}}},"/api/attempts/{attemptId}/remediation":{"post":{"tags":["Attempts"],"security":[{"sessionCookie":[],"csrfHeader":[]}],"operationId":"requestAttemptRemediation","responses":{"202":{"description":"Idempotent operator remediation request"}}}},"/api/exports/attempts.csv":{"get":{"tags":["Attempts"],"security":[{"sessionCookie":[]}],"operationId":"exportAttemptsCsv","responses":{"200":{"description":"Formula-safe CSV, capped at 10,000 rows"}}}},"/api/economics":{"get":{"tags":["Economics"],"security":[{"sessionCookie":[]}],"operationId":"getEconomics","responses":{"200":{"description":"Exact-atomic contribution ledger summary and pricing hypotheses"}}}}}}