Contraforce · Schema

AgentToolGamebookSubmissionRequest

Request DTO for the agent's submit-gamebook tool. Allows the agent to queue one or more remediation gamebooks against an incident as it investigates.

SecuritySoftware-as-a-ServiceCybersecurityMicrosoftMSP

Properties

Name Type Description
incident_number integerstring Sequential incident number from the source platform. Used in human-readable summaries and gamebook tracking.
incident_title nullstring Human-readable incident title from the source platform. Used in summaries and audit logs.
trigger_type object How the agent run was triggered. OnQueue (background): subject to per-severity Gamebooks capability gating — submissions are rejected for severities where Gamebooks is not enabled. ManualInvestigateAn
playbooks nullarray Ordered playbook actions to run as part of this gamebook. Each entry binds a playbook from the registered catalog to its target entity. Must contain at least one entry — empty arrays are rejected.
View JSON Schema on GitHub

JSON Schema

contraforce-agent-tool-gamebook-submission-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/contraforce/json-schema/contraforce-agent-tool-gamebook-submission-request-schema.json",
  "title": "AgentToolGamebookSubmissionRequest",
  "description": "Request DTO for the agent's submit-gamebook tool. Allows the agent to queue one or more\nremediation gamebooks against an incident as it investigates.",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/contraforce-agent-tools-api-openapi.yml#/components/schemas/AgentToolGamebookSubmissionRequest",
  "type": "object",
  "properties": {
    "incident_number": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Sequential incident number from the source platform. Used in human-readable summaries and gamebook tracking.",
      "format": "int32"
    },
    "incident_title": {
      "type": [
        "null",
        "string"
      ],
      "description": "Human-readable incident title from the source platform. Used in summaries and audit logs."
    },
    "trigger_type": {
      "description": "How the agent run was triggered. OnQueue (background): subject to per-severity Gamebooks capability gating — submissions are rejected for severities where Gamebooks is not enabled. ManualInvestigateAndRespond (operator-requested): always allowed to submit gamebooks regardless of capability settings.",
      "$ref": "#/$defs/AgentTriggerType"
    },
    "playbooks": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "$ref": "#/$defs/AgentToolPlaybook"
      },
      "description": "Ordered playbook actions to run as part of this gamebook. Each entry binds a playbook from the registered catalog to its target entity. Must contain at least one entry — empty arrays are rejected."
    }
  },
  "$defs": {
    "AgentToolPlaybook": {
      "type": "object",
      "properties": {
        "playbook_id": {
          "type": [
            "null",
            "string"
          ],
          "description": "ID of a playbook from the registered playbook catalog. Unknown IDs cause the entire submission to fail — there is no partial-success mode."
        },
        "entity_id": {
          "type": [
            "null",
            "string"
          ],
          "description": "Stable identifier of the target entity. MUST be the entity object's `id` property — NEVER `aadUserId`, `DeviceId`, `FileHash`, or any other entity-specific property. Using the wrong identifier here will cause the playbook to act on the wrong target or fail."
        },
        "affected_entity": {
          "type": [
            "null",
            "string"
          ],
          "description": "Display name of the target entity (e.g. UPN for a user, hostname for a device). Shown in human-readable summaries and audit logs."
        },
        "sequence": {
          "pattern": "^-?(?:0|[1-9]\\d*)$",
          "type": [
            "integer",
            "string"
          ],
          "description": "Run order within the gamebook, starting at 1. Lower numbers execute first. Use this to express dependencies — e.g., scan endpoint (sequence 1) before isolate endpoint (sequence 2) on the same device. Sequence is independent per entity: playbooks targeting different entities run in parallel groups.",
          "format": "int32"
        },
        "internet_message_id": {
          "type": [
            "null",
            "string"
          ],
          "description": "OPTIONAL — for the 'deleteemail' playbook only. RFC 2822 internet-message-id of the email to delete (the Message-ID header value, typically including angle brackets, e.g. '<abc-123@contoso.com>'). Read it verbatim from the incident's email entity — do not strip the brackets or invent it. When supplied together with user_object_id (or user_principal_name) the playbook deletes that exact message from the user's mailbox and skips incident-entity resolution entirely. Leave null for other playbooks or to fall back to entity-based resolution."
        },
        "user_object_id": {
          "type": [
            "null",
            "string"
          ],
          "description": "OPTIONAL — for the 'deleteemail' playbook only. Azure AD object id (GUID) of the mailbox owner whose inbox holds the email. Read it from the incident's recipient user entity (its aadUserId) — never invent it. Preferred over user_principal_name. Supply alongside internet_message_id to delete the message directly without entity-graph resolution."
        },
        "user_principal_name": {
          "type": [
            "null",
            "string"
          ],
          "description": "OPTIONAL — for the 'deleteemail' playbook only. User principal name (UPN, e.g. 'user@contoso.com') of the mailbox owner, used when the object id is unavailable; the server resolves it to an object id via the directory. Read it from the incident's user entity. Supply user_object_id instead when you have it."
        }
      }
    },
    "AgentTriggerType": {
      "enum": [
        "OnQueue",
        "ManualInvestigateOnly",
        "ManualInvestigateAndRespond"
      ],
      "description": "Define the type of the agent trigger that identifies the behaviour of the agent"
    }
  }
}

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/contraforce-agent-tool-gamebook-submission-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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.