InkSeal · Schema

DetectionRun

A detection run in full. `fields`, `formatting`, and `warning` appear only on a completed run; `error` only on a failed one.

E-SignatureDeveloper APICredit Pricing

Properties

Name Type Description
detectionRunId integer
status object
forced boolean Whether this run was explicitly asked for instead of a cached one.
agentVersion stringnull
pagesProcessed integernull How many pages the run has finished. Progress while it is running.
totalPages integernull How many pages the run was reserved for.
modelRequested string The model the deployment asked for.
modelUsed stringnull The model recorded for the run overall.
primaryModelUsed stringnull The model that answered the primary classify and detect pass.
fallbackModelsTried array Models the cascade fell through to. Empty when the primary handled the whole run.
tokenUsage object
reservedCostUsd number What is being held against the workspace's daily cap for this run, in USD. Reported alongside `costUsd` rather than merged into it, because one is a reservation and the other is spend.
costUsd numbernull What the run actually spent, in USD. Null until it finishes. A failed run can still have spent money, so this is reported there too.
costSource object
estimatedCostUsd numbernull The estimate made before the run, in USD.
createdAt string
startedAt stringnull
completedAt stringnull
fields array The detected fields. Present only when `status` is `completed`.
formatting objectnull The agent's own assessment of the document, as the visual editor sees it. Its shape differs by pipeline, so it is passed through rather than narrowed: the agent path records strategy and budget outcom
warning stringnull Set when more fields were detected than an envelope may hold and the lowest-confidence ones were dropped. Present only when `status` is `completed`.
error string Why detection failed. Present only when `status` is `failed`. The envelope is untouched: the caller can force another run or place fields by hand.
View JSON Schema on GitHub

JSON Schema

