Patronus Protect · Schema

Patronus local runtime v1 NDJSON frame

AI SafetyPrompt InjectionSecurityLLMAgent-NativeMCPDLPPIIOn-DeviceAI Firewall
View JSON Schema on GitHub

JSON Schema

patronus-protect-runtime-v1.schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://patronus.studio/schemas/runtime-v1.schema.json",
  "title": "Patronus local runtime v1 NDJSON frame",
  "oneOf": [
    { "$ref": "#/$defs/request" },
    { "$ref": "#/$defs/reply" },
    { "$ref": "#/$defs/error" }
  ],
  "$defs": {
    "id": { "type": "string", "pattern": "^[A-Za-z0-9_-]{1,128}$" },
    "session": { "type": "string", "pattern": "^[A-Za-z0-9_-]{32,128}$" },
    "text_payload": {
      "oneOf": [
        { "type": "string" },
        { "type": "array", "items": { "type": "string" } }
      ]
    },
    "request": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "method", "params"],
      "properties": {
        "id": { "$ref": "#/$defs/id" },
        "method": { "enum": ["hello", "submit", "check", "read_redacted", "cancel"] },
        "params": { "type": "object" }
      },
      "allOf": [
        {
          "if": { "properties": { "method": { "const": "hello" } } },
          "then": { "properties": { "params": { "maxProperties": 0 } } }
        },
        {
          "if": { "properties": { "method": { "const": "submit" } } },
          "then": { "properties": { "params": { "$ref": "#/$defs/submit" } } }
        },
        {
          "if": { "properties": { "method": { "enum": ["check", "read_redacted", "cancel"] } } },
          "then": { "properties": { "params": { "$ref": "#/$defs/lookup" } } }
        }
      ]
    },
    "submit": {
      "type": "object", "additionalProperties": false,
      "required": ["session", "direction", "tool", "call_id", "payload"],
      "properties": {
        "session": { "$ref": "#/$defs/session" },
        "direction": { "enum": ["request", "response"] },
        "tool": { "type": "string", "minLength": 1, "maxLength": 512 },
        "call_id": { "type": "string", "minLength": 1, "maxLength": 512 },
        "payload": { "$ref": "#/$defs/text_payload" }
      },
      "description": "The service additionally enforces byte limits on UTF-8 tool/call IDs and serialized payloads."
    },
    "lookup": {
      "type": "object", "additionalProperties": false,
      "required": ["session", "scan_id"],
      "properties": {
        "session": { "$ref": "#/$defs/session" },
        "scan_id": { "$ref": "#/$defs/id" }
      }
    },
    "reply": {
      "type": "object", "additionalProperties": false, "required": ["id", "result"],
      "properties": {
        "id": { "$ref": "#/$defs/id" },
        "result": { "anyOf": [
          { "$ref": "#/$defs/hello" },
          { "$ref": "#/$defs/status" },
          { "$ref": "#/$defs/redacted" },
          { "$ref": "#/$defs/unavailable" }
        ] }
      }
    },
    "error": {
      "type": "object", "additionalProperties": false, "required": ["id", "error"],
      "properties": {
        "id": { "anyOf": [{ "$ref": "#/$defs/id" }, { "const": "" }] },
        "error": {
          "type": "object", "additionalProperties": false, "required": ["code", "message"],
          "properties": {
            "code": { "type": "string" },
            "message": { "const": "Local security scan request could not be completed." }
          }
        }
      }
    },
    "hello": {
      "type": "object", "additionalProperties": false,
      "required": ["protocol_version", "provider", "scanner_version", "ark_version", "ready", "runtime"],
      "properties": {
        "protocol_version": { "const": 1 }, "provider": { "const": "local" },
        "scanner_version": { "type": "string" }, "ark_version": { "type": "string" },
        "ready": { "type": "boolean" },
        "runtime": {
          "type": "object", "additionalProperties": { "type": "integer", "minimum": 0 },
          "required": ["response_wait_ms", "request_timeout_ms", "scan_timeout_ms", "retention_seconds", "max_payload_bytes", "max_store_bytes", "max_pending_jobs"]
        }
      }
    },
    "status": {
      "type": "object", "additionalProperties": false, "required": ["scan_id", "status"],
      "properties": {
        "scan_id": { "$ref": "#/$defs/id" },
        "status": { "enum": ["pending", "approved", "dangerous", "failed", "incomplete", "cancelled", "expired"] },
        "job_status": { "enum": ["queued", "running", "completed", "failed", "incomplete", "cancelled", "expired"] },
        "findings": { "type": "array", "items": { "$ref": "#/$defs/finding" } },
        "coverage": { "anyOf": [{ "type": "null" }, { "$ref": "#/$defs/coverage" }] },
        "redacted_available": { "type": "boolean" }, "result": { "$ref": "#/$defs/text_payload" }
      },
      "if": { "properties": { "status": { "const": "approved" } } },
      "then": { "properties": { "job_status": { "const": "completed" } } },
      "else": { "not": { "required": ["result"] } },
      "description": "Only approved response checks contain result. Request checks and cancellation never contain payloads."
    },
    "redacted": {
      "type": "object", "additionalProperties": false, "required": ["scan_id", "status", "result"],
      "properties": { "scan_id": { "$ref": "#/$defs/id" }, "status": { "const": "redacted" }, "result": { "$ref": "#/$defs/text_payload" } }
    },
    "unavailable": {
      "type": "object", "additionalProperties": false, "required": ["status"],
      "properties": { "status": { "const": "unavailable" } }
    },
    "coverage": {
      "type": "object", "additionalProperties": false,
      "required": ["fields_total", "fields_scanned", "bytes_total", "bytes_scanned", "complete"],
      "properties": {
        "fields_total": { "type": "integer", "minimum": 0 }, "fields_scanned": { "type": "integer", "minimum": 0 },
        "bytes_total": { "type": "integer", "minimum": 0 }, "bytes_scanned": { "type": "integer", "minimum": 0 },
        "complete": { "type": "boolean" }
      }
    },
    "finding": {
      "type": "object", "additionalProperties": false,
      "required": ["field_id", "start_byte", "end_byte", "category", "label", "confidence"],
      "properties": {
        "field_id": { "type": "integer", "minimum": 0 }, "start_byte": { "type": "integer", "minimum": 0 },
        "end_byte": { "type": "integer", "minimum": 0 }, "category": { "type": "string" }, "label": { "type": "string" },
        "level": { "enum": ["l1", "l2", "l3"] },
        "confidence": { "type": "number", "minimum": 0, "maximum": 1 }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/patronus-protect-runtime-v1.schema"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.