{
  "facilitator": "https://facilitator.openx402.ai",
  "verify_shape": {
    "isValid": "boolean",
    "invalidReason": "string",
    "invalidMessage": "string"
  },
  "settle_shape": {
    "success": "boolean",
    "errorReason": "string",
    "errorMessage": "string",
    "transaction": "string",
    "network": "string",
    "payer": "string"
  },
  "drift": [
    {
      "field": "errorMessage",
      "verify": null,
      "settle": "string"
    },
    {
      "field": "errorReason",
      "verify": null,
      "settle": "string"
    },
    {
      "field": "invalidMessage",
      "verify": "string",
      "settle": null
    },
    {
      "field": "invalidReason",
      "verify": "string",
      "settle": null
    },
    {
      "field": "isValid",
      "verify": "boolean",
      "settle": null
    },
    {
      "field": "network",
      "verify": null,
      "settle": "string"
    },
    {
      "field": "payer",
      "verify": null,
      "settle": "string"
    },
    {
      "field": "success",
      "verify": null,
      "settle": "boolean"
    },
    {
      "field": "transaction",
      "verify": null,
      "settle": "string"
    }
  ],
  "sample_invalidReason": "invalid_payload",
  "sample_errorReason": "invalid_payload",
  "title": "Fac Vs Drift Sample",
  "next": {
    "name": "facvsdrift",
    "title": "Fac Vs Drift",
    "price": "$0.03",
    "method": "GET",
    "url": "https://openclawproductions.com/api/v1/facvsdrift"
  },
  "note": "Live empty POSTs to OpenX402 /verify and /settle. verify_shape, settle_shape, and drift are the actual JSON keys from those responses. sample_invalidReason and sample_errorReason are copied from the empty-POST bodies. A successful settle is never invented. Distinct from facdiff (origin extras vs verify requirements). Next paid GET is Fac Vs Drift at $0.03."
}
