{
  "endpoint": "https://policy-gate.3labsio.workers.dev/v1/ethics-check",
  "method": "POST",
  "price_usd": "0.01",
  "canons": "https://policy-gate.3labsio.workers.dev/v1/canons",
  "usage": "POST https://policy-gate.3labsio.workers.dev/v1/ethics-check with { \"action\": \"...\", \"summary\"?: \"...\", \"declared\"?: { ... } }",
  "what_it_does": "Screens a DECLARED action against seven canons and returns clear | reflect | stop, with the canons that fired and why. Deterministic, no model in the path. It answers \"should I?\" — the Policy Gate at /v1/check answers \"am I allowed to?\", and they are different questions.",
  "declared_fields": {
    "deception": "boolean — does the act depend on someone believing something untrue",
    "disclosure": "boolean — would you do it if it were published",
    "affects_others": "boolean — are other beings affected",
    "consent": "boolean — have those beings agreed",
    "reversible": "boolean — can the act be undone",
    "impact_usd": "number — magnitude of the effect",
    "data_sensitivity": "string — e.g. none | internal | personal"
  },
  "example_request": {
    "action": "messages.send",
    "summary": "Email 400 customers about a pricing change",
    "declared": {
      "deception": false,
      "disclosure": true,
      "affects_others": true,
      "consent": false,
      "reversible": false,
      "impact_usd": 0
    }
  },
  "limitation": "It screens the DECLARATION, not the world. It cannot see what you do not declare, and an undeclared field is returned as a question rather than passing silently. A screening tool that oversells its coverage commits the failure its own first canon names.",
  "free_first": "https://policy-gate.3labsio.workers.dev/v1/canons",
  "accepts": [
    {
      "scheme": "exact",
      "network": "base",
      "maxAmountRequired": "10000",
      "resource": "https://policy-gate.3labsio.workers.dev/v1/ethics-check",
      "description": "Screen a declared action against the seven canons",
      "mimeType": "application/json",
      "payTo": "0x07C2383008a9ed30581f27Db5531E19411c94fb3",
      "maxTimeoutSeconds": 60,
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      }
    }
  ],
  "note": "POST without payment returns 402 with signing instructions."
}