{
  "components": {
    "schemas": {
      "Added": {
        "properties": {
          "command_id": {
            "description": "Read it at /commands/{id} to learn what became of the change. That call says how long it keeps it.",
            "type": "string"
          },
          "existing": {
            "$ref": "#/components/schemas/Settings",
            "description": "Present when the workspace already had this monitor: the add leaves it as it was, and these are its settings."
          },
          "monitor_id": {
            "description": "The monitor the change names.",
            "type": "string"
          }
        },
        "required": [
          "command_id",
          "monitor_id"
        ],
        "type": "object"
      },
      "Alerts": {
        "additionalProperties": false,
        "properties": {
          "email": {
            "description": "Every member gets a message.",
            "type": "boolean"
          },
          "slack": {
            "description": "One line to the workspace's Slack channel.",
            "type": "boolean"
          },
          "webhook": {
            "description": "A JSON POST to the workspace URL.",
            "type": "boolean"
          }
        },
        "required": [
          "email",
          "webhook",
          "slack"
        ],
        "type": "object"
      },
      "Assertion": {
        "properties": {
          "id": {
            "description": "Names the assertion. A published id never changes.",
            "type": "string"
          },
          "label": {
            "description": "The check's words for it.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "label"
        ],
        "type": "object"
      },
      "AssertionResult": {
        "properties": {
          "id": {
            "description": "Names the assertion. A published id never changes.",
            "type": "string"
          },
          "label": {
            "description": "The check's words for it.",
            "type": "string"
          },
          "result": {
            "description": "How the reading judges it. Unknown means the scan did not see what it reads. Absent when there is no reading, or when an unticked assertion awaits a pin.",
            "enum": [
              "awaiting_pin",
              "fail",
              "needs_pin",
              "pass",
              "retired",
              "unknown"
            ],
            "type": "string"
          },
          "ticked": {
            "description": "Whether the monitor alerts when it breaks.",
            "type": "boolean"
          }
        },
        "required": [
          "ticked",
          "id",
          "label"
        ],
        "type": "object"
      },
      "Assessment": {
        "properties": {
          "assertions": {
            "description": "In the check's order. Ticked assertions the check retired come last.",
            "items": {
              "$ref": "#/components/schemas/AssertionResult"
            },
            "type": "array"
          },
          "read_at": {
            "description": "When the monitor last checked its target. Absent before the first scan.",
            "format": "date-time",
            "type": "string"
          },
          "ref": {
            "description": "Names the reading judged. Opaque: compare it, never parse it. A new rendering of the check changes it. Absent before the first scan.",
            "type": "string"
          }
        },
        "required": [
          "assertions"
        ],
        "type": "object"
      },
      "Change": {
        "properties": {
          "broke": {
            "description": "Ticked assertions it broke.",
            "items": {
              "$ref": "#/components/schemas/Assertion"
            },
            "type": "array"
          },
          "class": {
            "description": "Names the kind of change, such as endpoint_removed. Each check adds its own.",
            "type": "string"
          },
          "fixed": {
            "description": "Ticked assertions it fixed.",
            "items": {
              "$ref": "#/components/schemas/Assertion"
            },
            "type": "array"
          },
          "label": {
            "description": "What it broke and fixed, else its class, in the check's words.",
            "type": "string"
          },
          "observed_at": {
            "description": "When a scan saw it.",
            "format": "date-time",
            "type": "string"
          },
          "severity": {
            "description": "How loudly it reads. Any break is an alarm.",
            "enum": [
              "alarm",
              "info",
              "notice"
            ],
            "type": "string"
          },
          "waiting": {
            "description": "Whether it still waits for someone to acknowledge it.",
            "type": "boolean"
          }
        },
        "required": [
          "observed_at",
          "class",
          "label",
          "severity",
          "broke",
          "fixed",
          "waiting"
        ],
        "type": "object"
      },
      "Command": {
        "properties": {
          "existed": {
            "description": "Whether an add found its monitor already there, and left it alone.",
            "type": "boolean"
          },
          "problem": {
            "$ref": "#/components/schemas/Error",
            "description": "Why it was refused, in the shape every refusal takes. Present only when refused."
          },
          "state": {
            "description": "Pending until it is durably saved. Applied and refused are final.",
            "enum": [
              "applied",
              "pending",
              "refused"
            ],
            "type": "string"
          }
        },
        "required": [
          "state",
          "existed"
        ],
        "type": "object"
      },
      "Error": {
        "properties": {
          "code": {
            "description": "Names the refusal. A code never changes once published, and new ones may appear: read one you do not know by its status.",
            "enum": [
              "apply_failed",
              "assertion_not_offered",
              "body_too_large",
              "cannot_apply",
              "cannot_save",
              "change_not_waiting",
              "command_not_found",
              "internal_error",
              "invalid_change",
              "invalid_input",
              "invalid_json",
              "invalid_key",
              "invalid_schedule",
              "invalid_target",
              "method_not_allowed",
              "monitor_gone",
              "monitor_id_taken",
              "monitor_not_found",
              "no_change",
              "not_saved",
              "one_tier_per_family",
              "pin_empty",
              "pin_stale",
              "pin_too_large",
              "pin_unseen",
              "plan_hold",
              "plan_interval_limit",
              "plan_monitor_limit",
              "queue_full",
              "rate_limited",
              "rebuilding",
              "request_timeout",
              "schedule_too_often",
              "service_unavailable",
              "target_collision",
              "too_old",
              "unknown_kind",
              "unknown_path",
              "unsupported_media_type",
              "workspace_full",
              "workspace_not_found",
              "write_in_flight"
            ],
            "type": "string"
          },
          "detail": {
            "description": "The words the website shows for this refusal.",
            "type": "string"
          },
          "errors": {
            "description": "Each input that failed the schema, when one did.",
            "items": {
              "$ref": "#/components/schemas/ErrorDetail"
            },
            "type": "array"
          },
          "status": {
            "description": "The HTTP status this refusal answers with.",
            "format": "int64",
            "type": "integer"
          },
          "type": {
            "description": "Always about:blank. The code names the problem.",
            "enum": [
              "about:blank"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "status",
          "detail",
          "code"
        ],
        "type": "object"
      },
      "ErrorDetail": {
        "properties": {
          "location": {
            "description": "Where the input failed, such as body.schedule.",
            "type": "string"
          },
          "message": {
            "description": "Why it failed.",
            "type": "string"
          }
        },
        "required": [
          "location",
          "message"
        ],
        "type": "object"
      },
      "History": {
        "properties": {
          "changes": {
            "description": "Newest first. A change waiting for acknowledgement shows past the plan's window.",
            "items": {
              "$ref": "#/components/schemas/HistoryEntry"
            },
            "type": "array"
          }
        },
        "required": [
          "changes"
        ],
        "type": "object"
      },
      "HistoryEntry": {
        "properties": {
          "broke": {
            "description": "Ticked assertions it broke.",
            "items": {
              "$ref": "#/components/schemas/Assertion"
            },
            "type": "array"
          },
          "class": {
            "description": "Names the kind of change, such as endpoint_removed. Each check adds its own.",
            "type": "string"
          },
          "fixed": {
            "description": "Ticked assertions it fixed.",
            "items": {
              "$ref": "#/components/schemas/Assertion"
            },
            "type": "array"
          },
          "id": {
            "description": "Names the change, as an acknowledgement names it.",
            "type": "string"
          },
          "label": {
            "description": "What it broke and fixed, else its class, in the check's words.",
            "type": "string"
          },
          "observed_at": {
            "description": "When a scan saw it.",
            "format": "date-time",
            "type": "string"
          },
          "severity": {
            "description": "How loudly it reads. Any break is an alarm.",
            "enum": [
              "alarm",
              "info",
              "notice"
            ],
            "type": "string"
          },
          "waiting": {
            "description": "Whether it still waits for someone to acknowledge it.",
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "observed_at",
          "class",
          "label",
          "severity",
          "broke",
          "fixed",
          "waiting"
        ],
        "type": "object"
      },
      "Meta": {
        "properties": {
          "name": {
            "enum": [
              "netonica"
            ],
            "type": "string"
          },
          "stamp": {
            "description": "The build that answers. It changes with every deploy.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "stamp"
        ],
        "type": "object"
      },
      "Monitor": {
        "properties": {
          "every_change": {
            "description": "Whether a change alerts even when no ticked assertion fails or recovers.",
            "type": "boolean"
          },
          "id": {
            "description": "Names the monitor in every other call.",
            "type": "string"
          },
          "kind": {
            "description": "The check it runs, such as tls.",
            "type": "string"
          },
          "last_change": {
            "$ref": "#/components/schemas/Change",
            "description": "Its latest change the plan shows. Absent when none shows."
          },
          "schedule": {
            "description": "When it runs, as a cron spec in UTC.",
            "type": "string"
          },
          "standing": {
            "description": "Held means the plan paused it. It lifts once the monitors fit the plan.",
            "enum": [
              "held",
              "paused",
              "running"
            ],
            "type": "string"
          },
          "target": {
            "description": "What it watches, in the spelling webhooks carry.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "kind",
          "target",
          "schedule",
          "standing",
          "every_change"
        ],
        "type": "object"
      },
      "MonitorEdit": {
        "additionalProperties": false,
        "properties": {
          "every_change": {
            "description": "Whether a change alerts even when no ticked assertion fails or recovers.",
            "type": "boolean"
          },
          "paused": {
            "description": "True pauses it, false resumes it. A held monitor refuses either, and the whole edit, with plan_hold; only the plan lifts a hold.",
            "type": "boolean"
          },
          "schedule": {
            "description": "When it runs, as a cron spec in UTC. The plan sets how often it may.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "MonitorList": {
        "properties": {
          "monitors": {
            "description": "Sorted by target name, as the website lists them.",
            "items": {
              "$ref": "#/components/schemas/Monitor"
            },
            "type": "array"
          }
        },
        "required": [
          "monitors"
        ],
        "type": "object"
      },
      "NewMonitor": {
        "additionalProperties": false,
        "properties": {
          "every_change": {
            "description": "Whether a change alerts even when no ticked assertion fails or recovers. Off unless true.",
            "type": "boolean"
          },
          "schedule": {
            "description": "When it runs, as a cron spec in UTC. The plan sets how often it may.",
            "type": "string"
          },
          "target": {
            "$ref": "#/components/schemas/Target",
            "description": "What it watches."
          },
          "ticks": {
            "description": "Assertions it alerts on, by id. Absent or null ticks the ones the target stars; empty ticks none. At most one tier of a family.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "target",
          "schedule"
        ],
        "type": "object"
      },
      "Pin": {
        "additionalProperties": false,
        "properties": {
          "ref": {
            "description": "The ref of the assessment that shows the value. One a newer scan replaced is refused.",
            "type": "string"
          }
        },
        "required": [
          "ref"
        ],
        "type": "object"
      },
      "Sent": {
        "properties": {
          "command_id": {
            "description": "Read it at /commands/{id} to learn what became of the change. That call says how long it keeps it.",
            "type": "string"
          },
          "monitor_id": {
            "description": "The monitor the change names.",
            "type": "string"
          }
        },
        "required": [
          "command_id",
          "monitor_id"
        ],
        "type": "object"
      },
      "Settings": {
        "properties": {
          "every_change": {
            "description": "Whether a change alerts even when no ticked assertion fails or recovers.",
            "type": "boolean"
          },
          "schedule": {
            "description": "When it runs, as a cron spec in UTC.",
            "type": "string"
          },
          "standing": {
            "description": "Held means the plan paused it. It lifts once the monitors fit the plan.",
            "enum": [
              "held",
              "paused",
              "running"
            ],
            "type": "string"
          }
        },
        "required": [
          "schedule",
          "standing",
          "every_change"
        ],
        "type": "object"
      },
      "Target": {
        "description": "What a monitor watches: kind picks the check, and fields are what that check asks for. Each kind's x-assertions lists what it can offer; a given target may offer fewer.",
        "discriminator": {
          "mapping": {
            "agent-card": "#/components/schemas/Target-agent-card",
            "dns": "#/components/schemas/Target-dns",
            "headers": "#/components/schemas/Target-headers",
            "mcp": "#/components/schemas/Target-mcp",
            "pqc": "#/components/schemas/Target-pqc",
            "securitytxt": "#/components/schemas/Target-securitytxt",
            "tls": "#/components/schemas/Target-tls",
            "x402": "#/components/schemas/Target-x402"
          },
          "propertyName": "kind"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/Target-agent-card"
          },
          {
            "$ref": "#/components/schemas/Target-dns"
          },
          {
            "$ref": "#/components/schemas/Target-headers"
          },
          {
            "$ref": "#/components/schemas/Target-mcp"
          },
          {
            "$ref": "#/components/schemas/Target-pqc"
          },
          {
            "$ref": "#/components/schemas/Target-securitytxt"
          },
          {
            "$ref": "#/components/schemas/Target-tls"
          },
          {
            "$ref": "#/components/schemas/Target-x402"
          }
        ]
      },
      "Target-agent-card": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "url": {
                "description": "Card URL or domain",
                "examples": [
                  "example.com"
                ],
                "type": "string"
              }
            },
            "required": [
              "url"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "agent-card"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "agent-card",
        "type": "object",
        "x-assertions": [
          {
            "id": "card-served",
            "label": "Card present",
            "starred": true
          },
          {
            "id": "card-valid",
            "label": "Required card fields present",
            "starred": true
          },
          {
            "id": "endpoints-stay",
            "label": "Endpoint URLs and bindings unchanged",
            "starred": true
          },
          {
            "id": "auth-schemes-stay",
            "label": "Authentication schemes unchanged",
            "starred": true
          },
          {
            "id": "skill-descriptions",
            "label": "Skill wording unchanged",
            "starred": true
          },
          {
            "id": "no-new-skills",
            "label": "No new skills",
            "starred": true
          },
          {
            "id": "endpoints-https",
            "label": "Endpoints use HTTPS",
            "starred": true
          },
          {
            "id": "current-path",
            "label": "Card found via /.well-known/agent-card.json",
            "starred": true
          },
          {
            "id": "no-skills-removed",
            "label": "No skills removed"
          },
          {
            "id": "endpoints-on-domain",
            "label": "Endpoints on target domain"
          },
          {
            "id": "auth-declared",
            "label": "Authentication requirements present"
          },
          {
            "id": "card-signed",
            "label": "Card signature present"
          },
          {
            "id": "provider-stays",
            "label": "Provider unchanged"
          },
          {
            "id": "protocol-0-3",
            "label": "Protocol at least 0.3",
            "family": "protocol"
          },
          {
            "id": "protocol-1-0",
            "label": "Protocol at least 1.0",
            "family": "protocol"
          }
        ]
      },
      "Target-dns": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "name": {
                "description": "Name",
                "examples": [
                  "example.com"
                ],
                "type": "string"
              },
              "type": {
                "default": "a",
                "description": "Record type",
                "enum": [
                  "a",
                  "aaaa",
                  "caa",
                  "cname",
                  "mx",
                  "ns",
                  "srv",
                  "txt",
                  "spf",
                  "dmarc",
                  "dns-persist-01"
                ],
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "dns"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "dns",
        "type": "object",
        "x-assertions": [
          {
            "id": "name-exists",
            "label": "Name exists",
            "starred": true
          },
          {
            "id": "has-records",
            "label": "DNS answer present",
            "starred": true
          },
          {
            "id": "records-stay",
            "label": "DNS answer unchanged",
            "starred": true
          },
          {
            "id": "alias-resolves",
            "label": "No dangling alias",
            "starred": true
          },
          {
            "id": "spf-present",
            "label": "SPF present",
            "starred": true
          },
          {
            "id": "spf-no-duplicate",
            "label": "No duplicate SPF record",
            "starred": true
          },
          {
            "id": "spf-lookups-within-limit",
            "label": "Within 10 DNS lookups",
            "starred": true
          },
          {
            "id": "spf-voids-within-limit",
            "label": "At most 2 void lookups",
            "starred": true
          },
          {
            "id": "spf-includes-resolve",
            "label": "Includes resolve",
            "starred": true
          },
          {
            "id": "spf-record-valid",
            "label": "SPF record valid",
            "starred": true
          },
          {
            "id": "spf-not-open",
            "label": "Not open to all senders",
            "starred": true
          },
          {
            "id": "spf-ends-in-fail",
            "label": "Ends in fail or softfail"
          },
          {
            "id": "spf-no-ptr",
            "label": "No ptr mechanism"
          },
          {
            "id": "dmarc-present",
            "label": "DMARC present",
            "starred": true
          },
          {
            "id": "dmarc-enforces",
            "label": "DMARC set to quarantine or reject",
            "starred": true
          },
          {
            "id": "dmarc-reports-requested",
            "label": "DMARC reports requested"
          },
          {
            "id": "dmarc-not-testing",
            "label": "DMARC not in testing mode"
          },
          {
            "id": "dmarc-subdomains-strict",
            "label": "DMARC subdomains as strict as the domain"
          },
          {
            "id": "dmarc-known-tags",
            "label": "Only known DMARC tags"
          },
          {
            "id": "caa-limits-issuers",
            "label": "CAA limits issuers",
            "starred": true
          },
          {
            "id": "persist-absent",
            "label": "No persistent authorization",
            "starred": true
          },
          {
            "id": "persist-present",
            "label": "Persistent authorization present"
          },
          {
            "id": "persist-no-wildcard",
            "label": "No wildcard authorization",
            "starred": true
          },
          {
            "id": "not-expired",
            "label": "Not expired",
            "starred": true
          },
          {
            "id": "over-7-days",
            "label": "Expires in more than 7 days",
            "family": "expiry"
          },
          {
            "id": "over-14-days",
            "label": "Expires in more than 14 days",
            "family": "expiry"
          },
          {
            "id": "over-30-days",
            "label": "Expires in more than 30 days",
            "starred": true,
            "family": "expiry"
          },
          {
            "id": "over-90-days",
            "label": "Expires in more than 90 days",
            "family": "expiry"
          }
        ]
      },
      "Target-headers": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "url": {
                "description": "Page URL",
                "examples": [
                  "https://example.com/"
                ],
                "type": "string"
              }
            },
            "required": [
              "url"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "headers"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "headers",
        "type": "object",
        "x-assertions": [
          {
            "id": "answers-directly",
            "label": "HTTP 200 from target site",
            "starred": true
          },
          {
            "id": "hsts-on",
            "label": "HSTS enabled",
            "starred": true
          },
          {
            "id": "csp-present",
            "label": "CSP present",
            "starred": true
          },
          {
            "id": "no-new-script-sources",
            "label": "No new script sources",
            "starred": true
          },
          {
            "id": "framing-blocked",
            "label": "Framing restricted",
            "starred": true
          },
          {
            "id": "nosniff-set",
            "label": "Nosniff enabled",
            "starred": true
          }
        ]
      },
      "Target-mcp": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "endpoint": {
                "description": "Endpoint",
                "examples": [
                  "https://example.com/mcp"
                ],
                "type": "string"
              }
            },
            "required": [
              "endpoint"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "mcp"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "mcp",
        "type": "object",
        "x-assertions": [
          {
            "id": "auth-required",
            "label": "Authentication required",
            "starred": true
          },
          {
            "id": "auth-servers",
            "label": "Authorization servers unchanged",
            "starred": true
          },
          {
            "id": "connector-ready",
            "label": "Connector ready"
          },
          {
            "id": "registration-current",
            "label": "Client registration not deprecated"
          },
          {
            "id": "issuer-in-response",
            "label": "Issuer identification advertised"
          },
          {
            "id": "tool-descriptions",
            "label": "Tool wording unchanged",
            "starred": true
          },
          {
            "id": "no-new-tools",
            "label": "No new tools",
            "starred": true
          }
        ]
      },
      "Target-pqc": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "endpoint": {
                "description": "Domain",
                "examples": [
                  "example.com or example.com:8443"
                ],
                "type": "string"
              }
            },
            "required": [
              "endpoint"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "pqc"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "pqc",
        "type": "object",
        "x-assertions": [
          {
            "id": "tls-1-3",
            "label": "Supports TLS 1.3",
            "starred": true
          },
          {
            "id": "pq-key-exchange",
            "label": "Supports post-quantum key exchange",
            "starred": true
          },
          {
            "id": "prefers-pq",
            "label": "Prefers post-quantum key exchange",
            "starred": true
          }
        ]
      },
      "Target-securitytxt": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "site": {
                "description": "Site",
                "examples": [
                  "https://example.com"
                ],
                "type": "string"
              }
            },
            "required": [
              "site"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "securitytxt"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "securitytxt",
        "type": "object",
        "x-assertions": [
          {
            "id": "file-present",
            "label": "File present",
            "starred": true
          },
          {
            "id": "not-expired",
            "label": "Not expired",
            "starred": true
          },
          {
            "id": "over-7-days",
            "label": "Expires in more than 7 days",
            "family": "expiry"
          },
          {
            "id": "over-14-days",
            "label": "Expires in more than 14 days",
            "family": "expiry"
          },
          {
            "id": "over-30-days",
            "label": "Expires in more than 30 days",
            "starred": true,
            "family": "expiry"
          },
          {
            "id": "over-90-days",
            "label": "Expires in more than 90 days",
            "family": "expiry"
          },
          {
            "id": "no-new-contacts",
            "label": "No new contacts",
            "starred": true
          },
          {
            "id": "well-formed",
            "label": "Well-formed",
            "starred": true
          },
          {
            "id": "canonical-lists-url",
            "label": "Canonical matches URL when present"
          },
          {
            "id": "stays-signed",
            "label": "PGP signature present"
          },
          {
            "id": "served-here",
            "label": "Served by this site"
          }
        ]
      },
      "Target-tls": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "endpoint": {
                "description": "Domain",
                "examples": [
                  "example.com or example.com:8443"
                ],
                "type": "string"
              }
            },
            "required": [
              "endpoint"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "tls"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "tls",
        "type": "object",
        "x-assertions": [
          {
            "id": "trusted",
            "label": "Certificate trusted",
            "starred": true
          },
          {
            "id": "not-expired",
            "label": "Not expired",
            "starred": true
          },
          {
            "id": "over-7-days",
            "label": "Expires in more than 7 days",
            "family": "expiry"
          },
          {
            "id": "over-14-days",
            "label": "Expires in more than 14 days",
            "starred": true,
            "family": "expiry"
          },
          {
            "id": "over-30-days",
            "label": "Expires in more than 30 days",
            "family": "expiry"
          },
          {
            "id": "min-tls-1-2",
            "label": "No TLS below 1.2",
            "starred": true
          },
          {
            "id": "tls-1-3",
            "label": "Supports TLS 1.3",
            "starred": true
          },
          {
            "id": "issuer-stays",
            "label": "Issuing CA unchanged",
            "starred": true
          },
          {
            "id": "covers-names",
            "label": "No pinned names removed",
            "starred": true
          }
        ]
      },
      "Target-x402": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "additionalProperties": false,
            "properties": {
              "url": {
                "description": "Resource URL",
                "examples": [
                  "https://api.example.com/summarise"
                ],
                "type": "string"
              }
            },
            "required": [
              "url"
            ],
            "type": "object"
          },
          "kind": {
            "enum": [
              "x402"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "fields"
        ],
        "title": "x402",
        "type": "object",
        "x-assertions": [
          {
            "id": "payment-required",
            "label": "Payment required",
            "starred": true
          },
          {
            "id": "quote-readable",
            "label": "Payment quote present",
            "starred": true
          },
          {
            "id": "pay-to",
            "label": "Payment address unchanged",
            "starred": true
          },
          {
            "id": "token",
            "label": "Payment token unchanged",
            "starred": true
          },
          {
            "id": "signing-domain",
            "label": "Additional payment details unchanged",
            "starred": true
          },
          {
            "id": "cache-guarded",
            "label": "Cache protection headers present",
            "starred": true
          }
        ]
      }
    },
    "securitySchemes": {
      "bearer": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "title": "Netonica API",
    "version": "1"
  },
  "openapi": "3.1.0",
  "paths": {
    "/commands/{id}": {
      "get": {
        "description": "A command reads pending until it is durably saved. One with no outcome left reads refused: not_saved, so send it again, within 60 minutes of sending, and too_old after, when what became of it is unknown and the change may have applied. An id that names no time answers 404 command_not_found, as does one with a time ahead that was never saved; while that cannot yet be told, it reads pending.",
        "operationId": "get-command",
        "parameters": [
          {
            "description": "The command id a change answered with.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The command id a change answered with.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Command"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Read what became of a change"
      }
    },
    "/meta": {
      "get": {
        "operationId": "get-meta",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Meta"
                }
              }
            },
            "description": "OK"
          },
          "default": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Error"
          }
        },
        "security": [],
        "summary": "Name the build that answers"
      }
    },
    "/monitors": {
      "get": {
        "operationId": "list-monitors",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonitorList"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List the workspace's monitors"
      },
      "post": {
        "description": "It answers at once; the monitor process applies it, and its command says what became of it. Adding a monitor the workspace already has leaves it as it was.",
        "operationId": "add-monitor",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewMonitor"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Added"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Add a monitor"
      }
    },
    "/monitors/{id}": {
      "delete": {
        "description": "It answers at once; the monitor process applies it, and its command says what became of it. Its history stays.",
        "operationId": "remove-monitor",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sent"
                }
              }
            },
            "description": "Accepted"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Remove a monitor"
      },
      "get": {
        "operationId": "get-monitor",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Monitor"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Read one monitor"
      },
      "patch": {
        "description": "It answers at once; the monitor process applies it, and its command says what became of it.",
        "operationId": "edit-monitor",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonitorEdit"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sent"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Change how a monitor runs"
      }
    },
    "/monitors/{id}/alerts": {
      "get": {
        "operationId": "get-monitor-alerts",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alerts"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Read where a monitor's alerts go"
      },
      "put": {
        "description": "It saves at once.",
        "operationId": "set-monitor-alerts",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Alerts"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alerts"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Choose where a monitor's alerts go"
      }
    },
    "/monitors/{id}/assessment": {
      "get": {
        "operationId": "get-monitor-assessment",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Assessment"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Read a monitor's latest assessment"
      }
    },
    "/monitors/{id}/history": {
      "get": {
        "operationId": "list-monitor-history",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          },
          {
            "description": "How many changes to answer, from 1 to 200.",
            "explode": false,
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "How many changes to answer, from 1 to 200.",
              "format": "int64",
              "maximum": 200,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/History"
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Read a monitor's change history"
      }
    },
    "/monitors/{id}/history/{change}/ack": {
      "post": {
        "description": "It answers at once; the monitor process applies it, and its command says what became of it. It acknowledges every older change too; newer ones keep waiting.",
        "operationId": "acknowledge-change",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          },
          {
            "description": "The change's id, as the history names it.",
            "in": "path",
            "name": "change",
            "required": true,
            "schema": {
              "description": "The change's id, as the history names it.",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sent"
                }
              }
            },
            "description": "Accepted"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Acknowledge a waiting change"
      }
    },
    "/monitors/{id}/pins/{assertion}": {
      "put": {
        "description": "It answers at once; the monitor process applies it, and its command says what became of it. It ticks the assertion and pins the value the named reading shows.",
        "operationId": "pin-assertion",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          },
          {
            "description": "The assertion's id, as the assessment names it.",
            "in": "path",
            "name": "assertion",
            "required": true,
            "schema": {
              "description": "The assertion's id, as the assessment names it.",
              "maxLength": 64,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Pin"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sent"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Pin the value an assertion holds to"
      }
    },
    "/monitors/{id}/ticks/{assertion}": {
      "delete": {
        "description": "It answers at once; the monitor process applies it, and its command says what became of it. A retired assertion unticks too.",
        "operationId": "untick-assertion",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          },
          {
            "description": "The assertion's id, as the assessment names it.",
            "in": "path",
            "name": "assertion",
            "required": true,
            "schema": {
              "description": "The assertion's id, as the assessment names it.",
              "maxLength": 64,
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sent"
                }
              }
            },
            "description": "Accepted"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Stop alerting on an assertion"
      },
      "put": {
        "description": "It answers at once; the monitor process applies it, and its command says what became of it. A tier unticks the others of its family.",
        "operationId": "tick-assertion",
        "parameters": [
          {
            "description": "The monitor's id, as the list names it.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "description": "The monitor's id, as the list names it.",
              "type": "string"
            }
          },
          {
            "description": "The assertion's id, as the assessment names it.",
            "in": "path",
            "name": "assertion",
            "required": true,
            "schema": {
              "description": "The assertion's id, as the assessment names it.",
              "maxLength": 64,
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sent"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unprocessable Entity"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Too Many Requests",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service Unavailable",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before asking again.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Alert when an assertion fails or recovers"
      }
    }
  },
  "security": [
    {
      "bearer": []
    }
  ],
  "servers": [
    {
      "url": "/api/v1"
    }
  ]
}
