{
  "openapi": "3.1.0",
  "info": {
    "title": "AZMail runtime",
    "version": "0.1.0",
    "summary": "Human-UI demo only. Agents use FragGate POST /v1/fraggate/call slug=azmail. Not a mail MCP.",
    "description": "THIS IS: a local Mail Airlock plus advisory APP 1.0 layers and mesh client helpers. THIS IS NOT: a public MTA, SMTP/IMAP server, mixnet, VPN, or a guaranteed phishing block. v0.1 does not send internet email. Hosted Worker is a counted download + human UI + demo HTTP. The AI / MCP path is FragGate only: POST https://aziel-runtime.vibelock.workers.dev/v1/fraggate/call with slug=azmail — not a separate mail MCP. Engine lands in a sibling PR. No hard dependency on AZ-OS, Lumen, or a separate interface product. Author: Aziel Eliab only. Agent path: POST https://aziel-runtime.vibelock.workers.dev/v1/fraggate/call {slug:azmail,op,payload}. This OpenAPI is not the agent door.",
    "license": {
      "name": "Apache-2.0",
      "identifier": "Apache-2.0"
    },
    "contact": {
      "name": "Aziel Eliab",
      "url": "https://github.com/AzielEliab/azmail"
    }
  },
  "servers": [
    {
      "url": "https://azmail-download-tracker.vibelock.workers.dev"
    },
    {
      "url": "https://aziel-runtime.vibelock.workers.dev",
      "description": "aziel-runtime FragGate catalog"
    }
  ],
  "paths": {
    "/v1/health": {
      "get": {
        "operationId": "azmail_health",
        "summary": "Liveness. Does not increment downloads.",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/skill": {
      "get": {
        "operationId": "azmail_skill",
        "summary": "Skill markdown.",
        "responses": {
          "200": {
            "description": "markdown"
          }
        }
      }
    },
    "/v1/example": {
      "get": {
        "operationId": "azmail_example",
        "summary": "Sample payload.",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/v1/classify": {
      "post": {
        "operationId": "azmail_classify",
        "summary": "Advisory APP classify. Not stored.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "from": "PayPal Billing <help@paypa1-verify.com>",
                "to": "you@local",
                "subject": "URGENT: verify your account immediately",
                "body_text": "Your account will be closed. Reset your password now.",
                "body_html": "<img src=\"https://track.example/pixel.gif\" width=\"1\" height=\"1\"><a href=\"javascript:x()\">login</a>",
                "headers": {
                  "Authentication-Results": "mx; spf=fail; dkim=none; dmarc=fail"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "classification"
          }
        }
      }
    },
    "/v1/scrub": {
      "post": {
        "operationId": "azmail_scrub",
        "summary": "Scrub HTML. Not stored.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "html": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "scrubbed"
          }
        }
      }
    },
    "/v1/keyword-alerts": {
      "post": {
        "operationId": "azmail_keyword_alerts",
        "summary": "Match keywords without revealing identity.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "alerts"
          }
        }
      }
    },
    "/v1/mesh/enable": {
      "post": {
        "operationId": "azmail_mesh_enable",
        "summary": "Stub → FragGate mesh_enable. Mesh off by default.",
        "responses": {
          "200": {
            "description": "stub"
          }
        }
      }
    },
    "/v1/mesh/disable": {
      "post": {
        "operationId": "azmail_mesh_disable",
        "summary": "Easy off-switch. Default state.",
        "responses": {
          "200": {
            "description": "off"
          }
        }
      }
    },
    "/v1/mesh/broadcast": {
      "post": {
        "operationId": "azmail_mesh_broadcast",
        "summary": "Stub. Refuses when off / doxxing / credential harvest.",
        "responses": {
          "200": {
            "description": "stub or refuse"
          }
        }
      }
    },
    "/v1/mesh/listen": {
      "post": {
        "operationId": "azmail_mesh_listen",
        "summary": "Stub. Refuses when mesh is off.",
        "responses": {
          "200": {
            "description": "stub"
          }
        }
      }
    }
  }
}