inkseal-net-detection-run-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/inkseal-net/json-schema/inkseal-net-detection-run-schema.json",
  "title": "DetectionRun",
  "description": "A detection run in full. `fields`, `formatting`, and `warning` appear only on a completed run; `error` only on a failed one.",
  "x-generated": "2026-11-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/inkseal-net-openapi.json#/components/schemas/DetectionRun",
  "type": "object",
  "required": [
    "detectionRunId",
    "status",
    "forced",
    "agentVersion",
    "pagesProcessed",
    "totalPages",
    "modelRequested",
    "modelUsed",
    "primaryModelUsed",
    "fallbackModelsTried",
    "tokenUsage",
    "reservedCostUsd",
    "costUsd",
    "costSource",
    "estimatedCostUsd",
    "createdAt",
    "startedAt",
    "completedAt"
  ],
  "properties": {
    "detectionRunId": {
      "type": "integer",
      "minimum": 1
    },
    "status": {
      "$ref": "#/$defs/DetectionStatus"
    },
    "forced": {
      "type": "boolean",
      "description": "Whether this run was explicitly asked for instead of a cached one."
    },
    "agentVersion": {
      "type": [
        "string",
        "null"
      ]
    },
    "pagesProcessed": {
      "type": [
        "integer",
        "null"
      ],
      "description": "How many pages the run has finished. Progress while it is running."
    },
    "totalPages": {
      "type": [
        "integer",
        "null"
      ],
      "description": "How many pages the run was reserved for."
    },
    "modelRequested": {
      "type": "string",
      "description": "The model the deployment asked for."
    },
    "modelUsed": {
      "type": [
        "string",
        "null"
      ],
      "description": "The model recorded for the run overall."
    },
    "primaryModelUsed": {
      "type": [
        "string",
        "null"
      ],
      "description": "The model that answered the primary classify and detect pass."
    },
    "fallbackModelsTried": {
      "type": "array",
      "description": "Models the cascade fell through to. Empty when the primary handled the whole run.",
      "items": {
        "type": "string"
      }
    },
    "tokenUsage": {
      "$ref": "#/$defs/DetectionTokenUsage"
    },
    "reservedCostUsd": {
      "type": "number",
      "description": "What is being held against the workspace's daily cap for this run, in USD. Reported alongside `costUsd` rather than merged into it, because one is a reservation and the other is spend."
    },
    "costUsd": {
      "type": [
        "number",
        "null"
      ],
      "description": "What the run actually spent, in USD. Null until it finishes. A failed run can still have spent money, so this is reported there too."
    },
    "costSource": {
      "$ref": "#/$defs/DetectionCostSource"
    },
    "estimatedCostUsd": {
      "type": [
        "number",
        "null"
      ],
      "description": "The estimate made before the run, in USD."
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    },
    "startedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "completedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "fields": {
      "type": "array",
      "description": "The detected fields. Present only when `status` is `completed`.",
      "items": {
        "$ref": "#/$defs/DetectedField"
      }
    },
    "formatting": {
      "type": [
        "object",
        "null"
      ],
      "description": "The agent's own assessment of the document, as the visual editor sees it. Its shape differs by pipeline, so it is passed through rather than narrowed: the agent path records strategy and budget outcome, the single-shot path records document type and placement quality. Present only when `status` is `completed`.",
      "additionalProperties": true
    },
    "warning": {
      "type": [
        "string",
        "null"
      ],
      "description": "Set when more fields were detected than an envelope may hold and the lowest-confidence ones were dropped. Present only when `status` is `completed`."
    },
    "error": {
      "type": "string",
      "description": "Why detection failed. Present only when `status` is `failed`. The envelope is untouched: the caller can force another run or place fields by hand."
    }
  },
  "$defs": {
    "DetectedField": {
      "type": "object",
      "description": "One field the agent placed, with its own confidence and the reason it was placed there.",
      "required": [
        "type",
        "pageIndex",
        "bounds",
        "label",
        "detectionConfidence",
        "detectionReason",
        "detectionSource",
        "party",
        "fillHint",
        "fillHintConfidence",
        "suggestedName"
      ],
      "properties": {
        "type": {
          "$ref": "#/$defs/DetectedFieldType"
        },
        "pageIndex": {
          "type": "integer",
          "description": "0-based page index, matching the page image endpoints.",
          "minimum": 0
        },
        "bounds": {
          "$ref": "#/$defs/DetectedFieldBounds"
        },
        "label": {
          "type": "string",
          "description": "The label derived from the surrounding text, or a default for the field type."
        },
        "detectionConfidence": {
          "type": [
            "number",
            "null"
          ],
          "description": "Confidence in this placement, 0 to 1. Null when the run recorded none.",
          "minimum": 0,
          "maximum": 1
        },
        "detectionReason": {
          "type": [
            "string",
            "null"
          ],
          "description": "A one-line, human-readable reason for the placement."
        },
        "detectionSource": {
          "$ref": "#/$defs/DetectedFieldSource"
        },
        "party": {
          "oneOf": [
            {
              "type": "object",
              "required": [
                "key",
                "label",
                "confidence"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "confidence": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                }
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "fillHint": {
          "type": "string",
          "enum": [
            "signer",
            "sender"
          ]
        },
        "fillHintConfidence": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "suggestedName": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9_]{0,63}$"
        }
      }
    },
    "DetectedFieldBounds": {
      "type": "object",
      "description": "Where the field sits on its page, as ratios of the page box in the range 0 to 1 with the origin at the top-left corner. `xRatio` and `yRatio` locate the field's top-left corner; `widthRatio` and `heightRatio` size it. No pixels and no points, so the numbers hold at any render scale.",
      "required": [
        "xRatio",
        "yRatio",
        "widthRatio",
        "heightRatio"
      ],
      "properties": {
        "xRatio": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "yRatio": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "widthRatio": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "heightRatio": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        }
      }
    },
    "DetectedFieldSource": {
      "type": "string",
      "description": "Who placed the field. Detection output is `agent`; the other values appear once a person has edited a placement.",
      "enum": [
        "agent",
        "manual",
        "agent-then-manual"
      ]
    },
    "DetectedFieldType": {
      "type": "string",
      "description": "The kind of field detected. The same vocabulary envelope fields use.",
      "enum": [
        "signature",
        "initials",
        "text",
        "date",
        "checkbox"
      ]
    },
    "DetectionCostSource": {
      "type": [
        "string",
        "null"
      ],
      "description": "Where `costUsd` came from: `actual` when the provider reported it, `estimated` when a conservative estimate was required, `mixed` when the run used both. Null until the run finishes.",
      "enum": [
        "actual",
        "estimated",
        "mixed",
        null
      ]
    },
    "DetectionStatus": {
      "type": "string",
      "description": "A detection run's lifecycle. `processing` while it is queued or running, then `completed` or `failed`.",
      "enum": [
        "processing",
        "completed",
        "failed"
      ]
    },
    "DetectionTokenUsage": {
      "type": "object",
      "description": "Model token usage for the run. Each value is null until the provider reports it.",
      "required": [
        "promptTokens",
        "completionTokens",
        "totalTokens"
      ],
      "properties": {
        "promptTokens": {
          "type": [
            "integer",
            "null"
          ]
        },
        "completionTokens": {
          "type": [
            "integer",
            "null"
          ]
        },
        "totalTokens": {
          "type": [
            "integer",
            "null"
          ]
        }
      }
    }
  }
}

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/inkseal-net-detection-run"
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.