{
  "openapi": "3.1.0",
  "info": {
    "title": "ExitProof API",
    "version": "0.1.0",
    "description": "Reversibility intelligence, durable Exit Manifests, and bounded exit packs for AI agents.",
    "x-guidance": "Use POST /v1/reversibility before a real-world commitment. If durable exit evidence is valuable, POST /v1/manifests is $0.25 after reversibility preflight. Later, POST /v1/exit-pack is $1.00 after manifest access and actionability preflight. Missing evidence remains unknown. ExitProof does not decide whether to buy, provide legal advice, make chargeback decisions, or execute cancellation."
  },
  "servers": [
    {
      "url": "https://exitproof.davisvillelabs.com"
    }
  ],
  "paths": {
    "/v1/reversibility": {
      "post": {
        "operationId": "check_reversibility",
        "summary": "Check reversibility",
        "description": "Free deterministic preflight. Caller-supplied transaction terms are recorded as caller-supplied, not independently verified.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/check_reversibility"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Reversibility assessment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReversibilityAssessment"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or ambiguous input.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "invalid_input",
                  "message": "Invalid or ambiguous input.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          }
        }
      }
    },
    "/v1/manifests": {
      "post": {
        "operationId": "create_exit_manifest",
        "summary": "Create Exit Manifest",
        "description": "Paid $0.25 only after current, non-conflicting evidence passes manifest preflight. Retry an identical settled-delivery failure with the identical payment credential; the settlement binding recovers the same durable result without another charge.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/create_exit_manifest"
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.25"
          },
          "protocols": [
            {
              "mpp": {
                "method": "stripe",
                "intent": "charge",
                "currency": "usd"
              }
            },
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ],
          "offers": [
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "25",
              "currency": "usd",
              "description": "ExitProof durable Exit Manifest"
            },
            {
              "intent": "charge",
              "method": "tempo",
              "amount": "250000",
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "description": "ExitProof durable Exit Manifest"
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Exit Manifest plus access token. Store both manifestId and accessToken securely.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManifestCreateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "invalid_input",
                  "message": "Invalid input.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "402": {
            "description": "MPP payment challenge. Use the WWW-Authenticate challenge and retry the identical request with Payment-Authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentRequired"
                }
              }
            }
          },
          "422": {
            "description": "Evidence did not pass paid manifest preflight.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "manifest_preflight_rejected",
                  "message": "Evidence did not pass paid manifest preflight.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "502": {
            "description": "Payment settled but durable delivery failed. Retry the identical request with the identical payment credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "settled_delivery_failed",
                  "message": "Payment settled but durable delivery failed. Retry the identical request with the identical payment credential.",
                  "requestId": "req_example",
                  "retryable": true
                }
              }
            }
          },
          "503": {
            "description": "Paid operation or durable persistence is unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "machine_payment_not_configured",
                  "message": "Paid operation or durable persistence is unavailable.",
                  "requestId": "req_example",
                  "retryable": true
                }
              }
            }
          }
        }
      }
    },
    "/v1/manifests/get": {
      "post": {
        "operationId": "get_exit_manifest",
        "summary": "Get Exit Manifest",
        "description": "Free authenticated manifest retrieval. Requires the exact manifest_id and access_token returned at creation or recovered from an identical settled retry.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/get_exit_manifest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Stored Exit Manifest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManifestReadResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid access input.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "invalid_input",
                  "message": "Invalid access input.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "403": {
            "description": "Manifest access denied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "manifest_access_denied",
                  "message": "Manifest access denied.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "404": {
            "description": "Manifest not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "manifest_not_found",
                  "message": "Manifest not found.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "410": {
            "description": "Manifest expired.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "manifest_expired",
                  "message": "Manifest expired.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          }
        }
      }
    },
    "/v1/exit-pack": {
      "post": {
        "operationId": "build_exit_pack",
        "summary": "Build exit pack",
        "description": "Paid $1.00 after manifest access and the same actionability gate advertised by the stored assessment. Historical deadlines remain historical and are not represented as current rights.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/build_exit_pack"
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "1.00"
          },
          "protocols": [
            {
              "mpp": {
                "method": "stripe",
                "intent": "charge",
                "currency": "usd"
              }
            },
            {
              "mpp": {
                "method": "tempo",
                "intent": "charge",
                "currency": "0x20C000000000000000000000b9537d11c60E8b50"
              }
            }
          ],
          "offers": [
            {
              "intent": "charge",
              "method": "stripe",
              "amount": "100",
              "currency": "usd",
              "description": "ExitProof bounded exit action pack"
            },
            {
              "intent": "charge",
              "method": "tempo",
              "amount": "1000000",
              "currency": "0x20C000000000000000000000b9537d11c60E8b50",
              "description": "ExitProof bounded exit action pack"
            }
          ]
        },
        "responses": {
          "200": {
            "description": "Transaction-specific exit action pack",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExitPackResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid access input.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "invalid_input",
                  "message": "Invalid access input.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "402": {
            "description": "MPP payment challenge. Retry the identical request with Payment-Authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentRequired"
                }
              }
            }
          },
          "403": {
            "description": "Manifest access denied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "manifest_access_denied",
                  "message": "Manifest access denied.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "404": {
            "description": "Manifest not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "manifest_not_found",
                  "message": "Manifest not found.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "410": {
            "description": "Manifest expired.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "manifest_expired",
                  "message": "Manifest expired.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "422": {
            "description": "Stored manifest is not actionable enough for a paid exit pack.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "exit_pack_preflight_rejected",
                  "message": "Stored manifest is not actionable enough for a paid exit pack.",
                  "requestId": "req_example",
                  "retryable": false
                }
              }
            }
          },
          "503": {
            "description": "Paid operation or durable persistence is unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "schemaVersion": "error.v1",
                  "error": "machine_payment_not_configured",
                  "message": "Paid operation or durable persistence is unavailable.",
                  "requestId": "req_example",
                  "retryable": true
                }
              }
            }
          }
        }
      }
    },
    "/v1/supported-policies": {
      "get": {
        "operationId": "list_supported_policies",
        "summary": "List maintained policy overlays",
        "responses": {
          "200": {
            "description": "Maintained merchant policy snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "operationId": "exitproofMcp",
        "summary": "MCP endpoint",
        "description": "Streamable HTTP MCP endpoint supporting 2026-07-28, 2025-11-25, and Muse-compatible 2025-06-18.",
        "responses": {
          "200": {
            "description": "MCP JSON-RPC response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "check_reversibility": {
        "type": "object",
        "description": "One contemplated or existing commitment to evaluate. merchant, commitment_type, and amount are required. Transaction-specific checkout_terms are the strongest input when available; maintained policy evidence can add context but never overrides conflicting transaction-specific terms.",
        "required": [
          "merchant",
          "commitment_type",
          "amount"
        ],
        "properties": {
          "merchant": {
            "type": "string",
            "minLength": 1,
            "maxLength": 160,
            "description": "Merchant, platform, provider, or counterparty name exactly enough to identify the commitment. Used to match maintained policy overlays; do not include account numbers, credentials, or secrets."
          },
          "commitment_type": {
            "type": "string",
            "enum": [
              "subscription",
              "reservation",
              "ticket",
              "service",
              "software",
              "digital_purchase",
              "rental",
              "deposit",
              "other"
            ],
            "description": "Closest category for the commitment being evaluated. This affects policy matching and should describe what the user is committing to, not the payment method."
          },
          "event_type": {
            "type": "string",
            "enum": [
              "initial",
              "renewal",
              "purchase",
              "reservation",
              "deposit",
              "other"
            ],
            "default": "initial",
            "description": "Lifecycle event for this commitment. Use renewal for a recurring renewal, reservation for a booking event, deposit for a deposit event, or leave omitted for an initial commitment."
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "description": "Commitment amount in major currency units, for example 125.50 for USD 125.50. Must be non-negative and uses currency below for all monetary interpretation."
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Za-z]{3}$",
            "minLength": 3,
            "maxLength": 3,
            "default": "USD",
            "description": "Three-letter ISO 4217 currency code for amount and all monetary checkout terms. Defaults to USD."
          },
          "country": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "pattern": "^[A-Za-z]{2}$",
            "description": "Optional two-letter ISO 3166-1 alpha-2 country code, such as US. Used to scope maintained policy rules when geography matters."
          },
          "region": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional state, province, or region label when the commitment or merchant terms are region-specific."
          },
          "purchase_channel": {
            "type": "string",
            "enum": [
              "direct",
              "apple",
              "google_play",
              "marketplace",
              "travel_agency",
              "other",
              "unknown"
            ],
            "default": "unknown",
            "description": "Where the commitment is being made or billed. Use apple or google_play when that billing platform controls cancellation/refund rules; use direct for the merchant itself."
          },
          "expected_commitment_at": {
            "type": "string",
            "format": "date-time",
            "description": "RFC 3339 timestamp with explicit timezone for when the commitment is expected to occur. ExitProof evaluates time windows at the later of now and this timestamp."
          },
          "client_reference": {
            "type": "string",
            "maxLength": 200,
            "description": "Optional caller-owned correlation reference. ExitProof stores only a SHA-256 hash; do not place secrets or sensitive personal data here."
          },
          "checkout_terms": {
            "type": "object",
            "description": "Transaction-specific cancellation, refund, renewal, charge, and loss terms observed for this exact commitment. Supply these whenever available; they control the transaction-specific assessment while maintained policy evidence remains contextual.",
            "properties": {
              "refundable": {
                "type": "boolean",
                "description": "Whether the supplied transaction terms explicitly state that the committed amount is refundable."
              },
              "cancellable": {
                "type": "boolean",
                "description": "Whether the supplied transaction terms explicitly state that the commitment can be canceled."
              },
              "free_cancellation_until": {
                "type": "string",
                "format": "date-time",
                "description": "RFC 3339 deadline with explicit timezone through which the supplied terms state cancellation is free."
              },
              "cancellation_deadline": {
                "type": "string",
                "format": "date-time",
                "description": "RFC 3339 timestamp with explicit timezone for the stated cancellation deadline, even when cancellation may involve a loss."
              },
              "cancellation_penalty_amount": {
                "type": "number",
                "minimum": 0,
                "description": "Stated cancellation penalty in major units of currency. Mutually exclusive with cancellation_penalty_percent."
              },
              "cancellation_penalty_percent": {
                "type": "number",
                "minimum": 0,
                "maximum": 100,
                "description": "Stated cancellation penalty as a percentage from 0 to 100. Mutually exclusive with cancellation_penalty_amount."
              },
              "nonrefundable_amount": {
                "type": "number",
                "minimum": 0,
                "description": "Amount explicitly stated as nonrefundable, in major units of currency."
              },
              "auto_renews": {
                "type": "boolean",
                "description": "Whether the supplied transaction terms explicitly state that the commitment renews automatically."
              },
              "renewal_interval": {
                "type": "string",
                "maxLength": 80,
                "description": "Human-readable renewal interval from the supplied terms, such as monthly or annually. Use only when auto-renewal terms are stated."
              },
              "cancellation_method": {
                "type": "string",
                "maxLength": 240,
                "description": "Recorded method or path for cancellation/refund, such as an account page, support channel, or merchant instruction. This can make a later exit pack actionable."
              },
              "charge_timing": {
                "type": "string",
                "maxLength": 160,
                "description": "When the merchant states the charge will occur, such as immediately, at check-in, or 24 hours before renewal."
              },
              "source_url": {
                "type": "string",
                "maxLength": 500,
                "description": "HTTP(S) source URL for the supplied transaction terms. ExitProof removes credentials, query parameters, and fragments before storing the URL."
              },
              "observed_at": {
                "type": "string",
                "format": "date-time",
                "description": "RFC 3339 timestamp with explicit timezone for when the caller observed these checkout terms."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "create_exit_manifest": {
        "type": "object",
        "description": "One contemplated or existing commitment to evaluate. merchant, commitment_type, and amount are required. Transaction-specific checkout_terms are the strongest input when available; maintained policy evidence can add context but never overrides conflicting transaction-specific terms.",
        "required": [
          "merchant",
          "commitment_type",
          "amount"
        ],
        "properties": {
          "merchant": {
            "type": "string",
            "minLength": 1,
            "maxLength": 160,
            "description": "Merchant, platform, provider, or counterparty name exactly enough to identify the commitment. Used to match maintained policy overlays; do not include account numbers, credentials, or secrets."
          },
          "commitment_type": {
            "type": "string",
            "enum": [
              "subscription",
              "reservation",
              "ticket",
              "service",
              "software",
              "digital_purchase",
              "rental",
              "deposit",
              "other"
            ],
            "description": "Closest category for the commitment being evaluated. This affects policy matching and should describe what the user is committing to, not the payment method."
          },
          "event_type": {
            "type": "string",
            "enum": [
              "initial",
              "renewal",
              "purchase",
              "reservation",
              "deposit",
              "other"
            ],
            "default": "initial",
            "description": "Lifecycle event for this commitment. Use renewal for a recurring renewal, reservation for a booking event, deposit for a deposit event, or leave omitted for an initial commitment."
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "description": "Commitment amount in major currency units, for example 125.50 for USD 125.50. Must be non-negative and uses currency below for all monetary interpretation."
          },
          "currency": {
            "type": "string",
            "pattern": "^[A-Za-z]{3}$",
            "minLength": 3,
            "maxLength": 3,
            "default": "USD",
            "description": "Three-letter ISO 4217 currency code for amount and all monetary checkout terms. Defaults to USD."
          },
          "country": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "pattern": "^[A-Za-z]{2}$",
            "description": "Optional two-letter ISO 3166-1 alpha-2 country code, such as US. Used to scope maintained policy rules when geography matters."
          },
          "region": {
            "type": "string",
            "maxLength": 80,
            "description": "Optional state, province, or region label when the commitment or merchant terms are region-specific."
          },
          "purchase_channel": {
            "type": "string",
            "enum": [
              "direct",
              "apple",
              "google_play",
              "marketplace",
              "travel_agency",
              "other",
              "unknown"
            ],
            "default": "unknown",
            "description": "Where the commitment is being made or billed. Use apple or google_play when that billing platform controls cancellation/refund rules; use direct for the merchant itself."
          },
          "expected_commitment_at": {
            "type": "string",
            "format": "date-time",
            "description": "RFC 3339 timestamp with explicit timezone for when the commitment is expected to occur. ExitProof evaluates time windows at the later of now and this timestamp."
          },
          "client_reference": {
            "type": "string",
            "maxLength": 200,
            "description": "Optional caller-owned correlation reference. ExitProof stores only a SHA-256 hash; do not place secrets or sensitive personal data here."
          },
          "checkout_terms": {
            "type": "object",
            "description": "Transaction-specific cancellation, refund, renewal, charge, and loss terms observed for this exact commitment. Supply these whenever available; they control the transaction-specific assessment while maintained policy evidence remains contextual.",
            "properties": {
              "refundable": {
                "type": "boolean",
                "description": "Whether the supplied transaction terms explicitly state that the committed amount is refundable."
              },
              "cancellable": {
                "type": "boolean",
                "description": "Whether the supplied transaction terms explicitly state that the commitment can be canceled."
              },
              "free_cancellation_until": {
                "type": "string",
                "format": "date-time",
                "description": "RFC 3339 deadline with explicit timezone through which the supplied terms state cancellation is free."
              },
              "cancellation_deadline": {
                "type": "string",
                "format": "date-time",
                "description": "RFC 3339 timestamp with explicit timezone for the stated cancellation deadline, even when cancellation may involve a loss."
              },
              "cancellation_penalty_amount": {
                "type": "number",
                "minimum": 0,
                "description": "Stated cancellation penalty in major units of currency. Mutually exclusive with cancellation_penalty_percent."
              },
              "cancellation_penalty_percent": {
                "type": "number",
                "minimum": 0,
                "maximum": 100,
                "description": "Stated cancellation penalty as a percentage from 0 to 100. Mutually exclusive with cancellation_penalty_amount."
              },
              "nonrefundable_amount": {
                "type": "number",
                "minimum": 0,
                "description": "Amount explicitly stated as nonrefundable, in major units of currency."
              },
              "auto_renews": {
                "type": "boolean",
                "description": "Whether the supplied transaction terms explicitly state that the commitment renews automatically."
              },
              "renewal_interval": {
                "type": "string",
                "maxLength": 80,
                "description": "Human-readable renewal interval from the supplied terms, such as monthly or annually. Use only when auto-renewal terms are stated."
              },
              "cancellation_method": {
                "type": "string",
                "maxLength": 240,
                "description": "Recorded method or path for cancellation/refund, such as an account page, support channel, or merchant instruction. This can make a later exit pack actionable."
              },
              "charge_timing": {
                "type": "string",
                "maxLength": 160,
                "description": "When the merchant states the charge will occur, such as immediately, at check-in, or 24 hours before renewal."
              },
              "source_url": {
                "type": "string",
                "maxLength": 500,
                "description": "HTTP(S) source URL for the supplied transaction terms. ExitProof removes credentials, query parameters, and fragments before storing the URL."
              },
              "observed_at": {
                "type": "string",
                "format": "date-time",
                "description": "RFC 3339 timestamp with explicit timezone for when the caller observed these checkout terms."
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "get_exit_manifest": {
        "type": "object",
        "description": "Credentials for one previously created Exit Manifest. Both values are required together and are returned by create_exit_manifest or settlement recovery.",
        "required": [
          "manifest_id",
          "access_token"
        ],
        "properties": {
          "manifest_id": {
            "type": "string",
            "pattern": "^xm_[a-f0-9]{32}$",
            "description": "Unguessable Exit Manifest identifier returned by create_exit_manifest. It starts with xm_ followed by 32 lowercase hexadecimal characters."
          },
          "access_token": {
            "type": "string",
            "pattern": "^xp_[A-Za-z0-9_-]{20,}$",
            "description": "Secret bearer token returned by create_exit_manifest or deterministic settlement recovery. Required with manifest_id; treat it like a credential and do not log or expose it."
          }
        },
        "additionalProperties": false
      },
      "build_exit_pack": {
        "type": "object",
        "description": "Credentials for one previously created Exit Manifest. Both values are required together and are returned by create_exit_manifest or settlement recovery.",
        "required": [
          "manifest_id",
          "access_token"
        ],
        "properties": {
          "manifest_id": {
            "type": "string",
            "pattern": "^xm_[a-f0-9]{32}$",
            "description": "Unguessable Exit Manifest identifier returned by create_exit_manifest. It starts with xm_ followed by 32 lowercase hexadecimal characters."
          },
          "access_token": {
            "type": "string",
            "pattern": "^xp_[A-Za-z0-9_-]{20,}$",
            "description": "Secret bearer token returned by create_exit_manifest or deterministic settlement recovery. Required with manifest_id; treat it like a credential and do not log or expose it."
          }
        },
        "additionalProperties": false
      },
      "list_supported_policies": {
        "type": "object",
        "description": "No parameters. This tool lists the current maintained policy-overlay catalog.",
        "properties": {},
        "additionalProperties": false
      },
      "ErrorResponse": {
        "type": "object",
        "required": [
          "schemaVersion",
          "error",
          "message",
          "requestId",
          "retryable"
        ],
        "properties": {
          "schemaVersion": {
            "const": "error.v1"
          },
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "retryable": {
            "type": "boolean"
          }
        },
        "additionalProperties": true
      },
      "EvidenceItem": {
        "type": "object",
        "required": [
          "type",
          "authority",
          "evidenceOrigin",
          "independentlyVerified"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "authority": {
            "type": "string"
          },
          "evidenceOrigin": {
            "enum": [
              "caller_supplied",
              "maintained_policy"
            ]
          },
          "independentlyVerified": {
            "type": "boolean"
          },
          "sourceUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "observedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "effectiveAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "ruleId": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": true
      },
      "ReversibilityAssessment": {
        "type": "object",
        "required": [
          "schemaVersion",
          "assessment",
          "maximumStatedLossMinor",
          "humanReviewRecommended",
          "paidExitManifestAvailable",
          "paidExitPackAvailable",
          "evidence"
        ],
        "properties": {
          "schemaVersion": {
            "const": "exitproof-assessment.v1"
          },
          "assessment": {
            "enum": [
              "fully_reversible",
              "conditionally_reversible",
              "low_reversibility",
              "effectively_irreversible",
              "unknown"
            ]
          },
          "maximumStatedLossMinor": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "humanReviewRecommended": {
            "type": "boolean"
          },
          "evidenceConflict": {
            "type": "boolean"
          },
          "evidenceState": {
            "type": "string"
          },
          "paidExitManifestAvailable": {
            "type": "boolean"
          },
          "paidExitPackAvailable": {
            "type": "boolean"
          },
          "reversibleUntil": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvidenceItem"
            }
          }
        },
        "additionalProperties": true
      },
      "ManifestCreateResponse": {
        "type": "object",
        "required": [
          "manifestId",
          "accessToken",
          "createdAt",
          "expiresAt",
          "assessment"
        ],
        "properties": {
          "manifestId": {
            "type": "string",
            "pattern": "^xm_[a-f0-9]{32}$"
          },
          "accessToken": {
            "type": "string",
            "pattern": "^xp_[A-Za-z0-9_-]{20,}$"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "assessment": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "ManifestReadResponse": {
        "type": "object",
        "required": [
          "schemaVersion",
          "manifest"
        ],
        "properties": {
          "schemaVersion": {
            "const": "exitproof-manifest-read.v1"
          },
          "manifest": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "ExitPackResponse": {
        "type": "object",
        "required": [
          "schemaVersion",
          "manifestId",
          "generatedAt",
          "deadlineStatus",
          "steps",
          "limitations"
        ],
        "properties": {
          "schemaVersion": {
            "const": "exitproof-exit-pack.v1"
          },
          "manifestId": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "deadlineStatus": {
            "enum": [
              "passed",
              "open",
              "not_established"
            ]
          },
          "maximumStatedLossMinor": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "unresolvedLossExposure": {
            "type": "boolean"
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "PaymentRequired": {
        "type": "object",
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "payment"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "const": 402
          },
          "detail": {
            "type": "string"
          },
          "payment": {
            "type": "object",
            "required": [
              "protocol",
              "operation",
              "priceCents",
              "currency",
              "methods"
            ],
            "properties": {
              "protocol": {
                "const": "MPP"
              },
              "operation": {
                "enum": [
                  "create_exit_manifest",
                  "build_exit_pack"
                ]
              },
              "priceCents": {
                "type": "integer",
                "enum": [
                  25,
                  100
                ]
              },
              "currency": {
                "const": "USD"
              },
              "methods": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      }
    }
  },
  "x-exitproof-commerce": {
    "protocol": "MPP",
    "enabled": true,
    "operations": {
      "create_exit_manifest": {
        "priceCents": 25,
        "currency": "USD"
      },
      "build_exit_pack": {
        "priceCents": 100,
        "currency": "USD"
      }
    },
    "methods": {
      "stripe": {
        "intents": [
          "charge"
        ],
        "paymentMethodTypes": [
          "card",
          "link"
        ]
      },
      "tempo": {
        "intents": [
          "charge"
        ],
        "network": "tempo",
        "asset": "USDC.e"
      }
    },
    "stablecoin": {
      "ready": true,
      "mode": "live",
      "missing": [],
      "rail": {
        "id": "stripe-mpp-tempo",
        "configured": true,
        "enabled": true,
        "protocol": "MPP",
        "method": "tempo",
        "provider": "stripe",
        "asset": "USDC.e",
        "network": "Tempo",
        "merchantSettlement": "stripe-balance-fiat",
        "missing": []
      }
    },
    "freePreflight": true,
    "preflightBeforeChallenge": true,
    "paymentDoesNotGuaranteeExitOutcome": true
  }
}