{
  "components": {
    "schemas": {
      "About": {
        "additionalProperties": false,
        "description": "The plain-language card of one catalog item.\n\nEvery field except the expert ones is required, so an About that validates is\nstructurally complete; :func:`about_issues` adds the editorial rules (one or two\nsentences, no jargon in the summary, known chooser tags, related ids that exist).",
        "examples": [
          {
            "assumptions": [
              "Numbers can be added up (spend, sales); averages are averaged"
            ],
            "avoid_when": [
              "Your data already has one row per week"
            ],
            "data_needs": [
              "A date column"
            ],
            "difficulty": "beginner",
            "example": "Daily TV spend of 100 each day becomes 700 for the week.",
            "fits": {
              "goal": [
                "check_data"
              ]
            },
            "outputs": [
              "The same columns, one row per week"
            ],
            "related": [
              "core.calendar"
            ],
            "summary_plain": "Adds up daily numbers into one number per week (or month), so that every row covers the same length of time.",
            "title": "Weekly totals",
            "typical_runtime": "instant",
            "use_when": [
              "Your data is daily but you want to plan or report by week"
            ]
          }
        ],
        "properties": {
          "assumptions": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "minItems": 1,
            "title": "Assumptions",
            "type": "array"
          },
          "avoid_when": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "minItems": 1,
            "title": "Avoid When",
            "type": "array"
          },
          "data_needs": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "minItems": 1,
            "title": "Data Needs",
            "type": "array"
          },
          "difficulty": {
            "$ref": "#/components/schemas/Difficulty"
          },
          "example": {
            "description": "A tiny example",
            "maxLength": 600,
            "minLength": 10,
            "title": "Example",
            "type": "string"
          },
          "expert_notes": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Maths, estimator details, caveats for experts",
            "title": "Expert Notes"
          },
          "fits": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "description": "Chooser tags: question id -> the answers this item suits",
            "maxProperties": 16,
            "title": "Fits",
            "type": "object"
          },
          "outputs": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "minItems": 1,
            "title": "Outputs",
            "type": "array"
          },
          "references": {
            "items": {
              "$ref": "#/components/schemas/AboutReference"
            },
            "maxItems": 10,
            "title": "References",
            "type": "array"
          },
          "related": {
            "description": "Ids of related catalog items (models, steps, nodes, checks, templates)",
            "items": {
              "type": "string"
            },
            "maxItems": 16,
            "title": "Related",
            "type": "array"
          },
          "summary_plain": {
            "description": "One or two sentences without jargon: what it does for you",
            "maxLength": 400,
            "minLength": 20,
            "title": "Summary Plain",
            "type": "string"
          },
          "title": {
            "description": "A human name",
            "maxLength": 80,
            "minLength": 3,
            "title": "Title",
            "type": "string"
          },
          "typical_runtime": {
            "$ref": "#/components/schemas/TypicalRuntime"
          },
          "use_when": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "minItems": 1,
            "title": "Use When",
            "type": "array"
          }
        },
        "required": [
          "title",
          "summary_plain",
          "use_when",
          "avoid_when",
          "data_needs",
          "assumptions",
          "outputs",
          "difficulty",
          "typical_runtime",
          "example"
        ],
        "title": "About",
        "type": "object"
      },
      "AboutKind": {
        "description": "What an About describes (chooser results and the catalog say which).",
        "enum": [
          "model",
          "step",
          "split",
          "template",
          "workflow_template",
          "node_kind",
          "node",
          "check",
          "dataset",
          "spec",
          "plot"
        ],
        "title": "AboutKind",
        "type": "string"
      },
      "AboutReference": {
        "additionalProperties": false,
        "description": "A source for the expert detail (a paper, a book chapter, library documentation).",
        "properties": {
          "title": {
            "maxLength": 300,
            "minLength": 3,
            "title": "Title",
            "type": "string"
          },
          "url": {
            "anyOf": [
              {
                "maxLength": 500,
                "pattern": "^https://\\S+$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "required": [
          "title"
        ],
        "title": "AboutReference",
        "type": "object"
      },
      "AdminUsageReport": {
        "description": "``GET /v1/admin/usage`` (operators): cost by tenant for one UTC period, biggest spender\nfirst, and the current spend against the global spend cap.\n\nQuery: ``period=day|month`` (default ``month``) and ``start`` (an instant inside the\nperiod; default: now). Tenants without ledger entries in the period are not listed;\n``totals`` has one row per currency. ``spend_cap`` always covers the cap's current window.",
        "examples": [
          {
            "end": "2026-11-01T00:00:00Z",
            "period": "month",
            "price_versions": [
              "cloudrun-list-2026-10"
            ],
            "spend_cap": {
              "cap_micros": 500000000,
              "currency": "USD",
              "end": "2026-10-16T00:00:00Z",
              "fraction": 0.7,
              "period": "day",
              "spent_micros": 350000000,
              "start": "2026-10-15T00:00:00Z"
            },
            "start": "2026-10-01T00:00:00Z",
            "tenants": [
              {
                "name": "Acme Corp",
                "tenant_id": "acme",
                "totals": {
                  "amount_micros": 93600,
                  "attempts": 3,
                  "currency": "USD",
                  "gib_seconds": 14400,
                  "runs": 3,
                  "vcpu_seconds": 3600
                },
                "trust_tier": "verified"
              }
            ],
            "totals": [
              {
                "amount_micros": 93600,
                "attempts": 3,
                "currency": "USD",
                "gib_seconds": 14400,
                "runs": 3,
                "vcpu_seconds": 3600
              }
            ]
          }
        ],
        "properties": {
          "end": {
            "format": "date-time",
            "title": "End",
            "type": "string"
          },
          "period": {
            "enum": [
              "day",
              "month"
            ],
            "title": "Period",
            "type": "string"
          },
          "price_versions": {
            "items": {
              "type": "string"
            },
            "title": "Price Versions",
            "type": "array"
          },
          "spend_cap": {
            "$ref": "#/components/schemas/GlobalSpend"
          },
          "start": {
            "format": "date-time",
            "title": "Start",
            "type": "string"
          },
          "tenants": {
            "items": {
              "$ref": "#/components/schemas/TenantCost"
            },
            "title": "Tenants",
            "type": "array"
          },
          "totals": {
            "items": {
              "$ref": "#/components/schemas/CostTotals"
            },
            "title": "Totals",
            "type": "array"
          }
        },
        "required": [
          "period",
          "start",
          "end",
          "spend_cap"
        ],
        "title": "AdminUsageReport",
        "type": "object"
      },
      "Aggregation": {
        "additionalProperties": false,
        "description": "Reduce outputs over dims before summarising (validity depends on representation).",
        "properties": {
          "how": {
            "default": "sum",
            "enum": [
              "sum",
              "mean",
              "min",
              "max"
            ],
            "title": "How",
            "type": "string"
          },
          "over": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 16,
            "minItems": 1,
            "title": "Over",
            "type": "array"
          }
        },
        "required": [
          "over"
        ],
        "title": "Aggregation",
        "type": "object"
      },
      "ApiToken": {
        "description": "A token as listed by the API. It never carries the secret or its hash.",
        "examples": [
          {
            "budget_period": "month",
            "created_at": "2026-10-15T09:30:00Z",
            "display": "mapi_7k2m9q4x_…",
            "expires_at": "2026-11-14T09:30:00Z",
            "id": "tok_01jaf3r1s2t3v4w5x6y7z8a9b0",
            "last_used_at": "2026-10-16T08:00:00Z",
            "name": "budget-planner",
            "owner_id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "prefix": "7k2m9q4x",
            "project_id": "growth",
            "rate_limit_per_minute": 120,
            "scopes": [
              "score:geo-mmm-prod",
              "models:read"
            ],
            "status": "active",
            "tenant_id": "acme",
            "vcpu_seconds_budget": 36000
          }
        ],
        "properties": {
          "budget_period": {
            "$ref": "#/components/schemas/BudgetPeriod",
            "default": "month"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "display": {
            "description": "Redacted form, mapi_<prefix>_…",
            "title": "Display",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "last_used_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "owner_id": {
            "description": "Principal id of the user or service that minted it",
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Owner Id",
            "type": "string"
          },
          "prefix": {
            "examples": [
              "7k2m9q4x"
            ],
            "pattern": "^[0123456789abcdefghjkmnpqrstvwxyz]{8}$",
            "title": "Prefix",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "rate_limit_per_minute": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Limit Per Minute"
          },
          "revoked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "scopes": {
            "items": {
              "examples": [
                "models:read",
                "runs:create",
                "score:geo-mmm-prod"
              ],
              "maxLength": 140,
              "type": "string"
            },
            "title": "Scopes",
            "type": "array"
          },
          "status": {
            "$ref": "#/components/schemas/TokenStatus"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "vcpu_seconds_budget": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vcpu Seconds Budget"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "owner_id",
          "name",
          "prefix",
          "display",
          "scopes",
          "status",
          "created_at",
          "expires_at"
        ],
        "title": "ApiToken",
        "type": "object"
      },
      "Approval": {
        "examples": [
          {
            "approver_id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "decided_at": "2026-10-15T09:30:00Z",
            "decision": "approve",
            "id": "apv_01jaf3j1k2m3n4p5q6r7s8t9v0",
            "validation_id": "val_01jaf3k1m2n3p4q5r6s7t8v9w0"
          }
        ],
        "properties": {
          "approver_id": {
            "title": "Approver Id",
            "type": "string"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          },
          "decided_at": {
            "format": "date-time",
            "title": "Decided At",
            "type": "string"
          },
          "decision": {
            "enum": [
              "approve",
              "reject"
            ],
            "title": "Decision",
            "type": "string"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "validation_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Validation Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "validation_id",
          "approver_id",
          "decision",
          "decided_at"
        ],
        "title": "Approval",
        "type": "object"
      },
      "ApprovalCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/validations/{validation_id}/approvals``: a reviewer's decision.",
        "examples": [
          {
            "comment": "Evidence reviewed; null tests are convincing.",
            "decision": "approve"
          }
        ],
        "properties": {
          "comment": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          },
          "decision": {
            "enum": [
              "approve",
              "reject"
            ],
            "title": "Decision",
            "type": "string"
          }
        },
        "required": [
          "decision"
        ],
        "title": "ApprovalCreate",
        "type": "object"
      },
      "ArtifactLink": {
        "description": "A short-lived, generation-pinned signed GET URL for one artifact (HTTP Range works).",
        "examples": [
          {
            "content_type": "application/zip",
            "crc32c": "4waSgw==",
            "expires_at": "2026-10-15T09:45:00Z",
            "generation": 7,
            "name": "bundle.zarr.zip",
            "size": 2097152,
            "url": "http://127.0.0.1:4443/download/storage/v1/b/mapi-local-bundles/o/t%2Fdefault%2Fmodels%2Fmdl_01%2F1%2Fbundle.zarr.zip?generation=7&X-Goog-Signature=…"
          }
        ],
        "properties": {
          "content_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content Type"
          },
          "crc32c": {
            "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
            "examples": [
              "4waSgw=="
            ],
            "pattern": "^[A-Za-z0-9+/]{6}==$",
            "title": "Crc32C",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "generation": {
            "minimum": 1.0,
            "title": "Generation",
            "type": "integer"
          },
          "method": {
            "const": "GET",
            "default": "GET",
            "title": "Method",
            "type": "string"
          },
          "name": {
            "maxLength": 1024,
            "title": "Name",
            "type": "string"
          },
          "size": {
            "minimum": 0.0,
            "title": "Size",
            "type": "integer"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "name",
          "url",
          "expires_at",
          "size",
          "crc32c",
          "generation"
        ],
        "title": "ArtifactLink",
        "type": "object"
      },
      "AsOfSplit": {
        "additionalProperties": false,
        "description": "Train on coords up to and including ``as_of``; hold out the rest (optionally ``gap``).",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the split happens at (a step id or 'raw'); default: end of the stateless prefix",
            "title": "After Step"
          },
          "allow_leakage": {
            "default": false,
            "description": "Downgrade LEAKAGE_RISK to a warning (acknowledged)",
            "title": "Allow Leakage",
            "type": "boolean"
          },
          "as_of": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              }
            ],
            "title": "As Of"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "gap": {
            "default": 0,
            "minimum": 0.0,
            "title": "Gap",
            "type": "integer"
          },
          "kind": {
            "const": "as_of",
            "title": "Kind",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "dim",
          "as_of"
        ],
        "title": "AsOfSplit",
        "type": "object"
      },
      "AssemblySource": {
        "additionalProperties": false,
        "description": "One upload of a multi-file dataset version (M4) and where it goes.\n\nThe upload is ingested with its own ``mapping`` into node ``node``; a file that is\nitself a tree mounts its nodes *under* ``node`` (file group ``/psf`` at node\n``/instrument`` becomes ``/instrument/psf``). Sources of the same node are combined by\n``combine`` (see :data:`CombineRule`).",
        "examples": [
          {
            "combine": "concat",
            "concat_dim": "year",
            "concat_label": 2024,
            "mapping": {
              "format": "netcdf"
            },
            "node": "/",
            "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p0"
          }
        ],
        "properties": {
          "combine": {
            "default": "node",
            "enum": [
              "node",
              "concat",
              "merge"
            ],
            "title": "Combine",
            "type": "string"
          },
          "concat_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "combine 'concat': the dim to stack on",
            "title": "Concat Dim"
          },
          "concat_label": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "combine 'concat': this file's label along concat_dim",
            "title": "Concat Label"
          },
          "join": {
            "default": "exact",
            "description": "How coords align when sources are combined",
            "enum": [
              "exact",
              "inner",
              "outer"
            ],
            "title": "Join",
            "type": "string"
          },
          "mapping": {
            "$ref": "#/components/schemas/IngestMapping"
          },
          "node": {
            "default": "/",
            "pattern": "^/(?:[A-Za-z_][A-Za-z0-9_.\\-]{0,63}(?:/[A-Za-z_][A-Za-z0-9_.\\-]{0,63}){0,7})?$",
            "title": "Node",
            "type": "string"
          },
          "upload_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Upload Id",
            "type": "string"
          }
        },
        "required": [
          "upload_id",
          "mapping"
        ],
        "title": "AssemblySource",
        "type": "object"
      },
      "AuditAction": {
        "description": "Audited actions (``<resource>.<verb>``). New actions are additive.",
        "enum": [
          "auth.login",
          "auth.login_failed",
          "auth.logout",
          "tenant.create",
          "tenant.update",
          "tenant.suspend",
          "tenant.reactivate",
          "tenant.delete",
          "project.create",
          "project.update",
          "project.delete",
          "member.add",
          "member.update",
          "member.remove",
          "token.create",
          "token.revoke",
          "token.auth_failed",
          "quota.update",
          "quota.delete",
          "quota.denied",
          "kill_switch.update",
          "executor.evidence_update",
          "executor.update",
          "run.create",
          "run.cancel",
          "run.integrity_failure",
          "dataset.download",
          "model.artifact_link",
          "endpoint.promote",
          "plugin.publish",
          "plugin.yank",
          "event.rejected",
          "auth.signup",
          "auth.signup_rejected",
          "auth.email_verified",
          "auth.signup_flagged",
          "auth.signup_review",
          "tenant.verification_update",
          "tenant.deletion_request",
          "tenant.deletion_cancel",
          "tenant.deletion_retry",
          "tenant.purged",
          "tenant.export",
          "project.guided_lock",
          "endpoint.create",
          "endpoint.promote_override",
          "endpoint.rollback",
          "endpoint.delete",
          "webhook.create",
          "webhook.update",
          "webhook.delete",
          "webhook.secret_rotate",
          "webhook.replay",
          "webhook.disabled",
          "webhook.url_blocked",
          "plot.embed_create",
          "plot.embed_revoke",
          "workflow.create",
          "workflow.revision",
          "workflow.update",
          "workflow.delete",
          "workflow.run",
          "workflow.run_cancel",
          "workflow.schedule_create",
          "workflow.schedule_update",
          "workflow.schedule_delete",
          "workflow.trigger_create",
          "workflow.trigger_delete",
          "policy.create",
          "policy.update",
          "policy.delete",
          "model.validation_request",
          "model.validation_transition",
          "model.approve",
          "model.reject",
          "model.deprecate",
          "model.evidence_export",
          "endpoint.promote_not_validated",
          "dataset.about_update",
          "run.update",
          "run.log",
          "experiment.create",
          "experiment.update",
          "experiment.delete",
          "run_view.save",
          "run_view.delete"
        ],
        "title": "AuditAction",
        "type": "string"
      },
      "AuditEvent": {
        "description": "One audit row. ``tenant_id`` is ``None`` for platform-level actions.",
        "examples": [
          {
            "action": "token.create",
            "actor_id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "actor_kind": "user",
            "details": {
              "expires_in_days": 30,
              "scopes": [
                "score:geo-mmm-prod"
              ]
            },
            "id": "aud_01jaf3w1x2y3z4a5b6c7d8e9f0",
            "ip_hash": "hmac-sha256:0f1e2d3c4b5a69788796a5b4c3d2e1f0",
            "outcome": "success",
            "project_id": "growth",
            "request_id": "req-7f3a",
            "resource_id": "tok_01jaf3r1s2t3v4w5x6y7z8a9b0",
            "resource_kind": "token",
            "tenant_id": "acme",
            "ts": "2026-10-15T09:30:00Z",
            "user_agent_hash": "hmac-sha256:a1b2c3d4e5f60718293a4b5c6d7e8f90"
          },
          {
            "action": "quota.denied",
            "actor_id": "tok_01jaf3r1s2t3v4w5x6y7z8a9b0",
            "actor_kind": "token",
            "code": "QUOTA_EXCEEDED",
            "details": {
              "limit_name": "vcpu_seconds_per_day",
              "scope": "tenant"
            },
            "id": "aud_01jaf3w9x8y7z6a5b4c3d2e1f0",
            "outcome": "denied",
            "project_id": "growth",
            "resource_kind": "run",
            "tenant_id": "acme",
            "token_id": "tok_01jaf3r1s2t3v4w5x6y7z8a9b0",
            "ts": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "action": {
            "$ref": "#/components/schemas/AuditAction"
          },
          "actor_id": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor Id"
          },
          "actor_kind": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PrincipalKind"
              },
              {
                "type": "null"
              }
            ],
            "description": "None: unauthenticated caller"
          },
          "code": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ErrorCode"
              },
              {
                "type": "null"
              }
            ],
            "description": "Problem code of a denial or error"
          },
          "details": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Details",
            "type": "object"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "ip_hash": {
            "anyOf": [
              {
                "pattern": "^hmac-sha256:[0-9a-f]{32}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ip Hash"
          },
          "operator": {
            "default": false,
            "description": "The actor acted as a platform operator",
            "title": "Operator",
            "type": "boolean"
          },
          "outcome": {
            "$ref": "#/components/schemas/AuditOutcome"
          },
          "project_id": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "request_id": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Request Id"
          },
          "resource_id": {
            "anyOf": [
              {
                "maxLength": 256,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Id"
          },
          "resource_kind": {
            "$ref": "#/components/schemas/ResourceKind"
          },
          "tenant_id": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tenant Id"
          },
          "token_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Set when the actor used an API token",
            "title": "Token Id"
          },
          "ts": {
            "format": "date-time",
            "title": "Ts",
            "type": "string"
          },
          "user_agent_hash": {
            "anyOf": [
              {
                "pattern": "^hmac-sha256:[0-9a-f]{32}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Agent Hash"
          }
        },
        "required": [
          "id",
          "ts",
          "action",
          "resource_kind",
          "outcome"
        ],
        "title": "AuditEvent",
        "type": "object"
      },
      "AuditOutcome": {
        "enum": [
          "success",
          "denied",
          "error"
        ],
        "title": "AuditOutcome",
        "type": "string"
      },
      "Binding": {
        "additionalProperties": false,
        "description": "Canonical name → dataset name, for dims and variables (``geo: market``).\n\nNames that are not bound keep their dataset name. The binding is stored in the bundle\nand reversed on every output by default.",
        "properties": {
          "dims": {
            "maxProperties": 256,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              }
            },
            "title": "Dims",
            "type": "object"
          },
          "vars": {
            "maxProperties": 4096,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              }
            },
            "title": "Vars",
            "type": "object"
          }
        },
        "title": "Binding",
        "type": "object"
      },
      "BlobMissing": {
        "description": "The answer to :class:`BlobQuery` (v0.15). Upload only the ``missing`` images.",
        "examples": [
          {
            "base_version": 4,
            "missing": [
              "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
            ],
            "present": 1
          }
        ],
        "properties": {
          "base_version": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "The version compared with (none: no base, every image is missing)",
            "title": "Base Version"
          },
          "missing": {
            "description": "Missing digests, in query order",
            "items": {
              "pattern": "^[0-9a-f]{64}$",
              "type": "string"
            },
            "title": "Missing",
            "type": "array"
          },
          "present": {
            "minimum": 0.0,
            "title": "Present",
            "type": "integer"
          }
        },
        "required": [
          "base_version",
          "missing",
          "present"
        ],
        "title": "BlobMissing",
        "type": "object"
      },
      "BlobQuery": {
        "additionalProperties": false,
        "description": "Which images (by sha256) a collection version of the dataset does not hold (v0.15).\n\n``base_version``: ``None`` compares with the latest READY collection version; ``0``\ncompares with nothing (every image is missing).",
        "examples": [
          {
            "sha256": [
              "abababababababababababababababababababababababababababababababab",
              "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
            ]
          }
        ],
        "properties": {
          "base_version": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Version"
          },
          "sha256": {
            "items": {
              "pattern": "^[0-9a-f]{64}$",
              "type": "string"
            },
            "maxItems": 5000,
            "minItems": 1,
            "title": "Sha256",
            "type": "array"
          }
        },
        "required": [
          "sha256"
        ],
        "title": "BlobQuery",
        "type": "object"
      },
      "BlockedKFoldPlan": {
        "additionalProperties": false,
        "description": "``k`` contiguous blocks; ``gap`` periods on each side of the test block are dropped.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the folds are cut at (a step id or 'raw'), as data.split",
            "title": "After Step"
          },
          "dim": {
            "default": "time",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "gap": {
            "default": 0,
            "minimum": 0.0,
            "title": "Gap",
            "type": "integer"
          },
          "k": {
            "maximum": 200.0,
            "minimum": 2.0,
            "title": "K",
            "type": "integer"
          },
          "kind": {
            "const": "blocked_kfold",
            "title": "Kind",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "k"
        ],
        "title": "BlockedKFoldPlan",
        "type": "object"
      },
      "BranchDecision": {
        "description": "Why a branch went one way: the condition, its value and the values it read.",
        "examples": [
          {
            "arm": "then",
            "condition": "nodes.adf.p_value >= params.alpha or nodes.kpss.reject",
            "decided_at": "2026-10-15T09:30:00Z",
            "explain_plain": "The tests found that the series wanders and does not return to a steady level. The workflow applied a difference.",
            "inputs": {
              "nodes.adf.p_value": 0.57,
              "nodes.kpss.reject": true,
              "params.alpha": 0.05
            },
            "node_id": "wanders",
            "value": true
          }
        ],
        "properties": {
          "arm": {
            "enum": [
              "then",
              "else"
            ],
            "title": "Arm",
            "type": "string"
          },
          "condition": {
            "title": "Condition",
            "type": "string"
          },
          "decided_at": {
            "format": "date-time",
            "title": "Decided At",
            "type": "string"
          },
          "explain_plain": {
            "anyOf": [
              {
                "maxLength": 300,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What the path taken means, in plain words (the branch's explain_then or explain_else); none when the branch has no explanation",
            "title": "Explain Plain"
          },
          "inputs": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "description": "Each reference in the condition -> its value",
            "title": "Inputs",
            "type": "object"
          },
          "node_id": {
            "title": "Node Id",
            "type": "string"
          },
          "value": {
            "title": "Value",
            "type": "boolean"
          }
        },
        "required": [
          "node_id",
          "condition",
          "value",
          "arm",
          "decided_at"
        ],
        "title": "BranchDecision",
        "type": "object"
      },
      "BudgetPeriod": {
        "description": "Window of a per-token vCPU-second budget (UTC calendar day or month).",
        "enum": [
          "day",
          "month"
        ],
        "title": "BudgetPeriod",
        "type": "string"
      },
      "BudgetScale": {
        "additionalProperties": false,
        "description": "Intervention preset: scale the budget by ``k`` (all channels, or the listed ones).",
        "properties": {
          "channels": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "maxItems": 64,
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Channels"
          },
          "k": {
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "K",
            "type": "number"
          },
          "kind": {
            "const": "budget_scale",
            "default": "budget_scale",
            "title": "Kind",
            "type": "string"
          }
        },
        "required": [
          "k"
        ],
        "title": "BudgetScale",
        "type": "object"
      },
      "BundleManifest": {
        "additionalProperties": false,
        "description": "The platform-signed manifest of a bundle (``manifest.json`` + ``manifest.sig``).\n\nBinds tenant, run, base digest, overlay hash, spec hash, data hash and every\n*destination* generation. URLs to a bundle are minted only after this signature checks.",
        "examples": [
          {
            "attempt": 1,
            "base_image": "base-bayes@2026.10",
            "catalog_digest": "sha256:cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
            "data_hash": "sha256:efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef",
            "kind": "fit",
            "model_id": "mdl_01jabcdefghjkmnpqrstvwxyz0",
            "model_version": 1,
            "objects": {
              "bundle.zarr.zip": {
                "bucket": "mapi-local-bundles",
                "content_type": "application/zip",
                "crc32c": "AAAAAA==",
                "generation": 1760520000000001,
                "key": "t/default/models/mdl_01jabcdefghjkmnpqrstvwxyz0/1/bundle.zarr.zip",
                "md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
                "size": 2097152
              }
            },
            "project_id": "default",
            "run_id": "run_01jabcdefghjkmnpqrstvwxyz0",
            "schema_version": "mapi.bundle-manifest/v1",
            "signature": {
              "alg": "HS256",
              "key_id": "local-1",
              "value": "0000000000000000000000000000000000000000000000000000000000000000"
            },
            "signed_at": "2026-10-15T10:21:00Z",
            "source_manifest_crc32c": "4waSgw==",
            "spec_hash": "sha256:abababababababababababababababababababababababababababababababab",
            "status": "complete",
            "tenant_id": "default"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "base_image": {
            "anyOf": [
              {
                "maxLength": 256,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Image"
          },
          "catalog_digest": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Catalog Digest",
            "type": "string"
          },
          "data_hash": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Hash"
          },
          "kind": {
            "$ref": "#/components/schemas/RunKind"
          },
          "model_id": {
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Model Id",
            "type": "string"
          },
          "model_version": {
            "minimum": 1.0,
            "title": "Model Version",
            "type": "integer"
          },
          "objects": {
            "additionalProperties": {
              "$ref": "#/components/schemas/BundleObject"
            },
            "maxProperties": 10000,
            "title": "Objects",
            "type": "object"
          },
          "overlay_hash": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Overlay Hash"
          },
          "project_id": {
            "examples": [
              "default"
            ],
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "run_id": {
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "schema_version": {
            "const": "mapi.bundle-manifest/v1",
            "default": "mapi.bundle-manifest/v1",
            "title": "Schema Version",
            "type": "string"
          },
          "signature": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ManifestSignature"
              },
              {
                "type": "null"
              }
            ]
          },
          "signed_at": {
            "format": "date-time",
            "title": "Signed At",
            "type": "string"
          },
          "source_manifest_crc32c": {
            "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
            "examples": [
              "4waSgw=="
            ],
            "pattern": "^[A-Za-z0-9+/]{6}==$",
            "title": "Source Manifest Crc32C",
            "type": "string"
          },
          "spec_hash": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Spec Hash",
            "type": "string"
          },
          "status": {
            "enum": [
              "complete",
              "partial"
            ],
            "title": "Status",
            "type": "string"
          },
          "tenant_id": {
            "examples": [
              "default"
            ],
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "tenant_id",
          "project_id",
          "model_id",
          "model_version",
          "run_id",
          "attempt",
          "kind",
          "status",
          "spec_hash",
          "catalog_digest",
          "source_manifest_crc32c",
          "signed_at"
        ],
        "title": "BundleManifest",
        "type": "object"
      },
      "BundleObject": {
        "additionalProperties": false,
        "description": "A verified object after the server-side copy into the bundles bucket.",
        "properties": {
          "bucket": {
            "maxLength": 63,
            "title": "Bucket",
            "type": "string"
          },
          "content_type": {
            "anyOf": [
              {
                "maxLength": 256,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content Type"
          },
          "crc32c": {
            "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
            "examples": [
              "4waSgw=="
            ],
            "pattern": "^[A-Za-z0-9+/]{6}==$",
            "title": "Crc32C",
            "type": "string"
          },
          "generation": {
            "minimum": 1.0,
            "title": "Generation",
            "type": "integer"
          },
          "key": {
            "maxLength": 1024,
            "minLength": 1,
            "title": "Key",
            "type": "string"
          },
          "md5": {
            "description": "MD5 as GCS reports it: base64 of the 16-byte digest",
            "pattern": "^[A-Za-z0-9+/]{22}==$",
            "title": "Md5",
            "type": "string"
          },
          "size": {
            "minimum": 0.0,
            "title": "Size",
            "type": "integer"
          }
        },
        "required": [
          "bucket",
          "key",
          "generation",
          "size",
          "crc32c",
          "md5"
        ],
        "title": "BundleObject",
        "type": "object"
      },
      "BusinessPriors": {
        "additionalProperties": false,
        "description": "Beliefs in business units, per channel (keys are channel *labels* as in the data),\nand/or about the baseline. At least one belief is stated: a baseline belief alone is\nfine (channels without a belief keep the model's default priors).",
        "examples": [
          {
            "baseline_share": {
              "credibility": 0.8,
              "share": [
                0.5,
                0.8
              ]
            },
            "channels": {
              "search": {
                "credibility": 0.9,
                "roi": [
                  2.0,
                  6.0
                ]
              },
              "social": {
                "contribution_share": [
                  0.02,
                  0.1
                ]
              },
              "tv": {
                "credibility": 0.8,
                "roi": [
                  1.5,
                  4.0
                ]
              }
            },
            "kpi_units": "EUR",
            "spend_units": "EUR"
          }
        ],
        "properties": {
          "baseline_share": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ShareBelief"
              },
              {
                "type": "null"
              }
            ]
          },
          "channels": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ChannelBelief"
            },
            "maxProperties": 64,
            "title": "Channels",
            "type": "object"
          },
          "kpi_units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "EUR"
            ],
            "title": "Kpi Units"
          },
          "spend_units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "EUR"
            ],
            "title": "Spend Units"
          }
        },
        "title": "BusinessPriors",
        "type": "object"
      },
      "Capabilities": {
        "additionalProperties": false,
        "description": "What a model plugin can do (declared in its manifest).",
        "properties": {
          "calibration": {
            "default": [],
            "description": "Calibration data the model uses from a spec's calibration block (M3)",
            "items": {},
            "title": "Calibration",
            "type": "array"
          },
          "checkpointable": {
            "default": false,
            "title": "Checkpointable",
            "type": "boolean"
          },
          "conditions_on_actuals": {
            "default": false,
            "description": "A forecast can be conditioned on actuals sent with the request (target values for periods after, or at the end of, the fitted history): the model updates its state with them without re-estimating its parameters and forecasts from the last actual (mapi_spec.actuals). Models without it refuse such requests with ACTUALS_NOT_SUPPORTED instead of ignoring the actuals",
            "title": "Conditions On Actuals",
            "type": "boolean"
          },
          "contribution_scale": {
            "default": "none",
            "enum": [
              "additive",
              "multiplicative",
              "none"
            ],
            "title": "Contribution Scale",
            "type": "string"
          },
          "decision": {
            "default": false,
            "title": "Decision",
            "type": "boolean"
          },
          "deterministic_given_seed": {
            "default": true,
            "title": "Deterministic Given Seed",
            "type": "boolean"
          },
          "evidence": {
            "default": false,
            "title": "Evidence",
            "type": "boolean"
          },
          "fast_score": {
            "default": false,
            "title": "Fast Score",
            "type": "boolean"
          },
          "identified_quantities": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Identified Quantities",
            "type": "array"
          },
          "inference": {
            "enum": [
              "mcmc",
              "vi",
              "map",
              "smc",
              "kalman",
              "point",
              "bootstrap",
              "custom"
            ],
            "title": "Inference",
            "type": "string"
          },
          "input": {
            "default": "dataset",
            "description": "M4: 'tree' models also receive the whole tree dataset (the bound xr.DataTree) next to the flat pipeline output; 'dataset' models only the flat one. v0.15: 'collection' models implement fit_batches/score_batches and train on every image of an image collection through a lazy loader; they also read plain datasets",
            "enum": [
              "dataset",
              "tree",
              "collection"
            ],
            "title": "Input",
            "type": "string"
          },
          "loo_invalid_reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loo Invalid Reason"
          },
          "loo_valid": {
            "default": true,
            "title": "Loo Valid",
            "type": "boolean"
          },
          "owns": {
            "default": [],
            "items": {},
            "title": "Owns",
            "type": "array"
          },
          "recommend": {
            "default": false,
            "title": "Recommend",
            "type": "boolean"
          },
          "representation": {
            "$ref": "#/components/schemas/Representation"
          },
          "score_modes": {
            "items": {},
            "title": "Score Modes",
            "type": "array"
          }
        },
        "required": [
          "inference",
          "representation",
          "score_modes"
        ],
        "title": "Capabilities",
        "type": "object"
      },
      "Capability": {
        "description": "Grants on top of a role (M3.5). Project admins hold every capability implicitly.",
        "enum": [
          "reviewer"
        ],
        "title": "Capability",
        "type": "string"
      },
      "CaseOutcome": {
        "enum": [
          "passed",
          "failed",
          "skipped",
          "error"
        ],
        "title": "CaseOutcome",
        "type": "string"
      },
      "CatalogAbout": {
        "description": "``GET /v1/catalog/abouts``: one catalog item's About card (``kind`` + ``id``).",
        "examples": [
          {
            "about": {
              "assumptions": [
                "Numbers can be added up (spend, sales); averages are averaged"
              ],
              "avoid_when": [
                "Your data already has one row per week"
              ],
              "data_needs": [
                "A date column"
              ],
              "difficulty": "beginner",
              "example": "Daily TV spend of 100 each day becomes 700 for the week.",
              "fits": {
                "goal": [
                  "check_data"
                ]
              },
              "outputs": [
                "The same columns, one row per week"
              ],
              "related": [
                "core.calendar"
              ],
              "summary_plain": "Adds up daily numbers into one number per week (or month), so that every row covers the same length of time.",
              "title": "Weekly totals",
              "typical_runtime": "instant",
              "use_when": [
                "Your data is daily but you want to plan or report by week"
              ]
            },
            "id": "core.resample",
            "kind": "step"
          }
        ],
        "properties": {
          "about": {
            "$ref": "#/components/schemas/About"
          },
          "id": {
            "maxLength": 128,
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/AboutKind"
          }
        },
        "required": [
          "kind",
          "id",
          "about"
        ],
        "title": "CatalogAbout",
        "type": "object"
      },
      "CatalogResponse": {
        "description": "The static catalog the control plane validates against (no plugin code involved).",
        "examples": [
          {
            "digest": "sha256:cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
            "models": [],
            "plots": [
              {
                "id": "core.ppc_fan",
                "title": "PPC fan"
              }
            ],
            "steps": [
              {
                "id": "core.log1p",
                "invertible": true,
                "kind": "value",
                "stateful": false,
                "version": "1.0.0"
              }
            ]
          }
        ],
        "properties": {
          "digest": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Digest",
            "type": "string"
          },
          "generated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generated At"
          },
          "models": {
            "items": {
              "$ref": "#/components/schemas/ModelCatalogEntry"
            },
            "title": "Models",
            "type": "array"
          },
          "plots": {
            "items": {
              "$ref": "#/components/schemas/PlotCatalogEntry"
            },
            "title": "Plots",
            "type": "array"
          },
          "steps": {
            "items": {
              "$ref": "#/components/schemas/StepCatalogEntry"
            },
            "title": "Steps",
            "type": "array"
          }
        },
        "required": [
          "digest"
        ],
        "title": "CatalogResponse",
        "type": "object"
      },
      "ChainProgress": {
        "additionalProperties": false,
        "description": "Per-chain sampler progress (Expert run view).",
        "properties": {
          "chain": {
            "minimum": 0.0,
            "title": "Chain",
            "type": "integer"
          },
          "divergences": {
            "default": 0,
            "minimum": 0.0,
            "title": "Divergences",
            "type": "integer"
          },
          "draws_done": {
            "minimum": 0.0,
            "title": "Draws Done",
            "type": "integer"
          },
          "draws_total": {
            "minimum": 0.0,
            "title": "Draws Total",
            "type": "integer"
          },
          "num_steps": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Leapfrog steps of the latest draw (v0.11)",
            "title": "Num Steps"
          },
          "step_size": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Current step size (v0.11)",
            "title": "Step Size"
          },
          "tuning": {
            "default": false,
            "title": "Tuning",
            "type": "boolean"
          }
        },
        "required": [
          "chain",
          "draws_done",
          "draws_total"
        ],
        "title": "ChainProgress",
        "type": "object"
      },
      "ChannelAllocation": {
        "description": "The plan for one channel (and geo): spend now and at the optimum, shares, the\nexpected contribution, the marginal return at the plan and how stable the\nrecommendation is across draws.",
        "properties": {
          "change_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Change Pct"
          },
          "channel": {
            "title": "Channel",
            "type": "string"
          },
          "current_share": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Current Share",
            "type": "number"
          },
          "current_spend": {
            "minimum": 0.0,
            "title": "Current Spend",
            "type": "number"
          },
          "expected_contribution": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DistributionSummary"
              },
              {
                "type": "null"
              }
            ]
          },
          "extrapolated": {
            "default": false,
            "description": "Beyond the spend range seen in the data",
            "title": "Extrapolated",
            "type": "boolean"
          },
          "geo": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Geo"
          },
          "marginal_roi": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Next unit of money's KPI return",
            "title": "Marginal Roi"
          },
          "optimal_share": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Optimal Share",
            "type": "number"
          },
          "optimal_spend": {
            "minimum": 0.0,
            "title": "Optimal Spend",
            "type": "number"
          },
          "stability": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Share of draws whose own optimum moves the same way",
            "title": "Stability"
          }
        },
        "required": [
          "channel",
          "current_spend",
          "optimal_spend",
          "current_share",
          "optimal_share"
        ],
        "title": "ChannelAllocation",
        "type": "object"
      },
      "ChannelBelief": {
        "additionalProperties": false,
        "description": "What the user believes about one channel: exactly one of ``roi`` or\n``contribution_share``, held with ``credibility``.\n\n* ``roi``: KPI units gained per spend unit over the fit window (``[1.5, 4]`` = \"every\n  euro returns between 1.5 and 4 euros of revenue\");\n* ``contribution_share``: the channel's share of the KPI over the fit window.",
        "properties": {
          "contribution_share": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              [
                0.05,
                0.15
              ]
            ],
            "title": "Contribution Share"
          },
          "credibility": {
            "default": 0.8,
            "description": "Probability that the true value lies inside the range (0.8 = 'I am 80% sure')",
            "maximum": 0.99,
            "minimum": 0.5,
            "title": "Credibility",
            "type": "number"
          },
          "roi": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              [
                1.5,
                4.0
              ]
            ],
            "title": "Roi"
          }
        },
        "title": "ChannelBelief",
        "type": "object"
      },
      "ChannelBounds": {
        "additionalProperties": false,
        "description": "Bounds on one channel: as multiples of its current spend and/or in money (money\nbounds override multiples, as in mmm-framework).",
        "properties": {
          "locked": {
            "default": false,
            "description": "Keep the channel at its current spend",
            "title": "Locked",
            "type": "boolean"
          },
          "max_multiplier": {
            "anyOf": [
              {
                "maximum": 100.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Multiplier"
          },
          "max_spend": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Spend"
          },
          "min_multiplier": {
            "anyOf": [
              {
                "maximum": 100.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Multiplier"
          },
          "min_spend": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Spend"
          }
        },
        "title": "ChannelBounds",
        "type": "object"
      },
      "ChannelOff": {
        "additionalProperties": false,
        "description": "Intervention preset: what if this channel had spent nothing?",
        "properties": {
          "channel": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Channel",
            "type": "string"
          },
          "kind": {
            "const": "channel_off",
            "default": "channel_off",
            "title": "Kind",
            "type": "string"
          }
        },
        "required": [
          "channel"
        ],
        "title": "ChannelOff",
        "type": "object"
      },
      "CheckDirection": {
        "enum": [
          "max",
          "min",
          "band"
        ],
        "title": "CheckDirection",
        "type": "string"
      },
      "CheckResult": {
        "description": "The outcome of one check on one model version.",
        "examples": [
          {
            "check": "null.permutation_target",
            "computed_at": "2026-10-15T09:30:00Z",
            "evidence": [
              {
                "inline": {
                  "real": 0.081,
                  "shuffled_min": 0.079
                },
                "kind": "table",
                "name": "permutation_scores"
              }
            ],
            "message_plain": "The model was better than 19 of the 20 fits on shuffled data.",
            "metric": "permutation_p_value",
            "severity": "blocking",
            "status": "pass",
            "threshold": 0.05,
            "value": 0.048
          }
        ],
        "properties": {
          "check": {
            "title": "Check",
            "type": "string"
          },
          "computed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Computed At"
          },
          "evidence": {
            "items": {
              "$ref": "#/components/schemas/EvidenceItem"
            },
            "maxItems": 50,
            "title": "Evidence",
            "type": "array"
          },
          "message_expert": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message Expert"
          },
          "message_plain": {
            "maxLength": 2000,
            "title": "Message Plain",
            "type": "string"
          },
          "metric": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metric"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params",
            "type": "object"
          },
          "run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The run that computed it",
            "title": "Run Id"
          },
          "severity": {
            "$ref": "#/components/schemas/CheckSeverity"
          },
          "status": {
            "$ref": "#/components/schemas/CheckStatus"
          },
          "suggested_action": {
            "anyOf": [
              {
                "maxLength": 1000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What to do about a warning or failure (plain words)",
            "title": "Suggested Action"
          },
          "threshold": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value"
          }
        },
        "required": [
          "check",
          "status",
          "severity",
          "message_plain"
        ],
        "title": "CheckResult",
        "type": "object"
      },
      "CheckSeverity": {
        "description": "What a failing check does: ``blocking`` stops validation, ``warning`` is recorded and\nshown to the approver, ``info`` is evidence only.",
        "enum": [
          "blocking",
          "warning",
          "info"
        ],
        "title": "CheckSeverity",
        "type": "string"
      },
      "CheckStatus": {
        "enum": [
          "pass",
          "warn",
          "fail",
          "error",
          "skipped"
        ],
        "title": "CheckStatus",
        "type": "string"
      },
      "CheckThresholds": {
        "additionalProperties": false,
        "description": "Warn and fail thresholds of a check (in the check's direction).",
        "properties": {
          "fail": {
            "title": "Fail",
            "type": "number"
          },
          "warn": {
            "title": "Warn",
            "type": "number"
          }
        },
        "required": [
          "warn",
          "fail"
        ],
        "title": "CheckThresholds",
        "type": "object"
      },
      "CheckpointPayload": {
        "additionalProperties": false,
        "description": "``checkpoint``: a checkpoint object was uploaded under the checkpoint prefix.",
        "properties": {
          "crc32c": {
            "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
            "examples": [
              "4waSgw=="
            ],
            "pattern": "^[A-Za-z0-9+/]{6}==$",
            "title": "Crc32C",
            "type": "string"
          },
          "draws_done": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Draws Done"
          },
          "name": {
            "description": "Object name relative to the checkpoint prefix",
            "maxLength": 1024,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "segment": {
            "minimum": 0,
            "title": "Segment",
            "type": "integer"
          },
          "size": {
            "minimum": 0,
            "title": "Size",
            "type": "integer"
          }
        },
        "required": [
          "name",
          "size",
          "crc32c",
          "segment"
        ],
        "title": "CheckpointPayload",
        "type": "object"
      },
      "ChooserChoice": {
        "properties": {
          "help_plain": {
            "anyOf": [
              {
                "maxLength": 300,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Help Plain"
          },
          "label": {
            "maxLength": 120,
            "title": "Label",
            "type": "string"
          },
          "value": {
            "pattern": "^[a-z][a-z0-9_]{0,31}$",
            "title": "Value",
            "type": "string"
          }
        },
        "required": [
          "value",
          "label"
        ],
        "title": "ChooserChoice",
        "type": "object"
      },
      "ChooserQuestion": {
        "description": "One plain-language question of the chooser (``multiple``: several answers allowed).",
        "properties": {
          "choices": {
            "items": {
              "$ref": "#/components/schemas/ChooserChoice"
            },
            "maxItems": 16,
            "minItems": 2,
            "title": "Choices",
            "type": "array"
          },
          "help_plain": {
            "anyOf": [
              {
                "maxLength": 400,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Help Plain"
          },
          "id": {
            "pattern": "^[a-z][a-z0-9_]{0,31}$",
            "title": "Id",
            "type": "string"
          },
          "multiple": {
            "default": false,
            "title": "Multiple",
            "type": "boolean"
          },
          "prompt_plain": {
            "maxLength": 200,
            "title": "Prompt Plain",
            "type": "string"
          },
          "weight": {
            "default": 1,
            "description": "How much a match on it counts",
            "maximum": 5.0,
            "minimum": 1.0,
            "title": "Weight",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "prompt_plain",
          "choices"
        ],
        "title": "ChooserQuestion",
        "type": "object"
      },
      "ChooserQuestionnaire": {
        "description": "``GET /v1/catalog/chooser``: the questions, in the order to ask them.",
        "examples": [
          {
            "questions": [
              {
                "choices": [
                  {
                    "label": "Forecast the future",
                    "value": "forecast"
                  },
                  {
                    "label": "Measure what my marketing adds",
                    "value": "explain_marketing"
                  }
                ],
                "id": "goal",
                "multiple": true,
                "prompt_plain": "What do you want to do?",
                "weight": 3
              }
            ]
          }
        ],
        "properties": {
          "questions": {
            "items": {
              "$ref": "#/components/schemas/ChooserQuestion"
            },
            "title": "Questions",
            "type": "array"
          }
        },
        "required": [
          "questions"
        ],
        "title": "ChooserQuestionnaire",
        "type": "object"
      },
      "ChooserResult": {
        "description": "``GET /v1/catalog/recommendations``: candidates ranked best first.",
        "examples": [
          {
            "answered": [
              "goal",
              "data_shape"
            ],
            "items": [
              {
                "cautions_plain": [],
                "difficulty": "beginner",
                "id": "weekly_forecast",
                "kind": "template",
                "reasons_plain": [
                  "Suits: forecast the future",
                  "Suits: one number over time"
                ],
                "score": 0.92,
                "summary_plain": "Forecasts one weekly number a few months ahead, with a range of likely values.",
                "title": "Weekly forecast",
                "typical_runtime": "minutes"
              }
            ],
            "unanswered": [
              "frequency",
              "history",
              "drivers",
              "uncertainty",
              "experience",
              "speed"
            ]
          }
        ],
        "properties": {
          "answered": {
            "items": {
              "type": "string"
            },
            "title": "Answered",
            "type": "array"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            },
            "title": "Items",
            "type": "array"
          },
          "unanswered": {
            "items": {
              "type": "string"
            },
            "title": "Unanswered",
            "type": "array"
          }
        },
        "title": "ChooserResult",
        "type": "object"
      },
      "ClassCount": {
        "additionalProperties": false,
        "properties": {
          "count": {
            "minimum": 0.0,
            "title": "Count",
            "type": "integer"
          },
          "label": {
            "maxLength": 256,
            "title": "Label",
            "type": "string"
          }
        },
        "required": [
          "label",
          "count"
        ],
        "title": "ClassCount",
        "type": "object"
      },
      "CollectionInfo": {
        "additionalProperties": false,
        "description": "``collection.json``: what a collection version holds.",
        "properties": {
          "base_version": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Version"
          },
          "classes": {
            "description": "Image count per class, by count (descending) then label",
            "items": {
              "$ref": "#/components/schemas/ClassCount"
            },
            "maxItems": 1000,
            "title": "Classes",
            "type": "array"
          },
          "columns": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "title": "Columns",
            "type": "array"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "format": {
            "const": "mapi.collection/v1",
            "default": "mapi.collection/v1",
            "title": "Format",
            "type": "string"
          },
          "formats": {
            "additionalProperties": {
              "type": "integer"
            },
            "maxProperties": 8,
            "title": "Formats",
            "type": "object"
          },
          "label": {
            "description": "The version has label(image)",
            "title": "Label",
            "type": "boolean"
          },
          "manifest_sha256": {
            "pattern": "^[0-9a-f]{64}$",
            "title": "Manifest Sha256",
            "type": "string"
          },
          "max_size": {
            "maxItems": 2,
            "minItems": 2,
            "prefixItems": [
              {
                "type": "integer"
              },
              {
                "type": "integer"
              }
            ],
            "title": "Max Size",
            "type": "array"
          },
          "min_size": {
            "maxItems": 2,
            "minItems": 2,
            "prefixItems": [
              {
                "type": "integer"
              },
              {
                "type": "integer"
              }
            ],
            "title": "Min Size",
            "type": "array"
          },
          "mode": {
            "description": "Channels the images decode to",
            "enum": [
              "gray",
              "rgb"
            ],
            "title": "Mode",
            "type": "string"
          },
          "n_images": {
            "maximum": 1000000.0,
            "minimum": 1.0,
            "title": "N Images",
            "type": "integer"
          },
          "new_images": {
            "minimum": 0.0,
            "title": "New Images",
            "type": "integer"
          },
          "other_classes": {
            "default": 0,
            "description": "Classes not listed in classes",
            "minimum": 0.0,
            "title": "Other Classes",
            "type": "integer"
          },
          "packs": {
            "items": {
              "$ref": "#/components/schemas/PackInfo"
            },
            "maxItems": 128,
            "minItems": 1,
            "title": "Packs",
            "type": "array"
          },
          "reused_images": {
            "minimum": 0.0,
            "title": "Reused Images",
            "type": "integer"
          },
          "size": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "options.size, else the common size of all images, else none",
            "title": "Size"
          },
          "split": {
            "description": "The version has split(image)",
            "title": "Split",
            "type": "boolean"
          },
          "splits": {
            "additionalProperties": {
              "type": "integer"
            },
            "maxProperties": 64,
            "title": "Splits",
            "type": "object"
          },
          "total_bytes": {
            "description": "Stored bytes of the distinct images",
            "minimum": 0.0,
            "title": "Total Bytes",
            "type": "integer"
          },
          "var": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Var",
            "type": "string"
          }
        },
        "required": [
          "n_images",
          "dim",
          "var",
          "label",
          "split",
          "mode",
          "size",
          "min_size",
          "max_size",
          "total_bytes",
          "packs",
          "new_images",
          "reused_images",
          "manifest_sha256"
        ],
        "title": "CollectionInfo",
        "type": "object"
      },
      "CollectionOptions": {
        "additionalProperties": false,
        "description": "How a client manifest and image parts become a collection version.\n\nThe manifest is a CSV, TSV or Parquet table with one row per image and at least the\nsha256 of each image's bytes. Its other columns become the id, label, split and path of\neach image, or are kept as coords.",
        "properties": {
          "columns": {
            "anyOf": [
              {
                "items": {
                  "maxLength": 256,
                  "minLength": 1,
                  "type": "string"
                },
                "maxItems": 64,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Other columns kept as coords (default: all others)",
            "title": "Columns"
          },
          "dim": {
            "default": "image",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "id_column": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Unique ids of the image dim (default: the path, else the sha256)",
            "title": "Id Column"
          },
          "label_column": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Class labels: the text variable 'label(image)', role target",
            "title": "Label Column"
          },
          "max_images": {
            "default": 100000,
            "maximum": 1000000.0,
            "minimum": 1.0,
            "title": "Max Images",
            "type": "integer"
          },
          "mode": {
            "default": "auto",
            "description": "auto: rgb when an image has colour, else gray",
            "enum": [
              "auto",
              "gray",
              "rgb"
            ],
            "title": "Mode",
            "type": "string"
          },
          "path_column": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "path",
            "description": "Kept as the coord 'path' (ignored when the default is missing)",
            "title": "Path Column"
          },
          "resize": {
            "default": "stretch",
            "enum": [
              "stretch",
              "crop",
              "pad"
            ],
            "title": "Resize",
            "type": "string"
          },
          "sha256_column": {
            "default": "sha256",
            "description": "Lowercase hex sha256 of each image",
            "maxLength": 256,
            "minLength": 1,
            "title": "Sha256 Column",
            "type": "string"
          },
          "size": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Canonical (height, width) for samples and model defaults; each 1..4096",
            "title": "Size"
          },
          "split_column": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Train/test assignment: the text coord 'split(image)'",
            "title": "Split Column"
          },
          "var": {
            "default": "pixels",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Var",
            "type": "string"
          }
        },
        "title": "CollectionOptions",
        "type": "object"
      },
      "CollectionSource": {
        "additionalProperties": false,
        "description": "``DatasetVersionCreate.collection``: a manifest upload plus the parts it needs.\n\n``base_version``: ``None`` uses the latest READY collection version of the dataset\n(when there is one) as the source of images the parts do not hold; ``0`` uses no base.",
        "properties": {
          "base_version": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Version"
          },
          "manifest_upload_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Manifest Upload Id",
            "type": "string"
          },
          "options": {
            "$ref": "#/components/schemas/CollectionOptions"
          },
          "part_upload_ids": {
            "items": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 64,
            "title": "Part Upload Ids",
            "type": "array"
          }
        },
        "required": [
          "manifest_upload_id"
        ],
        "title": "CollectionSource",
        "type": "object"
      },
      "ColumnProfile": {
        "additionalProperties": false,
        "description": "What the browser (DuckDB-WASM/papaparse preview) or an ingest profile knows about a\ncolumn. ``name`` and ``sample`` are user data: render them as text only.",
        "examples": [
          {
            "dtype": "number",
            "max": 98312.0,
            "min": 1520.5,
            "n_distinct": 1012,
            "n_rows": 1040,
            "name": "revenue_eur"
          },
          {
            "detected_freq": "W-SUN",
            "dtype": "date",
            "max_date": "2025-12-28",
            "min_date": "2024-01-07",
            "n_distinct": 104,
            "n_rows": 1040,
            "name": "week"
          }
        ],
        "properties": {
          "detected_freq": {
            "anyOf": [
              {
                "maxLength": 16,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "W-SUN",
              "D",
              "MS"
            ],
            "title": "Detected Freq"
          },
          "dtype": {
            "enum": [
              "number",
              "integer",
              "string",
              "date",
              "boolean"
            ],
            "title": "Dtype",
            "type": "string"
          },
          "max": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max"
          },
          "max_date": {
            "anyOf": [
              {
                "maxLength": 40,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Date"
          },
          "min": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min"
          },
          "min_date": {
            "anyOf": [
              {
                "maxLength": 40,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Date"
          },
          "monotonic": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "Values never decrease in file order (dates of a single series, trip numbers); repeated panels of dates are not monotonic",
            "title": "Monotonic"
          },
          "n_distinct": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "N Distinct"
          },
          "n_missing": {
            "default": 0,
            "minimum": 0.0,
            "title": "N Missing",
            "type": "integer"
          },
          "n_rows": {
            "minimum": 0.0,
            "title": "N Rows",
            "type": "integer"
          },
          "name": {
            "maxLength": 256,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "origin": {
            "anyOf": [
              {
                "enum": [
                  "column",
                  "mff_variable",
                  "dim",
                  "variable"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Where the profile comes from: a table column, a VariableName of an MFF table, or a dim/variable of a stored dataset",
            "title": "Origin"
          },
          "sample": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ]
            },
            "maxItems": 20,
            "title": "Sample",
            "type": "array"
          }
        },
        "required": [
          "name",
          "dtype",
          "n_rows"
        ],
        "title": "ColumnProfile",
        "type": "object"
      },
      "ColumnSplit": {
        "additionalProperties": false,
        "description": "Hold out the rows whose value in ``column`` is one of ``holdout`` (a fixed split read\nfrom the data, v0.14).\n\n``column`` is a coord or a 1-D data variable along ``dim``. Values compare as text, so\n``holdout: [1]`` matches a stored ``1`` or ``\"1\"``. With ``train`` set, rows in neither\nlist are dropped; else every other row trains.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the split happens at (a step id or 'raw'); default: end of the stateless prefix",
            "title": "After Step"
          },
          "allow_leakage": {
            "default": false,
            "description": "Downgrade LEAKAGE_RISK to a warning (acknowledged)",
            "title": "Allow Leakage",
            "type": "boolean"
          },
          "column": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Column",
            "type": "string"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "holdout": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "maxItems": 64,
            "minItems": 1,
            "title": "Holdout",
            "type": "array"
          },
          "kind": {
            "const": "column",
            "title": "Kind",
            "type": "string"
          },
          "train": {
            "anyOf": [
              {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "maxItems": 64,
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Train"
          }
        },
        "required": [
          "kind",
          "dim",
          "column"
        ],
        "title": "ColumnSplit",
        "type": "object"
      },
      "CompareMedia": {
        "description": "One media series (key + labels) of one compared run, thinned evenly (the last is kept).",
        "examples": [
          {
            "items": [
              {
                "attempt": 1,
                "caption": "Predicted classes, epoch 3",
                "content_type": "image/png",
                "crc32c": "4waSgw==",
                "created_at": "2026-10-15T09:30:00Z",
                "expires_at": "2026-10-15T09:45:00Z",
                "height": 64,
                "id": "rm_01jaf3h1j2k3m4n5p6q7r8s9t0",
                "key": "samples",
                "kind": "image",
                "labels": {
                  "split": "val"
                },
                "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
                "sha256": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
                "size": 12034,
                "source": "runner",
                "step": 3,
                "url": "http://127.0.0.1:4443/download/storage/v1/b/mapi-local-bundles/o/t%2Fdefault%2Frun-media%2Frun_01jaf3q2x8m9v7k5h4g3f2e1d0%2F3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f.png?alt=media",
                "width": 64
              }
            ],
            "key": "samples",
            "kind": "image",
            "labels": {
              "split": "val"
            },
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/RunMedia"
            },
            "maxItems": 50,
            "title": "Items",
            "type": "array"
          },
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "kind": {
            "enum": [
              "image",
              "table"
            ],
            "title": "Kind",
            "type": "string"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          }
        },
        "required": [
          "run_id",
          "key",
          "kind"
        ],
        "title": "CompareMedia",
        "type": "object"
      },
      "CompareMetric": {
        "description": "Every series of one metric key, over the compared runs.",
        "examples": [
          {
            "key": "loss",
            "series": [
              {
                "attempt": 1,
                "count": 3,
                "labels": {
                  "split": "val"
                },
                "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
                "steps": [
                  1,
                  2,
                  3
                ],
                "values": [
                  0.9,
                  0.6,
                  0.45
                ]
              }
            ]
          }
        ],
        "properties": {
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "series": {
            "items": {
              "$ref": "#/components/schemas/CompareSeries"
            },
            "maxItems": 160,
            "title": "Series",
            "type": "array"
          }
        },
        "required": [
          "key"
        ],
        "title": "CompareMetric",
        "type": "object"
      },
      "CompareParam": {
        "description": "One param key over the compared runs (run id -> text value; ``null``: not logged).",
        "examples": [
          {
            "differs": true,
            "key": "settings.adstock.l_max",
            "values": {
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0": "4",
              "run_01jaf3q2x8m9v7k5h4g3f2e1d1": "8"
            }
          },
          {
            "differs": true,
            "key": "fit.draws",
            "values": {
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0": "1000"
            }
          }
        ],
        "properties": {
          "differs": {
            "description": "Two runs have different values (or one has none)",
            "title": "Differs",
            "type": "boolean"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "values": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": "Values",
            "type": "object"
          }
        },
        "required": [
          "key",
          "values",
          "differs"
        ],
        "title": "CompareParam",
        "type": "object"
      },
      "CompareSeries": {
        "description": "The history of one series of one compared run (``steps`` and ``values`` have equal\nlengths; downsampled to ``max_points``).",
        "examples": [
          {
            "attempt": 1,
            "count": 3,
            "labels": {
              "split": "val"
            },
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "steps": [
              1,
              2,
              3
            ],
            "values": [
              0.9,
              0.6,
              0.45
            ]
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "count": {
            "description": "Stored points (before downsampling)",
            "minimum": 0.0,
            "title": "Count",
            "type": "integer"
          },
          "downsampled": {
            "default": false,
            "title": "Downsampled",
            "type": "boolean"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "steps": {
            "items": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": "Steps",
            "type": "array"
          },
          "values": {
            "items": {
              "type": "number"
            },
            "title": "Values",
            "type": "array"
          }
        },
        "required": [
          "run_id",
          "attempt",
          "count",
          "steps",
          "values"
        ],
        "title": "CompareSeries",
        "type": "object"
      },
      "CompareSummary": {
        "description": "The summary of one metric series of one compared run.",
        "examples": [
          {
            "attempt": 1,
            "count": 1,
            "first_ts": "2026-10-15T09:30:00Z",
            "key": "rmse",
            "last": 12.7,
            "last_ts": "2026-10-15T09:30:00Z",
            "max": 12.7,
            "min": 12.7,
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
          },
          {
            "attempt": 1,
            "count": 1400,
            "first_ts": "2026-10-15T09:30:00Z",
            "key": "step_size",
            "labels": {
              "chain": "0"
            },
            "last": 0.31,
            "last_step": 1400,
            "last_ts": "2026-10-15T09:31:00Z",
            "max": 1.2,
            "min": 0.02,
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d1"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "count": {
            "description": "Stored points",
            "minimum": 0.0,
            "title": "Count",
            "type": "integer"
          },
          "first_ts": {
            "format": "date-time",
            "title": "First Ts",
            "type": "string"
          },
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "last": {
            "description": "Value of the newest point (by time, then step)",
            "title": "Last",
            "type": "number"
          },
          "last_step": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Step of the newest point; null for a scalar",
            "title": "Last Step"
          },
          "last_ts": {
            "format": "date-time",
            "title": "Last Ts",
            "type": "string"
          },
          "max": {
            "title": "Max",
            "type": "number"
          },
          "min": {
            "title": "Min",
            "type": "number"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          }
        },
        "required": [
          "key",
          "attempt",
          "count",
          "last",
          "min",
          "max",
          "first_ts",
          "last_ts",
          "run_id"
        ],
        "title": "CompareSummary",
        "type": "object"
      },
      "CompletePayload": {
        "additionalProperties": false,
        "description": "``complete``: outputs and the manifest are uploaded; the supervisor exits next.",
        "properties": {
          "manifest_crc32c": {
            "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
            "examples": [
              "4waSgw=="
            ],
            "pattern": "^[A-Za-z0-9+/]{6}==$",
            "title": "Manifest Crc32C",
            "type": "string"
          },
          "manifest_name": {
            "description": "Object name of manifest.json",
            "maxLength": 1024,
            "minLength": 1,
            "title": "Manifest Name",
            "type": "string"
          },
          "objects": {
            "minimum": 0,
            "title": "Objects",
            "type": "integer"
          },
          "status": {
            "enum": [
              "complete",
              "partial"
            ],
            "title": "Status",
            "type": "string"
          },
          "total_bytes": {
            "minimum": 0,
            "title": "Total Bytes",
            "type": "integer"
          }
        },
        "required": [
          "status",
          "manifest_name",
          "manifest_crc32c",
          "objects",
          "total_bytes"
        ],
        "title": "CompletePayload",
        "type": "object"
      },
      "ConformanceCaseId": {
        "enum": [
          "submit",
          "adopt_after_dispatcher_crash",
          "duplicate_submit",
          "cancel_mid_run",
          "timeout",
          "stalled_not_lost",
          "confirmed_cancel_before_retry",
          "checkpoint_resume",
          "oom_classification",
          "fanout_task_count",
          "generation_verification",
          "rate_limit_backoff"
        ],
        "title": "ConformanceCaseId",
        "type": "string"
      },
      "ConformanceReport": {
        "description": "One run of the suite against one executor.",
        "examples": [
          {
            "environment": "nightly",
            "executor": "cloudrun-jobs",
            "finished_at": "2026-10-15T02:24:00Z",
            "results": [
              {
                "case_id": "submit",
                "duration_seconds": 61.0,
                "outcome": "passed"
              },
              {
                "case_id": "rate_limit_backoff",
                "duration_seconds": 33.5,
                "outcome": "passed"
              }
            ],
            "started_at": "2026-10-15T02:00:00Z",
            "suite_version": "1"
          }
        ],
        "properties": {
          "environment": {
            "default": "pr",
            "enum": [
              "pr",
              "nightly",
              "manual"
            ],
            "title": "Environment",
            "type": "string"
          },
          "executor": {
            "title": "Executor",
            "type": "string"
          },
          "finished_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/ConformanceResult"
            },
            "title": "Results",
            "type": "array"
          },
          "started_at": {
            "format": "date-time",
            "title": "Started At",
            "type": "string"
          },
          "suite_version": {
            "default": "1",
            "title": "Suite Version",
            "type": "string"
          }
        },
        "required": [
          "executor",
          "started_at"
        ],
        "title": "ConformanceReport",
        "type": "object"
      },
      "ConformanceResult": {
        "examples": [
          {
            "case_id": "stalled_not_lost",
            "duration_seconds": 41.2,
            "outcome": "passed"
          }
        ],
        "properties": {
          "case_id": {
            "$ref": "#/components/schemas/ConformanceCaseId"
          },
          "duration_seconds": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Seconds"
          },
          "outcome": {
            "$ref": "#/components/schemas/CaseOutcome"
          },
          "problems": {
            "items": {
              "type": "string"
            },
            "title": "Problems",
            "type": "array"
          }
        },
        "required": [
          "case_id",
          "outcome"
        ],
        "title": "ConformanceResult",
        "type": "object"
      },
      "ConformanceTarget": {
        "additionalProperties": false,
        "description": "An executor under test: its declared caps plus facts the caps do not express.",
        "properties": {
          "caps": {
            "$ref": "#/components/schemas/ExecutorCaps"
          },
          "enforces_memory_limit": {
            "default": false,
            "title": "Enforces Memory Limit",
            "type": "boolean"
          },
          "executor": {
            "pattern": "^[a-z][a-z0-9-]{0,63}$",
            "title": "Executor",
            "type": "string"
          },
          "remote_control_api": {
            "default": false,
            "title": "Remote Control Api",
            "type": "boolean"
          }
        },
        "required": [
          "executor",
          "caps"
        ],
        "title": "ConformanceTarget",
        "type": "object"
      },
      "ContextNeed": {
        "additionalProperties": false,
        "description": "Per-group tail a step needs at score time: ``n`` rows along ``along`` within groups.\n\n``min_lag`` is the smallest lag the step applies (for recursive-forecast checks);\nit defaults to 1 when the step depends on the target.",
        "properties": {
          "along": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Along",
            "type": "string"
          },
          "min_lag": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Lag"
          },
          "n": {
            "maximum": 100000.0,
            "minimum": 0.0,
            "title": "N",
            "type": "integer"
          },
          "within": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 16,
            "title": "Within",
            "type": "array"
          }
        },
        "required": [
          "along",
          "n"
        ],
        "title": "ContextNeed",
        "type": "object"
      },
      "CoordSummary": {
        "additionalProperties": false,
        "description": "Metadata summary of one coordinate (never the full array for large dims).\n\n``values`` lists categorical levels when there are at most :attr:`MAX_LEVELS` of them;\nordered dims (time/integer) describe a range by ``start``/``end``/``size`` and whether\nthe coordinate is ``contiguous`` (no gaps at its frequency/step).",
        "properties": {
          "contiguous": {
            "default": true,
            "title": "Contiguous",
            "type": "boolean"
          },
          "end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "End"
          },
          "freq": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Freq"
          },
          "kind": {
            "enum": [
              "categorical",
              "time",
              "integer",
              "float",
              "index"
            ],
            "title": "Kind",
            "type": "string"
          },
          "size": {
            "minimum": 0.0,
            "title": "Size",
            "type": "integer"
          },
          "start": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start"
          },
          "step": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Step"
          },
          "values": {
            "anyOf": [
              {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "maxItems": 10000,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Values"
          }
        },
        "required": [
          "kind",
          "size"
        ],
        "title": "CoordSummary",
        "type": "object"
      },
      "CostTotals": {
        "description": "Sums over ledger entries (one currency).",
        "examples": [
          {
            "amount_micros": 93600,
            "attempts": 3,
            "currency": "USD",
            "gib_seconds": 14400,
            "runs": 3,
            "vcpu_seconds": 3600
          }
        ],
        "properties": {
          "amount_micros": {
            "default": 0,
            "title": "Amount Micros",
            "type": "integer"
          },
          "attempts": {
            "default": 0,
            "description": "Distinct (run, attempt) pairs",
            "minimum": 0.0,
            "title": "Attempts",
            "type": "integer"
          },
          "currency": {
            "anyOf": [
              {
                "pattern": "^[A-Z]{3}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Currency"
          },
          "gib_seconds": {
            "default": 0,
            "title": "Gib Seconds",
            "type": "number"
          },
          "runs": {
            "default": 0,
            "description": "Distinct runs",
            "minimum": 0.0,
            "title": "Runs",
            "type": "integer"
          },
          "vcpu_seconds": {
            "default": 0,
            "title": "Vcpu Seconds",
            "type": "number"
          }
        },
        "title": "CostTotals",
        "type": "object"
      },
      "CounterfactualCompile": {
        "additionalProperties": false,
        "properties": {
          "channel_dim": {
            "default": "channel",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Channel Dim",
            "type": "string"
          },
          "kind": {
            "const": "counterfactual",
            "default": "counterfactual",
            "title": "Kind",
            "type": "string"
          },
          "model": {
            "description": "endpoint://project/alias or model://project/name@vN",
            "pattern": "(?:^endpoint://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)$)|(?:^model://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)@(latest|v\\d{1,9}|\\d{1,9})$)",
            "title": "Model",
            "type": "string"
          },
          "output": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OutputSelector"
              },
              {
                "type": "null"
              }
            ]
          },
          "preset": {
            "discriminator": {
              "mapping": {
                "budget_scale": "#/components/schemas/BudgetScale",
                "channel_off": "#/components/schemas/ChannelOff"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/ChannelOff"
              },
              {
                "$ref": "#/components/schemas/BudgetScale"
              }
            ],
            "title": "Preset"
          },
          "spend_var": {
            "default": "spend",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Spend Var",
            "type": "string"
          }
        },
        "required": [
          "model",
          "preset"
        ],
        "title": "CounterfactualCompile",
        "type": "object"
      },
      "DataExploreRequest": {
        "additionalProperties": false,
        "description": "Which Data Explorer sections to compute, and how.\n\n``kpi`` is the result the cross-correlations are computed against (default: the\ndataset's target variable); ``facet_by`` splits series by up to two dims; ``period``\nis the season length for STL and seasonal strength (default: from the frequency).",
        "examples": [
          {
            "facet_by": [
              "geo"
            ],
            "kpi": "revenue",
            "max_lag": 12,
            "sections": [
              "overview",
              "timeseries",
              "stationarity",
              "ccf",
              "stl",
              "quality"
            ]
          },
          {
            "hints": {
              "angle_vars": {
                "wind_from": "deg"
              },
              "x_dim": "col",
              "y_dim": "row"
            },
            "sections": [
              "structure",
              "images",
              "circular"
            ]
          }
        ],
        "properties": {
          "alpha": {
            "default": 0.05,
            "exclusiveMaximum": 0.5,
            "exclusiveMinimum": 0.0,
            "title": "Alpha",
            "type": "number"
          },
          "correlation": {
            "default": "pearson",
            "enum": [
              "pearson",
              "spearman"
            ],
            "title": "Correlation",
            "type": "string"
          },
          "facet_by": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 2,
            "title": "Facet By",
            "type": "array"
          },
          "group_by": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Dim for group comparisons",
            "title": "Group By"
          },
          "hints": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/StructureHints"
              },
              {
                "type": "null"
              }
            ],
            "description": "Corrections to the detected structure (image dims, node dim, angle variables)"
          },
          "kpi": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kpi"
          },
          "max_lag": {
            "default": 26,
            "maximum": 200.0,
            "minimum": 1.0,
            "title": "Max Lag",
            "type": "integer"
          },
          "max_series": {
            "default": 50,
            "maximum": 200.0,
            "minimum": 1.0,
            "title": "Max Series",
            "type": "integer"
          },
          "node": {
            "anyOf": [
              {
                "pattern": "^/(?:[A-Za-z_][A-Za-z0-9_.\\-]{0,63}(?:/[A-Za-z_][A-Za-z0-9_.\\-]{0,63}){0,7})?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "M4: the node of a tree dataset to explore (default: the root, or the first node with variables)",
            "title": "Node"
          },
          "outlier_threshold": {
            "default": 3.5,
            "exclusiveMinimum": 0.0,
            "maximum": 20.0,
            "title": "Outlier Threshold",
            "type": "number"
          },
          "outliers": {
            "default": "mad",
            "enum": [
              "iqr",
              "mad",
              "zscore"
            ],
            "title": "Outliers",
            "type": "string"
          },
          "period": {
            "anyOf": [
              {
                "maximum": 400.0,
                "minimum": 2.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Period"
          },
          "prewhiten": {
            "default": true,
            "description": "Prewhiten before cross-correlations (filter both series with the driver's AR model, so a peak is not just two smooth series moving together)",
            "title": "Prewhiten",
            "type": "boolean"
          },
          "sections": {
            "items": {
              "enum": [
                "overview",
                "distributions",
                "timeseries",
                "missingness",
                "outliers",
                "correlation",
                "ccf",
                "acf_pacf",
                "stationarity",
                "stl",
                "vif",
                "groups",
                "quality",
                "structure",
                "images",
                "gallery",
                "profiles",
                "map",
                "network",
                "tree",
                "circular",
                "points"
              ],
              "type": "string"
            },
            "maxItems": 22,
            "minItems": 1,
            "title": "Sections",
            "type": "array"
          },
          "time_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Default: the dataset's time dim",
            "title": "Time Dim"
          },
          "vars": {
            "description": "Default: all",
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 256,
            "title": "Vars",
            "type": "array"
          }
        },
        "title": "DataExploreRequest",
        "type": "object"
      },
      "DataRef": {
        "additionalProperties": false,
        "description": "A dataset stored next to the bundle (path relative to the bundle root).",
        "properties": {
          "crc32c": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z0-9+/]{6}==$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Crc32C"
          },
          "format": {
            "default": "arrow",
            "enum": [
              "arrow",
              "json"
            ],
            "title": "Format",
            "type": "string"
          },
          "kind": {
            "const": "data_ref",
            "title": "Kind",
            "type": "string"
          },
          "path": {
            "examples": [
              "ui/plotdata/contrib.arrow"
            ],
            "pattern": "^[A-Za-z0-9_.\\-][A-Za-z0-9_.\\-/]{0,511}$",
            "title": "Path",
            "type": "string"
          },
          "size": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size"
          }
        },
        "required": [
          "kind",
          "path"
        ],
        "title": "DataRef",
        "type": "object"
      },
      "DataSchema": {
        "additionalProperties": false,
        "description": "Schema of an ``xr.Dataset``: dims, variables, layout and ragged structure.",
        "properties": {
          "dims": {
            "maxProperties": 256,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "$ref": "#/components/schemas/DimSpec"
              }
            },
            "title": "Dims",
            "type": "object"
          },
          "layout": {
            "default": "dense",
            "enum": [
              "dense",
              "long"
            ],
            "title": "Layout",
            "type": "string"
          },
          "ragged": {
            "items": {
              "$ref": "#/components/schemas/RaggedSpec"
            },
            "maxItems": 32,
            "title": "Ragged",
            "type": "array"
          },
          "vars": {
            "maxProperties": 4096,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "$ref": "#/components/schemas/VarSpec"
              }
            },
            "title": "Vars",
            "type": "object"
          }
        },
        "title": "DataSchema",
        "type": "object"
      },
      "DataSchemaTemplate": {
        "additionalProperties": false,
        "description": "A DataSchema-shaped JSON template plus the settings parameters it depends on.\n\nResolution is pure and static: ``resolve(settings)`` extracts each declared parameter\nfrom the settings (falling back to its default), checks its type/enum, renders the\n:mod:`~mapi_spec.template` placeholders, deep-merges every matching ``case`` and\nvalidates the result as a :class:`DataSchema`.",
        "properties": {
          "cases": {
            "items": {
              "$ref": "#/components/schemas/TemplateCase"
            },
            "maxItems": 64,
            "title": "Cases",
            "type": "array"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/TemplateParam"
            },
            "maxProperties": 64,
            "title": "Params",
            "type": "object"
          },
          "template": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Template",
            "type": "object"
          }
        },
        "required": [
          "template"
        ],
        "title": "DataSchemaTemplate",
        "type": "object"
      },
      "DataSummary": {
        "additionalProperties": false,
        "description": "Summary of a dataset (or score payload): variable names and coordinate summaries.\n\n``observed`` (forecasts conditioned on actuals, :mod:`mapi_spec.actuals`) maps a target\nvariable - and a driver the forecast needs (``future_required``) - to, per ordered dim,\nthe summary of the labels at which it holds at least one value. Only summarisers that\nread the values set it (the sandbox, and the control plane for inline JSON payloads,\nwhere it is a null check); a variable left out is unknown.",
        "properties": {
          "coords": {
            "additionalProperties": {
              "$ref": "#/components/schemas/CoordSummary"
            },
            "title": "Coords",
            "type": "object"
          },
          "observed": {
            "additionalProperties": {
              "additionalProperties": {
                "$ref": "#/components/schemas/CoordSummary"
              },
              "type": "object"
            },
            "title": "Observed",
            "type": "object"
          },
          "vars": {
            "items": {
              "type": "string"
            },
            "title": "Vars",
            "type": "array"
          }
        },
        "title": "DataSummary",
        "type": "object"
      },
      "Dataset": {
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "id": "ds_01jaf3a1b2c3d4e5f6g7h8j9k0",
            "latest_version": 3,
            "name": "eu_media_daily",
            "project_id": "default",
            "ref": "dataset://default/eu_media_daily",
            "tenant_id": "default",
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "about": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DatasetAbout"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3.5: the description plus a summary generated from the schema"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "latest_version": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latest Version"
          },
          "name": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Name",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "ref": {
            "description": "dataset://project/name (append @vN to pin)",
            "title": "Ref",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "name",
          "ref",
          "created_at",
          "updated_at"
        ],
        "title": "Dataset",
        "type": "object"
      },
      "DatasetAbout": {
        "description": "The About of a dataset: the owner's description plus a generated summary.\n\n``summary_generated`` and ``highlights`` come from the version's schema and coordinate\nsummary (:func:`describe_dataset`); ``warnings_plain`` from its ingest issues and profile.",
        "examples": [
          {
            "description_user": "Weekly media spend and revenue from the finance warehouse.",
            "highlights": [
              "104 weeks of history",
              "10 markets",
              "3 channels"
            ],
            "summary_generated": "Weekly data from 2023-01-01 to 2024-12-29 (104 weeks) for 10 markets and 3 channels, with 3 measures: revenue (the result you want to explain), spend (marketing spend) and price.",
            "warnings_plain": []
          }
        ],
        "properties": {
          "description_user": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description User"
          },
          "generated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generated At"
          },
          "highlights": {
            "items": {
              "type": "string"
            },
            "maxItems": 20,
            "title": "Highlights",
            "type": "array"
          },
          "summary_generated": {
            "maxLength": 1000,
            "title": "Summary Generated",
            "type": "string"
          },
          "warnings_plain": {
            "items": {
              "type": "string"
            },
            "maxItems": 20,
            "title": "Warnings Plain",
            "type": "array"
          }
        },
        "required": [
          "summary_generated"
        ],
        "title": "DatasetAbout",
        "type": "object"
      },
      "DatasetAboutUpdate": {
        "additionalProperties": false,
        "description": "``PATCH /v1/datasets/{dataset_id}/about``: the owner's own description.",
        "examples": [
          {
            "description_user": "Weekly media spend and revenue from the finance warehouse."
          }
        ],
        "properties": {
          "description_user": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description User"
          }
        },
        "title": "DatasetAboutUpdate",
        "type": "object"
      },
      "DatasetCreate": {
        "additionalProperties": false,
        "description": "Create an (empty) dataset; data arrives as versions.",
        "examples": [
          {
            "description": "Daily spend and revenue per market",
            "name": "eu_media_daily"
          }
        ],
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "labels": {
            "maxProperties": 64,
            "patternProperties": {
              "^[a-z0-9]([a-z0-9_.\\-/]{0,62})$": {
                "maxLength": 63,
                "pattern": "^[A-Za-z0-9_.\\-]*$",
                "type": "string"
              }
            },
            "title": "Labels",
            "type": "object"
          },
          "name": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "DatasetCreate",
        "type": "object"
      },
      "DatasetVersion": {
        "description": "An immutable, content-addressed version (``data.zarr.zip`` + schema + profile).",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "data_schema": {
              "dims": {
                "date": {
                  "freq": "D",
                  "kind": "time",
                  "policy": "extend"
                },
                "market": {
                  "kind": "categorical"
                }
              },
              "vars": {
                "revenue": {
                  "dims": [
                    "market",
                    "date"
                  ],
                  "dtype": "float64",
                  "role": "target"
                }
              }
            },
            "dataset_id": "ds_01jaf3a1b2c3d4e5f6g7h8j9k0",
            "ingest_run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "issues": [],
            "preview": {
              "content_type": "application/json",
              "name": "preview.json",
              "size": 20480
            },
            "project_id": "default",
            "ready_at": "2026-10-15T09:31:10Z",
            "ref": "dataset://default/eu_media_daily@v3",
            "sha256": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "size_bytes": 1048576,
            "sources": [
              "upl_01jaf3d1e2f3g4h5j6k7m8n9p0"
            ],
            "status": "ready",
            "summary": {
              "coords": {
                "market": {
                  "kind": "categorical",
                  "size": 2,
                  "values": [
                    "de",
                    "fr"
                  ]
                }
              },
              "vars": [
                "revenue"
              ]
            },
            "tenant_id": "default",
            "version": 3
          },
          {
            "created_at": "2026-10-15T09:30:00Z",
            "data_schema": {},
            "dataset_id": "ds_01jaf3a1b2c3d4e5f6g7h8j9k0",
            "ingest_run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "issues": [],
            "layout": "tree",
            "project_id": "default",
            "ready_at": "2026-10-15T09:31:10Z",
            "ref": "dataset://default/lens_cubes@v4",
            "sha256": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "size_bytes": 4194304,
            "sources": [
              "upl_01jaf3d1e2f3g4h5j6k7m8n9p0",
              "upl_01jaf3d1e2f3g4h5j6k7m8n9p1"
            ],
            "status": "ready",
            "tenant_id": "default",
            "tree_schema": {
              "nodes": {
                "/": {},
                "/observations": {
                  "dims": {
                    "col": {
                      "kind": "index"
                    },
                    "row": {
                      "kind": "index"
                    }
                  },
                  "vars": {
                    "image": {
                      "dims": [
                        "row",
                        "col"
                      ],
                      "dtype": "float32"
                    }
                  }
                },
                "/psf": {
                  "dims": {
                    "pcol": {
                      "kind": "index"
                    },
                    "prow": {
                      "kind": "index"
                    }
                  },
                  "vars": {
                    "psf": {
                      "dims": [
                        "prow",
                        "pcol"
                      ],
                      "dtype": "float64"
                    }
                  }
                }
              }
            },
            "version": 4
          },
          {
            "collection": {
              "classes": [
                {
                  "count": 700,
                  "label": "bottle"
                },
                {
                  "count": 500,
                  "label": "can"
                }
              ],
              "dim": "image",
              "formats": {
                "jpeg": 1150,
                "png": 50
              },
              "label": true,
              "manifest_sha256": "7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a",
              "max_size": [
                512,
                512
              ],
              "min_size": [
                48,
                48
              ],
              "mode": "rgb",
              "n_images": 1200,
              "new_images": 1200,
              "packs": [
                {
                  "crc32c": "4waSgw==",
                  "digest": "5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d",
                  "entries": 1200,
                  "images": 1200,
                  "input": "part.0000",
                  "md5": "XrY7u+Ae7tCTyyK7j1rNww==",
                  "size": 52430000,
                  "source": "upload"
                }
              ],
              "reused_images": 0,
              "size": [
                64,
                64
              ],
              "split": true,
              "splits": {
                "test": 240,
                "train": 960
              },
              "total_bytes": 52428800,
              "var": "pixels"
            },
            "created_at": "2026-10-15T09:30:00Z",
            "dataset_id": "ds_01jaf3a1b2c3d4e5f6g7h8j9k0",
            "ingest_run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "issues": [],
            "layout": "collection",
            "project_id": "default",
            "ready_at": "2026-10-15T09:40:10Z",
            "ref": "dataset://default/product_photos@v5",
            "sha256": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "size_bytes": 52428800,
            "sources": [
              "upl_01jaf3d1e2f3g4h5j6k7m8n9p0",
              "upl_01jaf3d1e2f3g4h5j6k7m8n9p1"
            ],
            "status": "ready",
            "tenant_id": "default",
            "version": 5
          }
        ],
        "properties": {
          "collection": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CollectionInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "v0.15: what an image collection version holds (layout 'collection')"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "data_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DataSchema"
              },
              {
                "type": "null"
              }
            ]
          },
          "dataset_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dataset Id",
            "type": "string"
          },
          "ingest_run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ingest Run Id"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "layout": {
            "default": "dataset",
            "description": "M4: 'tree' versions hold an xr.DataTree (tree_schema; data_schema is then the root node's schema). v0.15: 'collection' versions are image collections (collection; data_schema has the virtual pixels variable)",
            "enum": [
              "dataset",
              "tree",
              "collection"
            ],
            "title": "Layout",
            "type": "string"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "preview": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ObjectRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "profile": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ObjectRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "ready_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ready At"
          },
          "ref": {
            "description": "dataset://project/name@vN",
            "title": "Ref",
            "type": "string"
          },
          "sha256": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sha256"
          },
          "size_bytes": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size Bytes"
          },
          "sources": {
            "description": "M4: the uploads the version was built from",
            "items": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Sources",
            "type": "array"
          },
          "status": {
            "$ref": "#/components/schemas/DatasetVersionStatus"
          },
          "summary": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DataSummary"
              },
              {
                "type": "null"
              }
            ]
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "tree_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TreeSchema"
              },
              {
                "type": "null"
              }
            ],
            "description": "M4: the schema of a tree version"
          },
          "version": {
            "minimum": 1.0,
            "title": "Version",
            "type": "integer"
          }
        },
        "required": [
          "dataset_id",
          "tenant_id",
          "project_id",
          "version",
          "ref",
          "status",
          "created_at"
        ],
        "title": "DatasetVersion",
        "type": "object"
      },
      "DatasetVersionCreate": {
        "additionalProperties": false,
        "description": "Turn finished uploads into a new version via a sandboxed ingest run (202).\n\nExactly one of: ``upload_id`` + ``mapping`` (one file), ``assembly`` (M4: several\nfiles combined per node into one version, see :class:`IngestAssembly`), or\n``collection`` (v0.15: an image collection from a manifest and image parts, see\n:class:`~mapi_spec.collection.CollectionSource`).",
        "examples": [
          {
            "mapping": {
              "dims": {
                "date": {
                  "column": "date",
                  "spec": {
                    "freq": "D",
                    "kind": "time",
                    "policy": "extend"
                  }
                },
                "market": {
                  "column": "market",
                  "spec": {
                    "kind": "categorical"
                  }
                }
              },
              "format": "csv",
              "vars": {
                "revenue_local": {
                  "column": "revenue",
                  "role": "target",
                  "units": "local"
                },
                "spend_local": {
                  "column": "spend",
                  "role": "spend",
                  "units": "local"
                }
              }
            },
            "message": "Q3 refresh",
            "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p0"
          },
          {
            "assembly": {
              "sources": [
                {
                  "combine": "concat",
                  "concat_dim": "year",
                  "concat_label": 2024,
                  "mapping": {
                    "format": "netcdf"
                  },
                  "node": "/",
                  "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p0"
                },
                {
                  "combine": "concat",
                  "concat_dim": "year",
                  "concat_label": 2025,
                  "mapping": {
                    "format": "netcdf"
                  },
                  "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p1"
                },
                {
                  "mapping": {
                    "format": "netcdf"
                  },
                  "node": "/instrument",
                  "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p2"
                }
              ]
            },
            "message": "2024 and 2025 cubes plus the instrument"
          },
          {
            "collection": {
              "manifest_upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p0",
              "options": {
                "label_column": "label",
                "size": [
                  64,
                  64
                ],
                "split_column": "split"
              },
              "part_upload_ids": [
                "upl_01jaf3d1e2f3g4h5j6k7m8n9p1"
              ]
            },
            "message": "Product photos, October"
          }
        ],
        "properties": {
          "assembly": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IngestAssembly"
              },
              {
                "type": "null"
              }
            ],
            "description": "M4: several uploads combined into one (tree) version"
          },
          "collection": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CollectionSource"
              },
              {
                "type": "null"
              }
            ],
            "description": "v0.15: an image collection (a manifest upload and image part uploads)"
          },
          "mapping": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IngestMapping"
              },
              {
                "type": "null"
              }
            ]
          },
          "message": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "upload_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Upload Id"
          }
        },
        "title": "DatasetVersionCreate",
        "type": "object"
      },
      "DatasetVersionStatus": {
        "enum": [
          "ingesting",
          "ready",
          "failed"
        ],
        "title": "DatasetVersionStatus",
        "type": "string"
      },
      "DeletionState": {
        "enum": [
          "scheduled",
          "cancelled",
          "deleting",
          "purged",
          "failed"
        ],
        "title": "DeletionState",
        "type": "string"
      },
      "DeliveryStatus": {
        "enum": [
          "pending",
          "succeeded",
          "retrying",
          "failed",
          "blocked"
        ],
        "title": "DeliveryStatus",
        "type": "string"
      },
      "DerivedDecl": {
        "additionalProperties": false,
        "description": "A derived quantity (contributions, response curves, ...).",
        "properties": {
          "cache": {
            "default": "on_demand",
            "enum": [
              "fit",
              "on_demand"
            ],
            "title": "Cache",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "dims": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Dims",
            "type": "array"
          },
          "name": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Name",
            "type": "string"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Units"
          }
        },
        "required": [
          "name",
          "dims"
        ],
        "title": "DerivedDecl",
        "type": "object"
      },
      "DetectRolesRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/guided/detect-roles``: exactly one of ``dataset`` (a stored version:\nits schema and profile are used) or ``columns`` (profiled in the browser).",
        "examples": [
          {
            "columns": [
              {
                "dtype": "number",
                "max": 98312.0,
                "min": 1520.5,
                "n_distinct": 1012,
                "n_rows": 1040,
                "name": "revenue_eur"
              },
              {
                "detected_freq": "W-SUN",
                "dtype": "date",
                "max_date": "2025-12-28",
                "min_date": "2024-01-07",
                "n_distinct": 104,
                "n_rows": 1040,
                "name": "week"
              },
              {
                "dtype": "string",
                "n_distinct": 10,
                "n_rows": 1040,
                "name": "market"
              },
              {
                "dtype": "number",
                "max": 90000.0,
                "min": 0,
                "n_rows": 1040,
                "name": "tv_spend"
              }
            ],
            "template_id": "geo_mmm"
          }
        ],
        "properties": {
          "columns": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ColumnProfile"
                },
                "maxItems": 2048,
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Columns"
          },
          "dataset": {
            "anyOf": [
              {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dataset"
          },
          "template_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Template Id",
            "type": "string"
          }
        },
        "required": [
          "template_id"
        ],
        "title": "DetectRolesRequest",
        "type": "object"
      },
      "Diagnostic": {
        "additionalProperties": false,
        "description": "A diagnostic finding that rolls up into the sanity scorecard.",
        "properties": {
          "code": {
            "pattern": "^[A-Z][A-Z0-9_]{1,63}$",
            "title": "Code",
            "type": "string"
          },
          "coords": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "$ref": "#/components/schemas/JsonValue"
              }
            },
            "title": "Coords",
            "type": "object"
          },
          "message_expert": {
            "maxLength": 2000,
            "title": "Message Expert",
            "type": "string"
          },
          "message_plain": {
            "maxLength": 2000,
            "title": "Message Plain",
            "type": "string"
          },
          "metric": {
            "anyOf": [
              {
                "pattern": "^[a-z][a-z0-9_]{0,63}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metric"
          },
          "severity": {
            "default": "warning",
            "enum": [
              "info",
              "warning",
              "error"
            ],
            "title": "Severity",
            "type": "string"
          },
          "suggested_action": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Suggested Action"
          },
          "threshold": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value"
          },
          "var": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Var"
          }
        },
        "required": [
          "code",
          "message_expert",
          "message_plain"
        ],
        "title": "Diagnostic",
        "type": "object"
      },
      "DiffEntry": {
        "properties": {
          "new": {
            "title": "New"
          },
          "old": {
            "title": "Old"
          },
          "op": {
            "pattern": "^(add|remove|replace)$",
            "title": "Op",
            "type": "string"
          },
          "path": {
            "description": "RFC 6901 pointer into the documents",
            "title": "Path",
            "type": "string"
          }
        },
        "required": [
          "op",
          "path"
        ],
        "title": "DiffEntry",
        "type": "object"
      },
      "Difficulty": {
        "description": "How much statistical background an item needs to use well.",
        "enum": [
          "beginner",
          "intermediate",
          "expert"
        ],
        "title": "Difficulty",
        "type": "string"
      },
      "DimMapping": {
        "additionalProperties": false,
        "description": "A dim of the dataset, read from one column of a tabular upload.",
        "examples": [
          {
            "column": "date",
            "spec": {
              "freq": "D",
              "kind": "time",
              "policy": "extend"
            }
          }
        ],
        "properties": {
          "column": {
            "maxLength": 256,
            "minLength": 1,
            "title": "Column",
            "type": "string"
          },
          "spec": {
            "$ref": "#/components/schemas/DimSpec"
          }
        },
        "required": [
          "column",
          "spec"
        ],
        "title": "DimMapping",
        "type": "object"
      },
      "DimPolicy": {
        "description": "What may happen to a dim's coordinates at score time.",
        "enum": [
          "fixed",
          "extend",
          "new_levels"
        ],
        "title": "DimPolicy",
        "type": "string"
      },
      "DimSpec": {
        "additionalProperties": false,
        "description": "A dimension and its score-time policy.",
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "freq": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pandas-style frequency, e.g. 'W-SUN'",
            "title": "Freq"
          },
          "kind": {
            "enum": [
              "categorical",
              "time",
              "integer",
              "float",
              "index"
            ],
            "title": "Kind",
            "type": "string"
          },
          "max_extension": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Periods allowed past the fit",
            "title": "Max Extension"
          },
          "new_level_strategy": {
            "default": "error",
            "enum": [
              "error",
              "hyperprior",
              "pooled",
              "zero"
            ],
            "title": "New Level Strategy",
            "type": "string"
          },
          "ordered": {
            "default": false,
            "title": "Ordered",
            "type": "boolean"
          },
          "policy": {
            "$ref": "#/components/schemas/DimPolicy",
            "default": "fixed"
          }
        },
        "required": [
          "kind"
        ],
        "title": "DimSpec",
        "type": "object"
      },
      "DistributionSummary": {
        "description": "A distribution in business units: mean, sd and named quantiles (``\"0.05\"`` …).",
        "examples": [
          {
            "mean": 2.6,
            "quantiles": {
              "0.05": 1.5,
              "0.5": 2.5,
              "0.95": 4.1
            },
            "sd": 0.8
          }
        ],
        "properties": {
          "mean": {
            "title": "Mean",
            "type": "number"
          },
          "quantiles": {
            "additionalProperties": {
              "type": "number"
            },
            "maxProperties": 32,
            "title": "Quantiles",
            "type": "object"
          },
          "sd": {
            "minimum": 0.0,
            "title": "Sd",
            "type": "number"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Units"
          }
        },
        "required": [
          "mean",
          "sd"
        ],
        "title": "DistributionSummary",
        "type": "object"
      },
      "EmailVerify": {
        "additionalProperties": false,
        "description": "``POST /auth/verify-email``: the token from the e-mail link (single use).",
        "examples": [
          {
            "token": "mev_0123456789abcdefghjkmnpqrstvwxyz01234567"
          }
        ],
        "properties": {
          "token": {
            "pattern": "^mev_[0-9a-hjkmnp-tv-z]{40}$",
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "token"
        ],
        "title": "EmailVerify",
        "type": "object"
      },
      "EmbedView": {
        "description": "``GET /v1/embeds/{token}`` (public, rate-limited, cacheable until ``expires_at``):\na platform-recipe plot with every dataset inlined. Expired or revoked tokens answer\n``410 LINK_EXPIRED``; unknown ones ``404``.",
        "examples": [
          {
            "allowed_origins": [
              "https://acme.notion.site"
            ],
            "expires_at": "2027-01-13T09:30:00Z",
            "generated_at": "2026-10-15T09:30:00Z",
            "image_url": "https://storage.googleapis.com/mapi-prod-bundles/t/acme/embeds/emb_01jaf3p1q2r3s4t5v6w7x8y9z0/plot.png?X-Goog-Signature=…",
            "plot": {
              "caption_plain": "The shaded band is where the model expects 90% of weeks.",
              "datasets": {
                "fan": {
                  "data": "QVJST1cx",
                  "kind": "inline_arrow",
                  "rows": 2
                }
              },
              "id": "core.ppc_fan",
              "kind": "vega-lite",
              "persona": "both",
              "provenance": {
                "generated_at": "2026-10-15T09:40:00Z",
                "recipe": "core.ppc_fan@1.0.0"
              },
              "schema_version": "v5",
              "spec": {
                "data": {
                  "name": "fan"
                },
                "encoding": {
                  "x": {
                    "field": "time",
                    "type": "temporal"
                  },
                  "y": {
                    "field": "lo",
                    "type": "quantitative"
                  },
                  "y2": {
                    "field": "hi"
                  }
                },
                "mark": "area"
              },
              "title": "Posterior predictive fan"
            },
            "title": "EU response curves (v3)"
          }
        ],
        "properties": {
          "allowed_origins": {
            "description": "The embed's PlotEmbedCreate.allowed_origins: sites that may frame the embed page (empty: any). The embed page refuses to render elsewhere.",
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "title": "Allowed Origins",
            "type": "array"
          },
          "caption_plain": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Caption Plain"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "generated_at": {
            "format": "date-time",
            "title": "Generated At",
            "type": "string"
          },
          "image_url": {
            "anyOf": [
              {
                "maxLength": 4096,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Short-lived signed URL of a static PNG of the plot (the embed page's fallback link), once the sandbox has rendered one",
            "title": "Image Url"
          },
          "plot": {
            "$ref": "#/components/schemas/PlotSpec"
          },
          "title": {
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title",
          "plot",
          "generated_at",
          "expires_at"
        ],
        "title": "EmbedView",
        "type": "object"
      },
      "Endpoint": {
        "description": "A stable alias and the model version it serves now.",
        "examples": [
          {
            "alias": "geo-mmm-prod",
            "created_at": "2026-09-01T08:00:00Z",
            "description": "Weekly EU MMM used by the budget planner",
            "evaluation_policy": {
              "fit_mode": "evaluate_then_refit",
              "schema_change": "block"
            },
            "gate": {
              "outcome": "allowed",
              "scorecard_overall": "pass"
            },
            "id": "ep_01jaf3g1h2j3k4m5n6p7q8r9s0",
            "model_id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
            "model_ref": "model://growth/eu-geo-mmm@v3",
            "model_version_id": "mv_01jaf3e1f2g3h4j5k6m7n8p9q0",
            "overridden": false,
            "project_id": "growth",
            "promoted_at": "2026-10-15T09:30:00Z",
            "promoted_by": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "ref": "endpoint://growth/geo-mmm-prod",
            "revision": 4,
            "schema_snapshot": {
              "fit_coords": {
                "channel": {
                  "kind": "categorical",
                  "size": 2,
                  "values": [
                    "search",
                    "tv"
                  ]
                },
                "date": {
                  "end": "2025-12-30",
                  "freq": "D",
                  "kind": "time",
                  "size": 730,
                  "start": "2024-01-01"
                },
                "market": {
                  "kind": "categorical",
                  "size": 2,
                  "values": [
                    "de",
                    "fr"
                  ]
                }
              },
              "future_required": [
                "spend_local"
              ],
              "horizon_dim": "time",
              "input_schema": {
                "dims": {
                  "channel": {
                    "kind": "categorical"
                  },
                  "date": {
                    "freq": "D",
                    "kind": "time",
                    "policy": "extend"
                  },
                  "market": {
                    "kind": "categorical",
                    "new_level_strategy": "pooled",
                    "policy": "new_levels"
                  }
                },
                "vars": {
                  "revenue_local": {
                    "dims": [
                      "market",
                      "date"
                    ],
                    "dtype": "float64",
                    "role": "target"
                  },
                  "spend_local": {
                    "dims": [
                      "market",
                      "channel",
                      "date"
                    ],
                    "dtype": "float64",
                    "future_required": true,
                    "role": "spend"
                  }
                }
              },
              "inputs_stage": "raw",
              "representation": "draws",
              "schema_hash": "sha256:5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a",
              "score_modes": [
                "counterfactual",
                "evaluate",
                "forecast",
                "predict"
              ]
            },
            "tenant_id": "acme",
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "alias": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Alias",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "evaluation_policy": {
            "$ref": "#/components/schemas/EvaluationPolicy"
          },
          "gate": {
            "$ref": "#/components/schemas/PromotionGateDecision"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "model_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Model Id",
            "type": "string"
          },
          "model_ref": {
            "description": "model://project/name@vN",
            "title": "Model Ref",
            "type": "string"
          },
          "model_version_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Model Version Id",
            "type": "string"
          },
          "overridden": {
            "default": false,
            "description": "The current version was promoted by override",
            "title": "Overridden",
            "type": "boolean"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "promoted_at": {
            "format": "date-time",
            "title": "Promoted At",
            "type": "string"
          },
          "promoted_by": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Promoted By"
          },
          "ref": {
            "description": "endpoint://project/alias",
            "title": "Ref",
            "type": "string"
          },
          "revision": {
            "description": "Increases with every promotion and rollback",
            "minimum": 1.0,
            "title": "Revision",
            "type": "integer"
          },
          "schema_snapshot": {
            "$ref": "#/components/schemas/EndpointSchemaSnapshot"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "alias",
          "tenant_id",
          "project_id",
          "ref",
          "model_id",
          "model_version_id",
          "model_ref",
          "revision",
          "schema_snapshot",
          "gate",
          "promoted_at",
          "created_at",
          "updated_at"
        ],
        "title": "Endpoint",
        "type": "object"
      },
      "EndpointPromote": {
        "additionalProperties": false,
        "description": "``PUT /v1/endpoints/{alias}``: create the alias or point it at another version.\n\nName the version by id or by ``model://project/name@vN`` (exactly one). A version whose\ngate says ``needs_override`` needs ``override=true`` and a ``reason`` from a signed-in\nproject admin (audited); ``blocked`` versions cannot be promoted. ``expected_revision``\nguards against concurrent promotions (``409 CONFLICT`` when stale).",
        "examples": [
          {
            "expected_revision": 3,
            "model": "model://growth/eu-geo-mmm@v3"
          },
          {
            "model_version_id": "mv_01jaf3e1f2g3h4j5k6m7n8p9q0",
            "override": true,
            "reason": "Holdout MAPE is high because of the strike in week 41; accepted by CMO."
          }
        ],
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "evaluation_policy": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EvaluationPolicy"
              },
              {
                "type": "null"
              }
            ]
          },
          "expected_revision": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "0: the alias must be new",
            "title": "Expected Revision"
          },
          "model": {
            "anyOf": [
              {
                "pattern": "^model://[a-z0-9_-]+/[a-z0-9_-]+@v[0-9]+$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "model_version_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version Id"
          },
          "override": {
            "default": false,
            "title": "Override",
            "type": "boolean"
          },
          "reason": {
            "anyOf": [
              {
                "maxLength": 1000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          }
        },
        "title": "EndpointPromote",
        "type": "object"
      },
      "EndpointRevision": {
        "description": "One entry of an endpoint's history (newest first in ``GET …/history``).",
        "examples": [
          {
            "action": "promote",
            "actor_id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "alias": "geo-mmm-prod",
            "created_at": "2026-10-15T09:30:00Z",
            "gate": {
              "failing_checks": [
                "holdout.mape"
              ],
              "outcome": "needs_override",
              "reasons": [
                {
                  "check": "holdout.mape",
                  "code": "SCORECARD_WARN",
                  "message_plain": "Holdout error: the forecast error was 14%.",
                  "outcome": "needs_override"
                }
              ],
              "scorecard_overall": "warn"
            },
            "model_ref": "model://growth/eu-geo-mmm@v3",
            "model_version_id": "mv_01jaf3e1f2g3h4j5k6m7n8p9q0",
            "overridden": true,
            "previous_model_version_id": "mv_01jaf3e0f0g0h0j0k0m0n0p0q0",
            "reason": "Holdout MAPE is high because of the strike in week 41.",
            "revision": 4
          }
        ],
        "properties": {
          "action": {
            "enum": [
              "promote",
              "rollback"
            ],
            "title": "Action",
            "type": "string"
          },
          "actor_id": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor Id"
          },
          "alias": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Alias",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "gate": {
            "$ref": "#/components/schemas/PromotionGateDecision"
          },
          "model_ref": {
            "title": "Model Ref",
            "type": "string"
          },
          "model_version_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Model Version Id",
            "type": "string"
          },
          "overridden": {
            "default": false,
            "title": "Overridden",
            "type": "boolean"
          },
          "previous_model_version_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previous Model Version Id"
          },
          "reason": {
            "anyOf": [
              {
                "maxLength": 1000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "revision": {
            "minimum": 1.0,
            "title": "Revision",
            "type": "integer"
          },
          "token_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Token Id"
          }
        },
        "required": [
          "alias",
          "revision",
          "action",
          "model_version_id",
          "model_ref",
          "gate",
          "created_at"
        ],
        "title": "EndpointRevision",
        "type": "object"
      },
      "EndpointRollback": {
        "additionalProperties": false,
        "description": "``POST /v1/endpoints/{alias}/rollback``: point the alias back at the version of an\nearlier revision (default: the one before the current). The gate is not re-run - the\nversion was promoted before - but the rollback is audited with its reason. M3.5: when a\ngovernance policy requires validated models, the earlier version must still be\n``validated`` (``NOT_VALIDATED`` otherwise).",
        "examples": [
          {
            "reason": "v3 over-forecasts after the price change"
          }
        ],
        "properties": {
          "reason": {
            "maxLength": 1000,
            "minLength": 1,
            "title": "Reason",
            "type": "string"
          },
          "to_revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "To Revision"
          }
        },
        "required": [
          "reason"
        ],
        "title": "EndpointRollback",
        "type": "object"
      },
      "EndpointSchema": {
        "description": "``GET /v1/endpoints/{alias}/schema``: what to send, with a ready example payload.",
        "examples": [
          {
            "alias": "geo-mmm-prod",
            "example": {
              "future_covariates": "carry_last",
              "horizon": {
                "dim": "time",
                "periods": 8
              },
              "mode": "forecast",
              "output": {
                "kind": "expected",
                "summary": [
                  "mean",
                  "hdi_90"
                ]
              }
            },
            "model_ref": "model://growth/eu-geo-mmm@v3",
            "ref": "endpoint://growth/geo-mmm-prod",
            "revision": 4,
            "snapshot": {
              "fit_coords": {
                "channel": {
                  "kind": "categorical",
                  "size": 2,
                  "values": [
                    "search",
                    "tv"
                  ]
                },
                "date": {
                  "end": "2025-12-30",
                  "freq": "D",
                  "kind": "time",
                  "size": 730,
                  "start": "2024-01-01"
                },
                "market": {
                  "kind": "categorical",
                  "size": 2,
                  "values": [
                    "de",
                    "fr"
                  ]
                }
              },
              "future_required": [
                "spend_local"
              ],
              "horizon_dim": "time",
              "input_schema": {
                "dims": {
                  "channel": {
                    "kind": "categorical"
                  },
                  "date": {
                    "freq": "D",
                    "kind": "time",
                    "policy": "extend"
                  },
                  "market": {
                    "kind": "categorical",
                    "new_level_strategy": "pooled",
                    "policy": "new_levels"
                  }
                },
                "vars": {
                  "revenue_local": {
                    "dims": [
                      "market",
                      "date"
                    ],
                    "dtype": "float64",
                    "role": "target"
                  },
                  "spend_local": {
                    "dims": [
                      "market",
                      "channel",
                      "date"
                    ],
                    "dtype": "float64",
                    "future_required": true,
                    "role": "spend"
                  }
                }
              },
              "inputs_stage": "raw",
              "representation": "draws",
              "schema_hash": "sha256:5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a",
              "score_modes": [
                "counterfactual",
                "evaluate",
                "forecast",
                "predict"
              ]
            }
          }
        ],
        "properties": {
          "actuals_example": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "For endpoints whose model conditions forecasts on actuals: a forecast call with inline data over the periods after the fit, the target empty (null). Fill the target with the actuals you have and leave it empty for the periods to forecast (example_actuals_call)",
            "title": "Actuals Example"
          },
          "alias": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Alias",
            "type": "string"
          },
          "example": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "description": "An EndpointScoreCall body that validates against this endpoint",
            "title": "Example",
            "type": "object"
          },
          "input_table": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InputTable"
              },
              {
                "type": "null"
              }
            ],
            "description": "The inline input as a long table (a spreadsheet's Input sheet): the columns and, for forecasts, the periods after the fit to fill in (input_table)"
          },
          "max_inline_bytes": {
            "default": 5242880,
            "title": "Max Inline Bytes",
            "type": "integer"
          },
          "model_ref": {
            "title": "Model Ref",
            "type": "string"
          },
          "ref": {
            "title": "Ref",
            "type": "string"
          },
          "revision": {
            "minimum": 1.0,
            "title": "Revision",
            "type": "integer"
          },
          "snapshot": {
            "$ref": "#/components/schemas/EndpointSchemaSnapshot"
          }
        },
        "required": [
          "alias",
          "ref",
          "model_ref",
          "revision",
          "snapshot",
          "example"
        ],
        "title": "EndpointSchema",
        "type": "object"
      },
      "EndpointSchemaSnapshot": {
        "description": "The input contract of the promoted version, frozen at promotion: what callers send.\n\n``input_schema`` is the schema at ``inputs_stage`` under the spec's canonical names\n(``data.bind`` applied: ``time``, ``y``), which inline payloads use; the runner renames\nthem to the dataset's own names before scoring. ``horizon_dim`` is the canonical name of\nthe dim a forecast extends. ``conditions_on_actuals``: forecasts can carry actuals\n(target values for periods after the fit) that the model updates its state with\n(:mod:`mapi_spec.actuals`); the server sets it from the capabilities of the plugin\nbuild that serves the endpoint now, not only from those at fit.",
        "examples": [
          {
            "fit_coords": {
              "channel": {
                "kind": "categorical",
                "size": 2,
                "values": [
                  "search",
                  "tv"
                ]
              },
              "date": {
                "end": "2025-12-30",
                "freq": "D",
                "kind": "time",
                "size": 730,
                "start": "2024-01-01"
              },
              "market": {
                "kind": "categorical",
                "size": 2,
                "values": [
                  "de",
                  "fr"
                ]
              }
            },
            "future_required": [
              "spend_local"
            ],
            "horizon_dim": "time",
            "input_schema": {
              "dims": {
                "channel": {
                  "kind": "categorical"
                },
                "date": {
                  "freq": "D",
                  "kind": "time",
                  "policy": "extend"
                },
                "market": {
                  "kind": "categorical",
                  "new_level_strategy": "pooled",
                  "policy": "new_levels"
                }
              },
              "vars": {
                "revenue_local": {
                  "dims": [
                    "market",
                    "date"
                  ],
                  "dtype": "float64",
                  "role": "target"
                },
                "spend_local": {
                  "dims": [
                    "market",
                    "channel",
                    "date"
                  ],
                  "dtype": "float64",
                  "future_required": true,
                  "role": "spend"
                }
              }
            },
            "inputs_stage": "raw",
            "representation": "draws",
            "schema_hash": "sha256:5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a",
            "score_modes": [
              "counterfactual",
              "evaluate",
              "forecast",
              "predict"
            ]
          }
        ],
        "properties": {
          "conditions_on_actuals": {
            "default": false,
            "title": "Conditions On Actuals",
            "type": "boolean"
          },
          "fit_coords": {
            "additionalProperties": {
              "$ref": "#/components/schemas/CoordSummary"
            },
            "title": "Fit Coords",
            "type": "object"
          },
          "future_required": {
            "items": {
              "type": "string"
            },
            "title": "Future Required",
            "type": "array"
          },
          "horizon_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon Dim"
          },
          "input_schema": {
            "$ref": "#/components/schemas/DataSchema"
          },
          "inputs_stage": {
            "default": "raw",
            "title": "Inputs Stage",
            "type": "string"
          },
          "representation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Representation"
              },
              {
                "type": "null"
              }
            ]
          },
          "schema_hash": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Schema Hash",
            "type": "string"
          },
          "score_modes": {
            "items": {
              "enum": [
                "predict",
                "forecast",
                "counterfactual",
                "simulate",
                "filter",
                "evaluate"
              ],
              "type": "string"
            },
            "title": "Score Modes",
            "type": "array"
          }
        },
        "required": [
          "input_schema",
          "schema_hash"
        ],
        "title": "EndpointSchemaSnapshot",
        "type": "object"
      },
      "EndpointScoreCall": {
        "additionalProperties": false,
        "description": "``POST /v1/endpoints/{alias}/score`` (and ``…/validate``): a score request for the\nendpoint's current version.\n\n``data``/``scenario`` are ``dataset://`` references or inline XrJSON datasets (up to\n5 MB; :mod:`mapi_spec.xrjson`). Send ``Prefer: wait=N`` (N ≤ 60) to wait: 200 with the\nresult when the run finishes in time, else 202 with the run.",
        "examples": [
          {
            "future_covariates": "carry_last",
            "horizon": {
              "dim": "time",
              "periods": 8
            },
            "mode": "forecast",
            "output": {
              "kind": "expected",
              "summary": [
                "mean",
                "hdi_90"
              ]
            }
          },
          {
            "data": {
              "coords": {
                "channel": {
                  "data": [
                    "search",
                    "tv"
                  ],
                  "dims": [
                    "channel"
                  ]
                },
                "date": {
                  "data": [
                    "2025-12-30"
                  ],
                  "dims": [
                    "date"
                  ]
                },
                "market": {
                  "data": [
                    "de"
                  ],
                  "dims": [
                    "market"
                  ]
                }
              },
              "data_vars": {
                "spend_local": {
                  "data": [
                    [
                      [
                        1200.0
                      ],
                      [
                        5300.0
                      ]
                    ]
                  ],
                  "dims": [
                    "market",
                    "channel",
                    "date"
                  ]
                }
              }
            },
            "mode": "predict"
          }
        ],
        "properties": {
          "data": {
            "anyOf": [
              {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              },
              {
                "$ref": "#/components/schemas/XrJsonDataset"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data"
          },
          "future_covariates": {
            "$ref": "#/components/schemas/FutureCovariates",
            "default": "supplied"
          },
          "horizon": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Horizon"
              },
              {
                "type": "null"
              }
            ]
          },
          "inputs_stage": {
            "default": "raw",
            "pattern": "^[a-z_][a-z0-9_]{0,62}$",
            "title": "Inputs Stage",
            "type": "string"
          },
          "interventions": {
            "items": {
              "$ref": "#/components/schemas/Intervention"
            },
            "maxItems": 256,
            "title": "Interventions",
            "type": "array"
          },
          "labels": {
            "maxProperties": 64,
            "patternProperties": {
              "^[a-z0-9]([a-z0-9_.\\-/]{0,62})$": {
                "maxLength": 63,
                "pattern": "^[A-Za-z0-9_.\\-]*$",
                "type": "string"
              }
            },
            "title": "Labels",
            "type": "object"
          },
          "mode": {
            "default": "predict",
            "enum": [
              "predict",
              "forecast",
              "counterfactual",
              "simulate",
              "filter",
              "evaluate"
            ],
            "title": "Mode",
            "type": "string"
          },
          "output": {
            "$ref": "#/components/schemas/OutputSelector"
          },
          "resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "scenario": {
            "anyOf": [
              {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              },
              {
                "$ref": "#/components/schemas/XrJsonDataset"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scenario"
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          },
          "select": {
            "maxProperties": 64,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "title": "Select",
            "type": "object"
          },
          "side_tables": {
            "maxProperties": 32,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              }
            },
            "title": "Side Tables",
            "type": "object"
          },
          "timeout": {
            "anyOf": [
              {
                "description": "Duration such as '45m', '1h30m' or '90s'.",
                "examples": [
                  "45m",
                  "1h30m"
                ],
                "pattern": "^(?=.)(\\d+h)?(\\d+m)?(\\d+s)?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timeout"
          }
        },
        "title": "EndpointScoreCall",
        "type": "object"
      },
      "EndpointValidation": {
        "description": "``POST /v1/endpoints/{alias}/validate``: the static checks of a score call (CoordPlan,\ncapabilities, inline payload envelope) without running it.",
        "examples": [
          {
            "issues": [
              {
                "code": "MISSING_FUTURE_COVARIATE",
                "message": "the forecast needs future values of ['spend'] at stage 'raw'",
                "pointer": "/scenario",
                "severity": "error",
                "suggested_action": "Supply them in a scenario dataset."
              }
            ],
            "valid": false
          }
        ],
        "properties": {
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "request": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ScoreRequest"
              },
              {
                "type": "null"
              }
            ]
          },
          "valid": {
            "title": "Valid",
            "type": "boolean"
          }
        },
        "required": [
          "valid"
        ],
        "title": "EndpointValidation",
        "type": "object"
      },
      "ErrorCode": {
        "description": "Stable error codes. See :data:`ERROR_INFO` for HTTP status and titles.",
        "enum": [
          "SCHEMA_INVALID",
          "SPEC_PARSE_ERROR",
          "PAYLOAD_TOO_LARGE",
          "UNSUPPORTED_API_VERSION",
          "REF_UNRESOLVED",
          "SETTINGS_INVALID",
          "BINDING_INVALID",
          "SPLIT_INVALID",
          "LEAKAGE_RISK",
          "DIM_POLICY_LOOSENED",
          "SCHEMA_DYNAMIC",
          "SIDE_TABLE_COVERAGE",
          "PLOT_UNSAFE",
          "UNSEEN_LEVELS",
          "COORD_NOT_ALLOWED",
          "HORIZON_EXCEEDS_FIT",
          "MISSING_FUTURE_COVARIATE",
          "NON_CONTIGUOUS_EXTENSION",
          "CAPABILITY_UNSUPPORTED",
          "RECURSIVE_UNSUPPORTED",
          "MODE_NOT_SUPPORTED",
          "QUOTA_EXCEEDED",
          "RATE_LIMITED",
          "UNAUTHENTICATED",
          "FORBIDDEN",
          "NOT_FOUND",
          "CONFLICT",
          "IDEMPOTENCY_CONFLICT",
          "PRECONDITION_FAILED",
          "USER_CODE_ERROR",
          "RESOURCE_EXHAUSTED",
          "INFRA_ERROR",
          "INTEGRITY_FAILURE",
          "TIMEOUT",
          "SANDBOX_VIOLATION",
          "CANCELLED",
          "INTERNAL_ERROR",
          "GUIDED_ANSWERS_INVALID",
          "BUSINESS_PRIORS_INVALID",
          "CALIBRATION_UNSUPPORTED",
          "IMPORT_UNSUPPORTED",
          "SCENARIO_OUT_OF_RANGE",
          "PROMOTION_BLOCKED",
          "OVERRIDE_REQUIRED",
          "WEBHOOK_URL_BLOCKED",
          "WEBHOOK_SIGNATURE_INVALID",
          "EMBED_NOT_ALLOWED",
          "LINK_EXPIRED",
          "EMAIL_NOT_ALLOWED",
          "TERMS_NOT_ACCEPTED",
          "EMAIL_NOT_VERIFIED",
          "IDENTITY_VERIFICATION_REQUIRED",
          "ABOUT_INCOMPLETE",
          "CHOOSER_ANSWER_INVALID",
          "WORKFLOW_INVALID",
          "EXPRESSION_INVALID",
          "EXPRESSION_ERROR",
          "NODE_UNKNOWN",
          "SCHEDULE_INVALID",
          "WORKFLOW_NOT_RUNNABLE",
          "POLICY_INVALID",
          "VALIDATION_TRANSITION_INVALID",
          "SELF_APPROVAL_FORBIDDEN",
          "NOT_VALIDATED",
          "EXPLORE_INVALID",
          "OPTIMIZE_INFEASIBLE",
          "ACTUALS_NOT_SUPPORTED",
          "ACTUALS_INVALID",
          "NOT_READY",
          "INGEST_UNSAFE_FILE"
        ],
        "title": "ErrorCode",
        "type": "string"
      },
      "ErrorPayload": {
        "additionalProperties": false,
        "description": "``error``: the run failed; ``message`` is platform-authored, plugin text is untrusted.",
        "properties": {
          "code": {
            "$ref": "#/components/schemas/ErrorCode"
          },
          "errors": {
            "description": "The typed issues the run failed with (M4), e.g. an INGEST_UNSAFE_FILE refusal: their codes are what clients branch on; text the worker reported is untrusted_text",
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "maxItems": 20,
            "title": "Errors",
            "type": "array"
          },
          "failure_class": {
            "$ref": "#/components/schemas/FailureClass"
          },
          "message": {
            "maxLength": 2000,
            "title": "Message",
            "type": "string"
          },
          "untrusted_text": {
            "anyOf": [
              {
                "maxLength": 65536,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Untrusted Text"
          }
        },
        "required": [
          "code",
          "failure_class",
          "message"
        ],
        "title": "ErrorPayload",
        "type": "object"
      },
      "EvaluateCall": {
        "additionalProperties": false,
        "description": "Body of ``…:evaluate`` (holdout metrics through the score path).",
        "properties": {
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 64,
            "title": "Labels",
            "type": "object"
          },
          "params": {
            "additionalProperties": true,
            "title": "Params",
            "type": "object"
          }
        },
        "title": "EvaluateCall",
        "type": "object"
      },
      "EvaluationPolicy": {
        "additionalProperties": false,
        "description": "What a model version must satisfy to be promoted to the endpoint (Q13).\n\n``fit_mode = evaluate_then_refit`` (default) requires versions whose production bundle\nwas refitted on all data after the holdout evaluation; ``train_only`` also accepts\nexploration fits. ``schema_change`` decides what happens when the new version expects\ninput the endpoint's callers do not send (:func:`schema_breaks`).",
        "examples": [
          {
            "fit_mode": "evaluate_then_refit",
            "schema_change": "block"
          }
        ],
        "properties": {
          "fit_mode": {
            "$ref": "#/components/schemas/FitMode",
            "default": "evaluate_then_refit"
          },
          "schema_change": {
            "default": "block",
            "enum": [
              "block",
              "warn",
              "allow"
            ],
            "title": "Schema Change",
            "type": "string"
          }
        },
        "title": "EvaluationPolicy",
        "type": "object"
      },
      "EvidenceItem": {
        "description": "One piece of evidence behind a check: a number, a small table, a plot or a stored\nartifact (``ref`` is a run artifact name or a ``model://`` reference).",
        "properties": {
          "caption_plain": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Caption Plain"
          },
          "inline": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "kind": {
            "enum": [
              "metric",
              "table",
              "plot",
              "artifact",
              "text"
            ],
            "title": "Kind",
            "type": "string"
          },
          "name": {
            "maxLength": 200,
            "title": "Name",
            "type": "string"
          },
          "ref": {
            "anyOf": [
              {
                "maxLength": 512,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ref"
          },
          "run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Id"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value"
          }
        },
        "required": [
          "kind",
          "name"
        ],
        "title": "EvidenceItem",
        "type": "object"
      },
      "EvidencePack": {
        "description": "The audit export of a validation (``format`` ``mapi.evidence-pack/v1``; the HTML\nrendering is a static, script-free document with the same content).",
        "examples": [
          {
            "generated_at": "2026-10-15T09:30:00Z",
            "lineage": {
              "dataset": "dataset://growth/weekly_sales@v4",
              "plugin": "mmm.bayesian@1.0.0"
            },
            "model_ref": "model://growth/geo-mmm@v7",
            "policies": [
              {
                "checks": [
                  {
                    "check": "convergence"
                  },
                  {
                    "check": "data.quality"
                  },
                  {
                    "check": "null.permutation_target"
                  }
                ],
                "created_at": "2026-10-15T09:30:00Z",
                "id": "pol_01jaf3h1j2k3m4n5p6q7r8s9t0",
                "name": "All models",
                "require_approval": true,
                "scope": "tenant",
                "tenant_id": "acme",
                "version": 3
              }
            ],
            "validation": {
              "id": "val_01jaf3k1m2n3p4q5r6s7t8v9w0",
              "model_id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
              "policies": [
                "pol_01jaf3h1j2k3m4n5p6q7r8s9t0@3"
              ],
              "project_id": "growth",
              "require_approval": true,
              "results": [
                {
                  "check": "null.permutation_target",
                  "computed_at": "2026-10-15T09:30:00Z",
                  "evidence": [
                    {
                      "inline": {
                        "real": 0.081,
                        "shuffled_min": 0.079
                      },
                      "kind": "table",
                      "name": "permutation_scores"
                    }
                  ],
                  "message_plain": "The model was better than 19 of the 20 fits on shuffled data.",
                  "metric": "permutation_p_value",
                  "severity": "blocking",
                  "status": "pass",
                  "threshold": 0.05,
                  "value": 0.048
                }
              ],
              "status": "awaiting_approval",
              "submitted_at": "2026-10-15T09:30:00Z",
              "submitted_by": "usr_01jaf3a0b0c0d0e0f0g0h0j0k0",
              "tenant_id": "acme",
              "updated_at": "2026-10-15T09:30:00Z",
              "version": 7
            }
          }
        ],
        "properties": {
          "digest": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "sha256 of the canonical JSON content",
            "title": "Digest"
          },
          "download": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "Signed link to the HTML rendering (ArtifactLink)",
            "title": "Download"
          },
          "format": {
            "const": "mapi.evidence-pack/v1",
            "default": "mapi.evidence-pack/v1",
            "title": "Format",
            "type": "string"
          },
          "generated_at": {
            "format": "date-time",
            "title": "Generated At",
            "type": "string"
          },
          "generated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generated By"
          },
          "lineage": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Lineage",
            "type": "object"
          },
          "model_ref": {
            "description": "model://project/name@vN",
            "title": "Model Ref",
            "type": "string"
          },
          "policies": {
            "items": {
              "$ref": "#/components/schemas/GovernancePolicy"
            },
            "title": "Policies",
            "type": "array"
          },
          "scorecard": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scorecard"
          },
          "validation": {
            "$ref": "#/components/schemas/ModelValidation"
          }
        },
        "required": [
          "validation",
          "model_ref",
          "generated_at"
        ],
        "title": "EvidencePack",
        "type": "object"
      },
      "EvidencePackRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/validations/{validation_id}/evidence-pack``.",
        "examples": [
          {
            "format": "html",
            "include_plots": true
          }
        ],
        "properties": {
          "format": {
            "default": "html",
            "enum": [
              "html",
              "json"
            ],
            "title": "Format",
            "type": "string"
          },
          "include_plots": {
            "default": true,
            "title": "Include Plots",
            "type": "boolean"
          }
        },
        "title": "EvidencePackRequest",
        "type": "object"
      },
      "ExecutorAttestation": {
        "description": "One recorded suite result, bound to the caps it was measured against.",
        "examples": [
          {
            "caps": {
              "checkpoint_storage": true,
              "classes": [
                "S",
                "M",
                "L"
              ],
              "dns_enforced": true,
              "egress_enforced": true,
              "isolation": 3,
              "max_runtime": "1h",
              "max_tasks": 10000,
              "regions": [
                "europe-west1"
              ]
            },
            "expires_at": "2026-10-18T09:30:00Z",
            "passed": true,
            "recorded_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "caps": {
            "$ref": "#/components/schemas/ExecutorCaps"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "passed": {
            "title": "Passed",
            "type": "boolean"
          },
          "recorded_at": {
            "format": "date-time",
            "title": "Recorded At",
            "type": "string"
          },
          "recorded_by": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recorded By"
          }
        },
        "required": [
          "caps",
          "passed",
          "recorded_at",
          "expires_at"
        ],
        "title": "ExecutorAttestation",
        "type": "object"
      },
      "ExecutorCaps": {
        "additionalProperties": false,
        "description": "What an executor can do; placement rules are enforced against these.",
        "properties": {
          "checkpoint_storage": {
            "default": false,
            "title": "Checkpoint Storage",
            "type": "boolean"
          },
          "classes": {
            "items": {
              "$ref": "#/components/schemas/ResourceClass"
            },
            "title": "Classes",
            "type": "array"
          },
          "dns_enforced": {
            "default": false,
            "title": "Dns Enforced",
            "type": "boolean"
          },
          "egress_enforced": {
            "default": false,
            "title": "Egress Enforced",
            "type": "boolean"
          },
          "gpus": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Gpus",
            "type": "array"
          },
          "isolation": {
            "$ref": "#/components/schemas/Isolation"
          },
          "max_runtime": {
            "description": "Duration such as '45m', '1h30m' or '90s'.",
            "examples": [
              "45m",
              "1h30m"
            ],
            "pattern": "^(?=.)(\\d+h)?(\\d+m)?(\\d+s)?$",
            "title": "Max Runtime",
            "type": "string"
          },
          "max_tasks": {
            "default": 1,
            "minimum": 1.0,
            "title": "Max Tasks",
            "type": "integer"
          },
          "regions": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Regions",
            "type": "array"
          }
        },
        "required": [
          "isolation"
        ],
        "title": "ExecutorCaps",
        "type": "object"
      },
      "ExecutorEvidence": {
        "description": "The conformance and security-suite evidence recorded for one executor.",
        "examples": [
          {
            "conformance": {
              "environment": "nightly",
              "executor": "cloudrun-jobs",
              "finished_at": "2026-10-15T02:24:00Z",
              "results": [
                {
                  "case_id": "submit",
                  "duration_seconds": 61.0,
                  "outcome": "passed"
                },
                {
                  "case_id": "rate_limit_backoff",
                  "duration_seconds": 33.5,
                  "outcome": "passed"
                }
              ],
              "started_at": "2026-10-15T02:00:00Z",
              "suite_version": "1"
            },
            "conformance_attestation": {
              "caps": {
                "checkpoint_storage": true,
                "classes": [
                  "S",
                  "M",
                  "L"
                ],
                "dns_enforced": true,
                "egress_enforced": true,
                "isolation": 3,
                "max_runtime": "1h",
                "max_tasks": 10000,
                "regions": [
                  "europe-west1"
                ]
              },
              "expires_at": "2026-10-18T09:30:00Z",
              "passed": true,
              "recorded_at": "2026-10-15T09:30:00Z"
            },
            "executor": "cloudrun-jobs",
            "security": {
              "executor": "cloudrun-jobs",
              "isolation": "microvm",
              "ok": true,
              "rows": [
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "http_egress"
                },
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "dns_egress"
                },
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "metadata_token"
                }
              ],
              "started_at": "2026-10-15T02:30:00Z",
              "unexpected": []
            },
            "security_attestation": {
              "caps": {
                "checkpoint_storage": true,
                "classes": [
                  "S",
                  "M",
                  "L"
                ],
                "dns_enforced": true,
                "egress_enforced": true,
                "isolation": 3,
                "max_runtime": "1h",
                "max_tasks": 10000,
                "regions": [
                  "europe-west1"
                ]
              },
              "expires_at": "2026-10-18T09:30:00Z",
              "passed": true,
              "recorded_at": "2026-10-15T09:30:00Z"
            }
          }
        ],
        "properties": {
          "conformance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ConformanceReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "conformance_attestation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ExecutorAttestation"
              },
              {
                "type": "null"
              }
            ]
          },
          "executor": {
            "pattern": "^[a-z][a-z0-9-]{0,63}$",
            "title": "Executor",
            "type": "string"
          },
          "security": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SecuritySuiteReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "security_attestation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ExecutorAttestation"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "executor"
        ],
        "title": "ExecutorEvidence",
        "type": "object"
      },
      "ExecutorEvidenceUpdate": {
        "additionalProperties": false,
        "description": "Record suite results for an executor (``PUT /v1/admin/executors/{name}/evidence``).\n\n``target`` is what the suites ran against (the executor's caps plus the facts its caps do\nnot express); the evidence only counts while the executor still reports those caps.\nEach report given replaces the stored one of its kind.",
        "examples": [
          {
            "conformance": {
              "environment": "nightly",
              "executor": "cloudrun-jobs",
              "finished_at": "2026-10-15T02:24:00Z",
              "results": [
                {
                  "case_id": "submit",
                  "duration_seconds": 61.0,
                  "outcome": "passed"
                },
                {
                  "case_id": "rate_limit_backoff",
                  "duration_seconds": 33.5,
                  "outcome": "passed"
                }
              ],
              "started_at": "2026-10-15T02:00:00Z",
              "suite_version": "1"
            },
            "security": {
              "executor": "cloudrun-jobs",
              "isolation": "microvm",
              "ok": true,
              "rows": [
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "http_egress"
                },
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "dns_egress"
                },
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "metadata_token"
                }
              ],
              "started_at": "2026-10-15T02:30:00Z",
              "unexpected": []
            },
            "target": {
              "caps": {
                "checkpoint_storage": true,
                "classes": [
                  "S",
                  "M",
                  "L"
                ],
                "dns_enforced": true,
                "egress_enforced": true,
                "isolation": 3,
                "max_runtime": "1h",
                "max_tasks": 10000,
                "regions": [
                  "europe-west1"
                ]
              },
              "executor": "cloudrun-jobs"
            }
          }
        ],
        "properties": {
          "conformance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ConformanceReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "security": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SecuritySuiteReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "target": {
            "$ref": "#/components/schemas/ConformanceTarget"
          }
        },
        "required": [
          "target"
        ],
        "title": "ExecutorEvidenceUpdate",
        "type": "object"
      },
      "ExecutorHealth": {
        "description": "One executor as the admin console shows it.",
        "examples": [
          {
            "allows_public_tenants": true,
            "caps": {
              "checkpoint_storage": true,
              "classes": [
                "S",
                "M",
                "L"
              ],
              "dns_enforced": true,
              "egress_enforced": true,
              "isolation": 3,
              "max_runtime": "1h",
              "max_tasks": 10000,
              "regions": [
                "europe-west1"
              ]
            },
            "checked_at": "2026-10-15T09:30:00Z",
            "conformance": {
              "environment": "nightly",
              "executor": "cloudrun-jobs",
              "finished_at": "2026-10-15T02:24:00Z",
              "results": [
                {
                  "case_id": "submit",
                  "duration_seconds": 61.0,
                  "outcome": "passed"
                },
                {
                  "case_id": "rate_limit_backoff",
                  "duration_seconds": 33.5,
                  "outcome": "passed"
                }
              ],
              "started_at": "2026-10-15T02:00:00Z",
              "suite_version": "1"
            },
            "conformance_passed": true,
            "enabled": true,
            "failures_last_hour": 1,
            "last_success_at": "2026-10-15T09:30:00Z",
            "name": "cloudrun-jobs",
            "queued_runs": 4,
            "regions": [
              "europe-west1"
            ],
            "running_executions": 37,
            "security": {
              "executor": "cloudrun-jobs",
              "isolation": "microvm",
              "ok": true,
              "rows": [
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "http_egress"
                },
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "dns_egress"
                },
                {
                  "category": "isolation",
                  "outcome": "blocked",
                  "probe_id": "metadata_token"
                }
              ],
              "started_at": "2026-10-15T02:30:00Z",
              "unexpected": []
            },
            "security_passed": true,
            "shared_tiers_enabled": true,
            "status": "ok",
            "submit_rate_limit_per_minute": 180,
            "submits_last_minute": 52,
            "throttled_last_hour": 0
          }
        ],
        "properties": {
          "allows_public_tenants": {
            "title": "Allows Public Tenants",
            "type": "boolean"
          },
          "caps": {
            "$ref": "#/components/schemas/ExecutorCaps"
          },
          "checked_at": {
            "format": "date-time",
            "title": "Checked At",
            "type": "string"
          },
          "conformance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ConformanceReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "conformance_passed": {
            "default": false,
            "description": "A passing, unexpired conformance report for the current caps",
            "title": "Conformance Passed",
            "type": "boolean"
          },
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          },
          "failures_last_hour": {
            "default": 0,
            "description": "Attempts failed as infra errors",
            "minimum": 0.0,
            "title": "Failures Last Hour",
            "type": "integer"
          },
          "last_success_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Success At"
          },
          "message": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "name": {
            "pattern": "^[a-z][a-z0-9-]{0,63}$",
            "title": "Name",
            "type": "string"
          },
          "queued_runs": {
            "default": 0,
            "minimum": 0.0,
            "title": "Queued Runs",
            "type": "integer"
          },
          "regions": {
            "items": {
              "type": "string"
            },
            "title": "Regions",
            "type": "array"
          },
          "running_executions": {
            "default": 0,
            "minimum": 0.0,
            "title": "Running Executions",
            "type": "integer"
          },
          "security": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SecuritySuiteReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "security_passed": {
            "default": false,
            "description": "A passing, unexpired security-suite report for the current caps",
            "title": "Security Passed",
            "type": "boolean"
          },
          "shared_tiers_enabled": {
            "default": false,
            "description": "May take verified and public tenants: the caps allow it and both suites passed for these caps (plan §8.4)",
            "title": "Shared Tiers Enabled",
            "type": "boolean"
          },
          "status": {
            "$ref": "#/components/schemas/ExecutorStatus"
          },
          "submit_rate_limit_per_minute": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Submit Rate Limit Per Minute"
          },
          "submits_last_minute": {
            "default": 0,
            "minimum": 0.0,
            "title": "Submits Last Minute",
            "type": "integer"
          },
          "throttled_last_hour": {
            "default": 0,
            "description": "429 answers from the backend",
            "minimum": 0.0,
            "title": "Throttled Last Hour",
            "type": "integer"
          }
        },
        "required": [
          "name",
          "enabled",
          "status",
          "caps",
          "allows_public_tenants",
          "checked_at"
        ],
        "title": "ExecutorHealth",
        "type": "object"
      },
      "ExecutorStatus": {
        "enum": [
          "ok",
          "degraded",
          "down",
          "disabled"
        ],
        "title": "ExecutorStatus",
        "type": "string"
      },
      "ExecutorUpdate": {
        "additionalProperties": false,
        "description": "``PUT /v1/admin/executors/{name}``: enable or disable an executor (audited).\n\nOrchestrators lease no new run onto a disabled executor. Runs already placed on it keep\nrunning: cancel them with ``cancel_untrusted_runs`` on the kill switches, or one by one.",
        "examples": [
          {
            "enabled": false,
            "reason": "incident 2026-10-15: suspected sandbox escape"
          }
        ],
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          },
          "reason": {
            "maxLength": 500,
            "minLength": 3,
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "reason"
        ],
        "title": "ExecutorUpdate",
        "type": "object"
      },
      "ExpandingWindowPlan": {
        "additionalProperties": false,
        "description": "Training from the first period up to each origin.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the folds are cut at (a step id or 'raw'), as data.split",
            "title": "After Step"
          },
          "anchor": {
            "default": "end",
            "description": "end: the last test window ends at the last period",
            "enum": [
              "end",
              "start"
            ],
            "title": "Anchor",
            "type": "string"
          },
          "dim": {
            "default": "time",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "gap": {
            "default": 0,
            "description": "Periods between training and test (not scored)",
            "minimum": 0.0,
            "title": "Gap",
            "type": "integer"
          },
          "horizons": {
            "description": "Forecast horizons scored per fold",
            "items": {
              "type": "integer"
            },
            "maxItems": 32,
            "minItems": 1,
            "title": "Horizons",
            "type": "array"
          },
          "kind": {
            "const": "expanding_window",
            "title": "Kind",
            "type": "string"
          },
          "min_train": {
            "default": 1,
            "description": "Fewest training periods a fold may have",
            "minimum": 1.0,
            "title": "Min Train",
            "type": "integer"
          },
          "n_folds": {
            "anyOf": [
              {
                "maximum": 200.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "N Folds"
          },
          "step": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Periods between origins (default: max)",
            "title": "Step"
          }
        },
        "required": [
          "horizons",
          "kind"
        ],
        "title": "ExpandingWindowPlan",
        "type": "object"
      },
      "Experiment": {
        "description": "A named group of runs in a project (v0.14). A run is in at most one experiment.",
        "examples": [
          {
            "archived": false,
            "created_at": "2026-10-15T09:30:00Z",
            "created_by": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "description": "Compare adstock lengths 2, 4 and 8 on weekly sales.",
            "id": "exp_01jaf3f1g2h3j4k5m6n7p8q9r0",
            "last_run_at": "2026-10-15T10:30:00Z",
            "name": "adstock length study",
            "run_count": 6,
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "archived": {
            "default": false,
            "description": "An archived experiment accepts no new runs",
            "title": "Archived",
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Untrusted text",
            "title": "Description"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "last_run_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Run At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "run_count": {
            "default": 0,
            "minimum": 0.0,
            "title": "Run Count",
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "created_at",
          "updated_at"
        ],
        "title": "Experiment",
        "type": "object"
      },
      "ExperimentCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/experiments``: names are unique in a project (case is ignored).",
        "examples": [
          {
            "description": "Compare adstock lengths 2, 4 and 8.",
            "name": "adstock length study"
          }
        ],
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 20000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "ExperimentCreate",
        "type": "object"
      },
      "ExperimentPatch": {
        "additionalProperties": false,
        "description": "Merge patch of an experiment: a field left out is unchanged; ``description: null``\nclears the description (``name: null`` and ``archived: null`` change nothing).",
        "examples": [
          {
            "name": "adstock study (final)"
          },
          {
            "archived": true
          }
        ],
        "properties": {
          "archived": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 20000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "title": "ExperimentPatch",
        "type": "object"
      },
      "ExperimentRunsResult": {
        "description": "Runs moved, and the ids that are not runs of the project (nothing was done for them).",
        "examples": [
          {
            "added": 2,
            "removed": 0
          }
        ],
        "properties": {
          "added": {
            "minimum": 0.0,
            "title": "Added",
            "type": "integer"
          },
          "missing": {
            "items": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Missing",
            "type": "array"
          },
          "removed": {
            "minimum": 0.0,
            "title": "Removed",
            "type": "integer"
          }
        },
        "required": [
          "added",
          "removed"
        ],
        "title": "ExperimentRunsResult",
        "type": "object"
      },
      "ExperimentRunsWrite": {
        "additionalProperties": false,
        "description": "``POST /v1/experiments/{experiment_id}/runs``: move runs into the experiment (``add``;\na run leaves its previous experiment) or out of it (``remove``).",
        "examples": [
          {
            "add": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
              "run_01jaf3q2x8m9v7k5h4g3f2e1d1"
            ]
          },
          {
            "remove": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ]
          }
        ],
        "properties": {
          "add": {
            "items": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 200,
            "title": "Add",
            "type": "array"
          },
          "remove": {
            "items": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 200,
            "title": "Remove",
            "type": "array"
          }
        },
        "title": "ExperimentRunsWrite",
        "type": "object"
      },
      "Exploration": {
        "description": "``POST …/explore`` (``202``) and ``GET /v1/explorations/{run_id}``: the ``explore``\nrun and, once done, its index and signed links to every section view.",
        "examples": [
          {
            "done": true,
            "index": {
              "ref": "dataset://growth/weekly_sales@v4",
              "sections": [
                {
                  "section": "stationarity",
                  "view": "ui/explore/stationarity.json"
                }
              ],
              "target": "dataset"
            },
            "ref": "dataset://growth/weekly_sales@v4",
            "run": {
              "attempt": 1,
              "cost": {
                "estimated": true
              },
              "created_at": "2026-10-15T09:30:00Z",
              "executor": "local-process",
              "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
              "kind": "explore",
              "name": "weekly sales, adstock 4",
              "project_id": "default",
              "queued_at": "2026-10-15T09:30:00Z",
              "resource_class": "M",
              "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
              "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
              "spec_revision": 2,
              "started_at": "2026-10-15T09:30:05Z",
              "state": "succeeded",
              "tags": {
                "stage": "candidate",
                "team": "growth"
              },
              "tenant_id": "default",
              "timeout": "45m",
              "updated_at": "2026-10-15T09:31:00Z"
            },
            "target": "dataset",
            "views": [
              {
                "content_type": "application/zip",
                "crc32c": "4waSgw==",
                "expires_at": "2026-10-15T09:45:00Z",
                "generation": 7,
                "name": "ui/explore/stationarity.json",
                "size": 2097152,
                "url": "http://127.0.0.1:4443/download/storage/v1/b/mapi-local-bundles/o/t%2Fdefault%2Fmodels%2Fmdl_01%2F1%2Fbundle.zarr.zip?generation=7&X-Goog-Signature=…"
              }
            ]
          }
        ],
        "properties": {
          "done": {
            "title": "Done",
            "type": "boolean"
          },
          "index": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ExplorerIndex"
              },
              {
                "type": "null"
              }
            ]
          },
          "ref": {
            "maxLength": 512,
            "title": "Ref",
            "type": "string"
          },
          "run": {
            "$ref": "#/components/schemas/Run"
          },
          "target": {
            "enum": [
              "dataset",
              "model"
            ],
            "title": "Target",
            "type": "string"
          },
          "views": {
            "items": {
              "$ref": "#/components/schemas/ArtifactLink"
            },
            "title": "Views",
            "type": "array"
          }
        },
        "required": [
          "run",
          "done",
          "target",
          "ref"
        ],
        "title": "Exploration",
        "type": "object"
      },
      "ExplorerIndex": {
        "additionalProperties": true,
        "description": "``ui/explore/index.json``: what an explore run produced (and why a section is\nmissing).",
        "examples": [
          {
            "ref": "dataset://growth/weekly_sales@v4",
            "sections": [
              {
                "section": "stationarity",
                "view": "ui/explore/stationarity.json"
              },
              {
                "message_plain": "Less than two seasons of data.",
                "reason": "insufficient_data",
                "section": "stl",
                "status": "skipped",
                "view": "ui/explore/stl.json"
              }
            ],
            "target": "dataset"
          },
          {
            "order": [
              "overview",
              "structure",
              "images",
              "quality",
              "distributions",
              "timeseries",
              "missingness"
            ],
            "ref": "dataset://seismology/oklahoma_quakes@v1",
            "sections": [
              {
                "section": "overview",
                "view": "ui/explore/overview.json"
              },
              {
                "section": "structure",
                "view": "ui/explore/structure.json"
              },
              {
                "section": "images",
                "view": "ui/explore/images.json"
              },
              {
                "message_plain": "Not available: the data has no polygons.",
                "reason": "not_applicable",
                "section": "map",
                "status": "skipped",
                "view": "ui/explore/map.json"
              }
            ],
            "shapes": [
              "image",
              "timeseries"
            ],
            "target": "dataset"
          }
        ],
        "properties": {
          "format": {
            "const": "mapi.explorer-index/v1",
            "default": "mapi.explorer-index/v1",
            "title": "Format",
            "type": "string"
          },
          "node": {
            "anyOf": [
              {
                "pattern": "^/(?:[A-Za-z_][A-Za-z0-9_.\\-]{0,63}(?:/[A-Za-z_][A-Za-z0-9_.\\-]{0,63}){0,7})?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "M4: the node of a tree dataset explored (absent for a flat dataset)",
            "title": "Node"
          },
          "order": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "maxItems": 32,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Data Explorer: the sections in order of relevance for this data",
            "title": "Order"
          },
          "ref": {
            "description": "dataset://… or model://…",
            "maxLength": 512,
            "title": "Ref",
            "type": "string"
          },
          "sections": {
            "items": {
              "$ref": "#/components/schemas/ExplorerSectionRef"
            },
            "maxItems": 32,
            "title": "Sections",
            "type": "array"
          },
          "shapes": {
            "anyOf": [
              {
                "items": {
                  "enum": [
                    "timeseries",
                    "sequence",
                    "image",
                    "vector_field",
                    "areal_map",
                    "points",
                    "network",
                    "tree",
                    "circular",
                    "profile",
                    "table"
                  ],
                  "type": "string"
                },
                "maxItems": 64,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Data Explorer: the detected data shapes, best first",
            "title": "Shapes"
          },
          "target": {
            "enum": [
              "dataset",
              "model"
            ],
            "title": "Target",
            "type": "string"
          }
        },
        "required": [
          "target",
          "ref"
        ],
        "title": "ExplorerIndex",
        "type": "object"
      },
      "ExplorerSectionRef": {
        "additionalProperties": true,
        "properties": {
          "message_plain": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message Plain"
          },
          "reason": {
            "anyOf": [
              {
                "enum": [
                  "not_applicable",
                  "insufficient_data",
                  "needs_option"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Why a skipped section was skipped (absent in indexes written before the scientific sections: readers then list every section)",
            "title": "Reason"
          },
          "section": {
            "maxLength": 32,
            "title": "Section",
            "type": "string"
          },
          "status": {
            "default": "ok",
            "enum": [
              "ok",
              "skipped",
              "error"
            ],
            "title": "Status",
            "type": "string"
          },
          "view": {
            "description": "ui/explore/<section>.json",
            "maxLength": 256,
            "title": "View",
            "type": "string"
          }
        },
        "required": [
          "section",
          "view"
        ],
        "title": "ExplorerSectionRef",
        "type": "object"
      },
      "FailureClass": {
        "description": "Why a run ended ``FAILED``; each maps to one stable :class:`ErrorCode`.",
        "enum": [
          "user",
          "resource_exhausted",
          "infra",
          "integrity",
          "timeout",
          "sandbox"
        ],
        "title": "FailureClass",
        "type": "string"
      },
      "FanChart": {
        "description": "Quantile bands of a series along one dim (a KPI fan): ``values[i][j]`` is quantile\n``quantiles[i]`` at ``coords[j]``. ``observed`` (if any) is the data over ``coords``.",
        "examples": [
          {
            "coords": [
              "2026-01-04",
              "2026-01-11"
            ],
            "dim": "time",
            "observed": [
              101.0,
              99.5
            ],
            "quantiles": [
              0.05,
              0.5,
              0.95
            ],
            "units": "kEUR",
            "values": [
              [
                80.0,
                82.0
              ],
              [
                100.0,
                103.0
              ],
              [
                125.0,
                129.0
              ]
            ]
          }
        ],
        "properties": {
          "coords": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                }
              ]
            },
            "maxItems": 10000,
            "title": "Coords",
            "type": "array"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "observed": {
            "anyOf": [
              {
                "items": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observed"
          },
          "quantiles": {
            "items": {
              "type": "number"
            },
            "maxItems": 16,
            "minItems": 1,
            "title": "Quantiles",
            "type": "array"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Units"
          },
          "values": {
            "items": {
              "items": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "type": "array"
            },
            "maxItems": 16,
            "title": "Values",
            "type": "array"
          }
        },
        "required": [
          "dim",
          "coords",
          "quantiles",
          "values"
        ],
        "title": "FanChart",
        "type": "object"
      },
      "FitMode": {
        "enum": [
          "evaluate_then_refit",
          "train_only"
        ],
        "title": "FitMode",
        "type": "string"
      },
      "ForecastCompile": {
        "additionalProperties": false,
        "properties": {
          "channel_dim": {
            "default": "channel",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Channel Dim",
            "type": "string"
          },
          "dim": {
            "default": "time",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "future_covariates": {
            "$ref": "#/components/schemas/FutureCovariates",
            "default": "carry_last"
          },
          "kind": {
            "const": "forecast",
            "default": "forecast",
            "title": "Kind",
            "type": "string"
          },
          "model": {
            "description": "endpoint://project/alias or model://project/name@vN",
            "pattern": "(?:^endpoint://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)$)|(?:^model://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)@(latest|v\\d{1,9}|\\d{1,9})$)",
            "title": "Model",
            "type": "string"
          },
          "output": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OutputSelector"
              },
              {
                "type": "null"
              }
            ]
          },
          "periods": {
            "maximum": 10000.0,
            "minimum": 1.0,
            "title": "Periods",
            "type": "integer"
          },
          "preset": {
            "anyOf": [
              {
                "discriminator": {
                  "mapping": {
                    "budget_scale": "#/components/schemas/BudgetScale",
                    "channel_off": "#/components/schemas/ChannelOff"
                  },
                  "propertyName": "kind"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ChannelOff"
                  },
                  {
                    "$ref": "#/components/schemas/BudgetScale"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Preset"
          },
          "scenario": {
            "anyOf": [
              {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scenario"
          },
          "spend_var": {
            "default": "spend",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Spend Var",
            "type": "string"
          }
        },
        "required": [
          "model",
          "periods"
        ],
        "title": "ForecastCompile",
        "type": "object"
      },
      "ForecastConditioning": {
        "description": "What a forecast was conditioned on: the fitted history, the supplied actuals and where\nthe forecast periods came from. ``parameters`` is always ``fitted``: conditioning never\nre-estimates the model. ``message`` says the same in plain language.",
        "examples": [
          {
            "actuals_through": "1961-03-01",
            "conditioned": true,
            "dim": "t",
            "fit_end": "1960-12-01",
            "horizon_source": "horizon",
            "message": "Forecast updated with 3 actuals (1961-01-01 to 1961-03-01) after the fitted history, which ends 1960-12-01; the model's parameters were not re-estimated. 8 periods forecast from 1961-04-01 to 1961-11-01.",
            "n_actuals": 3,
            "n_series": 1,
            "parameters": "fitted",
            "periods": 8,
            "revised": 0,
            "series": [
              {
                "actuals_through": "1961-03-01",
                "first_actual": "1961-01-01",
                "forecast_from": "1961-04-01",
                "forecast_to": "1961-11-01",
                "missing": 0,
                "n_actuals": 3,
                "n_forecast": 8,
                "origin": "1961-03-01",
                "revised": 0,
                "series": {}
              }
            ],
            "series_conditioned": 1,
            "truncated": false
          },
          {
            "conditioned": false,
            "dim": "t",
            "fit_end": "1960-12-01",
            "horizon_source": "horizon",
            "message": "Forecast from the end of the fitted history (1960-12-01); no actuals were supplied. 8 periods forecast from 1961-01-01 to 1961-08-01.",
            "n_actuals": 0,
            "periods": 8,
            "series": [
              {
                "forecast_from": "1961-01-01",
                "forecast_to": "1961-08-01",
                "n_actuals": 0,
                "n_forecast": 8,
                "origin": "1960-12-01"
              }
            ]
          }
        ],
        "properties": {
          "actuals_through": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "The latest actual over every series",
            "title": "Actuals Through"
          },
          "conditioned": {
            "description": "Whether any supplied actual was used",
            "title": "Conditioned",
            "type": "boolean"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "fit_end": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              }
            ],
            "description": "The last period of the fitted history",
            "title": "Fit End"
          },
          "horizon_source": {
            "enum": [
              "rows",
              "horizon"
            ],
            "title": "Horizon Source",
            "type": "string"
          },
          "message": {
            "maxLength": 2000,
            "title": "Message",
            "type": "string"
          },
          "n_actuals": {
            "description": "Actuals used, over every series",
            "minimum": 0.0,
            "title": "N Actuals",
            "type": "integer"
          },
          "n_series": {
            "default": 1,
            "minimum": 0.0,
            "title": "N Series",
            "type": "integer"
          },
          "parameters": {
            "const": "fitted",
            "default": "fitted",
            "title": "Parameters",
            "type": "string"
          },
          "periods": {
            "description": "Forecast periods (the most over series)",
            "minimum": 0.0,
            "title": "Periods",
            "type": "integer"
          },
          "revised": {
            "default": 0,
            "minimum": 0.0,
            "title": "Revised",
            "type": "integer"
          },
          "series": {
            "items": {
              "$ref": "#/components/schemas/SeriesConditioning"
            },
            "maxItems": 1000,
            "title": "Series",
            "type": "array"
          },
          "series_conditioned": {
            "default": 0,
            "description": "Series with at least one actual",
            "minimum": 0.0,
            "title": "Series Conditioned",
            "type": "integer"
          },
          "truncated": {
            "default": false,
            "description": "More series than MAX_CONDITIONING_SERIES",
            "title": "Truncated",
            "type": "boolean"
          }
        },
        "required": [
          "dim",
          "fit_end",
          "conditioned",
          "n_actuals",
          "horizon_source",
          "periods",
          "message"
        ],
        "title": "ForecastConditioning",
        "type": "object"
      },
      "FrontierPoint": {
        "description": "The best plan at one total budget.",
        "properties": {
          "allocation": {
            "additionalProperties": {
              "type": "number"
            },
            "title": "Allocation",
            "type": "object"
          },
          "expected_kpi": {
            "title": "Expected Kpi",
            "type": "number"
          },
          "kpi_p5": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kpi P5"
          },
          "kpi_p95": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kpi P95"
          },
          "marginal_roi": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Marginal Roi"
          },
          "total_budget": {
            "minimum": 0.0,
            "title": "Total Budget",
            "type": "number"
          }
        },
        "required": [
          "total_budget",
          "expected_kpi"
        ],
        "title": "FrontierPoint",
        "type": "object"
      },
      "FrontierRequest": {
        "additionalProperties": false,
        "description": "Also sweep budgets from ``budget_min`` to ``budget_max`` (default 40%-200% of the\ncurrent total) in ``n_points`` steps.",
        "properties": {
          "budget_max": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Max"
          },
          "budget_min": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Min"
          },
          "n_points": {
            "default": 12,
            "maximum": 50.0,
            "minimum": 3.0,
            "title": "N Points",
            "type": "integer"
          }
        },
        "title": "FrontierRequest",
        "type": "object"
      },
      "FutureCovariates": {
        "description": "Where future values of ``future_required`` covariates come from in a forecast (M3).\n\n``supplied`` (default) needs them in the request's data or scenario\n(``MISSING_FUTURE_COVARIATE`` otherwise). The other policies let the runner extend them\nover the horizon, per series, inside the sandbox: ``carry_last`` repeats the last\nobserved value, ``seasonal_naive`` repeats the value one season earlier (the time dim's\nyearly period), ``zero`` sets them to zero (e.g. \"no spend planned\").",
        "enum": [
          "supplied",
          "carry_last",
          "seasonal_naive",
          "zero"
        ],
        "title": "FutureCovariates",
        "type": "string"
      },
      "GateOutcome": {
        "enum": [
          "allowed",
          "needs_override",
          "blocked"
        ],
        "title": "GateOutcome",
        "type": "string"
      },
      "GateReason": {
        "description": "Why the gate is not plainly ``allowed``: a stable code, plain text, and the check.",
        "properties": {
          "check": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Check"
          },
          "code": {
            "enum": [
              "SCORECARD_WARN",
              "SCORECARD_FAIL",
              "NO_SCORECARD",
              "TRAIN_ONLY",
              "PARTIAL_MODEL",
              "SCHEMA_CHANGE",
              "NOT_EVALUATED",
              "NOT_VALIDATED"
            ],
            "title": "Code",
            "type": "string"
          },
          "message_plain": {
            "maxLength": 500,
            "title": "Message Plain",
            "type": "string"
          },
          "outcome": {
            "$ref": "#/components/schemas/GateOutcome"
          }
        },
        "required": [
          "code",
          "outcome",
          "message_plain"
        ],
        "title": "GateReason",
        "type": "object"
      },
      "GdprExport": {
        "description": "An export job; ``download_url`` is a short-lived signed link once ``ready``.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "download_url": "https://storage.example/exports/exp_01…?X-Goog-Signature=…",
            "expires_at": "2026-10-16T09:42:00Z",
            "id": "exp_01jaf3r1s2t3v4w5x6y7z8a9b0",
            "include": [
              "metadata",
              "datasets",
              "models",
              "audit",
              "usage"
            ],
            "ready_at": "2026-10-15T09:42:00Z",
            "requested_by": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "size_bytes": 73400320,
            "state": "ready",
            "tenant_id": "acme-retail"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "download_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Download Url"
          },
          "expires_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "include": {
            "items": {
              "enum": [
                "metadata",
                "datasets",
                "models",
                "audit",
                "usage"
              ],
              "type": "string"
            },
            "title": "Include",
            "type": "array"
          },
          "ready_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ready At"
          },
          "requested_by": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requested By"
          },
          "size_bytes": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size Bytes"
          },
          "state": {
            "enum": [
              "queued",
              "running",
              "ready",
              "expired",
              "failed"
            ],
            "title": "State",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "state",
          "include",
          "created_at"
        ],
        "title": "GdprExport",
        "type": "object"
      },
      "GdprExportRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/tenants/{tenant_id}/exports``: what to include (default: everything).",
        "examples": [
          {
            "include": [
              "metadata",
              "datasets",
              "models",
              "audit",
              "usage"
            ]
          }
        ],
        "properties": {
          "include": {
            "items": {
              "enum": [
                "metadata",
                "datasets",
                "models",
                "audit",
                "usage"
              ],
              "type": "string"
            },
            "maxItems": 5,
            "minItems": 1,
            "title": "Include",
            "type": "array"
          }
        },
        "title": "GdprExportRequest",
        "type": "object"
      },
      "GeoHoldoutPlan": {
        "additionalProperties": false,
        "description": "Hold out whole groups along ``dim``: the explicit ``groups`` (one fold), or ``n``\nseeded random groups in each of ``n_folds`` folds. With ``time_dim``/``test_last``, the\nheld-out groups are tested on their last periods only, and ``include_pre_period``\ntrains on their earlier periods too (a geo experiment readout).",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the folds are cut at (a step id or 'raw'), as data.split",
            "title": "After Step"
          },
          "dim": {
            "default": "geo",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "groups": {
            "anyOf": [
              {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "maxItems": 10000,
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Groups"
          },
          "include_pre_period": {
            "default": false,
            "title": "Include Pre Period",
            "type": "boolean"
          },
          "kind": {
            "const": "geo_holdout",
            "title": "Kind",
            "type": "string"
          },
          "n": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "N"
          },
          "n_folds": {
            "default": 1,
            "maximum": 200.0,
            "minimum": 1.0,
            "title": "N Folds",
            "type": "integer"
          },
          "seed": {
            "default": 0,
            "exclusiveMaximum": 4294967296.0,
            "minimum": 0.0,
            "title": "Seed",
            "type": "integer"
          },
          "test_last": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Test Last"
          },
          "time_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Time Dim"
          }
        },
        "required": [
          "kind"
        ],
        "title": "GeoHoldoutPlan",
        "type": "object"
      },
      "GlobalSpend": {
        "description": "Platform spend in the current window of the global spend cap: what the kill switch\ncompares against ``global_spend_cap_micros`` (``actual`` and ``adjustment`` entries in\n``spend_cap_currency``). ``fraction`` is ``spent / cap``; null without a cap.",
        "examples": [
          {
            "cap_micros": 500000000,
            "currency": "USD",
            "end": "2026-10-16T00:00:00Z",
            "fraction": 0.7,
            "period": "day",
            "spent_micros": 350000000,
            "start": "2026-10-15T00:00:00Z"
          }
        ],
        "properties": {
          "cap_micros": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cap Micros"
          },
          "currency": {
            "pattern": "^[A-Z]{3}$",
            "title": "Currency",
            "type": "string"
          },
          "end": {
            "format": "date-time",
            "title": "End",
            "type": "string"
          },
          "fraction": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fraction"
          },
          "period": {
            "enum": [
              "day",
              "month"
            ],
            "title": "Period",
            "type": "string"
          },
          "spent_micros": {
            "title": "Spent Micros",
            "type": "integer"
          },
          "start": {
            "format": "date-time",
            "title": "Start",
            "type": "string"
          }
        },
        "required": [
          "period",
          "start",
          "end",
          "currency",
          "spent_micros"
        ],
        "title": "GlobalSpend",
        "type": "object"
      },
      "GovernanceCheckDef": {
        "description": "One check of the governance catalog (``GET /v1/catalog/governance-checks``).",
        "examples": [
          {
            "about": {
              "assumptions": [
                "Numbers can be added up (spend, sales); averages are averaged"
              ],
              "avoid_when": [
                "Your data already has one row per week"
              ],
              "data_needs": [
                "A date column"
              ],
              "difficulty": "beginner",
              "example": "Daily TV spend of 100 each day becomes 700 for the week.",
              "fits": {
                "goal": [
                  "check_data"
                ]
              },
              "outputs": [
                "The same columns, one row per week"
              ],
              "related": [
                "core.calendar"
              ],
              "summary_plain": "Adds up daily numbers into one number per week (or month), so that every row covers the same length of time.",
              "title": "Weekly totals",
              "typical_runtime": "instant",
              "use_when": [
                "Your data is daily but you want to plan or report by week"
              ]
            },
            "category": "baseline",
            "direction": "min",
            "fail": 0.0,
            "id": "baseline.beats_naive",
            "metric": "relative_skill",
            "requires": [
              "holdout",
              "time_series"
            ],
            "title": "Better than simple benchmarks",
            "warn": 0.05
          }
        ],
        "properties": {
          "about": {
            "$ref": "#/components/schemas/About"
          },
          "category": {
            "enum": [
              "null_test",
              "baseline",
              "residuals",
              "stability",
              "plausibility",
              "sensitivity",
              "recovery",
              "convergence",
              "holdout",
              "data"
            ],
            "title": "Category",
            "type": "string"
          },
          "default_severity": {
            "$ref": "#/components/schemas/CheckSeverity",
            "default": "blocking"
          },
          "direction": {
            "$ref": "#/components/schemas/CheckDirection"
          },
          "fail": {
            "title": "Fail",
            "type": "number"
          },
          "families": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Model families it applies to (None: every family)",
            "title": "Families"
          },
          "id": {
            "pattern": "^[a-z]+(?:\\.[a-z0-9_]+)?$",
            "title": "Id",
            "type": "string"
          },
          "metric": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Metric",
            "type": "string"
          },
          "params_schema": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params Schema",
            "type": "object"
          },
          "requires": {
            "items": {
              "enum": [
                "bayesian",
                "holdout",
                "time_series",
                "channels",
                "residuals"
              ],
              "type": "string"
            },
            "title": "Requires",
            "type": "array"
          },
          "target": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "version": {
            "default": "1.0.0",
            "title": "Version",
            "type": "string"
          },
          "warn": {
            "title": "Warn",
            "type": "number"
          }
        },
        "required": [
          "id",
          "title",
          "category",
          "metric",
          "direction",
          "warn",
          "fail",
          "about"
        ],
        "title": "GovernanceCheckDef",
        "type": "object"
      },
      "GovernancePolicy": {
        "description": "A versioned policy. ``project_id`` is ``None`` for tenant-wide policies.",
        "examples": [
          {
            "checks": [
              {
                "check": "convergence"
              },
              {
                "check": "data.quality"
              },
              {
                "check": "null.permutation_target"
              }
            ],
            "created_at": "2026-10-15T09:30:00Z",
            "id": "pol_01jaf3h1j2k3m4n5p6q7r8s9t0",
            "name": "All models",
            "require_approval": true,
            "scope": "tenant",
            "tenant_id": "acme",
            "version": 3
          }
        ],
        "properties": {
          "active": {
            "default": true,
            "title": "Active",
            "type": "boolean"
          },
          "applies_to": {
            "$ref": "#/components/schemas/PolicyMatch"
          },
          "approvals_required": {
            "default": 1,
            "title": "Approvals Required",
            "type": "integer"
          },
          "checks": {
            "items": {
              "$ref": "#/components/schemas/PolicyCheck"
            },
            "title": "Checks",
            "type": "array"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "project_id": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "require_approval": {
            "default": false,
            "title": "Require Approval",
            "type": "boolean"
          },
          "require_validated_for_promotion": {
            "default": true,
            "title": "Require Validated For Promotion",
            "type": "boolean"
          },
          "scope": {
            "enum": [
              "tenant",
              "project"
            ],
            "title": "Scope",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "version": {
            "minimum": 1.0,
            "title": "Version",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "scope",
          "version",
          "name",
          "checks",
          "created_at"
        ],
        "title": "GovernancePolicy",
        "type": "object"
      },
      "GovernancePolicyCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/governance/policies`` (project) or ``/v1/tenants/{id}/governance/policies``.",
        "examples": [
          {
            "applies_to": {
              "families": [
                "ts"
              ]
            },
            "checks": [
              {
                "check": "baseline.beats_naive",
                "severity": "blocking"
              },
              {
                "check": "residuals.whiteness",
                "severity": "warning"
              },
              {
                "check": "null.permutation_target",
                "params": {
                  "n_permutations": 20
                },
                "severity": "blocking"
              },
              {
                "check": "holdout.accuracy",
                "thresholds": {
                  "fail": 0.2,
                  "warn": 0.1
                }
              }
            ],
            "name": "Forecast models",
            "require_approval": true
          }
        ],
        "properties": {
          "active": {
            "default": true,
            "title": "Active",
            "type": "boolean"
          },
          "applies_to": {
            "$ref": "#/components/schemas/PolicyMatch"
          },
          "approvals_required": {
            "default": 1,
            "maximum": 3.0,
            "minimum": 1.0,
            "title": "Approvals Required",
            "type": "integer"
          },
          "checks": {
            "items": {
              "$ref": "#/components/schemas/PolicyCheck"
            },
            "maxItems": 32,
            "minItems": 1,
            "title": "Checks",
            "type": "array"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "require_approval": {
            "default": false,
            "title": "Require Approval",
            "type": "boolean"
          },
          "require_validated_for_promotion": {
            "default": true,
            "title": "Require Validated For Promotion",
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "checks"
        ],
        "title": "GovernancePolicyCreate",
        "type": "object"
      },
      "GovernancePolicyUpdate": {
        "additionalProperties": false,
        "description": "``PUT …/policies/{policy_id}``: a new version (the old one stays for audit).",
        "examples": [
          {
            "applies_to": {
              "families": [
                "ts"
              ]
            },
            "checks": [
              {
                "check": "baseline.beats_naive",
                "severity": "blocking"
              },
              {
                "check": "residuals.whiteness",
                "severity": "warning"
              },
              {
                "check": "null.permutation_target",
                "params": {
                  "n_permutations": 20
                },
                "severity": "blocking"
              },
              {
                "check": "holdout.accuracy",
                "thresholds": {
                  "fail": 0.2,
                  "warn": 0.1
                }
              }
            ],
            "name": "Forecast models",
            "require_approval": true
          }
        ],
        "properties": {
          "active": {
            "default": true,
            "title": "Active",
            "type": "boolean"
          },
          "applies_to": {
            "$ref": "#/components/schemas/PolicyMatch"
          },
          "approvals_required": {
            "default": 1,
            "maximum": 3.0,
            "minimum": 1.0,
            "title": "Approvals Required",
            "type": "integer"
          },
          "checks": {
            "items": {
              "$ref": "#/components/schemas/PolicyCheck"
            },
            "maxItems": 32,
            "minItems": 1,
            "title": "Checks",
            "type": "array"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "expected_version": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "409 when it changed",
            "title": "Expected Version"
          },
          "name": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "require_approval": {
            "default": false,
            "title": "Require Approval",
            "type": "boolean"
          },
          "require_validated_for_promotion": {
            "default": true,
            "title": "Require Validated For Promotion",
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "checks"
        ],
        "title": "GovernancePolicyUpdate",
        "type": "object"
      },
      "GridDecl": {
        "additionalProperties": false,
        "description": "How to draw an output as a 2-D field (an image, a map, a vector field).\n\n``y`` and ``x`` are the dims of the raster rows and columns; ``y`` runs top to bottom\nunless ``origin`` is ``lower``. ``frame`` names a third dim with one raster per level\n(years, eras, times); ``component`` names a dim of length two that holds the ``(x, y)``\ncomponents of a vector field. Every other dim of the output is reduced over the\nposterior draws only, never over space.",
        "properties": {
          "colormap": {
            "default": "viridis",
            "enum": [
              "viridis",
              "magma",
              "cividis",
              "gray",
              "diverging"
            ],
            "title": "Colormap",
            "type": "string"
          },
          "component": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Component"
          },
          "frame": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame"
          },
          "log": {
            "default": false,
            "description": "Draw log10 of the value (for counts and intensities)",
            "title": "Log",
            "type": "boolean"
          },
          "origin": {
            "default": "upper",
            "enum": [
              "upper",
              "lower"
            ],
            "title": "Origin",
            "type": "string"
          },
          "x": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "X",
            "type": "string"
          },
          "y": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Y",
            "type": "string"
          }
        },
        "required": [
          "y",
          "x"
        ],
        "title": "GridDecl",
        "type": "object"
      },
      "GuidedAnswers": {
        "additionalProperties": false,
        "description": "``POST /v1/guided/drafts``: answers to a template's questions.\n\nColumn answers are *column names* of the upload (a list for ``columns`` questions).\n``dataset`` names the dataset the upload will become (``dataset://<project>/<name>``);\n``columns`` (optional) lets the draft use detected types and frequencies.",
        "examples": [
          {
            "answers": {
              "controls": [
                "avg_price"
              ],
              "date": "week",
              "frequency": "weekly",
              "geo": "market",
              "holdout_periods": 8,
              "kpi": "revenue_eur",
              "spend": [
                "tv_spend",
                "search_spend",
                "social_spend"
              ]
            },
            "dataset": "eu_media_weekly",
            "format": "csv",
            "name": "eu-geo-mmm",
            "template_id": "geo_mmm"
          }
        ],
        "properties": {
          "answers": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "maxProperties": 32,
            "title": "Answers",
            "type": "object"
          },
          "business_priors": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BusinessPriors"
              },
              {
                "type": "null"
              }
            ]
          },
          "columns": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ColumnProfile"
                },
                "maxItems": 2048,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Columns"
          },
          "dataset": {
            "description": "Name of the dataset the upload becomes",
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Dataset",
            "type": "string"
          },
          "format": {
            "default": "csv",
            "description": "The upload's format; for 'mff' (M3) column answers name VariableName values, Period and the MFF key columns",
            "enum": [
              "csv",
              "parquet",
              "mff"
            ],
            "title": "Format",
            "type": "string"
          },
          "lift_tests": {
            "items": {
              "$ref": "#/components/schemas/LiftTest"
            },
            "maxItems": 500,
            "title": "Lift Tests",
            "type": "array"
          },
          "name": {
            "description": "Name of the spec (and model) to create",
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Name",
            "type": "string"
          },
          "template_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Template Id",
            "type": "string"
          }
        },
        "required": [
          "template_id",
          "name",
          "dataset"
        ],
        "title": "GuidedAnswers",
        "type": "object"
      },
      "GuidedCompile": {
        "description": "Body of ``POST /v1/guided/requests:compile``: one of ``whatif``, ``forecast`` or\n``counterfactual`` (by ``kind``); the response is the equivalent ``ScoreRequest``.",
        "discriminator": {
          "mapping": {
            "counterfactual": "#/components/schemas/CounterfactualCompile",
            "forecast": "#/components/schemas/ForecastCompile",
            "whatif": "#/components/schemas/WhatIfCompile"
          },
          "propertyName": "kind"
        },
        "examples": [
          {
            "kind": "whatif",
            "model": "model://growth/eu-geo-mmm@v3",
            "scenario": {
              "multipliers": {
                "search": 1.3,
                "tv": 0.8
              }
            }
          },
          {
            "kind": "forecast",
            "model": "endpoint://growth/geo-mmm-prod",
            "periods": 13,
            "preset": {
              "k": 1.1,
              "kind": "budget_scale"
            }
          },
          {
            "kind": "counterfactual",
            "model": "endpoint://growth/geo-mmm-prod",
            "preset": {
              "channel": "tv",
              "kind": "channel_off"
            }
          }
        ],
        "oneOf": [
          {
            "$ref": "#/components/schemas/WhatIfCompile"
          },
          {
            "$ref": "#/components/schemas/ForecastCompile"
          },
          {
            "$ref": "#/components/schemas/CounterfactualCompile"
          }
        ],
        "title": "GuidedCompile"
      },
      "GuidedDraft": {
        "description": "The draft a template and its answers produce: how to ingest the upload, the spec,\nthe spec as YAML (\"View as YAML\") and anything worth a second look.",
        "examples": [
          {
            "dataset_ref": "dataset://growth/eu_media_weekly@latest",
            "issues": [],
            "mapping": {
              "dims": {
                "market": {
                  "column": "market",
                  "spec": {
                    "kind": "categorical"
                  }
                },
                "week": {
                  "column": "week",
                  "spec": {
                    "freq": "W-SUN",
                    "kind": "time",
                    "policy": "extend"
                  }
                }
              },
              "format": "csv",
              "vars": {
                "revenue": {
                  "column": "revenue",
                  "role": "target",
                  "units": "EUR"
                }
              },
              "wide": {
                "spend": {
                  "columns": {
                    "search": "search_spend",
                    "social": "social_spend",
                    "tv": "tv_spend"
                  },
                  "dim": "channel",
                  "role": "spend",
                  "units": "EUR"
                }
              }
            },
            "spec": {
              "apiVersion": "mapi/v1",
              "kind": "ModelSpec"
            },
            "template_id": "geo_mmm",
            "template_version": "1.0.0",
            "yaml": "apiVersion: mapi/v1\nkind: ModelSpec\n…"
          }
        ],
        "properties": {
          "dataset_ref": {
            "title": "Dataset Ref",
            "type": "string"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "mapping": {
            "$ref": "#/components/schemas/IngestMapping"
          },
          "spec": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Spec",
            "type": "object"
          },
          "template_id": {
            "title": "Template Id",
            "type": "string"
          },
          "template_version": {
            "title": "Template Version",
            "type": "string"
          },
          "yaml": {
            "title": "Yaml",
            "type": "string"
          }
        },
        "required": [
          "template_id",
          "template_version",
          "dataset_ref",
          "mapping",
          "spec",
          "yaml"
        ],
        "title": "GuidedDraft",
        "type": "object"
      },
      "GuidedQuestion": {
        "description": "One plain-language question. Column questions name what the column becomes:\n\n* ``dim``: the column labels a dataset dim (``dim_spec`` describes it); the placeholder\n  ``{{<id>}}`` is the dataset dim name;\n* ``role`` (``column``): the column is a data variable with that role; the placeholder is\n  the dataset variable name;\n* ``role`` + ``wide_dim`` (``columns``): the columns become *one* variable ``as_var``\n  along ``wide_dim`` (one label per column, e.g. spend per channel);\n* ``role`` without ``wide_dim`` (``columns``): each column is its own variable.\n\nA ``text`` answer fills its placeholder as typed (stripped); with ``as_list`` it is split\nat the commas into a list of names (a required one must keep a name).",
        "properties": {
          "accepts": {
            "items": {
              "enum": [
                "number",
                "integer",
                "string",
                "date",
                "boolean"
              ],
              "type": "string"
            },
            "title": "Accepts",
            "type": "array"
          },
          "as_list": {
            "default": false,
            "description": "v0.13: a text answer is a list of names separated by commas (the placeholder becomes the list, for example the treated markets of a geo-lift test)",
            "title": "As List",
            "type": "boolean"
          },
          "as_var": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "As Var"
          },
          "choices": {
            "items": {
              "$ref": "#/components/schemas/QuestionChoice"
            },
            "maxItems": 32,
            "title": "Choices",
            "type": "array"
          },
          "default": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "dim": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Canonical dim this column labels",
            "title": "Dim"
          },
          "dim_spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DimSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "help_plain": {
            "anyOf": [
              {
                "maxLength": 1000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Help Plain"
          },
          "id": {
            "pattern": "^[a-z][a-z0-9_]{0,31}$",
            "title": "Id",
            "type": "string"
          },
          "keywords": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "title": "Keywords",
            "type": "array"
          },
          "kind": {
            "enum": [
              "column",
              "columns",
              "choice",
              "number",
              "text"
            ],
            "title": "Kind",
            "type": "string"
          },
          "maximum": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Maximum"
          },
          "minimum": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Minimum"
          },
          "missing": {
            "anyOf": [
              {
                "enum": [
                  "forbid",
                  "allow",
                  "mask"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3: missing-value policy of the variables a column answer becomes (default forbid; 'allow' for ragged panels such as shopping trips per household)",
            "title": "Missing"
          },
          "prompt_plain": {
            "maxLength": 300,
            "title": "Prompt Plain",
            "type": "string"
          },
          "required": {
            "default": true,
            "title": "Required",
            "type": "boolean"
          },
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Role"
              },
              {
                "type": "null"
              }
            ]
          },
          "ui_level": {
            "default": "basic",
            "enum": [
              "basic",
              "advanced",
              "hidden"
            ],
            "title": "Ui Level",
            "type": "string"
          },
          "wide_dim": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wide Dim"
          }
        },
        "required": [
          "id",
          "prompt_plain",
          "kind"
        ],
        "title": "GuidedQuestion",
        "type": "object"
      },
      "GuidedTemplate": {
        "description": "A guided task: questions, the spec they fill and what to check afterwards.\n\n``ui_levels`` maps JSON pointers of the spec to ``x-ui-level`` hints (``hidden`` fields\nare kept but not shown; Expert edits round-trip). ``plugin_available`` is false while\nthe template's built-in plugin is not shipped (``plugin_note`` says what is missing).\nA ``family`` this version does not know (added by a newer server) is kept as text.",
        "examples": [
          {
            "description_plain": "Forecast one series a few weeks ahead.",
            "family": "forecast",
            "id": "weekly_forecast",
            "plugin": "ts.hsgp_trend@^1",
            "questions": [
              {
                "accepts": [
                  "number",
                  "integer"
                ],
                "id": "kpi",
                "keywords": [
                  "sales"
                ],
                "kind": "column",
                "prompt_plain": "Which column do you want to forecast?",
                "role": "target"
              },
              {
                "accepts": [
                  "date"
                ],
                "dim": "time",
                "dim_spec": {
                  "kind": "time",
                  "policy": "extend"
                },
                "id": "date",
                "kind": "column",
                "prompt_plain": "Which column holds the date or week?"
              }
            ],
            "scorecard_checks": [
              "convergence.rhat",
              "holdout.mape"
            ],
            "spec_template": {
              "apiVersion": "mapi/v1",
              "data": {
                "bind": {
                  "dims": {
                    "t": "{{date}}"
                  },
                  "vars": {
                    "y": "{{kpi}}"
                  }
                },
                "dataset": "{{dataset}}"
              },
              "kind": "ModelSpec",
              "metadata": {
                "name": "{{name}}",
                "project": "{{project}}"
              },
              "model": {
                "settings": {
                  "max_extension": 26
                },
                "use": "ts.hsgp_trend@^1"
              }
            },
            "tasks": [
              "forecast"
            ],
            "title": "Weekly forecast",
            "ui_levels": {
              "/model/fit": "advanced"
            },
            "version": "1.0.0"
          }
        ],
        "properties": {
          "about": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/About"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3.5: the plain-language About card (every built-in has one)"
          },
          "defaults": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Defaults",
            "type": "object"
          },
          "description_plain": {
            "maxLength": 1000,
            "title": "Description Plain",
            "type": "string"
          },
          "family": {
            "enum": [
              "mmm",
              "forecast",
              "tabular",
              "choice",
              "causal"
            ],
            "title": "Family",
            "type": "string"
          },
          "id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Id",
            "type": "string"
          },
          "lookups": {
            "additionalProperties": {
              "$ref": "#/components/schemas/TemplateLookup"
            },
            "title": "Lookups",
            "type": "object"
          },
          "plugin": {
            "description": "UseRef of the built-in plugin (id@range)",
            "title": "Plugin",
            "type": "string"
          },
          "plugin_available": {
            "default": true,
            "title": "Plugin Available",
            "type": "boolean"
          },
          "plugin_note": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Plugin Note"
          },
          "questions": {
            "items": {
              "$ref": "#/components/schemas/GuidedQuestion"
            },
            "maxItems": 32,
            "minItems": 1,
            "title": "Questions",
            "type": "array"
          },
          "scorecard_checks": {
            "items": {
              "type": "string"
            },
            "title": "Scorecard Checks",
            "type": "array"
          },
          "scorecard_thresholds": {
            "additionalProperties": {
              "$ref": "#/components/schemas/CheckThresholds"
            },
            "title": "Scorecard Thresholds",
            "type": "object"
          },
          "spec_template": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Spec Template",
            "type": "object"
          },
          "tasks": {
            "items": {
              "enum": [
                "whatif",
                "forecast",
                "counterfactual",
                "business_priors",
                "lift_tests"
              ],
              "type": "string"
            },
            "title": "Tasks",
            "type": "array"
          },
          "title": {
            "maxLength": 120,
            "title": "Title",
            "type": "string"
          },
          "ui_levels": {
            "additionalProperties": {
              "enum": [
                "basic",
                "advanced",
                "hidden"
              ],
              "type": "string"
            },
            "title": "Ui Levels",
            "type": "object"
          },
          "version": {
            "default": "1.0.0",
            "pattern": "^\\d+\\.\\d+\\.\\d+$",
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "description_plain",
          "family",
          "plugin",
          "questions",
          "spec_template"
        ],
        "title": "GuidedTemplate",
        "type": "object"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "title": "Detail",
            "type": "array"
          }
        },
        "title": "HTTPValidationError",
        "type": "object"
      },
      "Hdf5Coord": {
        "additionalProperties": false,
        "description": "The coordinate of dim ``dim`` in node ``node`` of a raw HDF5 upload (M4).\n\nExactly one source: ``path`` (a 1-D HDF5 dataset holding the labels), or ``start`` with\nan optional ``step`` (a range: numbers, or a date and a pandas frequency such as\n``\"2024-01-01\"`` + ``\"W-MON\"``), or neither (an integer index ``0..n-1``). ``spec``\noverrides the inferred :class:`~mapi_spec.schema.DimSpec`.",
        "examples": [
          {
            "dim": "row",
            "spec": {
              "kind": "float",
              "ordered": true
            },
            "start": 0.0,
            "step": 0.05
          },
          {
            "dim": "date",
            "path": "/axes/date",
            "spec": {
              "kind": "time",
              "policy": "extend"
            }
          }
        ],
        "properties": {
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "node": {
            "default": "/",
            "pattern": "^/(?:[A-Za-z_][A-Za-z0-9_.\\-]{0,63}(?:/[A-Za-z_][A-Za-z0-9_.\\-]{0,63}){0,7})?$",
            "title": "Node",
            "type": "string"
          },
          "path": {
            "anyOf": [
              {
                "pattern": "^/[^\\x00]{1,1024}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Path"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DimSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "start": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start"
          },
          "step": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Step"
          }
        },
        "required": [
          "dim"
        ],
        "title": "Hdf5Coord",
        "type": "object"
      },
      "Hdf5Mapping": {
        "additionalProperties": false,
        "description": "How a raw HDF5 upload becomes a (tree) dataset (M4): which arrays become which\nvariables of which node, with which dims and coords. Arrays that are not mapped are\nreported in one warning, never read.",
        "examples": [
          {
            "coords": [
              {
                "dim": "row",
                "spec": {
                  "kind": "float",
                  "ordered": true
                },
                "start": 0.0,
                "step": 0.05
              }
            ],
            "vars": [
              {
                "dims": [
                  "row",
                  "col"
                ],
                "name": "image",
                "node": "/",
                "path": "/observations/image",
                "units": "counts"
              },
              {
                "dims": [
                  "prow",
                  "pcol"
                ],
                "name": "psf",
                "node": "/psf",
                "path": "/psf/kernel"
              }
            ]
          }
        ],
        "properties": {
          "coords": {
            "items": {
              "$ref": "#/components/schemas/Hdf5Coord"
            },
            "maxItems": 64,
            "title": "Coords",
            "type": "array"
          },
          "vars": {
            "items": {
              "$ref": "#/components/schemas/Hdf5Var"
            },
            "maxItems": 1024,
            "minItems": 1,
            "title": "Vars",
            "type": "array"
          }
        },
        "required": [
          "vars"
        ],
        "title": "Hdf5Mapping",
        "type": "object"
      },
      "Hdf5Var": {
        "additionalProperties": false,
        "description": "A data variable read from one HDF5 dataset of a raw HDF5 upload (M4).\n\n``dims`` names the array's axes in order (its length must equal the array's ``ndim``;\nthe sandbox checks it). The variable is stored as ``name`` in tree node ``node``.",
        "examples": [
          {
            "dims": [
              "row",
              "col"
            ],
            "name": "image",
            "node": "/",
            "path": "/observations/image",
            "units": "counts"
          }
        ],
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "dims": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 32,
            "title": "Dims",
            "type": "array"
          },
          "missing": {
            "default": "forbid",
            "enum": [
              "forbid",
              "allow",
              "mask"
            ],
            "title": "Missing",
            "type": "string"
          },
          "name": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Name",
            "type": "string"
          },
          "node": {
            "default": "/",
            "pattern": "^/(?:[A-Za-z_][A-Za-z0-9_.\\-]{0,63}(?:/[A-Za-z_][A-Za-z0-9_.\\-]{0,63}){0,7})?$",
            "title": "Node",
            "type": "string"
          },
          "path": {
            "pattern": "^/[^\\x00]{1,1024}$",
            "title": "Path",
            "type": "string"
          },
          "role": {
            "$ref": "#/components/schemas/Role",
            "default": "covariate"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Units"
          }
        },
        "required": [
          "path",
          "name"
        ],
        "title": "Hdf5Var",
        "type": "object"
      },
      "Health": {
        "description": "``/healthz`` (process liveness) and ``/readyz`` (dependencies) body.",
        "examples": [
          {
            "api_version": "v1",
            "checks": {
              "object_store": {
                "latency_ms": 3.4,
                "status": "ok"
              },
              "postgres": {
                "latency_ms": 1.2,
                "status": "ok"
              }
            },
            "contract_version": "0.2",
            "status": "ok",
            "version": "0.2.0"
          }
        ],
        "properties": {
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "checks": {
            "additionalProperties": {
              "$ref": "#/components/schemas/HealthCheck"
            },
            "title": "Checks",
            "type": "object"
          },
          "contract_version": {
            "default": "0.2",
            "title": "Contract Version",
            "type": "string"
          },
          "status": {
            "enum": [
              "ok",
              "degraded",
              "fail"
            ],
            "title": "Status",
            "type": "string"
          },
          "version": {
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "status",
          "version"
        ],
        "title": "Health",
        "type": "object"
      },
      "HealthCheck": {
        "examples": [
          {
            "latency_ms": 1.2,
            "status": "ok"
          }
        ],
        "properties": {
          "detail": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          },
          "latency_ms": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latency Ms"
          },
          "status": {
            "enum": [
              "ok",
              "degraded",
              "fail"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "title": "HealthCheck",
        "type": "object"
      },
      "HoldoutPlan": {
        "additionalProperties": false,
        "description": "One fold: the existing train/holdout split.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the folds are cut at (a step id or 'raw'), as data.split",
            "title": "After Step"
          },
          "kind": {
            "const": "holdout",
            "title": "Kind",
            "type": "string"
          },
          "split": {
            "discriminator": {
              "mapping": {
                "as_of": "#/components/schemas/AsOfSplit",
                "column": "#/components/schemas/ColumnSplit",
                "last_per_group": "#/components/schemas/LastPerGroupSplit",
                "leave_group_out": "#/components/schemas/LeaveGroupOutSplit",
                "mask_block": "#/components/schemas/MaskBlockSplit",
                "stratified": "#/components/schemas/StratifiedSplit",
                "time_holdout": "#/components/schemas/TimeHoldoutSplit"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/TimeHoldoutSplit"
              },
              {
                "$ref": "#/components/schemas/LastPerGroupSplit"
              },
              {
                "$ref": "#/components/schemas/AsOfSplit"
              },
              {
                "$ref": "#/components/schemas/LeaveGroupOutSplit"
              },
              {
                "$ref": "#/components/schemas/MaskBlockSplit"
              },
              {
                "$ref": "#/components/schemas/ColumnSplit"
              },
              {
                "$ref": "#/components/schemas/StratifiedSplit"
              }
            ],
            "title": "Split"
          }
        },
        "required": [
          "kind",
          "split"
        ],
        "title": "HoldoutPlan",
        "type": "object"
      },
      "Horizon": {
        "additionalProperties": false,
        "properties": {
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "periods": {
            "maximum": 100000.0,
            "minimum": 1.0,
            "title": "Periods",
            "type": "integer"
          }
        },
        "required": [
          "dim",
          "periods"
        ],
        "title": "Horizon",
        "type": "object"
      },
      "ImageFolderOptions": {
        "additionalProperties": false,
        "description": "How a zip of images and a manifest table becomes ``pixels(image, y, x, channel)``.\n\nThe manifest has one row per image: the image path in the zip and, optionally, an id, a\nclass label and a train/test split. The images must have 8 bits per channel and one\nsize, unless ``size`` resizes them. Every byte is decoded inside the sandboxed ingest run.",
        "examples": [
          {
            "label_column": "class",
            "manifest": "manifest.csv",
            "path_column": "file",
            "split_column": "split"
          },
          {
            "id_column": "id",
            "label_column": "label",
            "manifest": "labels.parquet",
            "max_images": 5000,
            "mode": "rgb",
            "resize": "crop",
            "size": [
              32,
              32
            ]
          }
        ],
        "properties": {
          "columns": {
            "anyOf": [
              {
                "items": {
                  "maxLength": 256,
                  "minLength": 1,
                  "type": "string"
                },
                "maxItems": 64,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Other columns kept as coords (default: all others)",
            "title": "Columns"
          },
          "dim": {
            "default": "image",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "id_column": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Unique labels of the image dim (default: the row number)",
            "title": "Id Column"
          },
          "label_column": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Class labels: the text variable 'label(image)', role target",
            "title": "Label Column"
          },
          "manifest": {
            "default": "manifest.csv",
            "description": "Path of the manifest in the zip",
            "maxLength": 256,
            "minLength": 1,
            "title": "Manifest",
            "type": "string"
          },
          "max_images": {
            "default": 20000,
            "maximum": 100000.0,
            "minimum": 1.0,
            "title": "Max Images",
            "type": "integer"
          },
          "mode": {
            "default": "auto",
            "description": "auto: rgb when an image has colour, else gray",
            "enum": [
              "auto",
              "gray",
              "rgb"
            ],
            "title": "Mode",
            "type": "string"
          },
          "path_column": {
            "default": "path",
            "description": "Image paths relative to the zip root",
            "maxLength": 256,
            "minLength": 1,
            "title": "Path Column",
            "type": "string"
          },
          "resize": {
            "default": "stretch",
            "description": "How images are resized (only with size)",
            "enum": [
              "stretch",
              "crop",
              "pad"
            ],
            "title": "Resize",
            "type": "string"
          },
          "size": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "(height, width) to resize every image to; each 1..4096",
            "title": "Size"
          },
          "split_column": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Train/test assignment: the text coord 'split(image)'",
            "title": "Split Column"
          },
          "var": {
            "default": "pixels",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Var",
            "type": "string"
          }
        },
        "title": "ImageFolderOptions",
        "type": "object"
      },
      "IngestAssembly": {
        "additionalProperties": false,
        "description": "A dataset version built from several uploads (M4): every source is ingested in the\nsame sandboxed run (inputs ``upload.<i>``, ``i`` = the source's index), then combined\nper node. The result is a tree dataset unless every source lands in the root.",
        "examples": [
          {
            "sources": [
              {
                "combine": "concat",
                "concat_dim": "year",
                "concat_label": 2024,
                "mapping": {
                  "format": "netcdf"
                },
                "node": "/",
                "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p0"
              },
              {
                "combine": "concat",
                "concat_dim": "year",
                "concat_label": 2025,
                "mapping": {
                  "format": "netcdf"
                },
                "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p1"
              },
              {
                "mapping": {
                  "format": "netcdf"
                },
                "node": "/instrument",
                "upload_id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p2"
              }
            ]
          }
        ],
        "properties": {
          "sources": {
            "items": {
              "$ref": "#/components/schemas/AssemblySource"
            },
            "maxItems": 64,
            "minItems": 1,
            "title": "Sources",
            "type": "array"
          }
        },
        "required": [
          "sources"
        ],
        "title": "IngestAssembly",
        "type": "object"
      },
      "IngestMapping": {
        "additionalProperties": false,
        "description": "How an upload becomes a labelled dataset (Meridian ``CoordToColumns`` style).\n\nTabular formats need a mapping; ``zarr_zip``/``netcdf`` are self-describing and may omit\n``dims``/``vars`` (with groups, they rename/select per node by name). A raw ``hdf5``\nfile (M4) needs ``hdf5`` (:class:`Hdf5Mapping`) instead of ``dims``/``vars``. Parsing\nhappens only inside a sandboxed ingest run.\n\nWith the ``mff`` preset the long table is first pivoted to one column\nper ``VariableName`` (plus ``Period`` and the key columns); ``vars`` and ``wide`` then\npick and rename those variables (``column`` = a ``VariableName`` value) and ``dims`` may\nrefine the dims the preset derives (``column`` = an MFF column). Without ``vars`` and\n``wide`` every variable is kept under its own name.",
        "examples": [
          {
            "dims": {
              "date": {
                "column": "date",
                "spec": {
                  "freq": "D",
                  "kind": "time",
                  "policy": "extend"
                }
              },
              "market": {
                "column": "market",
                "spec": {
                  "kind": "categorical"
                }
              }
            },
            "format": "csv",
            "vars": {
              "revenue_local": {
                "column": "revenue",
                "role": "target",
                "units": "local"
              },
              "spend_local": {
                "column": "spend",
                "role": "spend",
                "units": "local"
              }
            }
          },
          {
            "dims": {
              "market": {
                "column": "market",
                "spec": {
                  "kind": "categorical"
                }
              },
              "week": {
                "column": "week",
                "spec": {
                  "freq": "W-SUN",
                  "kind": "time",
                  "policy": "extend"
                }
              }
            },
            "format": "csv",
            "vars": {
              "revenue": {
                "column": "revenue",
                "role": "target",
                "units": "EUR"
              }
            },
            "wide": {
              "spend": {
                "columns": {
                  "search": "search_spend",
                  "social": "social_spend",
                  "tv": "tv_spend"
                },
                "dim": "channel",
                "role": "spend",
                "units": "EUR"
              }
            }
          },
          {
            "format": "mff",
            "mff": {
              "freq": "W-MON"
            },
            "preset": "mff"
          },
          {
            "format": "parquet",
            "meridian": {
              "kpi": "revenue",
              "media": [
                "tv_impressions"
              ],
              "media_channels": [
                "tv"
              ],
              "media_spend": [
                "tv_spend"
              ]
            },
            "preset": "meridian"
          },
          {
            "format": "hdf5",
            "hdf5": {
              "coords": [
                {
                  "dim": "row",
                  "spec": {
                    "kind": "float",
                    "ordered": true
                  },
                  "start": 0.0,
                  "step": 0.05
                }
              ],
              "vars": [
                {
                  "dims": [
                    "row",
                    "col"
                  ],
                  "name": "image",
                  "node": "/",
                  "path": "/observations/image",
                  "units": "counts"
                },
                {
                  "dims": [
                    "prow",
                    "pcol"
                  ],
                  "name": "psf",
                  "node": "/psf",
                  "path": "/psf/kernel"
                }
              ]
            }
          },
          {
            "format": "image_folder",
            "images": {
              "label_column": "class",
              "manifest": "manifest.csv",
              "path_column": "file",
              "split_column": "split"
            }
          },
          {
            "format": "safetensors",
            "weights": {
              "max_parameters": 50000000
            }
          }
        ],
        "properties": {
          "dims": {
            "additionalProperties": {
              "$ref": "#/components/schemas/DimMapping"
            },
            "maxProperties": 32,
            "title": "Dims",
            "type": "object"
          },
          "format": {
            "enum": [
              "csv",
              "parquet",
              "mff",
              "zarr_zip",
              "netcdf",
              "hdf5",
              "image_folder",
              "safetensors"
            ],
            "title": "Format",
            "type": "string"
          },
          "hdf5": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Hdf5Mapping"
              },
              {
                "type": "null"
              }
            ],
            "description": "M4: the arrays, dims and coords of a raw HDF5 upload (format 'hdf5')"
          },
          "images": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ImageFolderOptions"
              },
              {
                "type": "null"
              }
            ],
            "description": "v0.14: options of an 'image_folder' upload (defaults when left out)"
          },
          "layout": {
            "default": "dense",
            "enum": [
              "dense",
              "long"
            ],
            "title": "Layout",
            "type": "string"
          },
          "meridian": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeridianColumns"
              },
              {
                "type": "null"
              }
            ],
            "description": "The meridian preset's columns"
          },
          "mff": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MffOptions"
              },
              {
                "type": "null"
              }
            ],
            "description": "Options of the mff preset"
          },
          "preset": {
            "$ref": "#/components/schemas/IngestPreset",
            "default": "none",
            "description": "M3: a file contract instead of (or refined by) the column mapping"
          },
          "vars": {
            "additionalProperties": {
              "$ref": "#/components/schemas/VarMapping"
            },
            "maxProperties": 1024,
            "title": "Vars",
            "type": "object"
          },
          "weights": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WeightsOptions"
              },
              {
                "type": "null"
              }
            ],
            "description": "v0.15: options of a 'safetensors' upload (defaults when left out)"
          },
          "wide": {
            "additionalProperties": {
              "$ref": "#/components/schemas/WideVarMapping"
            },
            "description": "M3: variables read from one column per label of a dim (wide tables)",
            "maxProperties": 64,
            "title": "Wide",
            "type": "object"
          }
        },
        "required": [
          "format"
        ],
        "title": "IngestMapping",
        "type": "object"
      },
      "IngestPreset": {
        "enum": [
          "none",
          "mff",
          "meridian"
        ],
        "title": "IngestPreset",
        "type": "string"
      },
      "IngestResponse": {
        "properties": {
          "result": {
            "$ref": "#/components/schemas/IngestResult"
          }
        },
        "required": [
          "result"
        ],
        "title": "IngestResponse",
        "type": "object"
      },
      "IngestResult": {
        "enum": [
          "accepted",
          "duplicate",
          "bad_hmac",
          "invalid",
          "unknown_attempt",
          "stale_attempt",
          "late",
          "identity_mismatch"
        ],
        "title": "IngestResult",
        "type": "string"
      },
      "InlineArrow": {
        "additionalProperties": false,
        "description": "A small Arrow IPC stream embedded as base64.",
        "properties": {
          "data": {
            "maxLength": 2097152,
            "pattern": "^[A-Za-z0-9+/]*={0,2}$",
            "title": "Data",
            "type": "string"
          },
          "kind": {
            "const": "inline_arrow",
            "title": "Kind",
            "type": "string"
          },
          "rows": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rows"
          }
        },
        "required": [
          "kind",
          "data"
        ],
        "title": "InlineArrow",
        "type": "object"
      },
      "InputTable": {
        "description": "An endpoint's inline input as one long table: a header row (:attr:`columns`, the\ncoordinate columns first), then one row per coordinate - the layout of a spreadsheet's\nInput sheet and of :func:`mapi_spec.xrjson.xrjson_from_rows`.\n\nFor a forecasting endpoint :attr:`rows` lists the periods after the fitted history (the\nother dims' first levels), every value empty: fill the target where you have actuals and\nleave it empty for the periods to forecast (:mod:`mapi_spec.actuals`). Dates are ISO\n``yyyy-MM-dd``.",
        "examples": [
          {
            "columns": [
              {
                "description": "The period (yyyy-MM-dd)",
                "freq": "MS",
                "name": "t",
                "role": "coord"
              },
              {
                "description": "The actual (leave empty for the periods to forecast)",
                "dims": [
                  "t"
                ],
                "name": "y",
                "role": "target"
              },
              {
                "description": "Necessary on each period, also on the periods to forecast",
                "dims": [
                  "t"
                ],
                "name": "price",
                "role": "driver"
              }
            ],
            "conditions_on_actuals": true,
            "horizon_dim": "t",
            "rows": [
              [
                "1961-01-01",
                null,
                null
              ],
              [
                "1961-02-01",
                null,
                null
              ]
            ]
          }
        ],
        "properties": {
          "columns": {
            "items": {
              "$ref": "#/components/schemas/InputTableColumn"
            },
            "maxItems": 300,
            "title": "Columns",
            "type": "array"
          },
          "conditions_on_actuals": {
            "default": false,
            "title": "Conditions On Actuals",
            "type": "boolean"
          },
          "horizon_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon Dim"
          },
          "rows": {
            "items": {
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "type": "array"
            },
            "maxItems": 200,
            "title": "Rows",
            "type": "array"
          }
        },
        "title": "InputTable",
        "type": "object"
      },
      "InputTableColumn": {
        "description": "One column of an :class:`InputTable`.",
        "properties": {
          "description": {
            "default": "",
            "maxLength": 500,
            "title": "Description",
            "type": "string"
          },
          "dims": {
            "description": "The dims a value column varies along",
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Dims",
            "type": "array"
          },
          "freq": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The frequency of a time coordinate",
            "title": "Freq"
          },
          "name": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Name",
            "type": "string"
          },
          "role": {
            "enum": [
              "coord",
              "target",
              "driver",
              "input"
            ],
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "name",
          "role"
        ],
        "title": "InputTableColumn",
        "type": "object"
      },
      "InspectedArray": {
        "description": "One array of an inspected upload (from its metadata only; no data is read).\n\n``dims_hint`` comes from the file's own dim metadata where there is some (HDF5\n``DIMENSION_LIST``, zarr ``_ARRAY_DIMENSIONS``, NetCDF dims).",
        "examples": [
          {
            "attrs": {
              "units": "counts"
            },
            "chunks": [
              64,
              64
            ],
            "dtype": "float32",
            "filters": [
              "deflate",
              "shuffle"
            ],
            "path": "/observations/image",
            "shape": [
              64,
              64
            ]
          }
        ],
        "properties": {
          "attrs": {
            "additionalProperties": {
              "anyOf": [
                {
                  "maxLength": 1024,
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ]
            },
            "maxProperties": 64,
            "propertyNames": {
              "maxLength": 256
            },
            "title": "Attrs",
            "type": "object"
          },
          "chunks": {
            "anyOf": [
              {
                "items": {
                  "minimum": 1.0,
                  "type": "integer"
                },
                "maxItems": 64,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Chunks"
          },
          "dims_hint": {
            "anyOf": [
              {
                "items": {
                  "maxLength": 256,
                  "type": "string"
                },
                "maxItems": 64,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dims Hint"
          },
          "dtype": {
            "maxLength": 64,
            "title": "Dtype",
            "type": "string"
          },
          "filters": {
            "items": {
              "maxLength": 256,
              "type": "string"
            },
            "maxItems": 32,
            "title": "Filters",
            "type": "array"
          },
          "path": {
            "maxLength": 1025,
            "title": "Path",
            "type": "string"
          },
          "shape": {
            "items": {
              "minimum": 0.0,
              "type": "integer"
            },
            "maxItems": 64,
            "title": "Shape",
            "type": "array"
          }
        },
        "required": [
          "path",
          "dtype"
        ],
        "title": "InspectedArray",
        "type": "object"
      },
      "InternalService": {
        "enum": [
          "api",
          "dispatcher",
          "reconciler",
          "finalizer",
          "events",
          "pubsub-push"
        ],
        "title": "InternalService",
        "type": "string"
      },
      "Intervention": {
        "additionalProperties": false,
        "description": "Change ``var`` on the coords selected by ``sel``: exactly one of multiply/add/set.",
        "properties": {
          "add": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Add"
          },
          "multiply": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Multiply"
          },
          "sel": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "integer"
                        },
                        {
                          "type": "number"
                        },
                        {
                          "type": "boolean"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              }
            },
            "title": "Sel",
            "type": "object"
          },
          "set": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Set"
          },
          "var": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Var",
            "type": "string"
          }
        },
        "required": [
          "var"
        ],
        "title": "Intervention",
        "type": "object"
      },
      "Isolation": {
        "description": "How strongly a backend isolates a run (ordered: higher is stronger).",
        "enum": [
          0,
          1,
          2,
          3,
          4
        ],
        "title": "Isolation",
        "type": "integer"
      },
      "Issue": {
        "additionalProperties": false,
        "description": "One problem found while validating a document, located by a JSON pointer.",
        "properties": {
          "code": {
            "$ref": "#/components/schemas/ErrorCode"
          },
          "context": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Context",
            "type": "object"
          },
          "message": {
            "description": "Trusted, platform-authored text",
            "maxLength": 2000,
            "title": "Message",
            "type": "string"
          },
          "pointer": {
            "default": "",
            "description": "RFC 6901 JSON pointer into the submitted document",
            "title": "Pointer",
            "type": "string"
          },
          "severity": {
            "$ref": "#/components/schemas/Severity",
            "default": "error"
          },
          "suggested_action": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Suggested Action"
          },
          "untrusted_text": {
            "anyOf": [
              {
                "maxLength": 8000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "User/plugin-originated text; render as text only",
            "title": "Untrusted Text"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "title": "Issue",
        "type": "object"
      },
      "JsonValue": {},
      "KillSwitchUpdate": {
        "additionalProperties": false,
        "description": "``PUT /v1/admin/kill-switches``: fields left out keep their value; ``reason`` is\nrequired so the audit log says why.",
        "examples": [
          {
            "reason": "incident 2026-10-15",
            "untrusted_execution_enabled": false
          },
          {
            "cancel_untrusted_runs": true,
            "reason": "incident 2026-10-15: confirmed sandbox escape",
            "untrusted_execution_enabled": false
          },
          {
            "global_spend_cap_micros": 500000000,
            "reason": "daily cap for the beta"
          }
        ],
        "properties": {
          "cancel_untrusted_runs": {
            "default": false,
            "description": "Also cancel every unfinished run of tenant-uploaded code, queued or already placed on an executor. Requires untrusted_execution_enabled=false in the same update. Without it, pausing only holds new work and in-flight runs continue",
            "title": "Cancel Untrusted Runs",
            "type": "boolean"
          },
          "clear_spend_cap": {
            "default": false,
            "description": "Remove the spend cap",
            "title": "Clear Spend Cap",
            "type": "boolean"
          },
          "global_spend_cap_micros": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Global Spend Cap Micros"
          },
          "reason": {
            "maxLength": 500,
            "minLength": 3,
            "title": "Reason",
            "type": "string"
          },
          "spend_cap_period": {
            "anyOf": [
              {
                "enum": [
                  "day",
                  "month"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spend Cap Period"
          },
          "untrusted_execution_enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Untrusted Execution Enabled"
          }
        },
        "required": [
          "reason"
        ],
        "title": "KillSwitchUpdate",
        "type": "object"
      },
      "KillSwitches": {
        "description": "Platform-wide emergency controls (operators only; every change is audited).",
        "examples": [
          {
            "global_spend_cap_micros": 500000000,
            "reason": "incident 2026-10-15: suspected sandbox probe; code runs paused",
            "spend_cap_currency": "USD",
            "spend_cap_period": "day",
            "untrusted_execution_enabled": false,
            "updated_at": "2026-10-15T09:30:00Z",
            "updated_by": "usr_01jaf3a0b0c0d0e0f0g0h0j0k0"
          }
        ],
        "properties": {
          "global_spend_cap_micros": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stop new compute once the platform spent this much",
            "title": "Global Spend Cap Micros"
          },
          "reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "spend_cap_currency": {
            "default": "USD",
            "pattern": "^[A-Z]{3}$",
            "title": "Spend Cap Currency",
            "type": "string"
          },
          "spend_cap_period": {
            "default": "day",
            "enum": [
              "day",
              "month"
            ],
            "title": "Spend Cap Period",
            "type": "string"
          },
          "untrusted_execution_enabled": {
            "default": true,
            "description": "Off: no run of tenant-uploaded plugin code is accepted or leased",
            "title": "Untrusted Execution Enabled",
            "type": "boolean"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "updated_by": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          }
        },
        "title": "KillSwitches",
        "type": "object"
      },
      "LastPerGroupSplit": {
        "additionalProperties": false,
        "description": "Hold out the last ``last`` rows along ``dim`` within each group (``min_len`` kept).",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the split happens at (a step id or 'raw'); default: end of the stateless prefix",
            "title": "After Step"
          },
          "allow_leakage": {
            "default": false,
            "description": "Downgrade LEAKAGE_RISK to a warning (acknowledged)",
            "title": "Allow Leakage",
            "type": "boolean"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "kind": {
            "const": "last_per_group",
            "title": "Kind",
            "type": "string"
          },
          "last": {
            "default": 1,
            "minimum": 1.0,
            "title": "Last",
            "type": "integer"
          },
          "min_len": {
            "default": 1,
            "minimum": 1.0,
            "title": "Min Len",
            "type": "integer"
          },
          "within": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "title": "Within",
            "type": "array"
          }
        },
        "required": [
          "kind",
          "dim",
          "within"
        ],
        "title": "LastPerGroupSplit",
        "type": "object"
      },
      "LeaveGroupOutSplit": {
        "additionalProperties": false,
        "description": "Hold out whole groups of ``dim`` (explicit ``groups`` or ``n`` random ones).",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the split happens at (a step id or 'raw'); default: end of the stateless prefix",
            "title": "After Step"
          },
          "allow_leakage": {
            "default": false,
            "description": "Downgrade LEAKAGE_RISK to a warning (acknowledged)",
            "title": "Allow Leakage",
            "type": "boolean"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "groups": {
            "anyOf": [
              {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "maxItems": 10000,
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Groups"
          },
          "kind": {
            "const": "leave_group_out",
            "title": "Kind",
            "type": "string"
          },
          "n": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "N"
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          }
        },
        "required": [
          "kind",
          "dim"
        ],
        "title": "LeaveGroupOutSplit",
        "type": "object"
      },
      "LiftTest": {
        "additionalProperties": false,
        "description": "One experiment: ``spend_delta`` extra spend on ``channel`` (optionally in one ``geo``)\nfrom ``start`` to ``end`` (inclusive) caused ``kpi_delta`` incremental KPI.\n\nGive the measurement's uncertainty as a standard error ``se`` *or* a confidence interval\n``ci`` at ``ci_level``. A holdout (\"turn the channel off\") is a negative ``spend_delta``\nwith (usually) a negative ``kpi_delta``.",
        "examples": [
          {
            "channel": "tv",
            "ci": [
              -380000.0,
              -140000.0
            ],
            "ci_level": 0.9,
            "description": "TV off in Germany for four weeks",
            "end": "2026-05-03",
            "geo": "de",
            "id": "tv-holdout-2026q2",
            "kpi_delta": -260000.0,
            "spend_delta": -120000.0,
            "start": "2026-04-06"
          }
        ],
        "properties": {
          "channel": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Channel",
            "type": "string"
          },
          "ci": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Confidence interval of kpi_delta",
            "title": "Ci"
          },
          "ci_level": {
            "default": 0.9,
            "maximum": 0.999,
            "minimum": 0.5,
            "title": "Ci Level",
            "type": "number"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "end": {
            "format": "date",
            "title": "End",
            "type": "string"
          },
          "geo": {
            "anyOf": [
              {
                "maxLength": 128,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Geo"
          },
          "id": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9][a-z0-9_-]{0,62}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Id"
          },
          "kpi_delta": {
            "description": "Measured incremental KPI (KPI units)",
            "title": "Kpi Delta",
            "type": "number"
          },
          "se": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Standard error of kpi_delta",
            "title": "Se"
          },
          "spend_delta": {
            "description": "Extra spend during the test (spend units)",
            "title": "Spend Delta",
            "type": "number"
          },
          "start": {
            "format": "date",
            "title": "Start",
            "type": "string"
          }
        },
        "required": [
          "channel",
          "start",
          "end",
          "spend_delta",
          "kpi_delta"
        ],
        "title": "LiftTest",
        "type": "object"
      },
      "LimitName": {
        "description": "Every limit a :class:`QuotaDecision` can name.",
        "enum": [
          "requests_per_minute",
          "max_resource_class",
          "max_fanout_tasks",
          "concurrent_runs",
          "vcpu_seconds_per_day",
          "vcpu_seconds_per_month",
          "storage_bytes",
          "egress_bytes_per_month",
          "untrusted_execution",
          "global_spend"
        ],
        "title": "LimitName",
        "type": "string"
      },
      "Lineage": {
        "description": "Everything a model version came from (plan §8.6).",
        "examples": [
          {
            "attempt": 1,
            "base_image": "base-bayes@2026.10",
            "dataset_sha": "sha256:efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef",
            "engine": "nutpie",
            "executor": "local-process",
            "lib_versions": {
              "pymc": "5.25.1"
            },
            "plugin": "mmm.bayesian@1.3.2",
            "resource_class": "M",
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "seed": 20261014,
            "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "base_image": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Image"
          },
          "catalog_digest": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Catalog Digest"
          },
          "dataset_sha": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dataset Sha"
          },
          "engine": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Engine"
          },
          "evaluation_of": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "evaluate_then_refit: the evaluation model version this refit pairs",
            "title": "Evaluation Of"
          },
          "executor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor"
          },
          "lib_versions": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Lib Versions",
            "type": "object"
          },
          "overlay_hash": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Overlay Hash"
          },
          "plugin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "mmm.bayesian@1.3.2"
            ],
            "title": "Plugin"
          },
          "resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "seed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          },
          "side_tables": {
            "additionalProperties": {
              "pattern": "^sha256:[0-9a-f]{64}$",
              "type": "string"
            },
            "title": "Side Tables",
            "type": "object"
          },
          "spec_hash": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Spec Hash",
            "type": "string"
          }
        },
        "required": [
          "run_id",
          "attempt",
          "spec_hash"
        ],
        "title": "Lineage",
        "type": "object"
      },
      "LogLine": {
        "description": "One captured line. ``line`` is untrusted text: render it as text only.",
        "examples": [
          {
            "attempt": 1,
            "line": "Sampling 4 chains for 400 tune and 1000 draw iterations",
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "seq": 120,
            "stream": "stderr",
            "ts": "2026-10-15T09:30:00Z"
          },
          {
            "attempt": 1,
            "fields": {
              "point": 3
            },
            "level": "warning",
            "line": "grid point 3 failed: the model did not converge",
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "seq": 121,
            "stream": "user",
            "ts": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "fields": {
            "anyOf": [
              {
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "maxLength": 256,
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "Structured fields of a 'user' line (v0.11)",
            "title": "Fields"
          },
          "level": {
            "anyOf": [
              {
                "enum": [
                  "debug",
                  "info",
                  "warning",
                  "error"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Only on stream 'user' (v0.11)",
            "title": "Level"
          },
          "line": {
            "maxLength": 4096,
            "title": "Line",
            "type": "string"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "seq": {
            "minimum": 0.0,
            "title": "Seq",
            "type": "integer"
          },
          "stream": {
            "enum": [
              "stdout",
              "stderr",
              "system",
              "user"
            ],
            "title": "Stream",
            "type": "string"
          },
          "truncated": {
            "default": false,
            "title": "Truncated",
            "type": "boolean"
          },
          "ts": {
            "format": "date-time",
            "title": "Ts",
            "type": "string"
          }
        },
        "required": [
          "run_id",
          "attempt",
          "seq",
          "ts",
          "stream",
          "line"
        ],
        "title": "LogLine",
        "type": "object"
      },
      "LogPayload": {
        "additionalProperties": false,
        "description": "``log``: one captured worker output line (ANSI/control sequences already stripped).\n\nStream ``user`` (v0.11) is a structured line the model code wrote through the tracking\nAPI; only those lines carry a ``level`` and ``fields``.",
        "properties": {
          "fields": {
            "anyOf": [
              {
                "maxProperties": 16,
                "patternProperties": {
                  "^[a-z][a-z0-9_]{0,31}$": {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "integer"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "maxLength": 256,
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Fields"
          },
          "level": {
            "anyOf": [
              {
                "enum": [
                  "debug",
                  "info",
                  "warning",
                  "error"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Level"
          },
          "line": {
            "maxLength": 4096,
            "title": "Line",
            "type": "string"
          },
          "stream": {
            "enum": [
              "stdout",
              "stderr",
              "system",
              "user"
            ],
            "title": "Stream",
            "type": "string"
          },
          "truncated": {
            "default": false,
            "title": "Truncated",
            "type": "boolean"
          }
        },
        "required": [
          "stream",
          "line"
        ],
        "title": "LogPayload",
        "type": "object"
      },
      "ManifestSignature": {
        "additionalProperties": false,
        "description": "Platform signature over :func:`bundle_manifest_signing_bytes`.\n\n``HS256`` (HMAC-SHA256 with a server-held key) is the local/M1 signer; KMS asymmetric\nsigners (M2) use their own ``alg`` and the same signing bytes.",
        "properties": {
          "alg": {
            "enum": [
              "HS256",
              "KMS-EC-P256-SHA256",
              "KMS-RSA-PSS-SHA256"
            ],
            "title": "Alg",
            "type": "string"
          },
          "key_id": {
            "maxLength": 256,
            "minLength": 1,
            "title": "Key Id",
            "type": "string"
          },
          "value": {
            "maxLength": 2048,
            "minLength": 1,
            "title": "Value",
            "type": "string"
          }
        },
        "required": [
          "alg",
          "key_id",
          "value"
        ],
        "title": "ManifestSignature",
        "type": "object"
      },
      "MaskBlockSplit": {
        "additionalProperties": false,
        "description": "Hold out random blocks over ``dims`` (block sizes per dim) covering ``fraction``.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the split happens at (a step id or 'raw'); default: end of the stateless prefix",
            "title": "After Step"
          },
          "allow_leakage": {
            "default": false,
            "description": "Downgrade LEAKAGE_RISK to a warning (acknowledged)",
            "title": "Allow Leakage",
            "type": "boolean"
          },
          "block": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "type": "integer"
              }
            },
            "title": "Block",
            "type": "object"
          },
          "dims": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "title": "Dims",
            "type": "array"
          },
          "fraction": {
            "exclusiveMaximum": 1.0,
            "exclusiveMinimum": 0.0,
            "title": "Fraction",
            "type": "number"
          },
          "kind": {
            "const": "mask_block",
            "title": "Kind",
            "type": "string"
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          }
        },
        "required": [
          "kind",
          "dims",
          "fraction"
        ],
        "title": "MaskBlockSplit",
        "type": "object"
      },
      "Me": {
        "description": "``GET /v1/me``: who the caller is and where they may act.\n\nFor a token, ``tenants`` holds exactly the token's project and ``token`` the token\nitself (its scopes narrow every role shown here).",
        "examples": [
          {
            "auth": "session",
            "operator": false,
            "principal": {
              "email": "ana@acme.example",
              "email_verified": true,
              "id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
              "issuer": "https://accounts.google.com",
              "kind": "user",
              "name": "Ana Analyst",
              "subject": "110169484474386276334"
            },
            "tenants": [
              {
                "projects": [
                  {
                    "name": "Growth",
                    "project_id": "growth",
                    "role": "runner",
                    "tenant_id": "acme"
                  }
                ],
                "tenant": {
                  "created_at": "2026-10-15T09:30:00Z",
                  "data_residency": "eu",
                  "id": "acme",
                  "name": "Acme Retail",
                  "status": "active",
                  "trust_tier": "verified"
                }
              }
            ]
          }
        ],
        "properties": {
          "auth": {
            "enum": [
              "session",
              "token",
              "service"
            ],
            "title": "Auth",
            "type": "string"
          },
          "operator": {
            "default": false,
            "title": "Operator",
            "type": "boolean"
          },
          "principal": {
            "discriminator": {
              "mapping": {
                "service": "#/components/schemas/ServicePrincipal",
                "token": "#/components/schemas/TokenPrincipal",
                "user": "#/components/schemas/UserPrincipal"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/UserPrincipal"
              },
              {
                "$ref": "#/components/schemas/TokenPrincipal"
              },
              {
                "$ref": "#/components/schemas/ServicePrincipal"
              }
            ],
            "title": "Principal"
          },
          "tenants": {
            "items": {
              "$ref": "#/components/schemas/MeTenant"
            },
            "title": "Tenants",
            "type": "array"
          },
          "token": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ApiToken"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "principal",
          "auth"
        ],
        "title": "Me",
        "type": "object"
      },
      "MeProject": {
        "description": "A project the caller can act in, with the caller's effective role there.",
        "examples": [
          {
            "name": "Growth",
            "project_id": "growth",
            "role": "runner",
            "tenant_id": "acme"
          }
        ],
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "role": {
            "$ref": "#/components/schemas/ProjectRole"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "tenant_id",
          "project_id",
          "name",
          "role"
        ],
        "title": "MeProject",
        "type": "object"
      },
      "MeTenant": {
        "description": "A tenant the caller belongs to; ``role`` is the tenant-wide role (``None`` when the\ncaller only has project memberships).",
        "examples": [
          {
            "projects": [
              {
                "name": "Growth",
                "project_id": "growth",
                "role": "runner",
                "tenant_id": "acme"
              }
            ],
            "tenant": {
              "created_at": "2026-10-15T09:30:00Z",
              "data_residency": "eu",
              "id": "acme",
              "name": "Acme Retail",
              "status": "active",
              "trust_tier": "verified"
            }
          }
        ],
        "properties": {
          "projects": {
            "items": {
              "$ref": "#/components/schemas/MeProject"
            },
            "title": "Projects",
            "type": "array"
          },
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRole"
              },
              {
                "type": "null"
              }
            ]
          },
          "tenant": {
            "$ref": "#/components/schemas/Tenant"
          }
        },
        "required": [
          "tenant"
        ],
        "title": "MeTenant",
        "type": "object"
      },
      "MediaKeySummary": {
        "description": "One media series (key + labels) of a run: how many items and which steps.",
        "examples": [
          {
            "count": 5,
            "first_step": 0,
            "key": "samples",
            "kind": "image",
            "labels": {
              "split": "val"
            },
            "last_created_at": "2026-10-15T09:30:00Z",
            "last_step": 4
          }
        ],
        "properties": {
          "count": {
            "minimum": 0.0,
            "title": "Count",
            "type": "integer"
          },
          "first_step": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "First Step"
          },
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "kind": {
            "enum": [
              "image",
              "table"
            ],
            "title": "Kind",
            "type": "string"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "last_created_at": {
            "format": "date-time",
            "title": "Last Created At",
            "type": "string"
          },
          "last_step": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Step"
          }
        },
        "required": [
          "key",
          "kind",
          "count",
          "last_created_at"
        ],
        "title": "MediaKeySummary",
        "type": "object"
      },
      "MediaWrite": {
        "additionalProperties": false,
        "description": "``POST /v1/runs/{run_id}/media``: log one image (PNG/JPEG) or table (JSON) to a run.\n\n``data`` is the standard base64 of the bytes (at most :data:`MAX_API_MEDIA_BYTES` decoded).\nA table is UTF-8 JSON of a :class:`~mapi_spec.media.MediaTable`.",
        "examples": [
          {
            "caption": "Holdout counts per class",
            "content_type": "application/json",
            "data": "eyJjb2x1bW5zIjpbImNsYXNzIiwibiJdLCJyb3dzIjpbWyJjYXQiLDNdXX0=",
            "key": "confusion_counts",
            "kind": "table"
          },
          {
            "content_type": "image/png",
            "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGNgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==",
            "key": "samples",
            "kind": "image",
            "step": 0
          }
        ],
        "properties": {
          "caption": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Caption"
          },
          "content_type": {
            "enum": [
              "image/png",
              "image/jpeg",
              "application/json"
            ],
            "title": "Content Type",
            "type": "string"
          },
          "data": {
            "maxLength": 5592408,
            "minLength": 4,
            "title": "Data",
            "type": "string"
          },
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "kind": {
            "enum": [
              "image",
              "table"
            ],
            "title": "Kind",
            "type": "string"
          },
          "labels": {
            "maxProperties": 8,
            "patternProperties": {
              "^[a-z][a-z0-9_]{0,31}$": {
                "pattern": "^[A-Za-z0-9_.\\-]{1,63}$",
                "type": "string"
              }
            },
            "title": "Labels",
            "type": "object"
          },
          "step": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Step"
          }
        },
        "required": [
          "key",
          "kind",
          "content_type",
          "data"
        ],
        "title": "MediaWrite",
        "type": "object"
      },
      "Membership": {
        "description": "A role grant. ``project_id=None`` grants the role on the tenant and every project.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "created_by": "usr_01jaf3a0b0c0d0e0f0g0h0j0k0",
            "display_name": "Ana Analyst",
            "email": "ana@acme.example",
            "principal_id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "principal_kind": "user",
            "project_id": "growth",
            "role": "runner",
            "tenant_id": "acme"
          },
          {
            "created_at": "2026-10-15T09:30:00Z",
            "email": "it@acme.example",
            "principal_id": "usr_01jaf3a0b0c0d0e0f0g0h0j0k0",
            "role": "admin",
            "tenant_id": "acme"
          }
        ],
        "properties": {
          "capabilities": {
            "description": "M3.5: e.g. reviewer (approves model validations)",
            "items": {
              "$ref": "#/components/schemas/Capability"
            },
            "title": "Capabilities",
            "type": "array"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "display_name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "email": {
            "anyOf": [
              {
                "maxLength": 320,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "principal_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Principal Id",
            "type": "string"
          },
          "principal_kind": {
            "default": "user",
            "enum": [
              "user",
              "service_account"
            ],
            "title": "Principal Kind",
            "type": "string"
          },
          "project_id": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "role": {
            "$ref": "#/components/schemas/ProjectRole"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "tenant_id",
          "principal_id",
          "role",
          "created_at"
        ],
        "title": "Membership",
        "type": "object"
      },
      "MembershipCreate": {
        "additionalProperties": false,
        "description": "Add a member (tenant-wide or to one project, by path). Give a known ``principal_id``\nor an ``email`` to invite (claimed at first login with that verified e-mail).",
        "examples": [
          {
            "email": "ana@acme.example",
            "role": "runner"
          },
          {
            "principal_id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "role": "viewer"
          }
        ],
        "properties": {
          "capabilities": {
            "description": "M3.5: e.g. reviewer (approves model validations)",
            "items": {
              "$ref": "#/components/schemas/Capability"
            },
            "title": "Capabilities",
            "type": "array"
          },
          "email": {
            "anyOf": [
              {
                "maxLength": 320,
                "pattern": "^[^@\\s]{1,64}@[^@\\s]{1,255}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "principal_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^(?:usr|sa)_[0-9a-z]{26}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Principal Id"
          },
          "role": {
            "$ref": "#/components/schemas/ProjectRole"
          }
        },
        "required": [
          "role"
        ],
        "title": "MembershipCreate",
        "type": "object"
      },
      "MembershipUpdate": {
        "additionalProperties": false,
        "description": "Change a member's role (the last admin of a tenant or project cannot be demoted)\nand, from M3.5, their capabilities (``reviewer``).",
        "examples": [
          {
            "role": "editor"
          },
          {
            "capabilities": [
              "reviewer"
            ]
          }
        ],
        "properties": {
          "capabilities": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/Capability"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Capabilities"
          },
          "role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRole"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "MembershipUpdate",
        "type": "object"
      },
      "MeridianColumns": {
        "additionalProperties": false,
        "description": "Google Meridian's ``CoordToColumns`` contract for a wide CSV/Parquet table.\n\n``media``/``media_spend`` (and ``reach``/``frequency``/``rf_spend``) are parallel lists:\nthe *i*-th column of each belongs to the *i*-th entry of ``media_channels``\n(``rf_channels``). ``geo`` is omitted for a national model; ``kpi_type`` says whether\nthe KPI is revenue (ROI in currency) or a count (``revenue_per_kpi`` converts it).",
        "examples": [
          {
            "controls": [
              "competitor_sales",
              "sentiment"
            ],
            "geo": "geo",
            "kpi": "conversions",
            "kpi_type": "non_revenue",
            "media": [
              "tv_impressions",
              "search_impressions"
            ],
            "media_channels": [
              "tv",
              "search"
            ],
            "media_spend": [
              "tv_spend",
              "search_spend"
            ],
            "population": "population",
            "revenue_per_kpi": "revenue_per_conversion",
            "time": "time"
          }
        ],
        "properties": {
          "controls": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Controls",
            "type": "array"
          },
          "freq": {
            "anyOf": [
              {
                "maxLength": 16,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "W",
            "description": "Time frequency (pandas alias)",
            "title": "Freq"
          },
          "frequency": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Frequency",
            "type": "array"
          },
          "geo": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": "geo",
            "title": "Geo"
          },
          "kpi": {
            "default": "kpi",
            "maxLength": 256,
            "minLength": 1,
            "title": "Kpi",
            "type": "string"
          },
          "kpi_type": {
            "default": "revenue",
            "enum": [
              "revenue",
              "non_revenue"
            ],
            "title": "Kpi Type",
            "type": "string"
          },
          "media": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Media",
            "type": "array"
          },
          "media_channels": {
            "items": {
              "type": "string"
            },
            "maxItems": 128,
            "title": "Media Channels",
            "type": "array"
          },
          "media_spend": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Media Spend",
            "type": "array"
          },
          "non_media_treatments": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Non Media Treatments",
            "type": "array"
          },
          "organic_media": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Organic Media",
            "type": "array"
          },
          "population": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Population"
          },
          "reach": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Reach",
            "type": "array"
          },
          "revenue_per_kpi": {
            "anyOf": [
              {
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revenue Per Kpi"
          },
          "rf_channels": {
            "items": {
              "type": "string"
            },
            "maxItems": 128,
            "title": "Rf Channels",
            "type": "array"
          },
          "rf_spend": {
            "items": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 128,
            "title": "Rf Spend",
            "type": "array"
          },
          "time": {
            "default": "time",
            "maxLength": 256,
            "minLength": 1,
            "title": "Time",
            "type": "string"
          }
        },
        "title": "MeridianColumns",
        "type": "object"
      },
      "MetricHistory": {
        "description": "``GET /v1/runs/{run_id}/metrics/{key}``: every series of one metric key.",
        "examples": [
          {
            "key": "step_size",
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "series": [
              {
                "attempt": 1,
                "count": 3,
                "downsampled": false,
                "labels": {
                  "chain": "0"
                },
                "steps": [
                  1,
                  2,
                  3
                ],
                "ts": [
                  "2026-10-15T09:30:00Z",
                  "2026-10-15T09:30:00Z",
                  "2026-10-15T09:30:00Z"
                ],
                "values": [
                  0.9,
                  0.6,
                  0.45
                ]
              }
            ]
          }
        ],
        "properties": {
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "series": {
            "items": {
              "$ref": "#/components/schemas/MetricHistorySeries"
            },
            "maxItems": 64,
            "title": "Series",
            "type": "array"
          },
          "truncated": {
            "default": false,
            "description": "More series exist than were returned",
            "title": "Truncated",
            "type": "boolean"
          }
        },
        "required": [
          "run_id",
          "key"
        ],
        "title": "MetricHistory",
        "type": "object"
      },
      "MetricHistorySeries": {
        "description": "The points of one series, in step order (downsampled to ``max_points`` with LTTB).",
        "examples": [
          {
            "attempt": 1,
            "count": 3,
            "downsampled": false,
            "labels": {
              "chain": "0"
            },
            "steps": [
              1,
              2,
              3
            ],
            "ts": [
              "2026-10-15T09:30:00Z",
              "2026-10-15T09:30:00Z",
              "2026-10-15T09:30:00Z"
            ],
            "values": [
              0.9,
              0.6,
              0.45
            ]
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "count": {
            "description": "Stored points (before downsampling)",
            "minimum": 0.0,
            "title": "Count",
            "type": "integer"
          },
          "downsampled": {
            "default": false,
            "title": "Downsampled",
            "type": "boolean"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "steps": {
            "items": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": "Steps",
            "type": "array"
          },
          "ts": {
            "items": {
              "format": "date-time",
              "type": "string"
            },
            "title": "Ts",
            "type": "array"
          },
          "values": {
            "items": {
              "type": "number"
            },
            "title": "Values",
            "type": "array"
          }
        },
        "required": [
          "attempt",
          "count",
          "steps",
          "values",
          "ts"
        ],
        "title": "MetricHistorySeries",
        "type": "object"
      },
      "MetricPayload": {
        "additionalProperties": false,
        "description": "``metric``: a scalar metric (holdout error, elpd, ...).",
        "properties": {
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 16,
            "title": "Labels",
            "type": "object"
          },
          "name": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Name",
            "type": "string"
          },
          "step": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Step"
          },
          "value": {
            "title": "Value",
            "type": "number"
          }
        },
        "required": [
          "name",
          "value"
        ],
        "title": "MetricPayload",
        "type": "object"
      },
      "MetricPointIn": {
        "additionalProperties": false,
        "description": "One metric point written through the API (``step`` null = a scalar, newest wins).",
        "examples": [
          {
            "key": "revenue_lift",
            "labels": {
              "region": "north"
            },
            "value": 0.042
          },
          {
            "key": "loss",
            "step": 400,
            "value": 1.23
          }
        ],
        "properties": {
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "labels": {
            "maxProperties": 8,
            "patternProperties": {
              "^[a-z][a-z0-9_]{0,31}$": {
                "pattern": "^[A-Za-z0-9_.\\-]{1,63}$",
                "type": "string"
              }
            },
            "title": "Labels",
            "type": "object"
          },
          "step": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Step"
          },
          "ts": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Defaults to the time of the request",
            "title": "Ts"
          },
          "value": {
            "title": "Value",
            "type": "number"
          }
        },
        "required": [
          "key",
          "value"
        ],
        "title": "MetricPointIn",
        "type": "object"
      },
      "MetricSeries": {
        "description": "Summary of one metric series (key + labels) of a run; the newest attempt that logged it.",
        "examples": [
          {
            "attempt": 1,
            "count": 1400,
            "first_ts": "2026-10-15T09:30:00Z",
            "key": "step_size",
            "labels": {
              "chain": "0"
            },
            "last": 0.31,
            "last_step": 1400,
            "last_ts": "2026-10-15T09:31:00Z",
            "max": 1.2,
            "min": 0.02
          },
          {
            "attempt": 1,
            "count": 1,
            "first_ts": "2026-10-15T09:30:00Z",
            "key": "rmse",
            "last": 12.7,
            "last_ts": "2026-10-15T09:30:00Z",
            "max": 12.7,
            "min": 12.7
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "count": {
            "description": "Stored points",
            "minimum": 0.0,
            "title": "Count",
            "type": "integer"
          },
          "first_ts": {
            "format": "date-time",
            "title": "First Ts",
            "type": "string"
          },
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "last": {
            "description": "Value of the newest point (by time, then step)",
            "title": "Last",
            "type": "number"
          },
          "last_step": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Step of the newest point; null for a scalar",
            "title": "Last Step"
          },
          "last_ts": {
            "format": "date-time",
            "title": "Last Ts",
            "type": "string"
          },
          "max": {
            "title": "Max",
            "type": "number"
          },
          "min": {
            "title": "Min",
            "type": "number"
          }
        },
        "required": [
          "key",
          "attempt",
          "count",
          "last",
          "min",
          "max",
          "first_ts",
          "last_ts"
        ],
        "title": "MetricSeries",
        "type": "object"
      },
      "MetricsWrite": {
        "additionalProperties": false,
        "description": "``POST /v1/runs/{run_id}/metrics``: log metric points to a run (any state).",
        "examples": [
          {
            "metrics": [
              {
                "key": "revenue_lift",
                "value": 0.042
              },
              {
                "key": "loss",
                "step": 400,
                "value": 1.23
              }
            ]
          }
        ],
        "properties": {
          "metrics": {
            "items": {
              "$ref": "#/components/schemas/MetricPointIn"
            },
            "maxItems": 1000,
            "minItems": 1,
            "title": "Metrics",
            "type": "array"
          }
        },
        "required": [
          "metrics"
        ],
        "title": "MetricsWrite",
        "type": "object"
      },
      "MetricsWriteResult": {
        "description": "Points stored, and points that repeated an existing (series, step) and were ignored.",
        "examples": [
          {
            "accepted": 2,
            "duplicates": 0
          }
        ],
        "properties": {
          "accepted": {
            "minimum": 0.0,
            "title": "Accepted",
            "type": "integer"
          },
          "duplicates": {
            "minimum": 0.0,
            "title": "Duplicates",
            "type": "integer"
          }
        },
        "required": [
          "accepted",
          "duplicates"
        ],
        "title": "MetricsWriteResult",
        "type": "object"
      },
      "MffOptions": {
        "additionalProperties": false,
        "description": "The MFF (\"model feature format\") long-table preset.\n\nOne row per ``(period, geography, product, campaign, outlet, creative, variable)`` with\nthe value in ``value_column``. ``Period`` becomes the time dim; ``VariableName`` values\nbecome data variables. The rest follows mmm-framework's MFF semantics (its\n``MFFLoader``), so both read a file the same way:\n\n* ``Geography`` and ``Product`` become dims when they hold more than one level. A blank\n  label (or ``National``, ``Total``, ``All``) is the coarser level: a variable given\n  only there (national TV) is spread across the levels - equal weights, or the KPI's\n  share of each level (``allocation``; mmm-framework's defaults: geographies equally,\n  products by sales). A variable may not mix the two levels.\n* ``Campaign``, ``Outlet`` and ``Creative`` are breakdowns: rows that differ only there\n  are summed, unless the column is listed in ``split`` (then it becomes a dim).\n\n``combine`` joins several key columns into one dim (``{\"geo\": [\"Geography\", \"Product\"]}``\ngives labels such as ``US|Watches``) - a model with one panel dim can then fit a\ngeography x product panel. A combined dim is created even when it has a single label,\nso ``{\"geo\": [\"Geography\"]}`` keeps a national table's geo dim.",
        "properties": {
          "allocation": {
            "additionalProperties": {
              "enum": [
                "equal",
                "kpi"
              ],
              "type": "string"
            },
            "description": "v0.5: how a variable given only at the coarser level (a blank or 'National' label) is spread across the levels of a key column: equally, or by the KPI's share of each level (the variable with role 'target', or 'kpi')",
            "title": "Allocation",
            "type": "object"
          },
          "combine": {
            "description": "M3: dim -> key columns whose labels are joined ('|') into that one dim",
            "maxProperties": 4,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "title": "Combine",
            "type": "object"
          },
          "freq": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pandas offset alias; inferred when omitted",
            "title": "Freq"
          },
          "key_columns": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key column -> dim name",
            "title": "Key Columns",
            "type": "object"
          },
          "kpi": {
            "anyOf": [
              {
                "maxLength": 256,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "v0.5: the KPI variable of 'kpi' allocation",
            "title": "Kpi"
          },
          "missing": {
            "default": "allow",
            "enum": [
              "forbid",
              "allow",
              "mask"
            ],
            "title": "Missing",
            "type": "string"
          },
          "period_column": {
            "default": "Period",
            "title": "Period Column",
            "type": "string"
          },
          "roles": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Variable -> role",
            "title": "Roles",
            "type": "object"
          },
          "split": {
            "description": "v0.5: breakdown key columns (Campaign, Outlet, Creative) kept as dims instead of summed",
            "items": {
              "type": "string"
            },
            "maxItems": 3,
            "title": "Split",
            "type": "array"
          },
          "time_dim": {
            "default": "date",
            "title": "Time Dim",
            "type": "string"
          },
          "units": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Variable -> units",
            "title": "Units",
            "type": "object"
          },
          "value_column": {
            "default": "VariableValue",
            "title": "Value Column",
            "type": "string"
          },
          "variable_column": {
            "default": "VariableName",
            "title": "Variable Column",
            "type": "string"
          }
        },
        "title": "MffOptions",
        "type": "object"
      },
      "Model": {
        "description": "A registry entry grouping the versions fitted from one spec name.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
            "latest_version": 1,
            "name": "eu-geo-mmm",
            "project_id": "default",
            "ref": "model://default/eu-geo-mmm",
            "tenant_id": "default",
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "latest_version": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latest Version"
          },
          "name": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Name",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "ref": {
            "description": "model://project/name (append @vN or @latest)",
            "title": "Ref",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "name",
          "ref",
          "created_at",
          "updated_at"
        ],
        "title": "Model",
        "type": "object"
      },
      "ModelCatalogEntry": {
        "additionalProperties": false,
        "description": "A model plugin version: its manifest plus registry metadata.",
        "properties": {
          "base_image": {
            "anyOf": [
              {
                "maxLength": 256,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "base-bayes@2026.10"
            ],
            "title": "Base Image"
          },
          "manifest": {
            "$ref": "#/components/schemas/ModelManifest"
          },
          "overlay_hash": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Overlay Hash"
          },
          "yanked": {
            "default": false,
            "title": "Yanked",
            "type": "boolean"
          }
        },
        "required": [
          "manifest"
        ],
        "title": "ModelCatalogEntry",
        "type": "object"
      },
      "ModelCompareRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/models:compare``: several model versions of the project side by side.\n\nStarts an ``explore`` run on the first version with the others as ``compare_with`` and\nthe ``comparison`` section (plus ``backtest`` when a split plan is given): a metrics\ntable, a ranking per metric and pairwise Diebold-Mariano tests on the shared holdout.",
        "examples": [
          {
            "models": [
              "model://growth/sales-arimax@v3",
              "model://growth/sales-ets@v1"
            ],
            "sections": [
              "comparison",
              "params"
            ]
          }
        ],
        "properties": {
          "backtest": {
            "anyOf": [
              {
                "discriminator": {
                  "mapping": {
                    "blocked_kfold": "#/components/schemas/BlockedKFoldPlan",
                    "expanding_window": "#/components/schemas/ExpandingWindowPlan",
                    "geo_holdout": "#/components/schemas/GeoHoldoutPlan",
                    "holdout": "#/components/schemas/HoldoutPlan",
                    "nested": "#/components/schemas/NestedPlan",
                    "purged_kfold": "#/components/schemas/PurgedKFoldPlan",
                    "rolling_origin": "#/components/schemas/RollingOriginPlan"
                  },
                  "propertyName": "kind"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/HoldoutPlan"
                  },
                  {
                    "$ref": "#/components/schemas/RollingOriginPlan"
                  },
                  {
                    "$ref": "#/components/schemas/ExpandingWindowPlan"
                  },
                  {
                    "$ref": "#/components/schemas/BlockedKFoldPlan"
                  },
                  {
                    "$ref": "#/components/schemas/PurgedKFoldPlan"
                  },
                  {
                    "$ref": "#/components/schemas/GeoHoldoutPlan"
                  },
                  {
                    "$ref": "#/components/schemas/NestedPlan"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Backtest"
          },
          "horizon": {
            "anyOf": [
              {
                "maximum": 520.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon"
          },
          "models": {
            "description": "model:// refs",
            "items": {
              "type": "string"
            },
            "maxItems": 11,
            "minItems": 2,
            "title": "Models",
            "type": "array"
          },
          "sections": {
            "items": {
              "enum": [
                "params",
                "diagnostics",
                "fit",
                "residuals",
                "decomposition",
                "response_curves",
                "irf",
                "fevd",
                "fields",
                "forecast",
                "backtest",
                "comparison"
              ],
              "type": "string"
            },
            "maxItems": 12,
            "minItems": 1,
            "title": "Sections",
            "type": "array"
          }
        },
        "required": [
          "models"
        ],
        "title": "ModelCompareRequest",
        "type": "object"
      },
      "ModelExploreRequest": {
        "additionalProperties": false,
        "description": "Which Model Explorer sections to compute. ``compare_with`` adds other model versions\n(``model://…``) to the comparison section; ``backtest`` runs a split plan for the\nbacktest section (fits run as child runs).",
        "examples": [
          {
            "compare_with": [
              "model://growth/sales-arimax@v2"
            ],
            "horizon": 12,
            "sections": [
              "params",
              "fit",
              "residuals",
              "irf",
              "fevd",
              "comparison"
            ]
          }
        ],
        "properties": {
          "backtest": {
            "anyOf": [
              {
                "discriminator": {
                  "mapping": {
                    "blocked_kfold": "#/components/schemas/BlockedKFoldPlan",
                    "expanding_window": "#/components/schemas/ExpandingWindowPlan",
                    "geo_holdout": "#/components/schemas/GeoHoldoutPlan",
                    "holdout": "#/components/schemas/HoldoutPlan",
                    "nested": "#/components/schemas/NestedPlan",
                    "purged_kfold": "#/components/schemas/PurgedKFoldPlan",
                    "rolling_origin": "#/components/schemas/RollingOriginPlan"
                  },
                  "propertyName": "kind"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/HoldoutPlan"
                  },
                  {
                    "$ref": "#/components/schemas/RollingOriginPlan"
                  },
                  {
                    "$ref": "#/components/schemas/ExpandingWindowPlan"
                  },
                  {
                    "$ref": "#/components/schemas/BlockedKFoldPlan"
                  },
                  {
                    "$ref": "#/components/schemas/PurgedKFoldPlan"
                  },
                  {
                    "$ref": "#/components/schemas/GeoHoldoutPlan"
                  },
                  {
                    "$ref": "#/components/schemas/NestedPlan"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Backtest"
          },
          "compare_with": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "title": "Compare With",
            "type": "array"
          },
          "horizon": {
            "anyOf": [
              {
                "maximum": 520.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Forecast/IRF horizon",
            "title": "Horizon"
          },
          "interval": {
            "default": "hdi_90",
            "enum": [
              "hdi_90",
              "hdi_95",
              "ci_90",
              "ci_95"
            ],
            "title": "Interval",
            "type": "string"
          },
          "max_params": {
            "default": 500,
            "maximum": 5000.0,
            "minimum": 1.0,
            "title": "Max Params",
            "type": "integer"
          },
          "sections": {
            "items": {
              "enum": [
                "params",
                "diagnostics",
                "fit",
                "residuals",
                "decomposition",
                "response_curves",
                "irf",
                "fevd",
                "fields",
                "forecast",
                "backtest",
                "comparison"
              ],
              "type": "string"
            },
            "maxItems": 12,
            "minItems": 1,
            "title": "Sections",
            "type": "array"
          }
        },
        "title": "ModelExploreRequest",
        "type": "object"
      },
      "ModelInputSchema": {
        "description": "``GET /v1/models/{model_id}/versions/{version}/inputs``: what a score call of one model\nversion can send - the same input contract an endpoint serving the version would freeze\n(:func:`~mapi_server.services.endpoints.snapshot_for`) and its input table.\n\nThe names are the spec's canonical ones (``data.bind`` applied), which inline payloads\n(``ScoreCall.inline``) use. ``fit_coords`` tell a caller what the model saw: the fitted\nperiods and every level of the other dims.",
        "examples": [
          {
            "input_table": {
              "columns": [
                {
                  "description": "The period (yyyy-MM-dd)",
                  "freq": "MS",
                  "name": "t",
                  "role": "coord"
                },
                {
                  "description": "The actual (leave empty for the periods to forecast)",
                  "dims": [
                    "t"
                  ],
                  "name": "y",
                  "role": "target"
                },
                {
                  "description": "Necessary on each period, also on the periods to forecast",
                  "dims": [
                    "t"
                  ],
                  "name": "price",
                  "role": "driver"
                }
              ],
              "conditions_on_actuals": true,
              "horizon_dim": "t",
              "rows": [
                [
                  "1961-01-01",
                  null,
                  null
                ],
                [
                  "1961-02-01",
                  null,
                  null
                ]
              ]
            },
            "model_ref": "model://growth/eu-geo-mmm@v3",
            "snapshot": {
              "fit_coords": {
                "channel": {
                  "kind": "categorical",
                  "size": 2,
                  "values": [
                    "search",
                    "tv"
                  ]
                },
                "date": {
                  "end": "2025-12-30",
                  "freq": "D",
                  "kind": "time",
                  "size": 730,
                  "start": "2024-01-01"
                },
                "market": {
                  "kind": "categorical",
                  "size": 2,
                  "values": [
                    "de",
                    "fr"
                  ]
                }
              },
              "future_required": [
                "spend_local"
              ],
              "horizon_dim": "time",
              "input_schema": {
                "dims": {
                  "channel": {
                    "kind": "categorical"
                  },
                  "date": {
                    "freq": "D",
                    "kind": "time",
                    "policy": "extend"
                  },
                  "market": {
                    "kind": "categorical",
                    "new_level_strategy": "pooled",
                    "policy": "new_levels"
                  }
                },
                "vars": {
                  "revenue_local": {
                    "dims": [
                      "market",
                      "date"
                    ],
                    "dtype": "float64",
                    "role": "target"
                  },
                  "spend_local": {
                    "dims": [
                      "market",
                      "channel",
                      "date"
                    ],
                    "dtype": "float64",
                    "future_required": true,
                    "role": "spend"
                  }
                }
              },
              "inputs_stage": "raw",
              "representation": "draws",
              "schema_hash": "sha256:5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a",
              "score_modes": [
                "counterfactual",
                "evaluate",
                "forecast",
                "predict"
              ]
            }
          }
        ],
        "properties": {
          "input_table": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InputTable"
              },
              {
                "type": "null"
              }
            ],
            "description": "The inline input as a long table, with the periods after the fit"
          },
          "max_inline_bytes": {
            "default": 5242880,
            "title": "Max Inline Bytes",
            "type": "integer"
          },
          "model_ref": {
            "title": "Model Ref",
            "type": "string"
          },
          "snapshot": {
            "$ref": "#/components/schemas/EndpointSchemaSnapshot"
          }
        },
        "required": [
          "model_ref",
          "snapshot"
        ],
        "title": "ModelInputSchema",
        "type": "object"
      },
      "ModelManifest": {
        "additionalProperties": false,
        "description": "Everything the control plane knows about a model plugin version (static JSON).",
        "properties": {
          "about": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/About"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3.5: the plain-language About card (required by the catalog rule and the contract kit; optional here so older manifests still parse)"
          },
          "artifact_format": {
            "default": "zarr.zip/v1",
            "maxLength": 64,
            "title": "Artifact Format",
            "type": "string"
          },
          "capabilities": {
            "$ref": "#/components/schemas/Capabilities"
          },
          "derived": {
            "items": {
              "$ref": "#/components/schemas/DerivedDecl"
            },
            "title": "Derived",
            "type": "array"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "family": {
            "anyOf": [
              {
                "pattern": "^[a-z][a-z0-9_]{0,31}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3.5: the model family governance policies match (mmm, forecast, ts_multivariate, tabular, choice, regime); default: the id's namespace",
            "title": "Family"
          },
          "fit_schema": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Fit Schema",
            "type": "object"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "outputs": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "$ref": "#/components/schemas/OutputDecl"
              }
            },
            "title": "Outputs",
            "type": "object"
          },
          "plots": {
            "items": {
              "type": "string"
            },
            "title": "Plots",
            "type": "array"
          },
          "resources": {
            "$ref": "#/components/schemas/ResourceHint"
          },
          "schema_template": {
            "$ref": "#/components/schemas/DataSchemaTemplate"
          },
          "settings_schema": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Settings Schema",
            "type": "object"
          },
          "side_table_params": {
            "description": "v0.15: settings keys whose value names a data.side_tables entry the model reads (pretrained weights, for example), like a step's side_table_params",
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "title": "Side Table Params",
            "type": "array"
          },
          "version": {
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "id",
          "version",
          "capabilities",
          "schema_template"
        ],
        "title": "ModelManifest",
        "type": "object"
      },
      "ModelPlotRef": {
        "additionalProperties": false,
        "description": "A plot a model version rendered (``GET /v1/models/{id}/versions/{v}/plots``).",
        "properties": {
          "model_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Model Id",
            "type": "string"
          },
          "plot_id": {
            "pattern": "^[A-Za-z0-9_.\\-]{1,128}$",
            "title": "Plot Id",
            "type": "string"
          },
          "version": {
            "minimum": 1.0,
            "title": "Version",
            "type": "integer"
          }
        },
        "required": [
          "model_id",
          "version",
          "plot_id"
        ],
        "title": "ModelPlotRef",
        "type": "object"
      },
      "ModelValidation": {
        "description": "A validation of one model version: status, policies, results, approvals, history.",
        "examples": [
          {
            "id": "val_01jaf3k1m2n3p4q5r6s7t8v9w0",
            "model_id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
            "policies": [
              "pol_01jaf3h1j2k3m4n5p6q7r8s9t0@3"
            ],
            "project_id": "growth",
            "require_approval": true,
            "results": [
              {
                "check": "null.permutation_target",
                "computed_at": "2026-10-15T09:30:00Z",
                "evidence": [
                  {
                    "inline": {
                      "real": 0.081,
                      "shuffled_min": 0.079
                    },
                    "kind": "table",
                    "name": "permutation_scores"
                  }
                ],
                "message_plain": "The model was better than 19 of the 20 fits on shuffled data.",
                "metric": "permutation_p_value",
                "severity": "blocking",
                "status": "pass",
                "threshold": 0.05,
                "value": 0.048
              }
            ],
            "status": "awaiting_approval",
            "submitted_at": "2026-10-15T09:30:00Z",
            "submitted_by": "usr_01jaf3a0b0c0d0e0f0g0h0j0k0",
            "tenant_id": "acme",
            "updated_at": "2026-10-15T09:30:00Z",
            "version": 7
          }
        ],
        "properties": {
          "approvals": {
            "items": {
              "$ref": "#/components/schemas/Approval"
            },
            "title": "Approvals",
            "type": "array"
          },
          "approvals_required": {
            "default": 1,
            "title": "Approvals Required",
            "type": "integer"
          },
          "failing_checks": {
            "items": {
              "type": "string"
            },
            "title": "Failing Checks",
            "type": "array"
          },
          "history": {
            "items": {
              "$ref": "#/components/schemas/ValidationTransitionRecord"
            },
            "title": "History",
            "type": "array"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "model_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Model Id",
            "type": "string"
          },
          "policies": {
            "description": "<policy id>@<version>",
            "items": {
              "type": "string"
            },
            "title": "Policies",
            "type": "array"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "require_approval": {
            "default": false,
            "title": "Require Approval",
            "type": "boolean"
          },
          "required_checks": {
            "items": {
              "$ref": "#/components/schemas/PolicyCheck"
            },
            "title": "Required Checks",
            "type": "array"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/CheckResult"
            },
            "title": "Results",
            "type": "array"
          },
          "status": {
            "$ref": "#/components/schemas/ValidationStatus"
          },
          "submitted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Submitted At"
          },
          "submitted_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Submitted By"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "version": {
            "minimum": 1.0,
            "title": "Version",
            "type": "integer"
          },
          "workflow_run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The governance workflow run",
            "title": "Workflow Run Id"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "model_id",
          "version",
          "status",
          "updated_at"
        ],
        "title": "ModelValidation",
        "type": "object"
      },
      "ModelVersion": {
        "description": "A verified bundle: signed manifest, diagnostics, scorecard, lineage and metrics.",
        "examples": [
          {
            "artifacts": [
              {
                "content_type": "application/zip",
                "name": "bundle.zarr.zip",
                "size": 2097152
              }
            ],
            "created_at": "2026-10-15T09:30:00Z",
            "diagnostics": [
              {
                "code": "RHAT_OK",
                "message_expert": "max r-hat 1.004",
                "message_plain": "All chains converged to the same answer.",
                "metric": "r_hat_max",
                "severity": "info",
                "threshold": 1.01,
                "value": 1.004
              }
            ],
            "id": "mv_01jaf3e1f2g3h4j5k6m7n8p9q0",
            "lineage": {
              "attempt": 1,
              "base_image": "base-bayes@2026.10",
              "dataset_sha": "sha256:efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef",
              "engine": "nutpie",
              "executor": "local-process",
              "lib_versions": {
                "pymc": "5.25.1"
              },
              "plugin": "mmm.bayesian@1.3.2",
              "resource_class": "M",
              "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
              "seed": 20261014,
              "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f"
            },
            "manifest": {
              "attempt": 1,
              "base_image": "base-bayes@2026.10",
              "catalog_digest": "sha256:cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
              "data_hash": "sha256:efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef",
              "kind": "fit",
              "model_id": "mdl_01jabcdefghjkmnpqrstvwxyz0",
              "model_version": 1,
              "objects": {
                "bundle.zarr.zip": {
                  "bucket": "mapi-local-bundles",
                  "content_type": "application/zip",
                  "crc32c": "AAAAAA==",
                  "generation": 1760520000000001,
                  "key": "t/default/models/mdl_01jabcdefghjkmnpqrstvwxyz0/1/bundle.zarr.zip",
                  "md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
                  "size": 2097152
                }
              },
              "project_id": "default",
              "run_id": "run_01jabcdefghjkmnpqrstvwxyz0",
              "schema_version": "mapi.bundle-manifest/v1",
              "signature": {
                "alg": "HS256",
                "key_id": "local-1",
                "value": "0000000000000000000000000000000000000000000000000000000000000000"
              },
              "signed_at": "2026-10-15T10:21:00Z",
              "source_manifest_crc32c": "4waSgw==",
              "spec_hash": "sha256:abababababababababababababababababababababababababababababababab",
              "status": "complete",
              "tenant_id": "default"
            },
            "metrics": {
              "coverage_90": 0.88,
              "mape": 0.14
            },
            "model_id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
            "project_id": "default",
            "ref": "model://default/eu-geo-mmm@v1",
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "scorecard": {
              "items": [
                {
                  "code": "RHAT_OK",
                  "message_plain": "All chains got the same answer.",
                  "metric": "r_hat_max",
                  "status": "pass",
                  "threshold": 1.01,
                  "title": "Chains agree",
                  "value": 1.004
                },
                {
                  "code": "HOLDOUT_MAPE",
                  "message_plain": "The forecast error on the last 8 weeks was 14%.",
                  "metric": "mape",
                  "status": "warn",
                  "suggested_action": "Add holidays, or look at the data for the last weeks.",
                  "threshold": 0.1,
                  "title": "Holdout error",
                  "value": 0.14
                }
              ],
              "overall": "warn"
            },
            "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "status": "ready",
            "tenant_id": "default",
            "version": 1
          }
        ],
        "properties": {
          "artifacts": {
            "items": {
              "$ref": "#/components/schemas/ObjectRef"
            },
            "title": "Artifacts",
            "type": "array"
          },
          "capabilities": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Capabilities"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "diagnostics": {
            "items": {
              "$ref": "#/components/schemas/Diagnostic"
            },
            "title": "Diagnostics",
            "type": "array"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "lineage": {
            "$ref": "#/components/schemas/Lineage"
          },
          "manifest": {
            "$ref": "#/components/schemas/BundleManifest"
          },
          "metrics": {
            "patternProperties": {
              "^[a-z][a-z0-9_]{0,63}$": {
                "type": "number"
              }
            },
            "title": "Metrics",
            "type": "object"
          },
          "model_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Model Id",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "ref": {
            "description": "model://project/name@vN",
            "title": "Ref",
            "type": "string"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "scorecard": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Scorecard"
              },
              {
                "type": "null"
              }
            ]
          },
          "spec_hash": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Spec Hash",
            "type": "string"
          },
          "status": {
            "enum": [
              "ready",
              "partial"
            ],
            "title": "Status",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "version": {
            "minimum": 1.0,
            "title": "Version",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "model_id",
          "tenant_id",
          "project_id",
          "version",
          "ref",
          "status",
          "run_id",
          "spec_hash",
          "manifest",
          "lineage",
          "created_at"
        ],
        "title": "ModelVersion",
        "type": "object"
      },
      "NestedPlan": {
        "additionalProperties": false,
        "description": "An ``inner`` plan inside every training window of an ``outer`` ordered plan.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the folds are cut at (a step id or 'raw'), as data.split",
            "title": "After Step"
          },
          "inner": {
            "discriminator": {
              "mapping": {
                "blocked_kfold": "#/components/schemas/BlockedKFoldPlan",
                "expanding_window": "#/components/schemas/ExpandingWindowPlan",
                "geo_holdout": "#/components/schemas/GeoHoldoutPlan",
                "holdout": "#/components/schemas/HoldoutPlan",
                "purged_kfold": "#/components/schemas/PurgedKFoldPlan",
                "rolling_origin": "#/components/schemas/RollingOriginPlan"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/HoldoutPlan"
              },
              {
                "$ref": "#/components/schemas/RollingOriginPlan"
              },
              {
                "$ref": "#/components/schemas/ExpandingWindowPlan"
              },
              {
                "$ref": "#/components/schemas/BlockedKFoldPlan"
              },
              {
                "$ref": "#/components/schemas/PurgedKFoldPlan"
              },
              {
                "$ref": "#/components/schemas/GeoHoldoutPlan"
              }
            ],
            "title": "Inner"
          },
          "kind": {
            "const": "nested",
            "title": "Kind",
            "type": "string"
          },
          "outer": {
            "discriminator": {
              "mapping": {
                "blocked_kfold": "#/components/schemas/BlockedKFoldPlan",
                "expanding_window": "#/components/schemas/ExpandingWindowPlan",
                "geo_holdout": "#/components/schemas/GeoHoldoutPlan",
                "holdout": "#/components/schemas/HoldoutPlan",
                "purged_kfold": "#/components/schemas/PurgedKFoldPlan",
                "rolling_origin": "#/components/schemas/RollingOriginPlan"
              },
              "propertyName": "kind"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/HoldoutPlan"
              },
              {
                "$ref": "#/components/schemas/RollingOriginPlan"
              },
              {
                "$ref": "#/components/schemas/ExpandingWindowPlan"
              },
              {
                "$ref": "#/components/schemas/BlockedKFoldPlan"
              },
              {
                "$ref": "#/components/schemas/PurgedKFoldPlan"
              },
              {
                "$ref": "#/components/schemas/GeoHoldoutPlan"
              }
            ],
            "title": "Outer"
          }
        },
        "required": [
          "kind",
          "outer",
          "inner"
        ],
        "title": "NestedPlan",
        "type": "object"
      },
      "NodeError": {
        "properties": {
          "code": {
            "$ref": "#/components/schemas/ErrorCode"
          },
          "message": {
            "maxLength": 2000,
            "title": "Message",
            "type": "string"
          },
          "untrusted_text": {
            "anyOf": [
              {
                "maxLength": 8000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Untrusted Text"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "title": "NodeError",
        "type": "object"
      },
      "NodeImplementation": {
        "description": "One node implementation of the catalog (``GET /v1/catalog/workflow-nodes``).",
        "examples": [
          {
            "about": {
              "assumptions": [
                "Numbers can be added up (spend, sales); averages are averaged"
              ],
              "avoid_when": [
                "Your data already has one row per week"
              ],
              "data_needs": [
                "A date column"
              ],
              "difficulty": "beginner",
              "example": "Daily TV spend of 100 each day becomes 700 for the week.",
              "fits": {
                "goal": [
                  "check_data"
                ]
              },
              "outputs": [
                "The same columns, one row per week"
              ],
              "related": [
                "core.calendar"
              ],
              "summary_plain": "Adds up daily numbers into one number per week (or month), so that every row covers the same length of time.",
              "title": "Weekly totals",
              "typical_runtime": "instant",
              "use_when": [
                "Your data is daily but you want to plan or report by week"
              ]
            },
            "id": "test.adf",
            "inputs": {
              "data": {
                "description": "The data to work on",
                "type": "dataset"
              }
            },
            "kind": "test",
            "outputs": {
              "result": "test_result"
            },
            "params_schema": {
              "properties": {
                "alpha": {
                  "type": "number"
                }
              },
              "type": "object"
            },
            "result_fields": {
              "p_value": {
                "description": "The p-value",
                "type": "number"
              }
            },
            "version": "1.0.0"
          }
        ],
        "properties": {
          "about": {
            "$ref": "#/components/schemas/About"
          },
          "cacheable": {
            "default": true,
            "description": "Same inputs and params give the same result",
            "title": "Cacheable",
            "type": "boolean"
          },
          "id": {
            "pattern": "^[a-z]+\\.[a-z0-9_]+$",
            "title": "Id",
            "type": "string"
          },
          "inputs": {
            "additionalProperties": {
              "$ref": "#/components/schemas/PortSpec"
            },
            "title": "Inputs",
            "type": "object"
          },
          "kind": {
            "$ref": "#/components/schemas/NodeKind"
          },
          "outputs": {
            "additionalProperties": {
              "$ref": "#/components/schemas/PortType"
            },
            "title": "Outputs",
            "type": "object"
          },
          "params_schema": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params Schema",
            "type": "object"
          },
          "result_fields": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ResultField"
            },
            "title": "Result Fields",
            "type": "object"
          },
          "runs_in": {
            "default": "sandbox",
            "enum": [
              "orchestrator",
              "sandbox",
              "child_run"
            ],
            "title": "Runs In",
            "type": "string"
          },
          "version": {
            "default": "1.0.0",
            "pattern": "^\\d+\\.\\d+\\.\\d+$",
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "id",
          "kind",
          "about"
        ],
        "title": "NodeImplementation",
        "type": "object"
      },
      "NodeKind": {
        "enum": [
          "test",
          "transform",
          "branch",
          "split",
          "search",
          "model",
          "evaluate",
          "compare",
          "select",
          "governance",
          "report",
          "plot",
          "subworkflow"
        ],
        "title": "NodeKind",
        "type": "string"
      },
      "NodeOutputRef": {
        "description": "Where a node output lives: a reference (``dataset://``, ``model://``), a run artifact\n(``run_id`` + ``object``) or, for small JSON payloads (test results, split plans,\nmetrics), ``inline``.",
        "properties": {
          "inline": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "object": {
            "anyOf": [
              {
                "maxLength": 256,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Object"
          },
          "ref": {
            "anyOf": [
              {
                "maxLength": 512,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ref"
          },
          "run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Id"
          },
          "type": {
            "$ref": "#/components/schemas/PortType"
          }
        },
        "required": [
          "type"
        ],
        "title": "NodeOutputRef",
        "type": "object"
      },
      "NodeRun": {
        "description": "One node of a workflow run.",
        "examples": [
          {
            "attempt": 1,
            "cache_key": "sha256:5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a",
            "finished_at": "2026-10-15T09:30:04Z",
            "kind": "test",
            "node_id": "adf",
            "outputs": {
              "result": {
                "inline": {
                  "test": "test.adf"
                },
                "type": "test_result"
              }
            },
            "params": {
              "alpha": 0.05,
              "regression": "c"
            },
            "result": {
              "decision": "unit_root",
              "p_value": 0.57,
              "reject": false,
              "statistic": -1.42
            },
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "started_at": "2026-10-15T09:30:00Z",
            "status": "succeeded",
            "use": "test.adf@1.0.0"
          }
        ],
        "properties": {
          "attempt": {
            "default": 0,
            "minimum": 0.0,
            "title": "Attempt",
            "type": "integer"
          },
          "cache_key": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cache Key"
          },
          "cached_from": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Workflow run whose result was reused",
            "title": "Cached From"
          },
          "child_runs": {
            "description": "Fits and other children",
            "items": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Child Runs",
            "type": "array"
          },
          "cost": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RunCost"
              },
              {
                "type": "null"
              }
            ]
          },
          "error": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NodeError"
              },
              {
                "type": "null"
              }
            ]
          },
          "finished_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "kind": {
            "$ref": "#/components/schemas/NodeKind"
          },
          "node_id": {
            "title": "Node Id",
            "type": "string"
          },
          "outputs": {
            "additionalProperties": {
              "$ref": "#/components/schemas/NodeOutputRef"
            },
            "title": "Outputs",
            "type": "object"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "description": "Resolved params",
            "title": "Params",
            "type": "object"
          },
          "result": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "JSON result conditions read (nodes.<id>.<field>)",
            "title": "Result"
          },
          "run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The workflow_node run that executed it",
            "title": "Run Id"
          },
          "skipped_reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Skipped Reason"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "status": {
            "$ref": "#/components/schemas/NodeRunStatus"
          },
          "use": {
            "description": "Resolved implementation ref (id@version)",
            "title": "Use",
            "type": "string"
          }
        },
        "required": [
          "node_id",
          "use",
          "kind",
          "status"
        ],
        "title": "NodeRun",
        "type": "object"
      },
      "NodeRunStatus": {
        "enum": [
          "pending",
          "queued",
          "running",
          "succeeded",
          "cached",
          "skipped",
          "failed",
          "cancelled"
        ],
        "title": "NodeRunStatus",
        "type": "string"
      },
      "ObjectRef": {
        "description": "A stored object exposed through ``…/artifacts/{name}`` (fetch it as an ArtifactLink).",
        "examples": [
          {
            "content_type": "application/json",
            "name": "preview.json",
            "size": 20480
          }
        ],
        "properties": {
          "content_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content Type"
          },
          "crc32c": {
            "anyOf": [
              {
                "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
                "examples": [
                  "4waSgw=="
                ],
                "pattern": "^[A-Za-z0-9+/]{6}==$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Crc32C"
          },
          "name": {
            "examples": [
              "preview.json"
            ],
            "maxLength": 1024,
            "title": "Name",
            "type": "string"
          },
          "size": {
            "minimum": 0.0,
            "title": "Size",
            "type": "integer"
          }
        },
        "required": [
          "name",
          "size"
        ],
        "title": "ObjectRef",
        "type": "object"
      },
      "Optimization": {
        "description": "``POST …:optimize`` (``Prefer: wait=N``: ``200`` when done, else ``202``) and\n``GET /v1/optimizations/{run_id}``: the ``optimize`` run and, once done, the plan.",
        "examples": [
          {
            "done": true,
            "request": {
              "channels": {
                "search": {
                  "min_spend": 50000
                },
                "tv": {
                  "max_multiplier": 1.5,
                  "min_multiplier": 0.5
                }
              },
              "frontier": {
                "n_points": 10
              },
              "groups": [
                {
                  "channels": [
                    "search",
                    "social"
                  ],
                  "min_share": 0.4,
                  "name": "digital"
                }
              ],
              "objective": "p10",
              "total_budget": 1000000
            },
            "result": {
              "allocation": [
                {
                  "change_pct": -25,
                  "channel": "tv",
                  "current_share": 0.6,
                  "current_spend": 600000,
                  "marginal_roi": 1.4,
                  "optimal_share": 0.45,
                  "optimal_spend": 450000,
                  "stability": 0.82
                },
                {
                  "change_pct": 37.5,
                  "channel": "search",
                  "current_share": 0.4,
                  "current_spend": 400000,
                  "marginal_roi": 1.4,
                  "optimal_share": 0.55,
                  "optimal_spend": 550000,
                  "stability": 0.9
                }
              ],
              "current_total": 1000000,
              "expected_kpi": {
                "mean": 3400000.0,
                "quantiles": {
                  "0.05": 3060000.0,
                  "0.95": 3750000.0
                },
                "sd": 210000.0
              },
              "expected_regret": 8000.0,
              "kpi": "revenue",
              "kpi_units": "EUR",
              "n_draws": 200,
              "objective": "p10",
              "objective_label": "cautious plan (10th percentile of the KPI)",
              "prob_positive_uplift": 0.97,
              "spend_units": "EUR",
              "total_budget": 1000000,
              "uplift": {
                "mean": 120000.0,
                "quantiles": {
                  "0.05": 25000.0,
                  "0.95": 220000.0
                },
                "sd": 60000.0
              }
            },
            "run": {
              "attempt": 1,
              "cost": {
                "estimated": true
              },
              "created_at": "2026-10-15T09:30:00Z",
              "executor": "local-process",
              "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
              "kind": "optimize",
              "name": "weekly sales, adstock 4",
              "project_id": "default",
              "queued_at": "2026-10-15T09:30:00Z",
              "resource_class": "M",
              "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
              "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
              "spec_revision": 2,
              "started_at": "2026-10-15T09:30:05Z",
              "state": "succeeded",
              "tags": {
                "stage": "candidate",
                "team": "growth"
              },
              "tenant_id": "default",
              "timeout": "45m",
              "updated_at": "2026-10-15T09:31:00Z"
            }
          }
        ],
        "properties": {
          "done": {
            "title": "Done",
            "type": "boolean"
          },
          "request": {
            "$ref": "#/components/schemas/OptimizeRequest"
          },
          "result": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OptimizeResult"
              },
              {
                "type": "null"
              }
            ]
          },
          "run": {
            "$ref": "#/components/schemas/Run"
          }
        },
        "required": [
          "run",
          "done",
          "request"
        ],
        "title": "Optimization",
        "type": "object"
      },
      "OptimizeRequest": {
        "additionalProperties": false,
        "description": "``POST …:optimize``: how should the budget be split?\n\n``objective``: ``mean`` (expected KPI), ``p<q>`` (the q-th percentile across posterior\ndraws, a cautious plan) or ``cvar<a>`` (mean of the worst a% of draws). ``mode``:\n``fixed`` spends the budget; ``free`` funds each channel to break-even (marginal value\n= 1 per unit of money, with ``value_per_kpi`` converting KPI to money) and makes the\ntotal an output. ``horizon`` is the number of future periods the plan covers (default:\nthe fit window's length, as the response grid).",
        "examples": [
          {
            "channels": {
              "search": {
                "min_spend": 50000
              },
              "tv": {
                "max_multiplier": 1.5,
                "min_multiplier": 0.5
              }
            },
            "frontier": {
              "n_points": 10
            },
            "groups": [
              {
                "channels": [
                  "search",
                  "social"
                ],
                "min_share": 0.4,
                "name": "digital"
              }
            ],
            "objective": "p10",
            "total_budget": 1000000
          },
          {
            "budget_change_pct": -10,
            "objective": "mean"
          },
          {
            "mode": "free",
            "value_per_kpi": 1.0
          }
        ],
        "properties": {
          "budget_change_pct": {
            "anyOf": [
              {
                "exclusiveMinimum": -100.0,
                "maximum": 1000.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Budget Change Pct"
          },
          "by_geo": {
            "default": false,
            "description": "Allocate per (geo, channel) jointly",
            "title": "By Geo",
            "type": "boolean"
          },
          "channels": {
            "maxProperties": 64,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "$ref": "#/components/schemas/ChannelBounds"
              }
            },
            "title": "Channels",
            "type": "object"
          },
          "default_bounds": {
            "$ref": "#/components/schemas/ChannelBounds",
            "description": "Bounds of channels not listed in channels"
          },
          "frontier": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FrontierRequest"
              },
              {
                "type": "null"
              }
            ]
          },
          "groups": {
            "items": {
              "$ref": "#/components/schemas/SpendGroup"
            },
            "maxItems": 16,
            "title": "Groups",
            "type": "array"
          },
          "horizon": {
            "anyOf": [
              {
                "maximum": 520.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon"
          },
          "max_draws": {
            "default": 200,
            "maximum": 2000.0,
            "minimum": 20.0,
            "title": "Max Draws",
            "type": "integer"
          },
          "min_channel_spend": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Keep every channel funded at least this much",
            "title": "Min Channel Spend"
          },
          "mode": {
            "default": "fixed",
            "enum": [
              "fixed",
              "free"
            ],
            "title": "Mode",
            "type": "string"
          },
          "n_steps": {
            "default": 400,
            "maximum": 5000.0,
            "minimum": 50.0,
            "title": "N Steps",
            "type": "integer"
          },
          "objective": {
            "default": "mean",
            "examples": [
              "mean",
              "p10",
              "cvar5"
            ],
            "title": "Objective",
            "type": "string"
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          },
          "total_budget": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Budget"
          },
          "value_per_kpi": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Per Kpi"
          }
        },
        "title": "OptimizeRequest",
        "type": "object"
      },
      "OptimizeResult": {
        "description": "``optimize.json``: the recommended plan and its uncertainty.",
        "examples": [
          {
            "allocation": [
              {
                "change_pct": -25,
                "channel": "tv",
                "current_share": 0.6,
                "current_spend": 600000,
                "marginal_roi": 1.4,
                "optimal_share": 0.45,
                "optimal_spend": 450000,
                "stability": 0.82
              },
              {
                "change_pct": 37.5,
                "channel": "search",
                "current_share": 0.4,
                "current_spend": 400000,
                "marginal_roi": 1.4,
                "optimal_share": 0.55,
                "optimal_spend": 550000,
                "stability": 0.9
              }
            ],
            "current_total": 1000000,
            "expected_kpi": {
              "mean": 3400000.0,
              "quantiles": {
                "0.05": 3060000.0,
                "0.95": 3750000.0
              },
              "sd": 210000.0
            },
            "expected_regret": 8000.0,
            "kpi": "revenue",
            "kpi_units": "EUR",
            "n_draws": 200,
            "objective": "p10",
            "objective_label": "cautious plan (10th percentile of the KPI)",
            "prob_positive_uplift": 0.97,
            "spend_units": "EUR",
            "total_budget": 1000000,
            "uplift": {
              "mean": 120000.0,
              "quantiles": {
                "0.05": 25000.0,
                "0.95": 220000.0
              },
              "sd": 60000.0
            }
          }
        ],
        "properties": {
          "allocation": {
            "items": {
              "$ref": "#/components/schemas/ChannelAllocation"
            },
            "maxItems": 16384,
            "minItems": 1,
            "title": "Allocation",
            "type": "array"
          },
          "computed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Computed At"
          },
          "current_kpi": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DistributionSummary"
              },
              {
                "type": "null"
              }
            ]
          },
          "current_total": {
            "minimum": 0.0,
            "title": "Current Total",
            "type": "number"
          },
          "expected_kpi": {
            "$ref": "#/components/schemas/DistributionSummary"
          },
          "expected_regret": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expected Regret"
          },
          "format": {
            "const": "mapi.optimize/v1",
            "default": "mapi.optimize/v1",
            "title": "Format",
            "type": "string"
          },
          "frontier": {
            "items": {
              "$ref": "#/components/schemas/FrontierPoint"
            },
            "maxItems": 50,
            "title": "Frontier",
            "type": "array"
          },
          "horizon": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon"
          },
          "kpi": {
            "maxLength": 128,
            "title": "Kpi",
            "type": "string"
          },
          "kpi_units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kpi Units"
          },
          "mode": {
            "default": "fixed",
            "enum": [
              "fixed",
              "free"
            ],
            "title": "Mode",
            "type": "string"
          },
          "n_draws": {
            "minimum": 1.0,
            "title": "N Draws",
            "type": "integer"
          },
          "notes_plain": {
            "items": {
              "type": "string"
            },
            "maxItems": 50,
            "title": "Notes Plain",
            "type": "array"
          },
          "objective": {
            "title": "Objective",
            "type": "string"
          },
          "objective_label": {
            "maxLength": 200,
            "title": "Objective Label",
            "type": "string"
          },
          "prob_positive_uplift": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Prob Positive Uplift"
          },
          "shadow_price": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "KPI value of the next unit of money",
            "title": "Shadow Price"
          },
          "spend_units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spend Units"
          },
          "total_budget": {
            "minimum": 0.0,
            "title": "Total Budget",
            "type": "number"
          },
          "uplift": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DistributionSummary"
              },
              {
                "type": "null"
              }
            ],
            "description": "Plan minus current plan"
          }
        },
        "required": [
          "objective",
          "objective_label",
          "total_budget",
          "current_total",
          "kpi",
          "allocation",
          "expected_kpi",
          "n_draws"
        ],
        "title": "OptimizeResult",
        "type": "object"
      },
      "OutputDecl": {
        "additionalProperties": false,
        "description": "An output variable the model writes (e.g. ``y_hat``).",
        "properties": {
          "circular": {
            "default": false,
            "description": "The output is an angle on a circle (a direction, a time of day). The model sets a 'period' attr (one turn, in the output's units) on the scored array; holdout metrics then use the circular mean and wrapped errors, and the score summaries of draws use the circular mean and intervals centred on it, wrapped into [0, period)",
            "title": "Circular",
            "type": "boolean"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "dims": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Dims",
            "type": "array"
          },
          "dims_of": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The output also carries every dim of this input variable (e.g. 'y' for models whose data dims come from settings, such as the sklearn row dims)",
            "title": "Dims Of"
          },
          "grid": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/GridDecl"
              },
              {
                "type": "null"
              }
            ],
            "description": "Draw the output as a 2-D field (Model Explorer 'fields' section)"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Units"
          },
          "units_of": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Take units from this input variable",
            "title": "Units Of"
          }
        },
        "required": [
          "dims"
        ],
        "title": "OutputDecl",
        "type": "object"
      },
      "OutputSelector": {
        "additionalProperties": false,
        "description": "What a score request returns.",
        "properties": {
          "aggregate": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Aggregation"
              },
              {
                "type": "null"
              }
            ]
          },
          "draws": {
            "default": 0,
            "maximum": 10000.0,
            "minimum": 0.0,
            "title": "Draws",
            "type": "integer"
          },
          "kind": {
            "default": "expected",
            "enum": [
              "expected",
              "predictive"
            ],
            "title": "Kind",
            "type": "string"
          },
          "names": {
            "default": "dataset",
            "enum": [
              "dataset",
              "canonical"
            ],
            "title": "Names",
            "type": "string"
          },
          "summary": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "maxItems": 32,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Summaries to return; default depends on representation",
            "title": "Summary"
          },
          "thin_index": {
            "const": "bundle",
            "default": "bundle",
            "title": "Thin Index",
            "type": "string"
          },
          "units": {
            "default": "original",
            "enum": [
              "original",
              "model"
            ],
            "title": "Units",
            "type": "string"
          },
          "vars": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 256,
            "title": "Vars",
            "type": "array"
          }
        },
        "title": "OutputSelector",
        "type": "object"
      },
      "PackInfo": {
        "additionalProperties": false,
        "description": "One pack a collection version reads.",
        "properties": {
          "crc32c": {
            "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
            "examples": [
              "4waSgw=="
            ],
            "pattern": "^[A-Za-z0-9+/]{6}==$",
            "title": "Crc32C",
            "type": "string"
          },
          "digest": {
            "pattern": "^[0-9a-f]{64}$",
            "title": "Digest",
            "type": "string"
          },
          "entries": {
            "description": "Zip entries in the pack",
            "minimum": 0.0,
            "title": "Entries",
            "type": "integer"
          },
          "images": {
            "description": "Distinct images of this version stored in it",
            "minimum": 0.0,
            "title": "Images",
            "type": "integer"
          },
          "input": {
            "anyOf": [
              {
                "pattern": "^[a-z][a-z0-9_.\\-]{0,63}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Uploads: the ingest input it came from ('part.0003'); base: none",
            "title": "Input"
          },
          "md5": {
            "description": "MD5 as GCS reports it: base64 of the 16-byte digest",
            "pattern": "^[A-Za-z0-9+/]{22}==$",
            "title": "Md5",
            "type": "string"
          },
          "size": {
            "minimum": 22.0,
            "title": "Size",
            "type": "integer"
          },
          "source": {
            "enum": [
              "upload",
              "base"
            ],
            "title": "Source",
            "type": "string"
          }
        },
        "required": [
          "digest",
          "size",
          "crc32c",
          "md5",
          "entries",
          "images",
          "source"
        ],
        "title": "PackInfo",
        "type": "object"
      },
      "Page_ApiToken_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ApiToken"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[ApiToken]",
        "type": "object"
      },
      "Page_AuditEvent_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AuditEvent"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[AuditEvent]",
        "type": "object"
      },
      "Page_CatalogAbout_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/CatalogAbout"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[CatalogAbout]",
        "type": "object"
      },
      "Page_CheckResult_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/CheckResult"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[CheckResult]",
        "type": "object"
      },
      "Page_DatasetVersion_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/DatasetVersion"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[DatasetVersion]",
        "type": "object"
      },
      "Page_Dataset_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Dataset"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Dataset]",
        "type": "object"
      },
      "Page_EndpointRevision_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/EndpointRevision"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[EndpointRevision]",
        "type": "object"
      },
      "Page_Endpoint_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Endpoint"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Endpoint]",
        "type": "object"
      },
      "Page_ExecutorHealth_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ExecutorHealth"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[ExecutorHealth]",
        "type": "object"
      },
      "Page_Experiment_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Experiment"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Experiment]",
        "type": "object"
      },
      "Page_GdprExport_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/GdprExport"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[GdprExport]",
        "type": "object"
      },
      "Page_GovernanceCheckDef_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/GovernanceCheckDef"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[GovernanceCheckDef]",
        "type": "object"
      },
      "Page_GovernancePolicy_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/GovernancePolicy"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[GovernancePolicy]",
        "type": "object"
      },
      "Page_GuidedTemplate_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/GuidedTemplate"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[GuidedTemplate]",
        "type": "object"
      },
      "Page_LogLine_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/LogLine"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[LogLine]",
        "type": "object"
      },
      "Page_MediaKeySummary_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/MediaKeySummary"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[MediaKeySummary]",
        "type": "object"
      },
      "Page_Membership_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Membership"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Membership]",
        "type": "object"
      },
      "Page_MetricSeries_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/MetricSeries"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[MetricSeries]",
        "type": "object"
      },
      "Page_ModelCatalogEntry_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ModelCatalogEntry"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[ModelCatalogEntry]",
        "type": "object"
      },
      "Page_ModelValidation_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ModelValidation"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[ModelValidation]",
        "type": "object"
      },
      "Page_ModelVersion_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ModelVersion"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[ModelVersion]",
        "type": "object"
      },
      "Page_Model_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Model"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Model]",
        "type": "object"
      },
      "Page_NodeImplementation_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/NodeImplementation"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[NodeImplementation]",
        "type": "object"
      },
      "Page_NodeRun_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/NodeRun"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[NodeRun]",
        "type": "object"
      },
      "Page_PlotCatalogEntry_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PlotCatalogEntry"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[PlotCatalogEntry]",
        "type": "object"
      },
      "Page_PlotEmbed_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PlotEmbed"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[PlotEmbed]",
        "type": "object"
      },
      "Page_PlotListItem_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PlotListItem"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[PlotListItem]",
        "type": "object"
      },
      "Page_PlotSpec_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PlotSpec"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[PlotSpec]",
        "type": "object"
      },
      "Page_Project_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Project"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Project]",
        "type": "object"
      },
      "Page_QuotaPolicy_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/QuotaPolicy"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[QuotaPolicy]",
        "type": "object"
      },
      "Page_RunEventView_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/RunEventView"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[RunEventView]",
        "type": "object"
      },
      "Page_RunMedia_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/RunMedia"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[RunMedia]",
        "type": "object"
      },
      "Page_RunParam_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/RunParam"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[RunParam]",
        "type": "object"
      },
      "Page_RunView_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/RunView"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[RunView]",
        "type": "object"
      },
      "Page_Run_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Run"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Run]",
        "type": "object"
      },
      "Page_SavedPlot_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/SavedPlot"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[SavedPlot]",
        "type": "object"
      },
      "Page_SignupReview_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/SignupReview"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[SignupReview]",
        "type": "object"
      },
      "Page_SpecDoc_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/SpecDoc"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[SpecDoc]",
        "type": "object"
      },
      "Page_SpecRevision_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/SpecRevision"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[SpecRevision]",
        "type": "object"
      },
      "Page_StepCatalogEntry_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/StepCatalogEntry"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[StepCatalogEntry]",
        "type": "object"
      },
      "Page_Tenant_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Tenant"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Tenant]",
        "type": "object"
      },
      "Page_WebhookDelivery_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WebhookDelivery"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[WebhookDelivery]",
        "type": "object"
      },
      "Page_Webhook_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Webhook"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Webhook]",
        "type": "object"
      },
      "Page_WorkflowEvent_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WorkflowEvent"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[WorkflowEvent]",
        "type": "object"
      },
      "Page_WorkflowRevision_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WorkflowRevision"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[WorkflowRevision]",
        "type": "object"
      },
      "Page_WorkflowRun_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WorkflowRun"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[WorkflowRun]",
        "type": "object"
      },
      "Page_WorkflowSchedule_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WorkflowSchedule"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[WorkflowSchedule]",
        "type": "object"
      },
      "Page_WorkflowTemplate_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WorkflowTemplate"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[WorkflowTemplate]",
        "type": "object"
      },
      "Page_WorkflowTrigger_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WorkflowTrigger"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[WorkflowTrigger]",
        "type": "object"
      },
      "Page_Workflow_": {
        "examples": [
          {
            "items": [],
            "next_cursor": "eyJpZCI6InJ1bl8wMWphZiJ9"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/Workflow"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "Page[Workflow]",
        "type": "object"
      },
      "ParamsWrite": {
        "additionalProperties": false,
        "description": "``POST /v1/runs/{run_id}/params``: params are write-once (a different value is a 409).",
        "examples": [
          {
            "params": {
              "analyst": "kim",
              "holdout_weeks": 8
            }
          }
        ],
        "properties": {
          "params": {
            "maxProperties": 500,
            "minProperties": 1,
            "patternProperties": {
              "^[A-Za-z0-9_][A-Za-z0-9_.\\-/]{0,249}$": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "maxLength": 6000,
                    "type": "string"
                  }
                ]
              }
            },
            "title": "Params",
            "type": "object"
          }
        },
        "required": [
          "params"
        ],
        "title": "ParamsWrite",
        "type": "object"
      },
      "ParamsWriteResult": {
        "description": "Params stored, and params already stored with the same value.",
        "examples": [
          {
            "accepted": 2,
            "unchanged": 0
          }
        ],
        "properties": {
          "accepted": {
            "minimum": 0.0,
            "title": "Accepted",
            "type": "integer"
          },
          "unchanged": {
            "minimum": 0.0,
            "title": "Unchanged",
            "type": "integer"
          }
        },
        "required": [
          "accepted",
          "unchanged"
        ],
        "title": "ParamsWriteResult",
        "type": "object"
      },
      "PlotBindings": {
        "additionalProperties": false,
        "description": "Role/dim template bindings, e.g. ``{x: \"dim:time\", y: \"role:target\"}``.\n\nTemplates bound this way apply to every model of a family, not one bundle.",
        "properties": {
          "band_lower": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Band Lower"
          },
          "band_upper": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Band Upper"
          },
          "color": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "column": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column"
          },
          "facet": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Facet"
          },
          "row": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Row"
          },
          "shape": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Shape"
          },
          "size": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size"
          },
          "tooltip": {
            "items": {
              "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 32,
            "title": "Tooltip",
            "type": "array"
          },
          "x": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "X"
          },
          "y": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Y"
          },
          "y2": {
            "anyOf": [
              {
                "pattern": "^(dim|role|var|coord|stat):[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Y2"
          }
        },
        "title": "PlotBindings",
        "type": "object"
      },
      "PlotCatalogEntry": {
        "additionalProperties": false,
        "description": "A plot recipe the runner can produce.",
        "properties": {
          "about": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/About"
              },
              {
                "type": "null"
              }
            ],
            "description": "The plot's About card: what it shows, how to read it, what it needs"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "persona": {
            "default": "both",
            "enum": [
              "guided",
              "expert",
              "both"
            ],
            "title": "Persona",
            "type": "string"
          },
          "requires_groups": {
            "items": {
              "type": "string"
            },
            "title": "Requires Groups",
            "type": "array"
          },
          "requires_representation": {
            "items": {
              "$ref": "#/components/schemas/Representation"
            },
            "title": "Requires Representation",
            "type": "array"
          },
          "summary": {
            "anyOf": [
              {
                "maxLength": 300,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "One line on what the chart shows (the recipe's summary)",
            "title": "Summary"
          },
          "title": {
            "maxLength": 200,
            "title": "Title",
            "type": "string"
          },
          "version": {
            "default": "1.0.0",
            "title": "Version",
            "type": "string"
          },
          "yanked": {
            "default": false,
            "title": "Yanked",
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "PlotCatalogEntry",
        "type": "object"
      },
      "PlotEmbed": {
        "description": "An embed link as listed (never its token).",
        "examples": [
          {
            "allowed_origins": [
              "https://acme.notion.site"
            ],
            "created_at": "2026-10-15T09:30:00Z",
            "display": "mpe_7k2m9q…",
            "expires_at": "2027-01-13T09:30:00Z",
            "id": "emb_01jaf3p1q2r3s4t5v6w7x8y9z0",
            "label": "Q4 board deck",
            "plot_id": "plt_01jaf3n1p2q3r4s5t6v7w8x9y0",
            "project_id": "growth",
            "status": "active",
            "tenant_id": "acme",
            "views": 12
          }
        ],
        "properties": {
          "allowed_origins": {
            "items": {
              "type": "string"
            },
            "title": "Allowed Origins",
            "type": "array"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "display": {
            "description": "Redacted token, mpe_<first 6>…",
            "title": "Display",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "last_viewed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Viewed At"
          },
          "plot_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Plot Id",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "revoked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "status": {
            "enum": [
              "active",
              "expired",
              "revoked"
            ],
            "title": "Status",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "views": {
            "default": 0,
            "minimum": 0.0,
            "title": "Views",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "plot_id",
          "tenant_id",
          "project_id",
          "display",
          "status",
          "created_at",
          "expires_at"
        ],
        "title": "PlotEmbed",
        "type": "object"
      },
      "PlotEmbedCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/plots/{plot_id}/embeds``. ``allowed_origins`` (https origins) become the\nembed page's ``frame-ancestors``; empty allows any site to frame it.",
        "examples": [
          {
            "allowed_origins": [
              "https://acme.notion.site"
            ],
            "expires_in_days": 90,
            "label": "Q4 board deck"
          }
        ],
        "properties": {
          "allowed_origins": {
            "items": {
              "type": "string"
            },
            "maxItems": 10,
            "title": "Allowed Origins",
            "type": "array"
          },
          "expires_in_days": {
            "default": 30,
            "maximum": 365.0,
            "minimum": 1.0,
            "title": "Expires In Days",
            "type": "integer"
          },
          "label": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          }
        },
        "title": "PlotEmbedCreate",
        "type": "object"
      },
      "PlotEmbedCreated": {
        "description": "``201`` of ``POST …/embeds``: the only time the URL (with its token) is returned.",
        "examples": [
          {
            "embed": {
              "allowed_origins": [
                "https://acme.notion.site"
              ],
              "created_at": "2026-10-15T09:30:00Z",
              "display": "mpe_7k2m9q…",
              "expires_at": "2027-01-13T09:30:00Z",
              "id": "emb_01jaf3p1q2r3s4t5v6w7x8y9z0",
              "label": "Q4 board deck",
              "plot_id": "plt_01jaf3n1p2q3r4s5t6v7w8x9y0",
              "project_id": "growth",
              "status": "active",
              "tenant_id": "acme",
              "views": 12
            },
            "token": "mpe_7k2m9q4x0123456789abcdefghjkmnpqrstvwxyz",
            "url": "https://plots.mapi.example/embed/mpe_7k2m9q4x0123456789abcdefghjkmnpqrstvwxyz"
          }
        ],
        "properties": {
          "embed": {
            "$ref": "#/components/schemas/PlotEmbed"
          },
          "token": {
            "pattern": "^mpe_[0-9a-hjkmnp-tv-z]{40}$",
            "title": "Token",
            "type": "string"
          },
          "url": {
            "description": "Public read-only URL; paste it into the BI tool",
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "embed",
          "url",
          "token"
        ],
        "title": "PlotEmbedCreated",
        "type": "object"
      },
      "PlotListItem": {
        "description": "A plot available for a model version; fetch the sanitized :class:`PlotSpec` at href.",
        "examples": [
          {
            "href": "/v1/models/mdl_01/versions/1/plots/core.ppc_fan",
            "id": "core.ppc_fan",
            "kind": "vega-lite",
            "persona": "both",
            "recipe": "core.ppc_fan@1.0.0",
            "title": "Posterior predictive fan"
          }
        ],
        "properties": {
          "caption_plain": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Caption Plain"
          },
          "href": {
            "title": "Href",
            "type": "string"
          },
          "id": {
            "pattern": "^[A-Za-z0-9_.\\-]{1,128}$",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "vega-lite",
              "plotly"
            ],
            "title": "Kind",
            "type": "string"
          },
          "persona": {
            "default": "both",
            "enum": [
              "guided",
              "expert",
              "both"
            ],
            "title": "Persona",
            "type": "string"
          },
          "recipe": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recipe"
          },
          "title": {
            "maxLength": 300,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "kind",
          "href"
        ],
        "title": "PlotListItem",
        "type": "object"
      },
      "PlotProvenance": {
        "additionalProperties": false,
        "description": "Who produced a plot: exactly one of ``recipe``, ``plugin`` or ``author``.",
        "properties": {
          "author": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author"
          },
          "bundle_id": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bundle Id"
          },
          "generated_at": {
            "format": "date-time",
            "title": "Generated At",
            "type": "string"
          },
          "plugin": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Plugin"
          },
          "recipe": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recipe"
          }
        },
        "required": [
          "generated_at"
        ],
        "title": "PlotProvenance",
        "type": "object"
      },
      "PlotRender": {
        "description": "``POST /v1/plots:render`` (``Prefer: wait=N``) and ``GET /v1/plots/renders/{run_id}``:\nthe ``render`` run and, when done, signed links to ``renders/<plot>.<format>``.",
        "examples": [
          {
            "done": true,
            "format": "pdf",
            "outputs": [
              {
                "content_type": "application/pdf",
                "crc32c": "4waSgw==",
                "expires_at": "2026-10-15T09:45:00Z",
                "generation": 7,
                "name": "renders/mmm.response_curves.pdf",
                "size": 2097152,
                "url": "http://127.0.0.1:4443/download/storage/v1/b/mapi-local-bundles/o/t%2Fdefault%2Fmodels%2Fmdl_01%2F1%2Fbundle.zarr.zip?generation=7&X-Goog-Signature=…"
              }
            ],
            "run": {
              "attempt": 1,
              "cost": {
                "estimated": true
              },
              "created_at": "2026-10-15T09:30:00Z",
              "executor": "local-process",
              "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
              "kind": "render",
              "name": "weekly sales, adstock 4",
              "project_id": "default",
              "queued_at": "2026-10-15T09:30:00Z",
              "resource_class": "M",
              "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
              "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
              "spec_revision": 2,
              "started_at": "2026-10-15T09:30:05Z",
              "state": "succeeded",
              "tags": {
                "stage": "candidate",
                "team": "growth"
              },
              "tenant_id": "default",
              "timeout": "45m",
              "updated_at": "2026-10-15T09:31:00Z"
            }
          }
        ],
        "properties": {
          "done": {
            "title": "Done",
            "type": "boolean"
          },
          "format": {
            "enum": [
              "png",
              "svg",
              "pdf"
            ],
            "title": "Format",
            "type": "string"
          },
          "outputs": {
            "items": {
              "$ref": "#/components/schemas/ArtifactLink"
            },
            "title": "Outputs",
            "type": "array"
          },
          "run": {
            "$ref": "#/components/schemas/Run"
          }
        },
        "required": [
          "done",
          "run",
          "format"
        ],
        "title": "PlotRender",
        "type": "object"
      },
      "PlotRenderRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/plots:render``: exactly one of ``plot`` (an inline spec, sanitized),\n``saved_plot_id`` or ``source``. ``width``/``height`` are CSS pixels before ``scale``;\nthe raster (``width x height x scale^2``, with the plot's own size where none is given)\nholds at most :data:`MAX_RENDER_PIXELS`. Send ``Prefer: wait=N`` to get the file links in\nthe response.",
        "examples": [
          {
            "format": "pdf",
            "saved_plot_id": "plt_01jaf3n1p2q3r4s5t6v7w8x9y0",
            "scale": 1
          },
          {
            "format": "png",
            "height": 600,
            "source": {
              "model_id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
              "plot_id": "mmm.response_curves",
              "version": 3
            },
            "width": 1200
          }
        ],
        "properties": {
          "format": {
            "default": "png",
            "enum": [
              "png",
              "svg",
              "pdf"
            ],
            "title": "Format",
            "type": "string"
          },
          "height": {
            "anyOf": [
              {
                "maximum": 4096.0,
                "minimum": 16.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "plot": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PlotSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "saved_plot_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^plt_[0-9a-z]{26}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Saved Plot Id"
          },
          "scale": {
            "default": 2.0,
            "exclusiveMinimum": 0.0,
            "maximum": 8.0,
            "title": "Scale",
            "type": "number"
          },
          "source": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlotRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "width": {
            "anyOf": [
              {
                "maximum": 4096.0,
                "minimum": 16.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          }
        },
        "title": "PlotRenderRequest",
        "type": "object"
      },
      "PlotSpec": {
        "additionalProperties": false,
        "description": "A renderable plot. ``spec`` is Vega-Lite JSON or Plotly ``{data, layout, ...}``.",
        "examples": [
          {
            "caption_plain": "The shaded band is where the model expects 90% of weeks.",
            "datasets": {
              "fan": {
                "kind": "data_ref",
                "path": "ui/plotdata/ppc_fan.arrow"
              }
            },
            "id": "core.ppc_fan",
            "kind": "vega-lite",
            "persona": "both",
            "provenance": {
              "generated_at": "2026-10-15T09:40:00Z",
              "recipe": "core.ppc_fan@1.0.0"
            },
            "schema_version": "v5",
            "spec": {
              "data": {
                "name": "fan"
              },
              "encoding": {
                "x": {
                  "field": "time",
                  "type": "temporal"
                },
                "y": {
                  "field": "lo",
                  "type": "quantitative"
                },
                "y2": {
                  "field": "hi"
                }
              },
              "mark": "area"
            },
            "title": "Posterior predictive fan"
          }
        ],
        "properties": {
          "bindings": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PlotBindings"
              },
              {
                "type": "null"
              }
            ]
          },
          "caption_plain": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Caption Plain"
          },
          "datasets": {
            "additionalProperties": {
              "discriminator": {
                "mapping": {
                  "data_ref": "#/components/schemas/DataRef",
                  "inline_arrow": "#/components/schemas/InlineArrow"
                },
                "propertyName": "kind"
              },
              "oneOf": [
                {
                  "$ref": "#/components/schemas/DataRef"
                },
                {
                  "$ref": "#/components/schemas/InlineArrow"
                }
              ]
            },
            "maxProperties": 64,
            "title": "Datasets",
            "type": "object"
          },
          "id": {
            "pattern": "^[A-Za-z0-9_.\\-]{1,128}$",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "vega-lite",
              "plotly"
            ],
            "title": "Kind",
            "type": "string"
          },
          "persona": {
            "default": "both",
            "enum": [
              "guided",
              "expert",
              "both"
            ],
            "title": "Persona",
            "type": "string"
          },
          "provenance": {
            "$ref": "#/components/schemas/PlotProvenance"
          },
          "schema_version": {
            "examples": [
              "v5",
              "2.35.2"
            ],
            "pattern": "^v?\\d+(\\.\\d+){0,2}$",
            "title": "Schema Version",
            "type": "string"
          },
          "spec": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Spec",
            "type": "object"
          },
          "title": {
            "maxLength": 300,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "kind",
          "spec",
          "schema_version",
          "provenance"
        ],
        "title": "PlotSpec",
        "type": "object"
      },
      "PlotValidateResponse": {
        "description": "Result of ``POST /v1/plots:validate`` (the server-side plot sanitizer).",
        "examples": [
          {
            "issues": [
              {
                "code": "PLOT_UNSAFE",
                "message": "URL data sources are not allowed",
                "pointer": "/spec/data/url"
              }
            ],
            "valid": false
          }
        ],
        "properties": {
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "sanitized": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PlotSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "valid": {
            "title": "Valid",
            "type": "boolean"
          }
        },
        "required": [
          "valid"
        ],
        "title": "PlotValidateResponse",
        "type": "object"
      },
      "PolicyCheck": {
        "additionalProperties": false,
        "description": "A required check in a policy: thresholds, severity and parameters.",
        "properties": {
          "check": {
            "title": "Check",
            "type": "string"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params",
            "type": "object"
          },
          "severity": {
            "$ref": "#/components/schemas/CheckSeverity",
            "default": "blocking"
          },
          "thresholds": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CheckThresholds"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "check"
        ],
        "title": "PolicyCheck",
        "type": "object"
      },
      "PolicyMatch": {
        "additionalProperties": false,
        "description": "Which models a policy covers; an empty list matches everything on that axis.\n\nA family matches a model's declared family (``forecast`` for the statsmodels\nforecasters, ``ts_multivariate``, ``mmm``) *or* the namespace of its id (``ts`` for\n``ts.sarimax``), so ``families: [ts]`` covers every ``ts.*`` model whatever family its\nplugin declares.",
        "properties": {
          "families": {
            "description": "Model families or model-id namespaces (ts covers ts.sarimax)",
            "items": {
              "type": "string"
            },
            "maxItems": 32,
            "title": "Families",
            "type": "array"
          },
          "models": {
            "description": "Model ids",
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "title": "Models",
            "type": "array"
          },
          "templates": {
            "items": {
              "type": "string"
            },
            "maxItems": 32,
            "title": "Templates",
            "type": "array"
          }
        },
        "title": "PolicyMatch",
        "type": "object"
      },
      "PortSpec": {
        "description": "An input port: its type, whether it must be bound and whether it takes several.",
        "properties": {
          "description": {
            "default": "",
            "maxLength": 300,
            "title": "Description",
            "type": "string"
          },
          "multiple": {
            "default": false,
            "description": "Accepts a list of bindings (e.g. models)",
            "title": "Multiple",
            "type": "boolean"
          },
          "required": {
            "default": true,
            "title": "Required",
            "type": "boolean"
          },
          "type": {
            "$ref": "#/components/schemas/PortType"
          }
        },
        "required": [
          "type"
        ],
        "title": "PortSpec",
        "type": "object"
      },
      "PortType": {
        "description": "What flows along a workflow edge.",
        "enum": [
          "dataset",
          "test_result",
          "split_plan",
          "model_version",
          "metrics",
          "table",
          "plot",
          "report",
          "evidence"
        ],
        "title": "PortType",
        "type": "string"
      },
      "PrincipalKind": {
        "enum": [
          "user",
          "service_account",
          "token",
          "service"
        ],
        "title": "PrincipalKind",
        "type": "string"
      },
      "PriorPreview": {
        "description": "The prior predictive in business units: what the model believes *before* seeing the\nKPI, so users can check that their beliefs came out as intended.",
        "examples": [
          {
            "contribution_share": {
              "tv": {
                "mean": 0.12,
                "quantiles": {
                  "0.05": 0.06,
                  "0.95": 0.19
                },
                "sd": 0.04
              }
            },
            "kpi_fan": {
              "coords": [
                "2026-01-04",
                "2026-01-11"
              ],
              "dim": "time",
              "observed": [
                101.0,
                99.5
              ],
              "quantiles": [
                0.05,
                0.5,
                0.95
              ],
              "units": "kEUR",
              "values": [
                [
                  80.0,
                  82.0
                ],
                [
                  100.0,
                  103.0
                ],
                [
                  125.0,
                  129.0
                ]
              ]
            },
            "roi": {
              "tv": {
                "mean": 2.6,
                "quantiles": {
                  "0.05": 1.5,
                  "0.5": 2.5,
                  "0.95": 4.1
                },
                "sd": 0.8
              }
            }
          }
        ],
        "properties": {
          "baseline_share": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DistributionSummary"
              },
              {
                "type": "null"
              }
            ]
          },
          "contribution_share": {
            "additionalProperties": {
              "$ref": "#/components/schemas/DistributionSummary"
            },
            "maxProperties": 64,
            "title": "Contribution Share",
            "type": "object"
          },
          "kpi_fan": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FanChart"
              },
              {
                "type": "null"
              }
            ]
          },
          "roi": {
            "additionalProperties": {
              "$ref": "#/components/schemas/DistributionSummary"
            },
            "maxProperties": 64,
            "title": "Roi",
            "type": "object"
          }
        },
        "title": "PriorPreview",
        "type": "object"
      },
      "PriorTranslation": {
        "description": "``GET /v1/guided/prior-translations/{run_id}`` (and the ``202`` of the POST): the run\nand, once it succeeded, the translated priors with their preview. Apply ``result.priors``\nat ``apply_at`` (``mapi_spec.calibration.apply_prior_translation``).",
        "examples": [
          {
            "done": true,
            "result": {
              "channels": [
                "tv",
                "search",
                "social"
              ],
              "coverage": {
                "search": 0.88,
                "social": 0.81,
                "tv": 0.79
              },
              "draws": 500,
              "format": "mapi.prior-translation/v1",
              "preview": {
                "contribution_share": {
                  "tv": {
                    "mean": 0.12,
                    "quantiles": {
                      "0.05": 0.06,
                      "0.95": 0.19
                    },
                    "sd": 0.04
                  }
                },
                "kpi_fan": {
                  "coords": [
                    "2026-01-04",
                    "2026-01-11"
                  ],
                  "dim": "time",
                  "observed": [
                    101.0,
                    99.5
                  ],
                  "quantiles": [
                    0.05,
                    0.5,
                    0.95
                  ],
                  "units": "kEUR",
                  "values": [
                    [
                      80.0,
                      82.0
                    ],
                    [
                      100.0,
                      103.0
                    ],
                    [
                      125.0,
                      129.0
                    ]
                  ]
                },
                "roi": {
                  "tv": {
                    "mean": 2.6,
                    "quantiles": {
                      "0.05": 1.5,
                      "0.5": 2.5,
                      "0.95": 4.1
                    },
                    "sd": 0.8
                  }
                }
              },
              "priors": {
                "intercept": {
                  "mu": 0.2,
                  "sigma": 0.3
                },
                "roi": {
                  "search": {
                    "mu": 1.2,
                    "sigma": 0.33
                  },
                  "social": {
                    "mu": 0.1,
                    "sigma": 0.5
                  },
                  "tv": {
                    "mu": 0.9,
                    "sigma": 0.38
                  }
                }
              },
              "seed": 7
            },
            "run": {
              "attempt": 1,
              "cost": {
                "estimated": true
              },
              "created_at": "2026-10-15T09:30:00Z",
              "executor": "local-process",
              "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
              "kind": "translate_priors",
              "name": "weekly sales, adstock 4",
              "project_id": "default",
              "queued_at": "2026-10-15T09:30:00Z",
              "resource_class": "M",
              "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
              "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
              "spec_revision": 2,
              "started_at": "2026-10-15T09:30:05Z",
              "state": "succeeded",
              "tags": {
                "stage": "candidate",
                "team": "growth"
              },
              "tenant_id": "default",
              "timeout": "45m",
              "updated_at": "2026-10-15T09:31:00Z"
            }
          }
        ],
        "properties": {
          "apply_at": {
            "default": "/model/settings/priors",
            "title": "Apply At",
            "type": "string"
          },
          "done": {
            "title": "Done",
            "type": "boolean"
          },
          "result": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorTranslationResult"
              },
              {
                "type": "null"
              }
            ]
          },
          "run": {
            "$ref": "#/components/schemas/Run"
          }
        },
        "required": [
          "run",
          "done"
        ],
        "title": "PriorTranslation",
        "type": "object"
      },
      "PriorTranslationRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/guided/prior-translations``: start a sandboxed ``translate_priors`` run.\n\nGive the spec as a saved revision (``spec_id`` + ``revision``) or an unsaved\n``document`` (a guided draft); ``dataset`` overrides its ``data.dataset``.",
        "examples": [
          {
            "business_priors": {
              "baseline_share": {
                "credibility": 0.8,
                "share": [
                  0.5,
                  0.8
                ]
              },
              "channels": {
                "search": {
                  "credibility": 0.9,
                  "roi": [
                    2.0,
                    6.0
                  ]
                },
                "social": {
                  "contribution_share": [
                    0.02,
                    0.1
                  ]
                },
                "tv": {
                  "credibility": 0.8,
                  "roi": [
                    1.5,
                    4.0
                  ]
                }
              },
              "kpi_units": "EUR",
              "spend_units": "EUR"
            },
            "draws": 500,
            "revision": 2,
            "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0"
          }
        ],
        "properties": {
          "business_priors": {
            "$ref": "#/components/schemas/BusinessPriors"
          },
          "dataset": {
            "anyOf": [
              {
                "maxLength": 512,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "dataset://growth/eu@v3"
            ],
            "title": "Dataset"
          },
          "document": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document"
          },
          "draws": {
            "default": 500,
            "maximum": 2000.0,
            "minimum": 50.0,
            "title": "Draws",
            "type": "integer"
          },
          "lift_tests": {
            "items": {
              "$ref": "#/components/schemas/LiftTest"
            },
            "maxItems": 500,
            "title": "Lift Tests",
            "type": "array"
          },
          "resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revision"
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          },
          "spec_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spec Id"
          }
        },
        "required": [
          "business_priors"
        ],
        "title": "PriorTranslationRequest",
        "type": "object"
      },
      "PriorTranslationResult": {
        "description": "``priors.json`` of a ``translate_priors`` run.\n\n``priors`` are model-space priors in the plugin's ``settings.priors`` form (engine-neutral\n``{distribution, <params>, dims}`` dicts; per-channel parameters are lists in ``channels``\norder), to be written\nat :data:`PRIORS_POINTER`. ``coverage`` is the prior mass inside each stated range\n(close to the stated credibility when the translation is faithful).",
        "examples": [
          {
            "channels": [
              "tv",
              "search",
              "social"
            ],
            "coverage": {
              "search": 0.88,
              "social": 0.81,
              "tv": 0.79
            },
            "draws": 500,
            "format": "mapi.prior-translation/v1",
            "preview": {
              "contribution_share": {
                "tv": {
                  "mean": 0.12,
                  "quantiles": {
                    "0.05": 0.06,
                    "0.95": 0.19
                  },
                  "sd": 0.04
                }
              },
              "kpi_fan": {
                "coords": [
                  "2026-01-04",
                  "2026-01-11"
                ],
                "dim": "time",
                "observed": [
                  101.0,
                  99.5
                ],
                "quantiles": [
                  0.05,
                  0.5,
                  0.95
                ],
                "units": "kEUR",
                "values": [
                  [
                    80.0,
                    82.0
                  ],
                  [
                    100.0,
                    103.0
                  ],
                  [
                    125.0,
                    129.0
                  ]
                ]
              },
              "roi": {
                "tv": {
                  "mean": 2.6,
                  "quantiles": {
                    "0.05": 1.5,
                    "0.5": 2.5,
                    "0.95": 4.1
                  },
                  "sd": 0.8
                }
              }
            },
            "priors": {
              "intercept": {
                "mu": 0.2,
                "sigma": 0.3
              },
              "roi": {
                "search": {
                  "mu": 1.2,
                  "sigma": 0.33
                },
                "social": {
                  "mu": 0.1,
                  "sigma": 0.5
                },
                "tv": {
                  "mu": 0.9,
                  "sigma": 0.38
                }
              }
            },
            "seed": 7
          }
        ],
        "properties": {
          "channels": {
            "items": {
              "type": "string"
            },
            "maxItems": 64,
            "title": "Channels",
            "type": "array"
          },
          "coverage": {
            "additionalProperties": {
              "type": "number"
            },
            "maxProperties": 64,
            "title": "Coverage",
            "type": "object"
          },
          "draws": {
            "minimum": 1.0,
            "title": "Draws",
            "type": "integer"
          },
          "format": {
            "const": "mapi.prior-translation/v1",
            "default": "mapi.prior-translation/v1",
            "title": "Format",
            "type": "string"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "maxItems": 256,
            "title": "Issues",
            "type": "array"
          },
          "preview": {
            "$ref": "#/components/schemas/PriorPreview"
          },
          "priors": {
            "additionalProperties": {
              "additionalProperties": {
                "$ref": "#/components/schemas/JsonValue"
              },
              "type": "object"
            },
            "maxProperties": 64,
            "title": "Priors",
            "type": "object"
          },
          "seed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          }
        },
        "required": [
          "channels",
          "draws"
        ],
        "title": "PriorTranslationResult",
        "type": "object"
      },
      "Problem": {
        "additionalProperties": false,
        "description": "RFC 7807 problem document with mapi extensions (``code``, ``errors``, ``untrusted_text``).",
        "properties": {
          "code": {
            "$ref": "#/components/schemas/ErrorCode"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          },
          "errors": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Errors",
            "type": "array"
          },
          "instance": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instance"
          },
          "status": {
            "maximum": 599.0,
            "minimum": 100.0,
            "title": "Status",
            "type": "integer"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "trace_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trace Id"
          },
          "type": {
            "default": "about:blank",
            "title": "Type",
            "type": "string"
          },
          "untrusted_text": {
            "anyOf": [
              {
                "maxLength": 65536,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Untrusted Text"
          }
        },
        "required": [
          "title",
          "status",
          "code"
        ],
        "title": "Problem",
        "type": "object"
      },
      "ProgressPayload": {
        "additionalProperties": false,
        "description": "``progress``: coalesced to at most one event per ``limits.progress_interval_s``.",
        "properties": {
          "chains": {
            "items": {
              "$ref": "#/components/schemas/ChainProgress"
            },
            "maxItems": 64,
            "title": "Chains",
            "type": "array"
          },
          "eta_seconds": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Eta Seconds"
          },
          "fraction": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Fraction"
          },
          "message": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Message"
          },
          "phase": {
            "$ref": "#/components/schemas/RunnerPhase"
          }
        },
        "required": [
          "phase"
        ],
        "title": "ProgressPayload",
        "type": "object"
      },
      "ProgressSnapshot": {
        "description": "Latest coalesced progress (one upserted row per run).",
        "examples": [
          {
            "chains": [
              {
                "chain": 0,
                "divergences": 0,
                "draws_done": 400,
                "draws_total": 1000
              },
              {
                "chain": 1,
                "divergences": 1,
                "draws_done": 380,
                "draws_total": 1000
              }
            ],
            "eta_seconds": 95,
            "fraction": 0.4,
            "message": "drawing samples",
            "phase": "sample",
            "seq": 42,
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "chains": {
            "items": {
              "$ref": "#/components/schemas/ChainProgress"
            },
            "title": "Chains",
            "type": "array"
          },
          "eta_seconds": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eta Seconds"
          },
          "fraction": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fraction"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "phase": {
            "$ref": "#/components/schemas/RunnerPhase"
          },
          "seq": {
            "minimum": 0.0,
            "title": "Seq",
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "seq",
          "phase",
          "updated_at"
        ],
        "title": "ProgressSnapshot",
        "type": "object"
      },
      "Project": {
        "description": "A workspace inside a tenant (M1: only ``default``).",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "id": "default",
            "name": "Default project",
            "tenant_id": "default"
          },
          {
            "created_at": "2026-10-15T09:30:00Z",
            "guided_locked": true,
            "id": "growth",
            "name": "Growth",
            "tenant_id": "acme"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "guided_locked": {
            "default": false,
            "description": "Persona lock (M3): the web app shows only Guided mode to members below admin. The API still accepts every spec; the lock is a presentation policy.",
            "title": "Guided Locked",
            "type": "boolean"
          },
          "id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "maxLength": 200,
            "title": "Name",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "name",
          "created_at"
        ],
        "title": "Project",
        "type": "object"
      },
      "ProjectCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/tenants/{tenant_id}/projects`` (tenant admins).",
        "examples": [
          {
            "description": "EU media mix models",
            "id": "growth",
            "name": "Growth"
          }
        ],
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "guided_locked": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3: show only Guided mode to non-admins (default: not locked)",
            "title": "Guided Locked"
          },
          "id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "ProjectCreate",
        "type": "object"
      },
      "ProjectRole": {
        "description": "Project roles, ordered ``viewer < editor < runner < admin`` (each includes the last).",
        "enum": [
          "viewer",
          "editor",
          "runner",
          "admin"
        ],
        "title": "ProjectRole",
        "type": "string"
      },
      "ProjectUpdate": {
        "additionalProperties": false,
        "description": "``PATCH /v1/tenants/{tenant_id}/projects/{project_id}`` (project admins).",
        "examples": [
          {
            "description": "EU and UK media mix models"
          },
          {
            "guided_locked": true
          }
        ],
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "guided_locked": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3: persona lock (audited as project.guided_lock)",
            "title": "Guided Locked"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "title": "ProjectUpdate",
        "type": "object"
      },
      "PromotionGateDecision": {
        "description": "The gate's decision for promoting one model version to an endpoint.",
        "examples": [
          {
            "failing_checks": [
              "holdout.mape"
            ],
            "outcome": "needs_override",
            "reasons": [
              {
                "check": "holdout.mape",
                "code": "SCORECARD_WARN",
                "message_plain": "Holdout error: the forecast error was 14%.",
                "outcome": "needs_override"
              }
            ],
            "scorecard_overall": "warn"
          }
        ],
        "properties": {
          "failing_checks": {
            "items": {
              "type": "string"
            },
            "title": "Failing Checks",
            "type": "array"
          },
          "outcome": {
            "$ref": "#/components/schemas/GateOutcome"
          },
          "reasons": {
            "items": {
              "$ref": "#/components/schemas/GateReason"
            },
            "title": "Reasons",
            "type": "array"
          },
          "scorecard_overall": {
            "anyOf": [
              {
                "enum": [
                  "pass",
                  "warn",
                  "fail"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scorecard Overall"
          }
        },
        "required": [
          "outcome"
        ],
        "title": "PromotionGateDecision",
        "type": "object"
      },
      "PurgedKFoldPlan": {
        "additionalProperties": false,
        "description": "Blocked k-fold with ``purge`` periods before and ``embargo`` after each test block\nremoved from training (labels that overlap the test window).",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the folds are cut at (a step id or 'raw'), as data.split",
            "title": "After Step"
          },
          "dim": {
            "default": "time",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "embargo": {
            "default": 0,
            "minimum": 0.0,
            "title": "Embargo",
            "type": "integer"
          },
          "k": {
            "maximum": 200.0,
            "minimum": 2.0,
            "title": "K",
            "type": "integer"
          },
          "kind": {
            "const": "purged_kfold",
            "title": "Kind",
            "type": "string"
          },
          "purge": {
            "default": 0,
            "minimum": 0.0,
            "title": "Purge",
            "type": "integer"
          }
        },
        "required": [
          "kind",
          "k"
        ],
        "title": "PurgedKFoldPlan",
        "type": "object"
      },
      "QuestionChoice": {
        "properties": {
          "label": {
            "maxLength": 200,
            "title": "Label",
            "type": "string"
          },
          "value": {
            "maxLength": 64,
            "title": "Value",
            "type": "string"
          }
        },
        "required": [
          "value",
          "label"
        ],
        "title": "QuestionChoice",
        "type": "object"
      },
      "QuestionSuggestion": {
        "description": "Candidates for one question (best first) and the pre-filled answer.",
        "properties": {
          "answer": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "candidates": {
            "items": {
              "$ref": "#/components/schemas/RoleCandidate"
            },
            "maxItems": 20,
            "title": "Candidates",
            "type": "array"
          },
          "question_id": {
            "title": "Question Id",
            "type": "string"
          }
        },
        "required": [
          "question_id"
        ],
        "title": "QuestionSuggestion",
        "type": "object"
      },
      "QuotaLimitStatus": {
        "description": "One limit of one level as shown in ``/usage`` (``remaining`` is ``None`` if unlimited).",
        "examples": [
          {
            "fraction_used": 0.5,
            "limit": 86400,
            "limit_name": "vcpu_seconds_per_day",
            "remaining": 43200,
            "resets_at": "2026-10-16T00:00:00Z",
            "scope": "tenant",
            "subject_id": "acme",
            "used": 43200
          }
        ],
        "properties": {
          "fraction_used": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fraction Used"
          },
          "limit": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Limit"
          },
          "limit_name": {
            "$ref": "#/components/schemas/LimitName"
          },
          "remaining": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remaining"
          },
          "resets_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resets At"
          },
          "scope": {
            "$ref": "#/components/schemas/QuotaScope"
          },
          "subject_id": {
            "title": "Subject Id",
            "type": "string"
          },
          "used": {
            "title": "Used",
            "type": "number"
          }
        },
        "required": [
          "scope",
          "subject_id",
          "limit_name",
          "used"
        ],
        "title": "QuotaLimitStatus",
        "type": "object"
      },
      "QuotaLimits": {
        "additionalProperties": false,
        "description": "Limits at one level. ``None`` = no limit at this level (other levels still apply).",
        "properties": {
          "concurrent_runs": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Concurrent Runs"
          },
          "egress_bytes_per_month": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Egress Bytes Per Month"
          },
          "max_fanout_tasks": {
            "anyOf": [
              {
                "maximum": 10000.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Fanout Tasks"
          },
          "max_resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "requests_per_minute": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requests Per Minute"
          },
          "storage_bytes": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Storage Bytes"
          },
          "vcpu_seconds_per_day": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vcpu Seconds Per Day"
          },
          "vcpu_seconds_per_month": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vcpu Seconds Per Month"
          }
        },
        "title": "QuotaLimits",
        "type": "object"
      },
      "QuotaPolicy": {
        "description": "The limits in force for one subject at one level.",
        "examples": [
          {
            "limits": {
              "concurrent_runs": 40,
              "max_fanout_tasks": 256,
              "max_resource_class": "L",
              "vcpu_seconds_per_day": 172800,
              "vcpu_seconds_per_month": 1000000
            },
            "note": "beta customer, doubled daily compute",
            "scope": "tenant",
            "subject_id": "acme",
            "updated_at": "2026-10-15T09:30:00Z",
            "updated_by": "usr_01jaf3a0b0c0d0e0f0g0h0j0k0"
          },
          {
            "limits": {
              "concurrent_runs": 700
            },
            "scope": "global",
            "subject_id": "*"
          }
        ],
        "properties": {
          "limits": {
            "$ref": "#/components/schemas/QuotaLimits"
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "scope": {
            "$ref": "#/components/schemas/QuotaScope"
          },
          "subject_id": {
            "maxLength": 64,
            "title": "Subject Id",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "updated_by": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          }
        },
        "required": [
          "scope",
          "subject_id",
          "limits"
        ],
        "title": "QuotaPolicy",
        "type": "object"
      },
      "QuotaPolicyUpsert": {
        "additionalProperties": false,
        "description": "``PUT /v1/admin/quotas``: create or replace the policy for ``(scope, subject_id)``.",
        "examples": [
          {
            "limits": {
              "concurrent_runs": 40,
              "vcpu_seconds_per_day": 172800
            },
            "note": "beta customer, doubled daily compute",
            "scope": "tenant",
            "subject_id": "acme"
          }
        ],
        "properties": {
          "limits": {
            "$ref": "#/components/schemas/QuotaLimits"
          },
          "note": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "scope": {
            "$ref": "#/components/schemas/QuotaScope"
          },
          "subject_id": {
            "maxLength": 64,
            "title": "Subject Id",
            "type": "string"
          }
        },
        "required": [
          "scope",
          "subject_id",
          "limits"
        ],
        "title": "QuotaPolicyUpsert",
        "type": "object"
      },
      "QuotaScope": {
        "description": "Policy level, most specific first.",
        "enum": [
          "token",
          "tenant",
          "global"
        ],
        "title": "QuotaScope",
        "type": "string"
      },
      "RaggedSpec": {
        "additionalProperties": false,
        "description": "Ragged nesting (``hh → trip``): long form (obs + index vars) or padded + mask.",
        "properties": {
          "form": {
            "enum": [
              "long",
              "padded"
            ],
            "title": "Form",
            "type": "string"
          },
          "group_dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Group Dim",
            "type": "string"
          },
          "mask_var": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mask Var"
          },
          "within_dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Within Dim",
            "type": "string"
          }
        },
        "required": [
          "group_dim",
          "within_dim",
          "form"
        ],
        "title": "RaggedSpec",
        "type": "object"
      },
      "Recommendation": {
        "description": "One ranked candidate with the reasons in plain words.",
        "properties": {
          "about": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/About"
              },
              {
                "type": "null"
              }
            ]
          },
          "cautions_plain": {
            "items": {
              "type": "string"
            },
            "title": "Cautions Plain",
            "type": "array"
          },
          "difficulty": {
            "$ref": "#/components/schemas/Difficulty"
          },
          "id": {
            "maxLength": 128,
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/AboutKind"
          },
          "reasons_plain": {
            "items": {
              "type": "string"
            },
            "title": "Reasons Plain",
            "type": "array"
          },
          "score": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Score",
            "type": "number"
          },
          "summary_plain": {
            "title": "Summary Plain",
            "type": "string"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "typical_runtime": {
            "$ref": "#/components/schemas/TypicalRuntime"
          }
        },
        "required": [
          "kind",
          "id",
          "title",
          "summary_plain",
          "score",
          "difficulty",
          "typical_runtime"
        ],
        "title": "Recommendation",
        "type": "object"
      },
      "Representation": {
        "description": "How a model encodes uncertainty in its outputs.",
        "enum": [
          "draws",
          "quantiles",
          "interval",
          "point",
          "moments"
        ],
        "title": "Representation",
        "type": "string"
      },
      "ResolvedModel": {
        "additionalProperties": false,
        "properties": {
          "capabilities": {
            "$ref": "#/components/schemas/Capabilities"
          },
          "derived": {
            "items": {
              "type": "string"
            },
            "title": "Derived",
            "type": "array"
          },
          "effective_policies": {
            "additionalProperties": {
              "$ref": "#/components/schemas/DimPolicy"
            },
            "title": "Effective Policies",
            "type": "object"
          },
          "input_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DataSchema"
              },
              {
                "type": "null"
              }
            ]
          },
          "outputs": {
            "items": {
              "type": "string"
            },
            "title": "Outputs",
            "type": "array"
          },
          "resolved": {
            "title": "Resolved",
            "type": "string"
          },
          "side_tables": {
            "description": "v0.15: the data.side_tables entries the model reads (fit time only)",
            "items": {
              "type": "string"
            },
            "title": "Side Tables",
            "type": "array"
          },
          "use": {
            "title": "Use",
            "type": "string"
          }
        },
        "required": [
          "use",
          "resolved",
          "capabilities"
        ],
        "title": "ResolvedModel",
        "type": "object"
      },
      "ResolvedSpec": {
        "additionalProperties": false,
        "description": "What the control plane stores with a run: everything score-time checks need.",
        "properties": {
          "binding": {
            "$ref": "#/components/schemas/Binding"
          },
          "model": {
            "$ref": "#/components/schemas/ResolvedModel"
          },
          "side_tables": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ScorePolicy"
            },
            "title": "Side Tables",
            "type": "object"
          },
          "spec_hash": {
            "title": "Spec Hash",
            "type": "string"
          },
          "split_stage": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Split Stage"
          },
          "stages": {
            "additionalProperties": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/DataSchema"
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": "Stages",
            "type": "object"
          },
          "steps": {
            "items": {
              "$ref": "#/components/schemas/ResolvedStep"
            },
            "title": "Steps",
            "type": "array"
          }
        },
        "required": [
          "spec_hash",
          "binding",
          "steps",
          "stages",
          "split_stage",
          "model"
        ],
        "title": "ResolvedSpec",
        "type": "object"
      },
      "ResolvedStep": {
        "additionalProperties": false,
        "description": "A pipeline step after ref resolution, with defaults applied and effects evaluated.",
        "properties": {
          "context": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ContextNeed"
              },
              {
                "type": "null"
              }
            ]
          },
          "depends_on_target": {
            "title": "Depends On Target",
            "type": "boolean"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "input_stage": {
            "title": "Input Stage",
            "type": "string"
          },
          "invertible": {
            "title": "Invertible",
            "type": "boolean"
          },
          "kind": {
            "$ref": "#/components/schemas/StepKind"
          },
          "resolved": {
            "title": "Resolved",
            "type": "string"
          },
          "settings": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Settings",
            "type": "object"
          },
          "side_tables": {
            "items": {
              "type": "string"
            },
            "title": "Side Tables",
            "type": "array"
          },
          "stateful": {
            "title": "Stateful",
            "type": "boolean"
          },
          "use": {
            "title": "Use",
            "type": "string"
          }
        },
        "required": [
          "id",
          "use",
          "resolved",
          "kind",
          "stateful",
          "invertible",
          "depends_on_target",
          "input_stage"
        ],
        "title": "ResolvedStep",
        "type": "object"
      },
      "ResourceClass": {
        "description": "Executor resource class. Ordered: ``S < M < L < XL < GPU``.\n\n``GPU`` is the last (highest-rank) member on purpose: a quota whose\n``max_resource_class`` is below it refuses it, and :meth:`next_up` never offers it.",
        "enum": [
          "S",
          "M",
          "L",
          "XL",
          "GPU"
        ],
        "title": "ResourceClass",
        "type": "string"
      },
      "ResourceHint": {
        "additionalProperties": false,
        "description": "Resource guidance for scheduling.",
        "properties": {
          "default_class": {
            "$ref": "#/components/schemas/ResourceClass",
            "default": "S"
          },
          "est_fit_seconds": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Est Fit Seconds"
          },
          "gpu": {
            "default": false,
            "title": "Gpu",
            "type": "boolean"
          },
          "min_class": {
            "$ref": "#/components/schemas/ResourceClass",
            "default": "S"
          }
        },
        "title": "ResourceHint",
        "type": "object"
      },
      "ResourceKind": {
        "enum": [
          "tenant",
          "tenant_member",
          "project",
          "member",
          "token",
          "catalog",
          "dataset",
          "spec",
          "run",
          "model",
          "endpoint",
          "plot",
          "plugin",
          "usage",
          "billing",
          "audit",
          "quota",
          "kill_switch",
          "executor",
          "event",
          "webhook",
          "embed",
          "tenant_deletion",
          "tenant_export",
          "workflow",
          "policy",
          "tenant_policy"
        ],
        "title": "ResourceKind",
        "type": "string"
      },
      "ResultField": {
        "description": "A field of a node's JSON result that conditions may read (``nodes.<id>.<field>``).",
        "properties": {
          "description": {
            "maxLength": 300,
            "title": "Description",
            "type": "string"
          },
          "type": {
            "enum": [
              "number",
              "integer",
              "boolean",
              "string",
              "object",
              "array"
            ],
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type",
          "description"
        ],
        "title": "ResultField",
        "type": "object"
      },
      "Role": {
        "description": "What a variable means to a model.",
        "enum": [
          "target",
          "covariate",
          "media",
          "spend",
          "control",
          "index",
          "mask",
          "constant",
          "weight",
          "exposure"
        ],
        "title": "Role",
        "type": "string"
      },
      "RoleCandidate": {
        "properties": {
          "column": {
            "title": "Column",
            "type": "string"
          },
          "confidence": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Confidence",
            "type": "number"
          },
          "reason_plain": {
            "maxLength": 300,
            "title": "Reason Plain",
            "type": "string"
          }
        },
        "required": [
          "column",
          "confidence",
          "reason_plain"
        ],
        "title": "RoleCandidate",
        "type": "object"
      },
      "RoleSuggestions": {
        "examples": [
          {
            "questions": [
              {
                "answer": "revenue_eur",
                "candidates": [
                  {
                    "column": "revenue_eur",
                    "confidence": 0.9,
                    "reason_plain": "named like a revenue column; numbers"
                  }
                ],
                "question_id": "kpi"
              },
              {
                "answer": [
                  "tv_spend"
                ],
                "candidates": [
                  {
                    "column": "tv_spend",
                    "confidence": 0.8,
                    "reason_plain": "named like spend; never negative"
                  }
                ],
                "question_id": "spend"
              }
            ],
            "template_id": "geo_mmm",
            "unassigned": []
          }
        ],
        "properties": {
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "questions": {
            "items": {
              "$ref": "#/components/schemas/QuestionSuggestion"
            },
            "title": "Questions",
            "type": "array"
          },
          "template_id": {
            "title": "Template Id",
            "type": "string"
          },
          "unassigned": {
            "description": "Columns no answer uses",
            "items": {
              "type": "string"
            },
            "title": "Unassigned",
            "type": "array"
          }
        },
        "required": [
          "template_id",
          "questions"
        ],
        "title": "RoleSuggestions",
        "type": "object"
      },
      "RollingOriginPlan": {
        "additionalProperties": false,
        "description": "A fixed-length training ``window`` sliding forward.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the folds are cut at (a step id or 'raw'), as data.split",
            "title": "After Step"
          },
          "anchor": {
            "default": "end",
            "description": "end: the last test window ends at the last period",
            "enum": [
              "end",
              "start"
            ],
            "title": "Anchor",
            "type": "string"
          },
          "dim": {
            "default": "time",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "gap": {
            "default": 0,
            "description": "Periods between training and test (not scored)",
            "minimum": 0.0,
            "title": "Gap",
            "type": "integer"
          },
          "horizons": {
            "description": "Forecast horizons scored per fold",
            "items": {
              "type": "integer"
            },
            "maxItems": 32,
            "minItems": 1,
            "title": "Horizons",
            "type": "array"
          },
          "kind": {
            "const": "rolling_origin",
            "title": "Kind",
            "type": "string"
          },
          "min_train": {
            "default": 1,
            "description": "Fewest training periods a fold may have",
            "minimum": 1.0,
            "title": "Min Train",
            "type": "integer"
          },
          "n_folds": {
            "anyOf": [
              {
                "maximum": 200.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "N Folds"
          },
          "step": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Periods between origins (default: max)",
            "title": "Step"
          },
          "window": {
            "description": "Training periods per fold",
            "minimum": 1.0,
            "title": "Window",
            "type": "integer"
          }
        },
        "required": [
          "horizons",
          "kind",
          "window"
        ],
        "title": "RollingOriginPlan",
        "type": "object"
      },
      "Run": {
        "description": "A unit of work and its lifecycle (see the state machine in ``mapi_spec.run``).",
        "examples": [
          {
            "attempt": 1,
            "cost": {
              "estimated": true
            },
            "created_at": "2026-10-15T09:30:00Z",
            "executor": "local-process",
            "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "kind": "fit",
            "name": "weekly sales, adstock 4",
            "progress": {
              "chains": [
                {
                  "chain": 0,
                  "divergences": 0,
                  "draws_done": 400,
                  "draws_total": 1000
                },
                {
                  "chain": 1,
                  "divergences": 1,
                  "draws_done": 380,
                  "draws_total": 1000
                }
              ],
              "eta_seconds": 95,
              "fraction": 0.4,
              "message": "drawing samples",
              "phase": "sample",
              "seq": 42,
              "updated_at": "2026-10-15T09:30:00Z"
            },
            "project_id": "default",
            "queued_at": "2026-10-15T09:30:00Z",
            "resource_class": "M",
            "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
            "spec_revision": 2,
            "started_at": "2026-10-15T09:30:05Z",
            "state": "running",
            "tags": {
              "stage": "candidate",
              "team": "growth"
            },
            "tenant_id": "default",
            "timeout": "45m",
            "updated_at": "2026-10-15T09:31:00Z"
          },
          {
            "attempt": 1,
            "created_at": "2026-10-15T09:30:00Z",
            "failure_class": "resource_exhausted",
            "finished_at": "2026-10-15T09:40:00Z",
            "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "kind": "fit",
            "problem": {
              "code": "RESOURCE_EXHAUSTED",
              "detail": "the worker was killed (exit 137); retry at class L",
              "status": 507,
              "title": "Run exhausted its resources",
              "type": "urn:mapi:error:RESOURCE_EXHAUSTED"
            },
            "project_id": "default",
            "resource_class": "M",
            "state": "failed",
            "tenant_id": "default",
            "timeout": "45m",
            "updated_at": "2026-10-15T09:40:00Z"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "columns": {
            "anyOf": [
              {
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "Values of the requested `column` refs (list_runs only), keyed by RunRef.text()",
            "title": "Columns"
          },
          "cost": {
            "$ref": "#/components/schemas/RunCost"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "dataset_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dataset Id"
          },
          "executor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Executor"
          },
          "experiment_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Experiment of the run (v0.14)",
            "title": "Experiment Id"
          },
          "failure_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FailureClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "finished_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/RunKind"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "model_version_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version Id"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Display name (v0.11)",
            "title": "Name"
          },
          "note": {
            "anyOf": [
              {
                "maxLength": 20000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Free-text note (untrusted text, v0.11)",
            "title": "Note"
          },
          "output_model_version_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The model version a successful fit produced",
            "title": "Output Model Version Id"
          },
          "parent_run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Run Id"
          },
          "problem": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Problem"
              },
              {
                "type": "null"
              }
            ]
          },
          "progress": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProgressSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "queued_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Queued At"
          },
          "resource_class": {
            "$ref": "#/components/schemas/ResourceClass"
          },
          "retry_of": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry Of"
          },
          "spec_hash": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spec Hash"
          },
          "spec_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spec Id"
          },
          "spec_revision": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spec Revision"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "state": {
            "$ref": "#/components/schemas/RunState"
          },
          "tags": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Mutable run tags (v0.11; labels stay create-only)",
            "title": "Tags",
            "type": "object"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "timeout": {
            "description": "Duration such as '45m', '1h30m' or '90s'.",
            "examples": [
              "45m",
              "1h30m"
            ],
            "pattern": "^(?=.)(\\d+h)?(\\d+m)?(\\d+s)?$",
            "title": "Timeout",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "kind",
          "state",
          "attempt",
          "resource_class",
          "timeout",
          "created_at",
          "updated_at"
        ],
        "title": "Run",
        "type": "object"
      },
      "RunCompare": {
        "description": "``GET /v1/run-compare``: runs side by side (summaries, histories, params, media).",
        "examples": [
          {
            "media": [
              {
                "items": [
                  {
                    "attempt": 1,
                    "caption": "Predicted classes, epoch 3",
                    "content_type": "image/png",
                    "crc32c": "4waSgw==",
                    "created_at": "2026-10-15T09:30:00Z",
                    "expires_at": "2026-10-15T09:45:00Z",
                    "height": 64,
                    "id": "rm_01jaf3h1j2k3m4n5p6q7r8s9t0",
                    "key": "samples",
                    "kind": "image",
                    "labels": {
                      "split": "val"
                    },
                    "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
                    "sha256": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
                    "size": 12034,
                    "source": "runner",
                    "step": 3,
                    "url": "http://127.0.0.1:4443/download/storage/v1/b/mapi-local-bundles/o/t%2Fdefault%2Frun-media%2Frun_01jaf3q2x8m9v7k5h4g3f2e1d0%2F3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f.png?alt=media",
                    "width": 64
                  }
                ],
                "key": "samples",
                "kind": "image",
                "labels": {
                  "split": "val"
                },
                "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              }
            ],
            "metrics": [
              {
                "key": "loss",
                "series": [
                  {
                    "attempt": 1,
                    "count": 3,
                    "labels": {
                      "split": "val"
                    },
                    "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
                    "steps": [
                      1,
                      2,
                      3
                    ],
                    "values": [
                      0.9,
                      0.6,
                      0.45
                    ]
                  },
                  {
                    "attempt": 1,
                    "count": 3,
                    "labels": {
                      "split": "val"
                    },
                    "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d1",
                    "steps": [
                      1,
                      2,
                      3
                    ],
                    "values": [
                      0.8,
                      0.5,
                      0.41
                    ]
                  }
                ]
              }
            ],
            "params": [
              {
                "differs": true,
                "key": "settings.adstock.l_max",
                "values": {
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0": "4",
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d1": "8"
                }
              }
            ],
            "runs": [
              {
                "attempt": 1,
                "cost": {
                  "estimated": true
                },
                "created_at": "2026-10-15T09:30:00Z",
                "executor": "local-process",
                "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
                "kind": "fit",
                "name": "weekly sales, adstock 4",
                "progress": {
                  "chains": [
                    {
                      "chain": 0,
                      "divergences": 0,
                      "draws_done": 400,
                      "draws_total": 1000
                    },
                    {
                      "chain": 1,
                      "divergences": 1,
                      "draws_done": 380,
                      "draws_total": 1000
                    }
                  ],
                  "eta_seconds": 95,
                  "fraction": 0.4,
                  "message": "drawing samples",
                  "phase": "sample",
                  "seq": 42,
                  "updated_at": "2026-10-15T09:30:00Z"
                },
                "project_id": "default",
                "queued_at": "2026-10-15T09:30:00Z",
                "resource_class": "M",
                "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
                "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
                "spec_revision": 2,
                "started_at": "2026-10-15T09:30:05Z",
                "state": "running",
                "tags": {
                  "stage": "candidate",
                  "team": "growth"
                },
                "tenant_id": "default",
                "timeout": "45m",
                "updated_at": "2026-10-15T09:31:00Z"
              },
              {
                "attempt": 1,
                "cost": {
                  "estimated": true
                },
                "created_at": "2026-10-15T09:30:00Z",
                "executor": "local-process",
                "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d1",
                "kind": "fit",
                "name": "weekly sales, adstock 4",
                "progress": {
                  "chains": [
                    {
                      "chain": 0,
                      "divergences": 0,
                      "draws_done": 400,
                      "draws_total": 1000
                    },
                    {
                      "chain": 1,
                      "divergences": 1,
                      "draws_done": 380,
                      "draws_total": 1000
                    }
                  ],
                  "eta_seconds": 95,
                  "fraction": 0.4,
                  "message": "drawing samples",
                  "phase": "sample",
                  "seq": 42,
                  "updated_at": "2026-10-15T09:30:00Z"
                },
                "project_id": "default",
                "queued_at": "2026-10-15T09:30:00Z",
                "resource_class": "M",
                "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
                "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
                "spec_revision": 2,
                "started_at": "2026-10-15T09:30:05Z",
                "state": "succeeded",
                "tags": {
                  "stage": "candidate",
                  "team": "growth"
                },
                "tenant_id": "default",
                "timeout": "45m",
                "updated_at": "2026-10-15T09:31:00Z"
              }
            ],
            "summaries": [
              {
                "attempt": 1,
                "count": 1,
                "first_ts": "2026-10-15T09:30:00Z",
                "key": "rmse",
                "last": 12.7,
                "last_ts": "2026-10-15T09:30:00Z",
                "max": 12.7,
                "min": 12.7,
                "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              }
            ],
            "truncated": {
              "params": false
            }
          }
        ],
        "properties": {
          "media": {
            "items": {
              "$ref": "#/components/schemas/CompareMedia"
            },
            "maxItems": 640,
            "title": "Media",
            "type": "array"
          },
          "metrics": {
            "items": {
              "$ref": "#/components/schemas/CompareMetric"
            },
            "maxItems": 12,
            "title": "Metrics",
            "type": "array"
          },
          "params": {
            "items": {
              "$ref": "#/components/schemas/CompareParam"
            },
            "maxItems": 2000,
            "title": "Params",
            "type": "array"
          },
          "runs": {
            "items": {
              "$ref": "#/components/schemas/Run"
            },
            "maxItems": 10,
            "minItems": 2,
            "title": "Runs",
            "type": "array"
          },
          "summaries": {
            "items": {
              "$ref": "#/components/schemas/CompareSummary"
            },
            "maxItems": 1000,
            "title": "Summaries",
            "type": "array"
          },
          "truncated": {
            "additionalProperties": {
              "type": "boolean"
            },
            "description": "True for a part that was capped",
            "propertyNames": {
              "enum": [
                "summaries",
                "series",
                "params",
                "media"
              ]
            },
            "title": "Truncated",
            "type": "object"
          }
        },
        "required": [
          "runs"
        ],
        "title": "RunCompare",
        "type": "object"
      },
      "RunCost": {
        "description": "Cost of a run (all attempts). ``estimated`` is true until an ``actual`` ledger entry\nexists; ``usd`` is kept for v0.2 clients and is set only when the currency is USD.",
        "examples": [
          {
            "estimated": true
          },
          {
            "amount_micros": 31200,
            "attempts_billed": 1,
            "currency": "USD",
            "estimate_micros": 30000,
            "estimated": false,
            "gib_seconds": 4800,
            "price_version": "cloudrun-list-2026-10",
            "usd": 0.0312,
            "vcpu_seconds": 1200
          }
        ],
        "properties": {
          "amount_micros": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Amount Micros"
          },
          "attempts_billed": {
            "default": 0,
            "minimum": 0.0,
            "title": "Attempts Billed",
            "type": "integer"
          },
          "currency": {
            "anyOf": [
              {
                "pattern": "^[A-Z]{3}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Currency"
          },
          "estimate_micros": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pre-run estimate",
            "title": "Estimate Micros"
          },
          "estimated": {
            "default": true,
            "title": "Estimated",
            "type": "boolean"
          },
          "gib_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gib Seconds"
          },
          "price_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Version"
          },
          "usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Usd"
          },
          "vcpu_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vcpu Seconds"
          }
        },
        "title": "RunCost",
        "type": "object"
      },
      "RunCreate": {
        "additionalProperties": false,
        "description": "Submit a run. Send an ``Idempotency-Key`` header: a retry with the same key and body\nreturns the original run (200); the same key with a different body is 409\n``IDEMPOTENCY_CONFLICT``. Keys are scoped to the project and kept for 24 h.\n\n* ``fit`` / ``validate`` (sandboxed dry-run): ``spec_id`` + ``revision``;\n* ``score``: ``model_version_id`` + ``request``;\n* ``evaluate`` / ``derive`` / ``render``: ``model_version_id`` (+ ``params``).",
        "examples": [
          {
            "kind": "fit",
            "resource_class": "M",
            "revision": 2,
            "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0"
          },
          {
            "kind": "score",
            "model_version_id": "mv_01jaf3e1f2g3h4j5k6m7n8p9q0",
            "request": {
              "apiVersion": "mapi/v1",
              "horizon": {
                "dim": "time",
                "periods": 8
              },
              "kind": "ScoreRequest",
              "mode": "forecast",
              "model": "model://default/eu-geo-mmm@v1"
            }
          }
        ],
        "properties": {
          "experiment_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Experiment of the new run (v0.14; not an archived one)",
            "title": "Experiment Id"
          },
          "kind": {
            "$ref": "#/components/schemas/RunKind"
          },
          "labels": {
            "maxProperties": 64,
            "patternProperties": {
              "^[a-z0-9]([a-z0-9_.\\-/]{0,62})$": {
                "maxLength": 63,
                "pattern": "^[A-Za-z0-9_.\\-]*$",
                "type": "string"
              }
            },
            "title": "Labels",
            "type": "object"
          },
          "model_version_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version Id"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params",
            "type": "object"
          },
          "request": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ScoreRequest"
              },
              {
                "type": "null"
              }
            ]
          },
          "resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revision"
          },
          "spec_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spec Id"
          },
          "timeout": {
            "anyOf": [
              {
                "description": "Duration such as '45m', '1h30m' or '90s'.",
                "examples": [
                  "45m",
                  "1h30m"
                ],
                "pattern": "^(?=.)(\\d+h)?(\\d+m)?(\\d+s)?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timeout"
          }
        },
        "required": [
          "kind"
        ],
        "title": "RunCreate",
        "type": "object"
      },
      "RunEventType": {
        "description": "Event types written by the supervisor (see :mod:`mapi_spec.run` for payloads).\n\n``metrics``, ``params`` and ``tags`` (v0.11) and ``media`` (v0.14) carry run tracking\ndata: the control plane writes them to the tracking tables, not to the stored event list.",
        "enum": [
          "state",
          "progress",
          "log",
          "diagnostic",
          "warning",
          "checkpoint",
          "metric",
          "complete",
          "error",
          "metrics",
          "params",
          "tags",
          "media"
        ],
        "title": "RunEventType",
        "type": "string"
      },
      "RunEventView": {
        "description": "A persisted run event (``id`` is the SSE event id, increasing per run).",
        "examples": [
          {
            "attempt": 1,
            "id": 17,
            "payload": {
              "phase": "sample"
            },
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "seq": 3,
            "ts": "2026-10-15T09:30:00Z",
            "type": "state"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "id": {
            "minimum": 1.0,
            "title": "Id",
            "type": "integer"
          },
          "payload": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Payload",
            "type": "object"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "seq": {
            "minimum": 0.0,
            "title": "Seq",
            "type": "integer"
          },
          "ts": {
            "format": "date-time",
            "title": "Ts",
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/RunEventType"
          }
        },
        "required": [
          "id",
          "run_id",
          "attempt",
          "seq",
          "ts",
          "type"
        ],
        "title": "RunEventView",
        "type": "object"
      },
      "RunKeyCount": {
        "description": "A metric series, param key or tag key, and how many runs have it.",
        "examples": [
          {
            "key": "loss",
            "labels": {
              "split": "val"
            },
            "runs": 8
          },
          {
            "key": "team",
            "runs": 5
          }
        ],
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "runs": {
            "minimum": 0.0,
            "title": "Runs",
            "type": "integer"
          }
        },
        "required": [
          "key",
          "runs"
        ],
        "title": "RunKeyCount",
        "type": "object"
      },
      "RunKeys": {
        "description": "``GET /v1/run-keys``: the tracked keys of the runs of a project (or an experiment),\nmost common first; the column picker of the runs table reads it.",
        "examples": [
          {
            "metrics": [
              {
                "key": "rmse",
                "runs": 12
              },
              {
                "key": "loss",
                "labels": {
                  "split": "val"
                },
                "runs": 8
              }
            ],
            "params": [
              {
                "key": "settings.adstock.l_max",
                "runs": 12
              }
            ],
            "tags": [
              {
                "key": "team",
                "runs": 5
              }
            ]
          }
        ],
        "properties": {
          "metrics": {
            "items": {
              "$ref": "#/components/schemas/RunKeyCount"
            },
            "maxItems": 500,
            "title": "Metrics",
            "type": "array"
          },
          "params": {
            "items": {
              "$ref": "#/components/schemas/RunKeyCount"
            },
            "maxItems": 500,
            "title": "Params",
            "type": "array"
          },
          "tags": {
            "items": {
              "$ref": "#/components/schemas/RunKeyCount"
            },
            "maxItems": 200,
            "title": "Tags",
            "type": "array"
          },
          "truncated": {
            "default": false,
            "description": "A list was capped",
            "title": "Truncated",
            "type": "boolean"
          }
        },
        "title": "RunKeys",
        "type": "object"
      },
      "RunKind": {
        "description": "What a run does. ``validate`` is the explicit sandboxed dry-run of a spec.\n\n``sweep``, ``backtest``, ``sbc`` and ``campaign`` are fan-out *parents* (plan §6.2,\nM4): they own child runs and never execute on an executor themselves.",
        "enum": [
          "ingest",
          "describe",
          "validate",
          "fit",
          "score",
          "evaluate",
          "derive",
          "render",
          "optimize",
          "sweep",
          "backtest",
          "sbc",
          "campaign",
          "translate_priors",
          "workflow",
          "workflow_node",
          "explore",
          "governance",
          "inspect"
        ],
        "title": "RunKind",
        "type": "string"
      },
      "RunMedia": {
        "description": "An image or a table a run logged. ``caption`` is untrusted text; ``url`` is a signed GET\nof the stored copy (verify ``size`` and ``crc32c`` after the download).",
        "examples": [
          {
            "attempt": 1,
            "caption": "Predicted classes, epoch 3",
            "content_type": "image/png",
            "crc32c": "4waSgw==",
            "created_at": "2026-10-15T09:30:00Z",
            "expires_at": "2026-10-15T09:45:00Z",
            "height": 64,
            "id": "rm_01jaf3h1j2k3m4n5p6q7r8s9t0",
            "key": "samples",
            "kind": "image",
            "labels": {
              "split": "val"
            },
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "sha256": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "size": 12034,
            "source": "runner",
            "step": 3,
            "url": "http://127.0.0.1:4443/download/storage/v1/b/mapi-local-bundles/o/t%2Fdefault%2Frun-media%2Frun_01jaf3q2x8m9v7k5h4g3f2e1d0%2F3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f.png?alt=media",
            "width": 64
          },
          {
            "attempt": 1,
            "content_type": "application/json",
            "crc32c": "4waSgw==",
            "created_at": "2026-10-15T09:30:00Z",
            "id": "rm_01jaf3h1j2k3m4n5p6q7r8s9t0",
            "key": "confusion_counts",
            "kind": "table",
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "sha256": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "size": 412,
            "source": "api"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "caption": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Caption"
          },
          "content_type": {
            "enum": [
              "image/png",
              "image/jpeg",
              "application/json"
            ],
            "title": "Content Type",
            "type": "string"
          },
          "crc32c": {
            "description": "CRC32C as GCS reports it: base64 of the big-endian 4-byte checksum",
            "examples": [
              "4waSgw=="
            ],
            "pattern": "^[A-Za-z0-9+/]{6}==$",
            "title": "Crc32C",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "expires_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "key": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Key",
            "type": "string"
          },
          "kind": {
            "enum": [
              "image",
              "table"
            ],
            "title": "Kind",
            "type": "string"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Labels",
            "type": "object"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "sha256": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Sha256",
            "type": "string"
          },
          "size": {
            "minimum": 1.0,
            "title": "Size",
            "type": "integer"
          },
          "source": {
            "enum": [
              "runner",
              "api"
            ],
            "title": "Source",
            "type": "string"
          },
          "step": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Step"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          }
        },
        "required": [
          "id",
          "run_id",
          "attempt",
          "key",
          "kind",
          "content_type",
          "size",
          "sha256",
          "crc32c",
          "source",
          "created_at"
        ],
        "title": "RunMedia",
        "type": "object"
      },
      "RunParam": {
        "description": "One run parameter. ``value`` is the text form; ``value_num`` is set for numbers.",
        "examples": [
          {
            "key": "fit.draws",
            "logged_at": "2026-10-15T09:30:00Z",
            "source": "runner",
            "value": "1000",
            "value_num": 1000.0
          },
          {
            "key": "settings.adstock.l_max",
            "logged_at": "2026-10-15T09:30:00Z",
            "source": "runner",
            "value": "4",
            "value_num": 4.0
          }
        ],
        "properties": {
          "key": {
            "pattern": "^[A-Za-z0-9_][A-Za-z0-9_.\\-/]{0,249}$",
            "title": "Key",
            "type": "string"
          },
          "logged_at": {
            "format": "date-time",
            "title": "Logged At",
            "type": "string"
          },
          "source": {
            "enum": [
              "runner",
              "api"
            ],
            "title": "Source",
            "type": "string"
          },
          "value": {
            "title": "Value",
            "type": "string"
          },
          "value_num": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Num"
          }
        },
        "required": [
          "key",
          "value",
          "source",
          "logged_at"
        ],
        "title": "RunParam",
        "type": "object"
      },
      "RunPatch": {
        "additionalProperties": false,
        "description": "Merge patch: a field left out is unchanged; ``null`` clears name/note; a tag set to\n``null`` is deleted. ``experiment_id`` (v0.14) moves the run to another experiment;\n``null`` takes it out of its experiment.",
        "examples": [
          {
            "name": "weekly sales, adstock 4",
            "tags": {
              "stage": "candidate"
            }
          },
          {
            "note": "Holdout error is high in week 52 (holiday)."
          },
          {
            "experiment_id": "exp_01jaf3f1g2h3j4k5m6n7p8q9r0"
          }
        ],
        "properties": {
          "experiment_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Experiment Id"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "note": {
            "anyOf": [
              {
                "maxLength": 20000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "tags": {
            "anyOf": [
              {
                "maxProperties": 100,
                "patternProperties": {
                  "^[A-Za-z0-9_][A-Za-z0-9_.\\-/]{0,127}$": {
                    "anyOf": [
                      {
                        "maxLength": 1000,
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags"
          }
        },
        "title": "RunPatch",
        "type": "object"
      },
      "RunRetry": {
        "additionalProperties": false,
        "description": "``POST /runs/{id}:retry``: a *new* run from a failed one, optionally one class up.",
        "examples": [
          {
            "reason": "RESOURCE_EXHAUSTED at M",
            "resource_class": "L"
          }
        ],
        "properties": {
          "reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          }
        },
        "title": "RunRetry",
        "type": "object"
      },
      "RunState": {
        "description": "Lifecycle of a run (plan §8.3). Terminal states never change again, except that a\n``PARTIAL`` run can be resumed (``RESUME`` → ``QUEUED`` with a new attempt).",
        "enum": [
          "created",
          "rejected",
          "queued",
          "dispatching",
          "provisioning",
          "running",
          "stalled",
          "finalizing",
          "succeeded",
          "partial",
          "failed",
          "cancelling",
          "cancelled"
        ],
        "title": "RunState",
        "type": "string"
      },
      "RunView": {
        "description": "A saved runs-table view: a name and a ``list_runs`` query, shared in the project.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "created_by": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "experiment_id": "exp_01jaf3f1g2h3j4k5m6n7p8q9r0",
            "id": "rv_01jaf3g1h2j3k4m5n6p7q8r9s0",
            "name": "best adstock fits",
            "query": {
              "columns": [
                "metric.rmse",
                "metric.loss{split=val}.min",
                "param.settings.adstock.l_max"
              ],
              "experiment_id": "exp_01jaf3f1g2h3j4k5m6n7p8q9r0",
              "filters": [
                "metric.rmse < 15",
                "param.settings.adstock.l_max >= 4"
              ],
              "kind": "fit",
              "order_by": "metric.rmse"
            },
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "experiment_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The experiment the view belongs to",
            "title": "Experiment Id"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/RunViewQuery"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "query",
          "created_at",
          "updated_at"
        ],
        "title": "RunView",
        "type": "object"
      },
      "RunViewCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/run-views``: names are unique per project and experiment (case is ignored).",
        "examples": [
          {
            "experiment_id": "exp_01jaf3f1g2h3j4k5m6n7p8q9r0",
            "name": "best adstock fits",
            "query": {
              "columns": [
                "metric.rmse",
                "metric.loss{split=val}.min",
                "param.settings.adstock.l_max"
              ],
              "experiment_id": "exp_01jaf3f1g2h3j4k5m6n7p8q9r0",
              "filters": [
                "metric.rmse < 15",
                "param.settings.adstock.l_max >= 4"
              ],
              "kind": "fit",
              "order_by": "metric.rmse"
            }
          }
        ],
        "properties": {
          "experiment_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Experiment Id"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "query": {
            "$ref": "#/components/schemas/RunViewQuery"
          }
        },
        "required": [
          "name",
          "query"
        ],
        "title": "RunViewCreate",
        "type": "object"
      },
      "RunViewPatch": {
        "additionalProperties": false,
        "description": "Change the name or the query of a saved view.",
        "examples": [
          {
            "name": "best fits"
          },
          {
            "query": {
              "order_by": "-metric.r2"
            }
          }
        ],
        "properties": {
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "query": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RunViewQuery"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "RunViewPatch",
        "type": "object"
      },
      "RunViewQuery": {
        "additionalProperties": false,
        "description": "The ``list_runs`` query of a saved view; every filter, order and column is parsed with\nthe run-search grammar of :mod:`mapi_spec.tracking` at validation.",
        "examples": [
          {
            "columns": [
              "metric.rmse"
            ],
            "filters": [
              "metric.rmse < 15"
            ],
            "kind": "fit",
            "order_by": "metric.rmse"
          },
          {
            "state": "succeeded",
            "tags": [
              "team:growth",
              "candidate"
            ]
          }
        ],
        "properties": {
          "columns": {
            "items": {
              "type": "string"
            },
            "maxItems": 16,
            "title": "Columns",
            "type": "array"
          },
          "experiment_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Experiment Id"
          },
          "filters": {
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "title": "Filters",
            "type": "array"
          },
          "kind": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RunKind"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "order_by": {
            "anyOf": [
              {
                "maxLength": 512,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Order By"
          },
          "parent_run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Run Id"
          },
          "spec_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spec Id"
          },
          "state": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RunState"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "maxItems": 16,
            "title": "Tags",
            "type": "array"
          }
        },
        "title": "RunViewQuery",
        "type": "object"
      },
      "RunnerPhase": {
        "description": "Coarse phase reported by the runner (drives progress text in the UI).",
        "enum": [
          "bootstrap",
          "load_inputs",
          "validate",
          "preprocess",
          "fit",
          "sample",
          "score",
          "evaluate",
          "derive",
          "plots",
          "upload",
          "done"
        ],
        "title": "RunnerPhase",
        "type": "string"
      },
      "SavedPlot": {
        "description": "A saved plot. ``spec`` is the sanitized PlotSpec (on ``GET /v1/plots/{plot_id}``;\nomitted in lists). ``embeddable`` is :func:`embeddable` of this plot.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "created_by": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "embeddable": true,
            "id": "plt_01jaf3n1p2q3r4s5t6v7w8x9y0",
            "kind": "vega-lite",
            "project_id": "growth",
            "provenance": "recipe",
            "recipe": "mmm.response_curves@1.0.0",
            "source": {
              "model_id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
              "plot_id": "mmm.response_curves",
              "version": 3
            },
            "source_kind": "model_plot",
            "tenant_id": "acme",
            "title": "EU response curves (v3)",
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "embeddable": {
            "title": "Embeddable",
            "type": "boolean"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "vega-lite",
              "plotly"
            ],
            "title": "Kind",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "provenance": {
            "enum": [
              "recipe",
              "plugin",
              "author"
            ],
            "title": "Provenance",
            "type": "string"
          },
          "recipe": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "provenance.recipe, if any",
            "title": "Recipe"
          },
          "source": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlotRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_kind": {
            "enum": [
              "model_plot",
              "spec"
            ],
            "title": "Source Kind",
            "type": "string"
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PlotSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "title",
          "kind",
          "source_kind",
          "provenance",
          "embeddable",
          "created_at",
          "updated_at"
        ],
        "title": "SavedPlot",
        "type": "object"
      },
      "SavedPlotCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/plots``: exactly one of ``source`` (a model version's plot) or ``spec``\n(a user-authored plot, sanitized first; never embeddable).",
        "examples": [
          {
            "source": {
              "model_id": "mdl_01jaf3c1d2e3f4g5h6j7k8m9n0",
              "plot_id": "mmm.response_curves",
              "version": 3
            },
            "title": "EU response curves (v3)"
          }
        ],
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "source": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelPlotRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "spec": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PlotSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "title": {
            "maxLength": 300,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "title": "SavedPlotCreate",
        "type": "object"
      },
      "ScheduleCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/workflows/{workflow_id}/schedules``: run on a cron schedule.",
        "examples": [
          {
            "cron": "0 6 * * 1",
            "description": "Every Monday at 06:00",
            "inputs": {
              "data": "dataset://growth/weekly_sales@latest"
            },
            "timezone": "Europe/Berlin"
          }
        ],
        "properties": {
          "active": {
            "default": true,
            "title": "Active",
            "type": "boolean"
          },
          "cron": {
            "examples": [
              "0 6 * * 1"
            ],
            "maxLength": 200,
            "title": "Cron",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "inputs": {
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 16,
            "title": "Inputs",
            "type": "object"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "maxProperties": 64,
            "title": "Params",
            "type": "object"
          },
          "revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pin a revision (default: latest)",
            "title": "Revision"
          },
          "timezone": {
            "default": "UTC",
            "examples": [
              "Europe/Berlin"
            ],
            "maxLength": 64,
            "title": "Timezone",
            "type": "string"
          }
        },
        "required": [
          "cron"
        ],
        "title": "ScheduleCreate",
        "type": "object"
      },
      "ScheduleUpdate": {
        "additionalProperties": false,
        "description": "``PATCH /v1/workflows/{workflow_id}/schedules/{schedule_id}``.",
        "examples": [
          {
            "active": false
          },
          {
            "cron": "0 7 * * 1-5"
          }
        ],
        "properties": {
          "active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Active"
          },
          "cron": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cron"
          },
          "inputs": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Inputs"
          },
          "params": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Params"
          },
          "revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revision"
          },
          "timezone": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timezone"
          }
        },
        "title": "ScheduleUpdate",
        "type": "object"
      },
      "ScoreCall": {
        "additionalProperties": false,
        "description": "Body of ``POST /v1/models/{model_id}/versions/{version}:score``.\n\nSend ``Prefer: wait=N`` (N ≤ 60) to wait for the result: the response is 200 with\noutputs if the run finished in time, else 202 with the run (poll it or follow its SSE).\n``inline`` carries ``data``/``scenario`` typed in instead of named as datasets; the\nrequest then names neither.",
        "examples": [
          {
            "request": {
              "apiVersion": "mapi/v1",
              "horizon": {
                "dim": "time",
                "periods": 8
              },
              "kind": "ScoreRequest",
              "mode": "forecast",
              "model": "model://default/eu-geo-mmm@v1",
              "output": {
                "kind": "expected",
                "summary": [
                  "mean",
                  "hdi_90"
                ]
              }
            }
          }
        ],
        "properties": {
          "inline": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ScoreInline"
              },
              {
                "type": "null"
              }
            ]
          },
          "labels": {
            "maxProperties": 64,
            "patternProperties": {
              "^[a-z0-9]([a-z0-9_.\\-/]{0,62})$": {
                "maxLength": 63,
                "pattern": "^[A-Za-z0-9_.\\-]*$",
                "type": "string"
              }
            },
            "title": "Labels",
            "type": "object"
          },
          "request": {
            "$ref": "#/components/schemas/ScoreRequest"
          },
          "resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "timeout": {
            "anyOf": [
              {
                "description": "Duration such as '45m', '1h30m' or '90s'.",
                "examples": [
                  "45m",
                  "1h30m"
                ],
                "pattern": "^(?=.)(\\d+h)?(\\d+m)?(\\d+s)?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timeout"
          }
        },
        "required": [
          "request"
        ],
        "title": "ScoreCall",
        "type": "object"
      },
      "ScoreCallResult": {
        "description": "``done`` with output links (200), or the still-running run (202). ``summary`` is the\nrequested summary (mean and HDI by default) inline, once the run succeeded.",
        "examples": [
          {
            "done": true,
            "outputs": [
              {
                "content_type": "application/zip",
                "crc32c": "4waSgw==",
                "expires_at": "2026-10-15T09:45:00Z",
                "generation": 7,
                "name": "bundle.zarr.zip",
                "size": 2097152,
                "url": "http://127.0.0.1:4443/download/storage/v1/b/mapi-local-bundles/o/t%2Fdefault%2Fmodels%2Fmdl_01%2F1%2Fbundle.zarr.zip?generation=7&X-Goog-Signature=…"
              }
            ],
            "run": {
              "attempt": 1,
              "cost": {
                "estimated": true
              },
              "created_at": "2026-10-15T09:30:00Z",
              "executor": "local-process",
              "id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
              "kind": "score",
              "name": "weekly sales, adstock 4",
              "project_id": "default",
              "queued_at": "2026-10-15T09:30:00Z",
              "resource_class": "M",
              "spec_hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
              "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
              "spec_revision": 2,
              "started_at": "2026-10-15T09:30:05Z",
              "state": "succeeded",
              "tags": {
                "stage": "candidate",
                "team": "growth"
              },
              "tenant_id": "default",
              "timeout": "45m",
              "updated_at": "2026-10-15T09:31:00Z"
            }
          }
        ],
        "properties": {
          "done": {
            "title": "Done",
            "type": "boolean"
          },
          "outputs": {
            "items": {
              "$ref": "#/components/schemas/ArtifactLink"
            },
            "title": "Outputs",
            "type": "array"
          },
          "run": {
            "$ref": "#/components/schemas/Run"
          },
          "summary": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ScoreSummary"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "done",
          "run"
        ],
        "title": "ScoreCallResult",
        "type": "object"
      },
      "ScoreInline": {
        "additionalProperties": false,
        "description": "Values typed in rather than uploaded: small XrJSON datasets (up to 5 MB each) under\nthe spec's canonical names, checked against the version's input contract\n(``GET …/inputs``) and stored as run inputs, as an endpoint's inline payloads are.",
        "examples": [
          {
            "data": {
              "coords": {
                "market": {
                  "data": [
                    "de"
                  ],
                  "dims": [
                    "market"
                  ]
                },
                "time": {
                  "data": [
                    "2026-01-04",
                    "2026-01-11"
                  ],
                  "dims": [
                    "time"
                  ]
                }
              },
              "data_vars": {
                "spend": {
                  "data": [
                    [
                      1200.0,
                      1350.0
                    ]
                  ],
                  "dims": [
                    "market",
                    "time"
                  ]
                }
              }
            }
          }
        ],
        "properties": {
          "data": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/XrJsonDataset"
              },
              {
                "type": "null"
              }
            ]
          },
          "scenario": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/XrJsonDataset"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "ScoreInline",
        "type": "object"
      },
      "ScorePolicy": {
        "description": "Which side-table version is used at score time.",
        "enum": [
          "pinned",
          "latest",
          "supplied"
        ],
        "title": "ScorePolicy",
        "type": "string"
      },
      "ScoreRequest": {
        "additionalProperties": false,
        "description": "Score a fitted model with replayed preprocessing.",
        "properties": {
          "apiVersion": {
            "const": "mapi/v1",
            "title": "Apiversion",
            "type": "string"
          },
          "data": {
            "anyOf": [
              {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data"
          },
          "future_covariates": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FutureCovariates"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3: how forecasts get future covariates (default: supplied)"
          },
          "horizon": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Horizon"
              },
              {
                "type": "null"
              }
            ]
          },
          "inputs_stage": {
            "default": "raw",
            "pattern": "^[a-z_][a-z0-9_]{0,62}$",
            "title": "Inputs Stage",
            "type": "string"
          },
          "interventions": {
            "items": {
              "$ref": "#/components/schemas/Intervention"
            },
            "maxItems": 256,
            "title": "Interventions",
            "type": "array"
          },
          "kind": {
            "const": "ScoreRequest",
            "title": "Kind",
            "type": "string"
          },
          "mode": {
            "default": "predict",
            "enum": [
              "predict",
              "forecast",
              "counterfactual",
              "simulate",
              "filter",
              "evaluate"
            ],
            "title": "Mode",
            "type": "string"
          },
          "model": {
            "description": "endpoint://project/alias or model://project/name@vN",
            "pattern": "(?:^endpoint://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)$)|(?:^model://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)@(latest|v\\d{1,9}|\\d{1,9})$)",
            "title": "Model",
            "type": "string"
          },
          "output": {
            "$ref": "#/components/schemas/OutputSelector"
          },
          "scenario": {
            "anyOf": [
              {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scenario"
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          },
          "select": {
            "maxProperties": 64,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                },
                "type": "array"
              }
            },
            "title": "Select",
            "type": "object"
          },
          "side_tables": {
            "maxProperties": 32,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "description": "Dataset reference dataset://project/name@version",
                "examples": [
                  "dataset://growth/eu_media_daily@latest"
                ],
                "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
                "type": "string"
              }
            },
            "title": "Side Tables",
            "type": "object"
          }
        },
        "required": [
          "apiVersion",
          "kind",
          "model"
        ],
        "title": "ScoreRequest",
        "type": "object"
      },
      "ScoreSummary": {
        "description": "The requested summary of a score run as plain tables (``summary.json``), inlined in\n:class:`ScoreCallResult` so spreadsheets, BI tools and curl callers get numbers without\nzarr or Arrow. ``truncated``: more than :data:`SCORE_SUMMARY_MAX_CELLS` cells (use the\n``score.zarr.zip`` output for everything). ``conditioning`` (forecasts): what the\nforecast was conditioned on - the end of the fitted history and the actuals the request\nsupplied (:mod:`mapi_spec.actuals`); ``actuals`` holds those values next to the\npredictions they compare with.",
        "examples": [
          {
            "tables": [
              {
                "columns": [
                  "geo",
                  "time",
                  "mean",
                  "hdi_90_lower",
                  "hdi_90_upper"
                ],
                "rows": [
                  [
                    "de",
                    "2026-01-05",
                    1520.4,
                    1402.1,
                    1633.9
                  ]
                ],
                "variable": "revenue"
              }
            ],
            "truncated": false
          },
          {
            "conditioning": {
              "actuals_through": "1961-03-01",
              "conditioned": true,
              "dim": "t",
              "fit_end": "1960-12-01",
              "horizon_source": "horizon",
              "message": "Forecast updated with 3 actuals (1961-01-01 to 1961-03-01) after the fitted history, which ends 1960-12-01; the model's parameters were not re-estimated. 8 periods forecast from 1961-04-01 to 1961-11-01.",
              "n_actuals": 3,
              "n_series": 1,
              "parameters": "fitted",
              "periods": 8,
              "revised": 0,
              "series": [
                {
                  "actuals_through": "1961-03-01",
                  "first_actual": "1961-01-01",
                  "forecast_from": "1961-04-01",
                  "forecast_to": "1961-11-01",
                  "missing": 0,
                  "n_actuals": 3,
                  "n_forecast": 8,
                  "origin": "1961-03-01",
                  "revised": 0,
                  "series": {}
                }
              ],
              "series_conditioned": 1,
              "truncated": false
            },
            "tables": [
              {
                "columns": [
                  "t",
                  "median",
                  "q5",
                  "q95"
                ],
                "rows": [
                  [
                    "1961-01-01",
                    447.2,
                    424.9,
                    469.5
                  ],
                  [
                    "1961-04-01",
                    461.8,
                    431.0,
                    492.6
                  ]
                ],
                "variable": "y_hat"
              }
            ],
            "truncated": false
          }
        ],
        "properties": {
          "actuals": {
            "description": "Forecasts with actuals: the actuals the request supplied, as tables named after the prediction variable they compare with (its coordinate columns, then `actual`), in the output's names and original units. Predictions on those periods are one-step-ahead: what the model expected before seeing each actual",
            "items": {
              "$ref": "#/components/schemas/ScoreSummaryTable"
            },
            "maxItems": 16,
            "title": "Actuals",
            "type": "array"
          },
          "conditioning": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ForecastConditioning"
              },
              {
                "type": "null"
              }
            ]
          },
          "tables": {
            "items": {
              "$ref": "#/components/schemas/ScoreSummaryTable"
            },
            "maxItems": 1000,
            "title": "Tables",
            "type": "array"
          },
          "truncated": {
            "default": false,
            "title": "Truncated",
            "type": "boolean"
          }
        },
        "title": "ScoreSummary",
        "type": "object"
      },
      "ScoreSummaryTable": {
        "description": "One output variable's summary as a table: the coordinate columns (one per dim), then\none column per statistic (``mean``, ``hdi_90_lower``, ...). Dates are ISO text.\n``period``: the variable is a circular output (``OutputDecl.circular``), summarised on the\ncircle (see the field). ``dims`` and ``time_dim`` say which columns are coordinates and\nwhich one is time; a server that predates them leaves both out. ``plots``: the recipe ids\nof the run's rendered plots (``plots.json``) that draw this variable, so a client can show\nthem next to the table.",
        "examples": [
          {
            "columns": [
              "geo",
              "time",
              "mean",
              "hdi_90_lower",
              "hdi_90_upper"
            ],
            "dims": [
              "geo",
              "time"
            ],
            "rows": [
              [
                "de",
                "2026-01-05",
                1520.4,
                1402.1,
                1633.9
              ]
            ],
            "time_dim": "time",
            "variable": "revenue"
          }
        ],
        "properties": {
          "columns": {
            "items": {
              "type": "string"
            },
            "maxItems": 256,
            "title": "Columns",
            "type": "array"
          },
          "dims": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "maxItems": 64,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "The coordinate columns (the leading columns); the rest are statistics",
            "title": "Dims"
          },
          "period": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Set for a circular output (an angle that wraps at one turn, in the output's units): the statistics are on the circle. `mean` is the circular mean, the intervals are centred on it, and every value is in [0, period). An interval with lower > upper crosses the seam (from 350 to 10 degrees)",
            "title": "Period"
          },
          "plots": {
            "anyOf": [
              {
                "items": {
                  "pattern": "^[A-Za-z0-9_.\\-]{1,128}$",
                  "type": "string"
                },
                "maxItems": 16,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Recipe ids of the run's plots that draw this output (sci.area_map, core.roc_pr, ...)",
            "title": "Plots"
          },
          "rows": {
            "items": {
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "type": "array"
            },
            "title": "Rows",
            "type": "array"
          },
          "time_dim": {
            "anyOf": [
              {
                "maxLength": 256,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The dim that is time, when there is one",
            "title": "Time Dim"
          },
          "variable": {
            "maxLength": 256,
            "title": "Variable",
            "type": "string"
          }
        },
        "required": [
          "variable",
          "columns",
          "rows"
        ],
        "title": "ScoreSummaryTable",
        "type": "object"
      },
      "Scorecard": {
        "description": "Sanity scorecard: convergence, holdout error and plausibility checks rolled up.",
        "examples": [
          {
            "items": [
              {
                "code": "RHAT_OK",
                "message_plain": "All chains got the same answer.",
                "metric": "r_hat_max",
                "status": "pass",
                "threshold": 1.01,
                "title": "Chains agree",
                "value": 1.004
              },
              {
                "code": "HOLDOUT_MAPE",
                "message_plain": "The forecast error on the last 8 weeks was 14%.",
                "metric": "mape",
                "status": "warn",
                "suggested_action": "Add holidays, or look at the data for the last weeks.",
                "threshold": 0.1,
                "title": "Holdout error",
                "value": 0.14
              }
            ],
            "overall": "warn"
          }
        ],
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ScorecardItem"
            },
            "title": "Items",
            "type": "array"
          },
          "overall": {
            "enum": [
              "pass",
              "warn",
              "fail"
            ],
            "title": "Overall",
            "type": "string"
          },
          "skipped": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "M3: checks that could not run, with the reason (check id -> text)",
            "maxProperties": 64,
            "title": "Skipped",
            "type": "object"
          }
        },
        "required": [
          "overall"
        ],
        "title": "Scorecard",
        "type": "object"
      },
      "ScorecardItem": {
        "examples": [
          {
            "code": "RHAT_OK",
            "message_plain": "All chains got the same answer.",
            "metric": "r_hat_max",
            "status": "pass",
            "threshold": 1.01,
            "title": "Chains agree",
            "value": 1.004
          },
          {
            "category": "holdout",
            "check": "holdout.mape",
            "code": "HOLDOUT_MAPE",
            "docs_anchor": "check-holdout-mape",
            "message_plain": "The forecast error on the holdout periods was 14%.",
            "metric": "mape",
            "status": "warn",
            "suggested_action": "Look for gaps or one-time events in the last weeks of data.",
            "threshold": 0.1,
            "title": "Holdout error",
            "value": 0.14
          }
        ],
        "properties": {
          "category": {
            "anyOf": [
              {
                "enum": [
                  "convergence",
                  "holdout",
                  "plausibility",
                  "data"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3: the check's category",
            "title": "Category"
          },
          "check": {
            "anyOf": [
              {
                "pattern": "^[a-z]+\\.[a-z0-9_]{1,63}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3: the stable check id (SCORECARD_CHECKS), e.g. holdout.mape",
            "title": "Check"
          },
          "code": {
            "pattern": "^[A-Z][A-Z0-9_]{1,63}$",
            "title": "Code",
            "type": "string"
          },
          "docs_anchor": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9][a-z0-9-]{0,99}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3: anchor on the scorecard docs page that explains the check",
            "title": "Docs Anchor"
          },
          "message_expert": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message Expert"
          },
          "message_plain": {
            "maxLength": 2000,
            "title": "Message Plain",
            "type": "string"
          },
          "metric": {
            "anyOf": [
              {
                "pattern": "^[a-z][a-z0-9_]{0,63}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metric"
          },
          "status": {
            "enum": [
              "pass",
              "warn",
              "fail"
            ],
            "title": "Status",
            "type": "string"
          },
          "suggested_action": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Suggested Action"
          },
          "threshold": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold"
          },
          "title": {
            "maxLength": 200,
            "title": "Title",
            "type": "string"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value"
          }
        },
        "required": [
          "code",
          "status",
          "title",
          "message_plain"
        ],
        "title": "ScorecardItem",
        "type": "object"
      },
      "SecurityProbeRow": {
        "description": "One probe of a security-suite run (``mapi-security --json``).",
        "examples": [
          {
            "category": "isolation",
            "outcome": "blocked",
            "probe_id": "dns_egress"
          }
        ],
        "properties": {
          "acceptable": {
            "items": {
              "type": "string"
            },
            "title": "Acceptable",
            "type": "array"
          },
          "category": {
            "anyOf": [
              {
                "maxLength": 32,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "detail": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          },
          "outcome": {
            "enum": [
              "allowed",
              "blocked",
              "error",
              "skipped"
            ],
            "title": "Outcome",
            "type": "string"
          },
          "probe_id": {
            "maxLength": 64,
            "title": "Probe Id",
            "type": "string"
          },
          "unexpected": {
            "default": false,
            "title": "Unexpected",
            "type": "boolean"
          }
        },
        "required": [
          "probe_id",
          "outcome"
        ],
        "title": "SecurityProbeRow",
        "type": "object"
      },
      "SecuritySuiteReport": {
        "description": "A security-suite run against one executor: the JSON ``mapi-security --json`` prints.",
        "examples": [
          {
            "executor": "cloudrun-jobs",
            "isolation": "microvm",
            "ok": true,
            "rows": [
              {
                "category": "isolation",
                "outcome": "blocked",
                "probe_id": "http_egress"
              },
              {
                "category": "isolation",
                "outcome": "blocked",
                "probe_id": "dns_egress"
              },
              {
                "category": "isolation",
                "outcome": "blocked",
                "probe_id": "metadata_token"
              }
            ],
            "started_at": "2026-10-15T02:30:00Z",
            "unexpected": []
          }
        ],
        "properties": {
          "executor": {
            "pattern": "^[a-z][a-z0-9-]{0,63}$",
            "title": "Executor",
            "type": "string"
          },
          "isolation": {
            "enum": [
              "none",
              "process",
              "gvisor",
              "microvm",
              "dedicated_vm"
            ],
            "title": "Isolation",
            "type": "string"
          },
          "ok": {
            "title": "Ok",
            "type": "boolean"
          },
          "rows": {
            "items": {
              "$ref": "#/components/schemas/SecurityProbeRow"
            },
            "maxItems": 500,
            "title": "Rows",
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "unexpected": {
            "items": {
              "type": "string"
            },
            "title": "Unexpected",
            "type": "array"
          }
        },
        "required": [
          "executor",
          "isolation",
          "ok"
        ],
        "title": "SecuritySuiteReport",
        "type": "object"
      },
      "SeriesConditioning": {
        "description": "What one series' forecast was conditioned on.\n\n``series`` holds the series' labels on the target's other dims (empty for a single\nseries). ``origin`` is the last period the forecast starts from: the last actual, or the\nend of the fitted history when the series has none.",
        "examples": [
          {
            "actuals_through": "1961-03-01",
            "first_actual": "1961-01-01",
            "forecast_from": "1961-04-01",
            "forecast_to": "1961-11-01",
            "missing": 0,
            "n_actuals": 3,
            "n_forecast": 8,
            "origin": "1961-03-01",
            "revised": 0,
            "series": {}
          }
        ],
        "properties": {
          "actuals_through": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "The last supplied actual",
            "title": "Actuals Through"
          },
          "first_actual": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "First Actual"
          },
          "forecast_from": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forecast From"
          },
          "forecast_to": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Forecast To"
          },
          "missing": {
            "default": 0,
            "description": "Empty periods between the fitted history and the last actual, filtered as missing observations (only models that accept missing targets)",
            "minimum": 0.0,
            "title": "Missing",
            "type": "integer"
          },
          "n_actuals": {
            "description": "Periods with a supplied actual",
            "minimum": 0.0,
            "title": "N Actuals",
            "type": "integer"
          },
          "n_forecast": {
            "default": 0,
            "minimum": 0.0,
            "title": "N Forecast",
            "type": "integer"
          },
          "origin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              }
            ],
            "title": "Origin"
          },
          "revised": {
            "default": 0,
            "description": "Actuals inside the fitted range: they replaced the fitted values",
            "minimum": 0.0,
            "title": "Revised",
            "type": "integer"
          },
          "series": {
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "boolean"
                  }
                ]
              }
            },
            "title": "Series",
            "type": "object"
          }
        },
        "required": [
          "n_actuals",
          "origin"
        ],
        "title": "SeriesConditioning",
        "type": "object"
      },
      "ServicePrincipal": {
        "additionalProperties": false,
        "description": "An internal platform component (bypasses RLS through its own database role).",
        "properties": {
          "id": {
            "pattern": "^svc_[a-z][a-z0-9-]{1,40}$",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "const": "service",
            "default": "service",
            "title": "Kind",
            "type": "string"
          },
          "service": {
            "$ref": "#/components/schemas/InternalService"
          }
        },
        "required": [
          "id",
          "service"
        ],
        "title": "ServicePrincipal",
        "type": "object"
      },
      "SessionInfo": {
        "description": "``GET /auth/session``: is the browser signed in, as whom, until when.",
        "examples": [
          {
            "authenticated": true,
            "expires_at": "2026-10-15T21:30:00Z",
            "login_url": "/auth/login",
            "operator": false,
            "principal": {
              "email": "ana@acme.example",
              "email_verified": true,
              "id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
              "issuer": "https://accounts.google.com",
              "kind": "user",
              "name": "Ana Analyst",
              "subject": "110169484474386276334"
            }
          },
          {
            "authenticated": false,
            "login_url": "/auth/login"
          }
        ],
        "properties": {
          "authenticated": {
            "title": "Authenticated",
            "type": "boolean"
          },
          "expires_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "login_url": {
            "default": "/auth/login",
            "description": "Where to send the browser to sign in",
            "title": "Login Url",
            "type": "string"
          },
          "operator": {
            "default": false,
            "title": "Operator",
            "type": "boolean"
          },
          "principal": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserPrincipal"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "authenticated"
        ],
        "title": "SessionInfo",
        "type": "object"
      },
      "Severity": {
        "description": "How bad an :class:`Issue` is. Only ``error`` blocks submission.",
        "enum": [
          "info",
          "warning",
          "error"
        ],
        "title": "Severity",
        "type": "string"
      },
      "ShareBelief": {
        "additionalProperties": false,
        "description": "A share range (for example of the baseline: KPI that happens without any media).",
        "properties": {
          "credibility": {
            "default": 0.8,
            "description": "Probability that the true value lies inside the range (0.8 = 'I am 80% sure')",
            "maximum": 0.99,
            "minimum": 0.5,
            "title": "Credibility",
            "type": "number"
          },
          "share": {
            "maxItems": 2,
            "minItems": 2,
            "prefixItems": [
              {
                "type": "number"
              },
              {
                "type": "number"
              }
            ],
            "title": "Share",
            "type": "array"
          }
        },
        "required": [
          "share"
        ],
        "title": "ShareBelief",
        "type": "object"
      },
      "SignedPut": {
        "additionalProperties": false,
        "description": "A signed PUT URL for exactly one object name.\n\n``headers`` must be sent verbatim (they are part of the signature): typically\n``content-type``, ``x-goog-if-generation-match: 0`` (write-once) and\n``x-goog-content-length-range: 0,<max_bytes>``.",
        "examples": [
          {
            "expires_at": "2026-10-15T10:30:00Z",
            "headers": {
              "content-type": "application/json",
              "x-goog-content-length-range": "0,1048576",
              "x-goog-if-generation-match": "0"
            },
            "max_bytes": 1048576,
            "method": "PUT",
            "name": "t/default/runs/run_01jabc/a1/manifest.json",
            "url": "http://127.0.0.1:4443/upload/storage/v1/b/mapi-local-runs/o/t%2Fdefault%2Fruns%2Frun_01jabc%2Fa1%2Fmanifest.json?X-Goog-Signature=..."
          }
        ],
        "properties": {
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "headers": {
            "additionalProperties": {
              "type": "string"
            },
            "maxProperties": 32,
            "title": "Headers",
            "type": "object"
          },
          "max_bytes": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Bytes"
          },
          "method": {
            "const": "PUT",
            "default": "PUT",
            "title": "Method",
            "type": "string"
          },
          "name": {
            "maxLength": 1024,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "url": {
            "maxLength": 8192,
            "minLength": 8,
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "url",
          "name",
          "expires_at"
        ],
        "title": "SignedPut",
        "type": "object"
      },
      "SignupAccepted": {
        "description": "``202`` of ``POST /auth/signup``: identical for new and known addresses.",
        "examples": [
          {
            "expires_in_s": 86400,
            "status": "check_email"
          }
        ],
        "properties": {
          "expires_in_s": {
            "default": 86400,
            "title": "Expires In S",
            "type": "integer"
          },
          "status": {
            "const": "check_email",
            "default": "check_email",
            "title": "Status",
            "type": "string"
          }
        },
        "title": "SignupAccepted",
        "type": "object"
      },
      "SignupRequest": {
        "additionalProperties": false,
        "description": "``POST /auth/signup`` (public, rate-limited). ``organisation`` names the tenant.",
        "examples": [
          {
            "accepted_terms": true,
            "email": "ana@acme.example",
            "name": "Ana Analyst",
            "organisation": "Acme Retail",
            "terms_version": "2026-10"
          }
        ],
        "properties": {
          "accepted_terms": {
            "title": "Accepted Terms",
            "type": "boolean"
          },
          "challenge": {
            "anyOf": [
              {
                "maxLength": 4096,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "A bot-check token (e.g. Turnstile), if configured",
            "title": "Challenge"
          },
          "email": {
            "maxLength": 320,
            "pattern": "^[^@\\s]{1,64}@[^@\\s]{1,255}$",
            "title": "Email",
            "type": "string"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "pattern": "^[^\\x00-\\x1f\\x7f]+$",
            "title": "Name",
            "type": "string"
          },
          "organisation": {
            "anyOf": [
              {
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organisation"
          },
          "terms_version": {
            "default": "2026-10",
            "maxLength": 32,
            "title": "Terms Version",
            "type": "string"
          }
        },
        "required": [
          "email",
          "name",
          "accepted_terms"
        ],
        "title": "SignupRequest",
        "type": "object"
      },
      "SignupReview": {
        "description": "``GET /v1/admin/signups`` (operators): one sign-up and why it was flagged.\n\nClient addresses and browsers appear only as keyed digests (``ip_hash``,\n``device_hash``), never raw; e-mail addresses are shown to operators for the review.",
        "examples": [
          {
            "created_at": "2026-10-15T09:00:00Z",
            "email": "ana@acme.example",
            "email_domain": "acme.example",
            "expires_at": "2026-10-16T09:00:00Z",
            "flags": [
              "same_ip"
            ],
            "id": "sgn_01jaf3s1t2v3w4x5y6z7a8b9c0",
            "ip_hash": "3f7a0c9e1b2d4f6a8c0e2b4d6f8a0c2e",
            "name": "Ana Analyst",
            "organisation": "Acme Retail",
            "reasons_plain": [
              "Several workspaces were created from the same network address"
            ],
            "review": "flagged",
            "state": "verified",
            "tenant_id": "acme-retail",
            "verified_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "device_hash": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Device Hash"
          },
          "email": {
            "maxLength": 320,
            "title": "Email",
            "type": "string"
          },
          "email_domain": {
            "maxLength": 255,
            "title": "Email Domain",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "flags": {
            "items": {
              "type": "string"
            },
            "maxItems": 4,
            "title": "Flags",
            "type": "array"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "ip_hash": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ip Hash"
          },
          "name": {
            "maxLength": 200,
            "title": "Name",
            "type": "string"
          },
          "organisation": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organisation"
          },
          "reasons_plain": {
            "items": {
              "type": "string"
            },
            "maxItems": 4,
            "title": "Reasons Plain",
            "type": "array"
          },
          "review": {
            "$ref": "#/components/schemas/SignupReviewState",
            "default": "none"
          },
          "review_reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Review Reason"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "reviewed_by": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed By"
          },
          "state": {
            "$ref": "#/components/schemas/SignupState"
          },
          "tenant_id": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The tenant the verification created",
            "title": "Tenant Id"
          },
          "verified_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Verified At"
          }
        },
        "required": [
          "id",
          "email",
          "email_domain",
          "name",
          "state",
          "created_at",
          "expires_at"
        ],
        "title": "SignupReview",
        "type": "object"
      },
      "SignupReviewDecision": {
        "additionalProperties": false,
        "description": "``POST /v1/admin/signups/{signup_id}/review`` (operators; audited).\n\n``reject`` suspends the tenant the sign-up created; ``approve`` clears the flag (and\nreactivates a tenant an earlier rejection suspended).",
        "examples": [
          {
            "decision": "reject",
            "reason": "one of 14 tenants from one IP"
          }
        ],
        "properties": {
          "decision": {
            "enum": [
              "approve",
              "reject"
            ],
            "title": "Decision",
            "type": "string"
          },
          "reason": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "decision",
          "reason"
        ],
        "title": "SignupReviewDecision",
        "type": "object"
      },
      "SignupReviewState": {
        "description": "The operators' review of a sign-up (Sybil heuristics flag, operators decide).",
        "enum": [
          "none",
          "flagged",
          "approved",
          "rejected"
        ],
        "title": "SignupReviewState",
        "type": "string"
      },
      "SignupState": {
        "description": "Where one sign-up is: waiting for its e-mail link, done, or never completed.",
        "enum": [
          "pending",
          "verified",
          "expired"
        ],
        "title": "SignupState",
        "type": "string"
      },
      "Snippet": {
        "description": "Ready-to-run code. ``code`` is platform-generated; it embeds the example payload.",
        "examples": [
          {
            "code": "curl -sS -X POST 'https://api.example.com/v1/endpoints/geo-mmm-prod/score' \\\n  -H \"Authorization: Bearer $MAPI_TOKEN\" \\\n  ...",
            "language": "curl",
            "title": "curl"
          }
        ],
        "properties": {
          "code": {
            "maxLength": 200000,
            "title": "Code",
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/SnippetLanguage"
          },
          "requires": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What to install first",
            "title": "Requires"
          },
          "title": {
            "maxLength": 200,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "language",
          "title",
          "code"
        ],
        "title": "Snippet",
        "type": "object"
      },
      "SnippetLanguage": {
        "enum": [
          "python",
          "typescript",
          "curl",
          "r",
          "apps_script",
          "notebook"
        ],
        "title": "SnippetLanguage",
        "type": "string"
      },
      "SnippetSet": {
        "description": "``GET /v1/endpoints/{alias}/snippets`` (``?language=`` narrows it).",
        "examples": [
          {
            "alias": "geo-mmm-prod",
            "items": [
              {
                "code": "curl -sS -X POST 'https://api.example.com/v1/endpoints/geo-mmm-prod/score' \\\n  -H \"Authorization: Bearer $MAPI_TOKEN\" \\\n  ...",
                "language": "curl",
                "title": "curl"
              }
            ]
          }
        ],
        "properties": {
          "alias": {
            "title": "Alias",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/Snippet"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "alias"
        ],
        "title": "SnippetSet",
        "type": "object"
      },
      "SpecCreate": {
        "additionalProperties": false,
        "description": "Create a spec document with its first revision (YAML 1.2 or JSON text).",
        "examples": [
          {
            "message": "first draft",
            "yaml": "apiVersion: mapi/v1\nkind: ModelSpec\nmetadata: {name: eu-geo-mmm, project: default}\ndata:\n  dataset: dataset://default/eu_media_daily@latest\nmodel:\n  use: mmm.bayesian@^1.3\n"
          }
        ],
        "properties": {
          "message": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "yaml": {
            "maxLength": 262144,
            "minLength": 1,
            "title": "Yaml",
            "type": "string"
          }
        },
        "required": [
          "yaml"
        ],
        "title": "SpecCreate",
        "type": "object"
      },
      "SpecDiff": {
        "properties": {
          "changes": {
            "items": {
              "$ref": "#/components/schemas/DiffEntry"
            },
            "title": "Changes",
            "type": "array"
          },
          "from_hash": {
            "title": "From Hash",
            "type": "string"
          },
          "from_revision": {
            "title": "From Revision",
            "type": "integer"
          },
          "spec_id": {
            "title": "Spec Id",
            "type": "string"
          },
          "to_hash": {
            "title": "To Hash",
            "type": "string"
          },
          "to_revision": {
            "title": "To Revision",
            "type": "integer"
          }
        },
        "required": [
          "spec_id",
          "from_revision",
          "to_revision",
          "from_hash",
          "to_hash",
          "changes"
        ],
        "title": "SpecDiff",
        "type": "object"
      },
      "SpecDoc": {
        "description": "A named spec and its latest revision.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
            "kind": "ModelSpec",
            "latest_revision": 2,
            "name": "eu-geo-mmm",
            "project_id": "default",
            "ref": "spec://default/eu-geo-mmm",
            "tenant_id": "default",
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "ModelSpec",
              "ScoreRequest",
              "Sweep",
              "Backtest",
              "SBC",
              "Campaign"
            ],
            "title": "Kind",
            "type": "string"
          },
          "latest": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SpecRevision"
              },
              {
                "type": "null"
              }
            ]
          },
          "latest_revision": {
            "minimum": 1.0,
            "title": "Latest Revision",
            "type": "integer"
          },
          "name": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
            "title": "Name",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "ref": {
            "description": "spec://project/name",
            "title": "Ref",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "name",
          "kind",
          "ref",
          "latest_revision",
          "created_at",
          "updated_at"
        ],
        "title": "SpecDoc",
        "type": "object"
      },
      "SpecRevision": {
        "description": "One immutable, canonically hashed revision. ``issues`` holds its static validation.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "document": {
              "apiVersion": "mapi/v1",
              "kind": "ModelSpec"
            },
            "hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "issues": [],
            "kind": "ModelSpec",
            "parent_revision": 1,
            "project_id": "default",
            "ref": "spec://default/eu-geo-mmm@r2",
            "revision": 2,
            "spec_id": "spc_01jaf3b1c2d3e4f5g6h7j8k9m0",
            "tenant_id": "default",
            "valid": true,
            "yaml": "apiVersion: mapi/v1\nkind: ModelSpec\nmetadata: {name: eu-geo-mmm, project: default}\ndata:\n  dataset: dataset://default/eu_media_daily@latest\nmodel:\n  use: mmm.bayesian@^1.3\n"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "document": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Document",
            "type": "object"
          },
          "hash": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Hash",
            "type": "string"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "kind": {
            "enum": [
              "ModelSpec",
              "ScoreRequest",
              "Sweep",
              "Backtest",
              "SBC",
              "Campaign"
            ],
            "title": "Kind",
            "type": "string"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "parent_revision": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Revision"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "ref": {
            "description": "spec://project/name@rN",
            "title": "Ref",
            "type": "string"
          },
          "revision": {
            "minimum": 1.0,
            "title": "Revision",
            "type": "integer"
          },
          "spec_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Spec Id",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "valid": {
            "title": "Valid",
            "type": "boolean"
          },
          "yaml": {
            "title": "Yaml",
            "type": "string"
          }
        },
        "required": [
          "spec_id",
          "tenant_id",
          "project_id",
          "revision",
          "ref",
          "kind",
          "hash",
          "yaml",
          "document",
          "valid",
          "created_at"
        ],
        "title": "SpecRevision",
        "type": "object"
      },
      "SpecRevisionCreate": {
        "additionalProperties": false,
        "description": "Add an immutable revision. ``parent_revision`` guards against lost updates (409).",
        "examples": [
          {
            "message": "tune",
            "parent_revision": 1,
            "yaml": "apiVersion: mapi/v1\nkind: ModelSpec\nmetadata: {name: eu-geo-mmm, project: default}\ndata:\n  dataset: dataset://default/eu_media_daily@latest\nmodel:\n  use: mmm.bayesian@^1.3\n"
          }
        ],
        "properties": {
          "message": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "parent_revision": {
            "minimum": 1.0,
            "title": "Parent Revision",
            "type": "integer"
          },
          "yaml": {
            "maxLength": 262144,
            "minLength": 1,
            "title": "Yaml",
            "type": "string"
          }
        },
        "required": [
          "yaml",
          "parent_revision"
        ],
        "title": "SpecRevisionCreate",
        "type": "object"
      },
      "SpendGroup": {
        "additionalProperties": false,
        "description": "A portfolio constraint over several channels (shares of the total and/or money).",
        "properties": {
          "channels": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 64,
            "minItems": 1,
            "title": "Channels",
            "type": "array"
          },
          "max_share": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Share"
          },
          "max_spend": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Spend"
          },
          "min_share": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Share"
          },
          "min_spend": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Spend"
          },
          "name": {
            "maxLength": 64,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name",
          "channels"
        ],
        "title": "SpendGroup",
        "type": "object"
      },
      "StageSchema": {
        "description": "The data schema after one pipeline step (``raw`` = after binding, before any step).",
        "examples": [
          {
            "data_schema": {
              "dims": {
                "date": {
                  "freq": "D",
                  "kind": "time",
                  "policy": "extend"
                },
                "market": {
                  "kind": "categorical"
                }
              },
              "vars": {
                "revenue": {
                  "dims": [
                    "market",
                    "date"
                  ],
                  "dtype": "float64",
                  "role": "target"
                }
              }
            },
            "name": "weekly",
            "split": true
          }
        ],
        "properties": {
          "data_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DataSchema"
              },
              {
                "type": "null"
              }
            ],
            "description": "None when the effect is dynamic"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "split": {
            "default": false,
            "description": "The train/holdout split happens after this stage",
            "title": "Split",
            "type": "boolean"
          }
        },
        "required": [
          "name"
        ],
        "title": "StageSchema",
        "type": "object"
      },
      "StatePayload": {
        "additionalProperties": false,
        "description": "``state``: the runner entered a new phase.",
        "properties": {
          "message": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Message"
          },
          "phase": {
            "$ref": "#/components/schemas/RunnerPhase"
          }
        },
        "required": [
          "phase"
        ],
        "title": "StatePayload",
        "type": "object"
      },
      "StepCatalogEntry": {
        "additionalProperties": false,
        "description": "Everything static validation needs to know about one step version.\n\n``effect`` and ``context`` are JSON templates over the step's settings (see\n:mod:`mapi_spec.template`). ``var_params``/``dim_params`` name settings fields whose\nvalues are variable/dim names that must exist at the step's input stage, and\n``side_table_params`` name fields that refer to ``data.side_tables`` entries.",
        "properties": {
          "about": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/About"
              },
              {
                "type": "null"
              }
            ],
            "description": "M3.5: the plain-language About card (the catalog rule requires one)"
          },
          "context": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context"
          },
          "depends_on_target": {
            "default": false,
            "title": "Depends On Target",
            "type": "boolean"
          },
          "dim_params": {
            "items": {
              "type": "string"
            },
            "title": "Dim Params",
            "type": "array"
          },
          "effect": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Effect",
            "type": "object"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "invertible": {
            "default": false,
            "title": "Invertible",
            "type": "boolean"
          },
          "kind": {
            "$ref": "#/components/schemas/StepKind"
          },
          "provides": {
            "description": "Preprocessing a model may declare it owns (ModelManifest owns); such a step is rejected on the target/media variables of a model that owns it",
            "items": {
              "enum": [
                "scaling",
                "carryover"
              ],
              "type": "string"
            },
            "title": "Provides",
            "type": "array"
          },
          "settings_schema": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Settings Schema",
            "type": "object"
          },
          "side_table_params": {
            "items": {
              "type": "string"
            },
            "title": "Side Table Params",
            "type": "array"
          },
          "stateful": {
            "description": "Has a fitted State (fit on train only)",
            "title": "Stateful",
            "type": "boolean"
          },
          "summary": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "summary_plain": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary Plain"
          },
          "target_vars_param": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "If set, the step depends on the target only when this settings field lists a target-role variable",
            "title": "Target Vars Param"
          },
          "var_params": {
            "items": {
              "type": "string"
            },
            "title": "Var Params",
            "type": "array"
          },
          "version": {
            "title": "Version",
            "type": "string"
          },
          "yanked": {
            "default": false,
            "title": "Yanked",
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "version",
          "kind",
          "stateful"
        ],
        "title": "StepCatalogEntry",
        "type": "object"
      },
      "StepKind": {
        "description": "RESHAPE changes structure (not invertible past it); VALUE rescales; FEATURE adds.",
        "enum": [
          "reshape",
          "value",
          "feature"
        ],
        "title": "StepKind",
        "type": "string"
      },
      "StoreProgress": {
        "properties": {
          "detail": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          },
          "items_done": {
            "default": 0,
            "minimum": 0.0,
            "title": "Items Done",
            "type": "integer"
          },
          "items_total": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Items Total"
          },
          "state": {
            "enum": [
              "pending",
              "running",
              "done",
              "failed"
            ],
            "title": "State",
            "type": "string"
          },
          "store": {
            "enum": [
              "database",
              "object_store",
              "queue",
              "logs",
              "webhooks"
            ],
            "title": "Store",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "store",
          "state"
        ],
        "title": "StoreProgress",
        "type": "object"
      },
      "StratifiedSplit": {
        "additionalProperties": false,
        "description": "Hold out a random ``fraction`` of the rows along ``dim`` in each level of ``by`` (the\nclass label; v0.14). A level with one row stays in training.",
        "properties": {
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the split happens at (a step id or 'raw'); default: end of the stateless prefix",
            "title": "After Step"
          },
          "allow_leakage": {
            "default": false,
            "description": "Downgrade LEAKAGE_RISK to a warning (acknowledged)",
            "title": "Allow Leakage",
            "type": "boolean"
          },
          "by": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "By",
            "type": "string"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "fraction": {
            "exclusiveMaximum": 1.0,
            "exclusiveMinimum": 0.0,
            "title": "Fraction",
            "type": "number"
          },
          "kind": {
            "const": "stratified",
            "title": "Kind",
            "type": "string"
          },
          "seed": {
            "anyOf": [
              {
                "exclusiveMaximum": 4294967296.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Seed"
          }
        },
        "required": [
          "kind",
          "dim",
          "by",
          "fraction"
        ],
        "title": "StratifiedSplit",
        "type": "object"
      },
      "StructureHints": {
        "additionalProperties": false,
        "description": "Corrections to the structure the Data Explorer detects (each one overrides the rule\nfor that dim or variable only): the dims of an image (``y_dim``, ``x_dim``,\n``frame_dim``), the node dim of a network or tree, the time dim, and variables that are\nangles or times of day with their units (``{\"wind_from\": \"deg\"}``).",
        "properties": {
          "angle_vars": {
            "maxProperties": 64,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "enum": [
                  "deg",
                  "rad",
                  "h",
                  "d",
                  "month"
                ],
                "type": "string"
              }
            },
            "title": "Angle Vars",
            "type": "object"
          },
          "frame_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Dim"
          },
          "node_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Dim"
          },
          "time_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Time Dim"
          },
          "x_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "X Dim"
          },
          "y_dim": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Y Dim"
          }
        },
        "title": "StructureHints",
        "type": "object"
      },
      "TemplateCase": {
        "additionalProperties": false,
        "description": "Conditional fragment merged into the template when all ``when`` params match.",
        "properties": {
          "merge": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Merge",
            "type": "object"
          },
          "when": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "minProperties": 1,
            "title": "When",
            "type": "object"
          }
        },
        "required": [
          "when",
          "merge"
        ],
        "title": "TemplateCase",
        "type": "object"
      },
      "TemplateLookup": {
        "description": "A placeholder derived from an answer: ``map[answer]`` (e.g. frequency → season).",
        "properties": {
          "map": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Map",
            "type": "object"
          },
          "source": {
            "title": "Source",
            "type": "string"
          }
        },
        "required": [
          "source",
          "map"
        ],
        "title": "TemplateLookup",
        "type": "object"
      },
      "TemplateParam": {
        "additionalProperties": false,
        "description": "A settings value that a :class:`DataSchemaTemplate` depends on.",
        "properties": {
          "default": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "enum": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "maxItems": 256,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Enum"
          },
          "path": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Dotted path into the settings (defaults to the parameter name)",
            "title": "Path"
          },
          "required": {
            "default": false,
            "title": "Required",
            "type": "boolean"
          },
          "type": {
            "enum": [
              "string",
              "integer",
              "number",
              "boolean",
              "string_list",
              "integer_list"
            ],
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "title": "TemplateParam",
        "type": "object"
      },
      "Tenant": {
        "description": "The billing, isolation and quota boundary.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "data_residency": "eu",
            "id": "acme",
            "name": "Acme Retail",
            "status": "active",
            "trust_tier": "verified"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "data_residency": {
            "default": "us",
            "description": "A multi-region (eu, us, asia) or one cloud region (europe-west1)",
            "examples": [
              "eu",
              "us",
              "europe-west1"
            ],
            "pattern": "^(?:[a-z]{2,6}|[a-z]+-[a-z]+[0-9]{1,2})$",
            "title": "Data Residency",
            "type": "string"
          },
          "id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/TenantStatus",
            "default": "active"
          },
          "status_reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Reason"
          },
          "trust_tier": {
            "$ref": "#/components/schemas/TrustTier"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "name",
          "trust_tier",
          "created_at"
        ],
        "title": "Tenant",
        "type": "object"
      },
      "TenantAdminUpdate": {
        "additionalProperties": false,
        "description": "``PATCH /v1/admin/tenants/{tenant_id}`` (operators). Changing ``data_residency`` only\naffects where *new* runs are placed; moving stored data is a separate procedure.",
        "examples": [
          {
            "status": "suspended",
            "status_reason": "payment overdue"
          },
          {
            "trust_tier": "internal"
          }
        ],
        "properties": {
          "data_residency": {
            "anyOf": [
              {
                "description": "A multi-region (eu, us, asia) or one cloud region (europe-west1)",
                "examples": [
                  "eu",
                  "us",
                  "europe-west1"
                ],
                "pattern": "^(?:[a-z]{2,6}|[a-z]+-[a-z]+[0-9]{1,2})$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Residency"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TenantStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "status_reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Reason"
          },
          "trust_tier": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TrustTier"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "TenantAdminUpdate",
        "type": "object"
      },
      "TenantCost": {
        "description": "One tenant's ledger totals for the period (one row per currency).",
        "examples": [
          {
            "name": "Acme Corp",
            "tenant_id": "acme",
            "totals": {
              "amount_micros": 93600,
              "attempts": 3,
              "currency": "USD",
              "gib_seconds": 14400,
              "runs": 3,
              "vcpu_seconds": 3600
            },
            "trust_tier": "verified"
          }
        ],
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "totals": {
            "$ref": "#/components/schemas/CostTotals"
          },
          "trust_tier": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TrustTier"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "tenant_id",
          "totals"
        ],
        "title": "TenantCost",
        "type": "object"
      },
      "TenantCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/admin/tenants`` (operators). ``initial_admin_email`` is invited as tenant\nadmin; the invitation is claimed at first login with that verified e-mail.",
        "examples": [
          {
            "data_residency": "eu",
            "id": "acme",
            "initial_admin_email": "it@acme.example",
            "name": "Acme Retail",
            "trust_tier": "verified"
          }
        ],
        "properties": {
          "data_residency": {
            "default": "us",
            "description": "A multi-region (eu, us, asia) or one cloud region (europe-west1)",
            "examples": [
              "eu",
              "us",
              "europe-west1"
            ],
            "pattern": "^(?:[a-z]{2,6}|[a-z]+-[a-z]+[0-9]{1,2})$",
            "title": "Data Residency",
            "type": "string"
          },
          "id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Id",
            "type": "string"
          },
          "initial_admin_email": {
            "anyOf": [
              {
                "maxLength": 320,
                "pattern": "^[^@\\s]{1,64}@[^@\\s]{1,255}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initial Admin Email"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "trust_tier": {
            "$ref": "#/components/schemas/TrustTier",
            "default": "verified"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "TenantCreate",
        "type": "object"
      },
      "TenantDeletion": {
        "description": "A tenant deletion and its progress per store.",
        "examples": [
          {
            "id": "del_01jaf3q1r2s3t4v5w6x7y8z9a0",
            "purge_after": "2026-10-15T09:30:00Z",
            "requested_at": "2026-10-08T09:30:00Z",
            "requested_by": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
            "started_at": "2026-10-15T09:30:00Z",
            "state": "deleting",
            "stores": [
              {
                "items_done": 412,
                "items_total": 412,
                "state": "done",
                "store": "database"
              },
              {
                "items_done": 40,
                "items_total": 96,
                "state": "running",
                "store": "object_store"
              },
              {
                "items_done": 0,
                "items_total": 0,
                "state": "done",
                "store": "queue"
              },
              {
                "state": "pending",
                "store": "logs"
              },
              {
                "state": "pending",
                "store": "webhooks"
              }
            ],
            "tenant_id": "acme-retail"
          }
        ],
        "properties": {
          "cancelled_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cancelled At"
          },
          "completed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "purge_after": {
            "format": "date-time",
            "title": "Purge After",
            "type": "string"
          },
          "requested_at": {
            "format": "date-time",
            "title": "Requested At",
            "type": "string"
          },
          "requested_by": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requested By"
          },
          "retained": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Retained",
            "type": "object"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "state": {
            "$ref": "#/components/schemas/DeletionState"
          },
          "stores": {
            "items": {
              "$ref": "#/components/schemas/StoreProgress"
            },
            "title": "Stores",
            "type": "array"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "state",
          "requested_at",
          "purge_after"
        ],
        "title": "TenantDeletion",
        "type": "object"
      },
      "TenantDeletionRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/tenants/{tenant_id}/deletion``: ``confirm`` must repeat the tenant id.",
        "examples": [
          {
            "confirm": "acme-retail",
            "reason": "closing the account"
          }
        ],
        "properties": {
          "confirm": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Confirm",
            "type": "string"
          },
          "reason": {
            "anyOf": [
              {
                "maxLength": 1000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          }
        },
        "required": [
          "confirm"
        ],
        "title": "TenantDeletionRequest",
        "type": "object"
      },
      "TenantStatus": {
        "description": "``suspended`` tenants are read-only; ``deleting`` tenants are inaccessible.",
        "enum": [
          "active",
          "suspended",
          "deleting"
        ],
        "title": "TenantStatus",
        "type": "string"
      },
      "TenantUpdate": {
        "additionalProperties": false,
        "description": "``PATCH /v1/tenants/{tenant_id}`` (tenant admins): the display name only.",
        "examples": [
          {
            "name": "Acme Retail Group"
          }
        ],
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "TenantUpdate",
        "type": "object"
      },
      "TimeHoldoutSplit": {
        "additionalProperties": false,
        "description": "Hold out the end of an ordered dim: ``last`` periods, a ``fraction`` or ``after`` a coord.",
        "properties": {
          "after": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "After"
          },
          "after_step": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Stage the split happens at (a step id or 'raw'); default: end of the stateless prefix",
            "title": "After Step"
          },
          "allow_leakage": {
            "default": false,
            "description": "Downgrade LEAKAGE_RISK to a warning (acknowledged)",
            "title": "Allow Leakage",
            "type": "boolean"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "fraction": {
            "anyOf": [
              {
                "exclusiveMaximum": 1.0,
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fraction"
          },
          "kind": {
            "const": "time_holdout",
            "title": "Kind",
            "type": "string"
          },
          "last": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last"
          }
        },
        "required": [
          "kind",
          "dim"
        ],
        "title": "TimeHoldoutSplit",
        "type": "object"
      },
      "TokenCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/tokens``: mint a token for the caller in the selected project.\n\nThe token can never do more than its owner's role allows at the time of use. Limits are\noptional: ``None`` means the tenant's defaults apply (they always apply in addition).",
        "examples": [
          {
            "budget_period": "month",
            "expires_in_days": 30,
            "name": "budget-planner",
            "rate_limit_per_minute": 120,
            "scopes": [
              "score:geo-mmm-prod",
              "models:read"
            ],
            "vcpu_seconds_budget": 36000
          }
        ],
        "properties": {
          "budget_period": {
            "$ref": "#/components/schemas/BudgetPeriod",
            "default": "month"
          },
          "expires_in_days": {
            "default": 90,
            "maximum": 365.0,
            "minimum": 1.0,
            "title": "Expires In Days",
            "type": "integer"
          },
          "name": {
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[^\\x00-\\x1f\\x7f]+$",
            "title": "Name",
            "type": "string"
          },
          "rate_limit_per_minute": {
            "anyOf": [
              {
                "maximum": 100000.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Limit Per Minute"
          },
          "scopes": {
            "items": {
              "examples": [
                "models:read",
                "runs:create",
                "score:geo-mmm-prod"
              ],
              "maxLength": 140,
              "type": "string"
            },
            "maxItems": 32,
            "minItems": 1,
            "title": "Scopes",
            "type": "array"
          },
          "vcpu_seconds_budget": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vcpu Seconds Budget"
          }
        },
        "required": [
          "name",
          "scopes"
        ],
        "title": "TokenCreate",
        "type": "object"
      },
      "TokenCreated": {
        "description": "``201`` body of ``POST /v1/tokens``: the only time ``secret`` is ever returned.",
        "examples": [
          {
            "secret": "mapi_7k2m9q4x_0123456789abcdefghjkmnpqrstvwxyz072gj7d",
            "token": {
              "budget_period": "month",
              "created_at": "2026-10-15T09:30:00Z",
              "display": "mapi_7k2m9q4x_…",
              "expires_at": "2026-11-14T09:30:00Z",
              "id": "tok_01jaf3r1s2t3v4w5x6y7z8a9b0",
              "last_used_at": "2026-10-16T08:00:00Z",
              "name": "budget-planner",
              "owner_id": "usr_01jaf3a9b8c7d6e5f4g3h2j1k0",
              "prefix": "7k2m9q4x",
              "project_id": "growth",
              "rate_limit_per_minute": 120,
              "scopes": [
                "score:geo-mmm-prod",
                "models:read"
              ],
              "status": "active",
              "tenant_id": "acme",
              "vcpu_seconds_budget": 36000
            }
          }
        ],
        "properties": {
          "secret": {
            "description": "The full token. Store it now; it is not shown again.",
            "pattern": "^mapi_(?P<prefix>[0123456789abcdefghjkmnpqrstvwxyz]{8})_(?P<secret>[0123456789abcdefghjkmnpqrstvwxyz]{32})(?P<checksum>[0123456789abcdefghjkmnpqrstvwxyz]{7})$",
            "title": "Secret",
            "type": "string"
          },
          "token": {
            "$ref": "#/components/schemas/ApiToken"
          }
        },
        "required": [
          "token",
          "secret"
        ],
        "title": "TokenCreated",
        "type": "object"
      },
      "TokenPrincipal": {
        "additionalProperties": false,
        "description": "A request authenticated with an API token (acts as ``owner_id``, narrowed by scopes).",
        "properties": {
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "const": "token",
            "default": "token",
            "title": "Kind",
            "type": "string"
          },
          "owner_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Owner Id",
            "type": "string"
          },
          "owner_kind": {
            "default": "user",
            "enum": [
              "user",
              "service_account"
            ],
            "title": "Owner Kind",
            "type": "string"
          },
          "prefix": {
            "pattern": "^[0-9a-hjkmnp-tv-z]{8}$",
            "title": "Prefix",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "title": "Scopes",
            "type": "array"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "prefix",
          "owner_id",
          "tenant_id",
          "project_id",
          "scopes"
        ],
        "title": "TokenPrincipal",
        "type": "object"
      },
      "TokenStatus": {
        "enum": [
          "active",
          "expired",
          "revoked"
        ],
        "title": "TokenStatus",
        "type": "string"
      },
      "TreeSchema": {
        "additionalProperties": false,
        "description": "Schema of an ``xr.DataTree``: one :class:`~mapi_spec.schema.DataSchema` per node.\n\nEvery node's ancestors are present (an empty schema stands for a pure group), a\ndim a node shares with an ancestor has an equal spec (children align with inherited\ncoords), and no variable has the name of an ancestor's dim (the inherited coord would\nhide it).",
        "properties": {
          "nodes": {
            "maxProperties": 256,
            "minProperties": 1,
            "patternProperties": {
              "^/(?:[A-Za-z_][A-Za-z0-9_.\\-]{0,63}(?:/[A-Za-z_][A-Za-z0-9_.\\-]{0,63}){0,7})?$": {
                "$ref": "#/components/schemas/DataSchema"
              }
            },
            "title": "Nodes",
            "type": "object"
          }
        },
        "required": [
          "nodes"
        ],
        "title": "TreeSchema",
        "type": "object"
      },
      "TriggerCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/workflows/{workflow_id}/triggers``: run when a new version of a dataset\nis ready; the version is bound to workflow input ``input``.",
        "examples": [
          {
            "dataset": "dataset://growth/weekly_sales",
            "debounce_seconds": 600,
            "input": "data"
          }
        ],
        "properties": {
          "active": {
            "default": true,
            "title": "Active",
            "type": "boolean"
          },
          "dataset": {
            "description": "dataset://project/name (any version)",
            "examples": [
              "dataset://growth/eu_media_daily@latest"
            ],
            "pattern": "^dataset://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)(?:@(latest|v\\d{1,9}|\\d{1,9}|sha256:[0-9a-f]{64}))?$",
            "title": "Dataset",
            "type": "string"
          },
          "debounce_seconds": {
            "default": 300,
            "description": "Collapse versions arriving within this window",
            "maximum": 86400.0,
            "minimum": 0.0,
            "title": "Debounce Seconds",
            "type": "integer"
          },
          "event": {
            "const": "dataset.version.created",
            "default": "dataset.version.created",
            "title": "Event",
            "type": "string"
          },
          "input": {
            "description": "The workflow input the new version is bound to",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Input",
            "type": "string"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "maxProperties": 64,
            "title": "Params",
            "type": "object"
          },
          "revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revision"
          }
        },
        "required": [
          "dataset",
          "input"
        ],
        "title": "TriggerCreate",
        "type": "object"
      },
      "TrustTier": {
        "description": "How much the platform trusts a tenant's code and data (plan §2, §7, §9).",
        "enum": [
          "internal",
          "verified",
          "public",
          "self-hosted-trusted"
        ],
        "title": "TrustTier",
        "type": "string"
      },
      "TypicalRuntime": {
        "description": "Rough wall-clock time on typical data (``S`` resource class).",
        "enum": [
          "instant",
          "seconds",
          "minutes",
          "long"
        ],
        "title": "TypicalRuntime",
        "type": "string"
      },
      "UploadCreate": {
        "additionalProperties": false,
        "description": "Ask for a signed PUT URL into the quarantine bucket for one file.",
        "examples": [
          {
            "content_type": "text/csv",
            "filename": "eu_media_daily.csv",
            "size_bytes": 5242880
          }
        ],
        "properties": {
          "content_type": {
            "default": "application/octet-stream",
            "maxLength": 128,
            "title": "Content Type",
            "type": "string"
          },
          "filename": {
            "maxLength": 255,
            "minLength": 1,
            "pattern": "^[^/\\\\\\x00-\\x1f]+$",
            "title": "Filename",
            "type": "string"
          },
          "size_bytes": {
            "minimum": 1.0,
            "title": "Size Bytes",
            "type": "integer"
          }
        },
        "required": [
          "filename",
          "size_bytes"
        ],
        "title": "UploadCreate",
        "type": "object"
      },
      "UploadInspection": {
        "description": "What an ``inspect`` run found in an upload (``inspection.json``; M4): its groups and\narrays, so a raw HDF5 file can be mapped (:class:`Hdf5Mapping`) and a NetCDF/zarr file's\ngroups previewed before ingest.",
        "examples": [
          {
            "arrays": [
              {
                "attrs": {
                  "units": "counts"
                },
                "chunks": [
                  64,
                  64
                ],
                "dtype": "float32",
                "filters": [
                  "deflate",
                  "shuffle"
                ],
                "path": "/observations/image",
                "shape": [
                  64,
                  64
                ]
              },
              {
                "dtype": "float64",
                "path": "/psf/kernel",
                "shape": [
                  9,
                  9
                ]
              }
            ],
            "format": "hdf5",
            "groups": [
              "/",
              "/observations",
              "/psf"
            ],
            "size_bytes": 2097152,
            "truncated": false,
            "warnings": []
          }
        ],
        "properties": {
          "arrays": {
            "items": {
              "$ref": "#/components/schemas/InspectedArray"
            },
            "maxItems": 2000,
            "title": "Arrays",
            "type": "array"
          },
          "format": {
            "enum": [
              "csv",
              "parquet",
              "mff",
              "zarr_zip",
              "netcdf",
              "hdf5",
              "image_folder",
              "safetensors"
            ],
            "title": "Format",
            "type": "string"
          },
          "groups": {
            "items": {
              "maxLength": 1025,
              "type": "string"
            },
            "maxItems": 10000,
            "title": "Groups",
            "type": "array"
          },
          "size_bytes": {
            "minimum": 0.0,
            "title": "Size Bytes",
            "type": "integer"
          },
          "truncated": {
            "default": false,
            "title": "Truncated",
            "type": "boolean"
          },
          "warnings": {
            "items": {
              "maxLength": 2000,
              "type": "string"
            },
            "maxItems": 1000,
            "title": "Warnings",
            "type": "array"
          }
        },
        "required": [
          "format",
          "size_bytes"
        ],
        "title": "UploadInspection",
        "type": "object"
      },
      "UploadSession": {
        "description": "Where to PUT the file. ``upload.headers`` must be sent verbatim; the URL expires.",
        "examples": [
          {
            "content_type": "text/csv",
            "created_at": "2026-10-15T09:30:00Z",
            "dataset_id": "ds_01jaf3a1b2c3d4e5f6g7h8j9k0",
            "expires_at": "2026-10-15T10:30:00Z",
            "filename": "eu_media_daily.csv",
            "id": "upl_01jaf3d1e2f3g4h5j6k7m8n9p0",
            "project_id": "default",
            "size_bytes": 5242880,
            "status": "pending",
            "tenant_id": "default",
            "upload": {
              "expires_at": "2026-10-15T10:30:00Z",
              "headers": {
                "content-type": "text/csv",
                "x-goog-content-length-range": "0,5242880",
                "x-goog-if-generation-match": "0"
              },
              "max_bytes": 5242880,
              "method": "PUT",
              "name": "t/default/uploads/upl_01jaf3d1e2f3g4h5j6k7m8n9p0",
              "url": "http://127.0.0.1:4443/upload/storage/v1/b/mapi-local-quarantine/o?name=t%2Fdefault%2Fuploads%2Fupl_01&X-Goog-Signature=…"
            }
          }
        ],
        "properties": {
          "content_type": {
            "title": "Content Type",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "dataset_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dataset Id",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "filename": {
            "title": "Filename",
            "type": "string"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "received": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "v0.15 (get_upload, renew_upload): the file arrived in the quarantine bucket",
            "title": "Received"
          },
          "size_bytes": {
            "title": "Size Bytes",
            "type": "integer"
          },
          "status": {
            "enum": [
              "pending",
              "uploaded",
              "consumed",
              "expired"
            ],
            "title": "Status",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "upload": {
            "$ref": "#/components/schemas/SignedPut"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "dataset_id",
          "filename",
          "content_type",
          "size_bytes",
          "status",
          "upload",
          "expires_at",
          "created_at"
        ],
        "title": "UploadSession",
        "type": "object"
      },
      "UsageReport": {
        "description": "``GET /v1/usage`` (one project) and ``GET /v1/tenants/{tenant_id}/usage`` (whole\ntenant): ledger totals for one UTC period and the quota limits in force now.\n\nQuery: ``period=day|month`` (default ``month``), ``start`` (an RFC 3339 instant inside\nthe period; default: now), ``group_by``.",
        "examples": [
          {
            "end": "2026-11-01T00:00:00Z",
            "group_by": "resource_class",
            "groups": {
              "M": {
                "amount_micros": 93600,
                "attempts": 3,
                "currency": "USD",
                "gib_seconds": 14400,
                "runs": 3,
                "vcpu_seconds": 3600
              }
            },
            "period": "month",
            "price_versions": [
              "cloudrun-list-2026-10"
            ],
            "project_id": "growth",
            "quotas": [
              {
                "fraction_used": 0.5,
                "limit": 86400,
                "limit_name": "vcpu_seconds_per_day",
                "remaining": 43200,
                "resets_at": "2026-10-16T00:00:00Z",
                "scope": "tenant",
                "subject_id": "acme",
                "used": 43200
              }
            ],
            "start": "2026-10-01T00:00:00Z",
            "tenant_id": "acme",
            "totals": {
              "amount_micros": 93600,
              "attempts": 3,
              "currency": "USD",
              "gib_seconds": 14400,
              "runs": 3,
              "vcpu_seconds": 3600
            }
          }
        ],
        "properties": {
          "end": {
            "format": "date-time",
            "title": "End",
            "type": "string"
          },
          "group_by": {
            "anyOf": [
              {
                "enum": [
                  "resource_class",
                  "project",
                  "day",
                  "token",
                  "run"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group By"
          },
          "groups": {
            "additionalProperties": {
              "$ref": "#/components/schemas/CostTotals"
            },
            "title": "Groups",
            "type": "object"
          },
          "period": {
            "enum": [
              "day",
              "month"
            ],
            "title": "Period",
            "type": "string"
          },
          "price_versions": {
            "items": {
              "type": "string"
            },
            "title": "Price Versions",
            "type": "array"
          },
          "project_id": {
            "anyOf": [
              {
                "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "quotas": {
            "items": {
              "$ref": "#/components/schemas/QuotaLimitStatus"
            },
            "title": "Quotas",
            "type": "array"
          },
          "start": {
            "format": "date-time",
            "title": "Start",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "totals": {
            "$ref": "#/components/schemas/CostTotals"
          }
        },
        "required": [
          "tenant_id",
          "period",
          "start",
          "end",
          "totals"
        ],
        "title": "UsageReport",
        "type": "object"
      },
      "UserPrincipal": {
        "additionalProperties": false,
        "description": "A person authenticated by OIDC. ``(issuer, subject)`` is the stable identity; the\nplatform id ``usr_…`` is assigned at first login.",
        "properties": {
          "email": {
            "anyOf": [
              {
                "maxLength": 320,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "email_verified": {
            "default": false,
            "title": "Email Verified",
            "type": "boolean"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "issuer": {
            "pattern": "^https://[^\\s]{1,500}$",
            "title": "Issuer",
            "type": "string"
          },
          "kind": {
            "const": "user",
            "default": "user",
            "title": "Kind",
            "type": "string"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "subject": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Subject",
            "type": "string"
          }
        },
        "required": [
          "id",
          "issuer",
          "subject"
        ],
        "title": "UserPrincipal",
        "type": "object"
      },
      "ValidateRequest": {
        "additionalProperties": false,
        "description": "Synchronous static validation of a document (exactly one of ``yaml``/``document``).\n\n``dataset`` overrides the dataset version whose stored schema is the raw input schema\n(default: the spec's own ``data.dataset`` reference, resolved now).",
        "examples": [
          {
            "yaml": "apiVersion: mapi/v1\nkind: ModelSpec\nmetadata: {name: eu-geo-mmm, project: default}\ndata:\n  dataset: dataset://default/eu_media_daily@latest\nmodel:\n  use: mmm.bayesian@^1.3\n"
          }
        ],
        "properties": {
          "dataset": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "dataset://default/eu_media_daily@v3"
            ],
            "title": "Dataset"
          },
          "document": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document"
          },
          "yaml": {
            "anyOf": [
              {
                "maxLength": 262144,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Yaml"
          }
        },
        "title": "ValidateRequest",
        "type": "object"
      },
      "ValidateResponse": {
        "description": "Every problem at once, located by JSON pointers, plus per-stage schemas.",
        "examples": [
          {
            "catalog_digest": "sha256:cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
            "hash": "sha256:3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f",
            "issues": [
              {
                "code": "LEAKAGE_RISK",
                "message": "stateful step 'scale_y' runs before the split",
                "pointer": "/pipeline/2",
                "severity": "error",
                "suggested_action": "move the split to after 'weekly'"
              }
            ],
            "kind": "ModelSpec",
            "stages": [
              {
                "data_schema": {
                  "dims": {
                    "date": {
                      "freq": "D",
                      "kind": "time",
                      "policy": "extend"
                    },
                    "market": {
                      "kind": "categorical"
                    }
                  },
                  "vars": {
                    "revenue": {
                      "dims": [
                        "market",
                        "date"
                      ],
                      "dtype": "float64",
                      "role": "target"
                    }
                  }
                },
                "name": "raw",
                "split": false
              }
            ],
            "valid": false
          }
        ],
        "properties": {
          "catalog_digest": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Catalog Digest"
          },
          "hash": {
            "anyOf": [
              {
                "pattern": "^sha256:[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hash"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "kind": {
            "anyOf": [
              {
                "enum": [
                  "ModelSpec",
                  "ScoreRequest",
                  "Sweep",
                  "Backtest",
                  "SBC",
                  "Campaign"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kind"
          },
          "resolved": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResolvedSpec"
              },
              {
                "type": "null"
              }
            ]
          },
          "stages": {
            "items": {
              "$ref": "#/components/schemas/StageSchema"
            },
            "title": "Stages",
            "type": "array"
          },
          "valid": {
            "title": "Valid",
            "type": "boolean"
          }
        },
        "required": [
          "valid"
        ],
        "title": "ValidateResponse",
        "type": "object"
      },
      "ValidationError": {
        "properties": {
          "ctx": {
            "title": "Context",
            "type": "object"
          },
          "input": {
            "title": "Input"
          },
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "title": "Location",
            "type": "array"
          },
          "msg": {
            "title": "Message",
            "type": "string"
          },
          "type": {
            "title": "Error Type",
            "type": "string"
          }
        },
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError",
        "type": "object"
      },
      "ValidationEvent": {
        "enum": [
          "submit",
          "cancel",
          "checks_passed",
          "checks_failed",
          "request_approval",
          "validate",
          "approve",
          "reject",
          "resubmit",
          "deprecate"
        ],
        "title": "ValidationEvent",
        "type": "string"
      },
      "ValidationNote": {
        "additionalProperties": false,
        "description": "``POST /v1/validations/{validation_id}:cancel|:resubmit|:deprecate``: why (a\ndeprecation needs a reason; it is audited).",
        "examples": [
          {
            "note": "Superseded by v8 after the Q1 data refresh."
          }
        ],
        "properties": {
          "note": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          }
        },
        "title": "ValidationNote",
        "type": "object"
      },
      "ValidationRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/models/{model_id}/versions/{version}/validations``: run the checks.",
        "examples": [
          {
            "note": "Q4 refresh of the geo MMM"
          }
        ],
        "properties": {
          "dataset": {
            "anyOf": [
              {
                "maxLength": 512,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "dataset:// for data checks (default: the fit's)",
            "title": "Dataset"
          },
          "note": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "policy_ids": {
            "description": "Policies to add: every policy in force always applies, and these can only add to it",
            "items": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 8,
            "title": "Policy Ids",
            "type": "array"
          }
        },
        "title": "ValidationRequest",
        "type": "object"
      },
      "ValidationStatus": {
        "enum": [
          "draft",
          "checks_running",
          "checks_passed",
          "checks_failed",
          "awaiting_approval",
          "validated",
          "rejected",
          "deprecated"
        ],
        "title": "ValidationStatus",
        "type": "string"
      },
      "ValidationTransitionRecord": {
        "description": "One step of a validation's history (also an audit event).",
        "properties": {
          "actor_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor Id"
          },
          "at": {
            "format": "date-time",
            "title": "At",
            "type": "string"
          },
          "event": {
            "$ref": "#/components/schemas/ValidationEvent"
          },
          "from_status": {
            "$ref": "#/components/schemas/ValidationStatus"
          },
          "note": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "to_status": {
            "$ref": "#/components/schemas/ValidationStatus"
          }
        },
        "required": [
          "from_status",
          "to_status",
          "event",
          "at"
        ],
        "title": "ValidationTransitionRecord",
        "type": "object"
      },
      "VarMapping": {
        "additionalProperties": false,
        "description": "A data variable read from one column (dtype is inferred during ingest).",
        "examples": [
          {
            "column": "revenue",
            "role": "target",
            "units": "EUR"
          }
        ],
        "properties": {
          "column": {
            "maxLength": 256,
            "minLength": 1,
            "title": "Column",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "missing": {
            "default": "forbid",
            "enum": [
              "forbid",
              "allow",
              "mask"
            ],
            "title": "Missing",
            "type": "string"
          },
          "role": {
            "$ref": "#/components/schemas/Role",
            "default": "covariate"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Units"
          }
        },
        "required": [
          "column"
        ],
        "title": "VarMapping",
        "type": "object"
      },
      "VarSpec": {
        "additionalProperties": false,
        "description": "A data variable: its dims (by name), dtype, role, units and missingness.",
        "properties": {
          "bounds": {
            "anyOf": [
              {
                "maxItems": 2,
                "minItems": 2,
                "prefixItems": [
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                ],
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bounds"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "dims": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "title": "Dims",
            "type": "array"
          },
          "dtype": {
            "enum": [
              "float64",
              "float32",
              "int64",
              "int32",
              "uint8",
              "bool",
              "str",
              "datetime64[ns]"
            ],
            "title": "Dtype",
            "type": "string"
          },
          "future_required": {
            "default": false,
            "description": "Must be supplied over a forecast horizon",
            "title": "Future Required",
            "type": "boolean"
          },
          "index_of": {
            "anyOf": [
              {
                "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Long layout: this var indexes that dim",
            "title": "Index Of"
          },
          "missing": {
            "default": "forbid",
            "enum": [
              "forbid",
              "allow",
              "mask"
            ],
            "title": "Missing",
            "type": "string"
          },
          "missing_sentinel": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Missing Sentinel"
          },
          "role": {
            "$ref": "#/components/schemas/Role",
            "default": "covariate"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "pint-style, e.g. 'EUR'",
            "title": "Units"
          }
        },
        "required": [
          "dims",
          "dtype"
        ],
        "title": "VarSpec",
        "type": "object"
      },
      "VerificationMethod": {
        "enum": [
          "none",
          "email",
          "card",
          "document",
          "manual"
        ],
        "title": "VerificationMethod",
        "type": "string"
      },
      "VerificationResult": {
        "description": "The verified address and the public-tier tenant it now administers; sign in next.",
        "examples": [
          {
            "email": "ana@acme.example",
            "login_url": "/auth/login?return_to=%2Fguided",
            "project_id": "default",
            "tenant_id": "acme-retail",
            "trust_tier": "public"
          }
        ],
        "properties": {
          "email": {
            "title": "Email",
            "type": "string"
          },
          "login_url": {
            "default": "/auth/login",
            "title": "Login Url",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "trust_tier": {
            "$ref": "#/components/schemas/TrustTier",
            "default": "public"
          }
        },
        "required": [
          "email",
          "tenant_id",
          "project_id"
        ],
        "title": "VerificationResult",
        "type": "object"
      },
      "VerificationStatus": {
        "description": "``GET /v1/tenants/{tenant_id}/verification``.",
        "examples": [
          {
            "email_verified": true,
            "identity_verified": false,
            "method": "email",
            "reason_plain": "Public workspaces run built-in models only for now.",
            "tenant_id": "acme-retail",
            "trust_tier": "public",
            "uploaded_code_allowed": false,
            "verified_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "email_verified": {
            "title": "Email Verified",
            "type": "boolean"
          },
          "identity_verified": {
            "title": "Identity Verified",
            "type": "boolean"
          },
          "method": {
            "$ref": "#/components/schemas/VerificationMethod",
            "default": "none"
          },
          "reason_plain": {
            "maxLength": 500,
            "title": "Reason Plain",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "trust_tier": {
            "$ref": "#/components/schemas/TrustTier"
          },
          "uploaded_code_allowed": {
            "title": "Uploaded Code Allowed",
            "type": "boolean"
          },
          "verified_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Verified At"
          }
        },
        "required": [
          "tenant_id",
          "trust_tier",
          "email_verified",
          "identity_verified",
          "uploaded_code_allowed",
          "reason_plain"
        ],
        "title": "VerificationStatus",
        "type": "object"
      },
      "VerificationUpdate": {
        "additionalProperties": false,
        "description": "``PUT /v1/admin/tenants/{tenant_id}/verification`` (operators; audited).",
        "examples": [
          {
            "identity_verified": true,
            "method": "manual",
            "reason": "signed enterprise contract"
          }
        ],
        "properties": {
          "identity_verified": {
            "title": "Identity Verified",
            "type": "boolean"
          },
          "method": {
            "$ref": "#/components/schemas/VerificationMethod"
          },
          "reason": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "identity_verified",
          "method",
          "reason"
        ],
        "title": "VerificationUpdate",
        "type": "object"
      },
      "WarningPayload": {
        "additionalProperties": false,
        "description": "``warning``: a non-fatal, platform-classified problem.",
        "properties": {
          "code": {
            "pattern": "^[A-Z][A-Z0-9_]{1,63}$",
            "title": "Code",
            "type": "string"
          },
          "message": {
            "maxLength": 2000,
            "title": "Message",
            "type": "string"
          },
          "untrusted_text": {
            "anyOf": [
              {
                "maxLength": 8000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Untrusted Text"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "title": "WarningPayload",
        "type": "object"
      },
      "Webhook": {
        "description": "A webhook as listed (never its secret; ``secret_hint`` shows its last 4 characters).",
        "examples": [
          {
            "active": true,
            "created_at": "2026-10-01T08:00:00Z",
            "events": [
              "run.succeeded",
              "run.failed",
              "endpoint.promoted"
            ],
            "failure_count": 0,
            "id": "whk_01jaf3h1j2k3m4n5p6q7r8s9t0",
            "last_delivery_at": "2026-10-15T09:30:00Z",
            "last_success_at": "2026-10-15T09:30:00Z",
            "project_id": "growth",
            "secret_hint": "whsec_…Q2x9",
            "tenant_id": "acme",
            "updated_at": "2026-10-15T09:30:00Z",
            "url": "https://hooks.example.com/mapi"
          }
        ],
        "properties": {
          "active": {
            "title": "Active",
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "disabled_reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Disabled Reason"
          },
          "events": {
            "items": {
              "$ref": "#/components/schemas/WebhookEventType"
            },
            "title": "Events",
            "type": "array"
          },
          "failure_count": {
            "default": 0,
            "description": "Consecutive failed events",
            "minimum": 0.0,
            "title": "Failure Count",
            "type": "integer"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "last_delivery_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Delivery At"
          },
          "last_success_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Success At"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "secret_hint": {
            "pattern": "^whsec_…[A-Za-z0-9_-]{4}$",
            "title": "Secret Hint",
            "type": "string"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "url",
          "events",
          "active",
          "secret_hint",
          "created_at",
          "updated_at"
        ],
        "title": "Webhook",
        "type": "object"
      },
      "WebhookCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/webhooks``: the secret is generated by the server and shown once.\n\nThe server applies the SSRF policy to ``url`` (static checks, then every address the\nhost resolves to): ``422 WEBHOOK_URL_BLOCKED``. ``https`` only, ports 443 and 8443.",
        "examples": [
          {
            "description": "Notify the planning service",
            "events": [
              "run.succeeded",
              "run.failed",
              "endpoint.promoted"
            ],
            "url": "https://hooks.example.com/mapi"
          }
        ],
        "properties": {
          "active": {
            "default": true,
            "title": "Active",
            "type": "boolean"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "events": {
            "items": {
              "$ref": "#/components/schemas/WebhookEventType"
            },
            "maxItems": 16,
            "minItems": 1,
            "title": "Events",
            "type": "array"
          },
          "url": {
            "maxLength": 2048,
            "minLength": 9,
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "url",
          "events"
        ],
        "title": "WebhookCreate",
        "type": "object"
      },
      "WebhookCreated": {
        "description": "``201`` of ``POST /v1/webhooks`` and ``200`` of ``…:rotate-secret``: the only time the\nsecret is returned. After a rotation the previous secret keeps signing for 24 h.",
        "examples": [
          {
            "secret": "whsec_b3dE5gH7jK9mN1pQ3sT5vW7yZ9bC1dE3fG5hJ7kQ2x9",
            "webhook": {
              "active": true,
              "created_at": "2026-10-01T08:00:00Z",
              "events": [
                "run.succeeded",
                "run.failed",
                "endpoint.promoted"
              ],
              "failure_count": 0,
              "id": "whk_01jaf3h1j2k3m4n5p6q7r8s9t0",
              "last_delivery_at": "2026-10-15T09:30:00Z",
              "last_success_at": "2026-10-15T09:30:00Z",
              "project_id": "growth",
              "secret_hint": "whsec_…Q2x9",
              "tenant_id": "acme",
              "updated_at": "2026-10-15T09:30:00Z",
              "url": "https://hooks.example.com/mapi"
            }
          }
        ],
        "properties": {
          "secret": {
            "pattern": "^whsec_[A-Za-z0-9_-]{43}$",
            "title": "Secret",
            "type": "string"
          },
          "webhook": {
            "$ref": "#/components/schemas/Webhook"
          }
        },
        "required": [
          "webhook",
          "secret"
        ],
        "title": "WebhookCreated",
        "type": "object"
      },
      "WebhookDelivery": {
        "description": "One delivery attempt chain of one event to one webhook (``attempt`` counts tries).\n\n``error`` is platform-authored; ``response_excerpt`` is the first bytes of the receiver's\nanswer (untrusted text: render as text only).",
        "examples": [
          {
            "attempt": 2,
            "created_at": "2026-10-15T09:30:00Z",
            "duration_ms": 412,
            "error": "the receiver answered 503",
            "event_id": "evt_01jaf3k1m2n3p4q5r6s7t8v9w0",
            "event_type": "run.succeeded",
            "id": "whd_01jaf3m1n2p3q4r5s6t7v8w9x0",
            "next_retry_at": "2026-10-15T09:40:00Z",
            "response_code": 503,
            "status": "retrying",
            "updated_at": "2026-10-15T09:35:00Z",
            "webhook_id": "whk_01jaf3h1j2k3m4n5p6q7r8s9t0"
          }
        ],
        "properties": {
          "attempt": {
            "minimum": 1.0,
            "title": "Attempt",
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "duration_ms": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Ms"
          },
          "error": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "event_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Event Id",
            "type": "string"
          },
          "event_type": {
            "$ref": "#/components/schemas/WebhookEventType"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "next_retry_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Retry At"
          },
          "replay_of": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Replay Of"
          },
          "response_code": {
            "anyOf": [
              {
                "maximum": 599.0,
                "minimum": 100.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Code"
          },
          "response_excerpt": {
            "anyOf": [
              {
                "maxLength": 1024,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Excerpt"
          },
          "status": {
            "$ref": "#/components/schemas/DeliveryStatus"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "webhook_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Webhook Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "webhook_id",
          "event_id",
          "event_type",
          "status",
          "attempt",
          "created_at",
          "updated_at"
        ],
        "title": "WebhookDelivery",
        "type": "object"
      },
      "WebhookEventType": {
        "enum": [
          "run.succeeded",
          "run.failed",
          "model.version.ready",
          "endpoint.promoted",
          "score.completed",
          "tenant.deletion.completed",
          "workflow.run.succeeded",
          "workflow.run.failed",
          "model.validation.checks_passed",
          "model.validation.checks_failed",
          "model.validation.awaiting_approval",
          "model.validated",
          "model.rejected",
          "model.deprecated",
          "dataset.version.created",
          "optimize.completed"
        ],
        "title": "WebhookEventType",
        "type": "string"
      },
      "WebhookUpdate": {
        "additionalProperties": false,
        "description": "``PATCH /v1/webhooks/{webhook_id}`` (re-activating resets the failure count).",
        "examples": [
          {
            "active": true
          },
          {
            "events": [
              "score.completed"
            ]
          }
        ],
        "properties": {
          "active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Active"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "events": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/WebhookEventType"
                },
                "maxItems": 16,
                "minItems": 1,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Events"
          },
          "url": {
            "anyOf": [
              {
                "maxLength": 2048,
                "minLength": 9,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "title": "WebhookUpdate",
        "type": "object"
      },
      "WeightsOptions": {
        "additionalProperties": false,
        "description": "A safetensors file of pretrained network weights (read in the sandboxed ingest run).\n\nThe file becomes a weights dataset: ``weights(param)`` float32 plus the tensor table in\nthe ``mapi_weights`` attr. Models and steps read it as a side table.",
        "examples": [
          {
            "max_parameters": 50000000
          },
          {
            "arch": {
              "blocks": [
                1,
                1,
                1
              ],
              "channels": 3,
              "kind": "resnet",
              "widths": [
                16,
                32,
                64
              ]
            }
          }
        ],
        "properties": {
          "arch": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "Architecture JSON, when the file's __metadata__ has no 'mapi_arch'",
            "title": "Arch"
          },
          "max_parameters": {
            "default": 200000000,
            "maximum": 500000000.0,
            "minimum": 1.0,
            "title": "Max Parameters",
            "type": "integer"
          }
        },
        "title": "WeightsOptions",
        "type": "object"
      },
      "WhatIfCompile": {
        "additionalProperties": false,
        "properties": {
          "channel_dim": {
            "default": "channel",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Channel Dim",
            "type": "string"
          },
          "kind": {
            "const": "whatif",
            "default": "whatif",
            "title": "Kind",
            "type": "string"
          },
          "model": {
            "description": "endpoint://project/alias or model://project/name@vN",
            "pattern": "(?:^endpoint://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)$)|(?:^model://([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)/([a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?)@(latest|v\\d{1,9}|\\d{1,9})$)",
            "title": "Model",
            "type": "string"
          },
          "output": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OutputSelector"
              },
              {
                "type": "null"
              }
            ]
          },
          "scenario": {
            "$ref": "#/components/schemas/WhatIfScenario"
          },
          "spend_var": {
            "default": "spend",
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Spend Var",
            "type": "string"
          }
        },
        "required": [
          "model",
          "scenario"
        ],
        "title": "WhatIfCompile",
        "type": "object"
      },
      "WhatIfScenario": {
        "additionalProperties": false,
        "description": "Spend multipliers per channel over the fit window (``1`` = what was actually spent).\n\n``geo`` restricts the scenario to one geo's grid (needs a per-geo grid).",
        "examples": [
          {
            "label": "Shift 20% of TV to search",
            "multipliers": {
              "search": 1.3,
              "tv": 0.8
            }
          }
        ],
        "properties": {
          "geo": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Geo"
          },
          "label": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "multipliers": {
            "additionalProperties": {
              "type": "number"
            },
            "maxProperties": 64,
            "title": "Multipliers",
            "type": "object"
          }
        },
        "title": "WhatIfScenario",
        "type": "object"
      },
      "WideVarMapping": {
        "additionalProperties": false,
        "description": "One variable read from several columns, one per label of ``dim`` (a wide table).\n\n``{\"dim\": \"channel\", \"columns\": {\"tv\": \"tv_spend\", \"search\": \"search_spend\"}}`` gives a\nvariable along ``channel`` (plus the table's other dims) with coords ``tv`` and\n``search``. Several wide variables may share a dim; their labels must then agree.",
        "examples": [
          {
            "columns": {
              "search": "search_spend",
              "social": "social_spend",
              "tv": "tv_spend"
            },
            "dim": "channel",
            "role": "spend",
            "units": "EUR"
          }
        ],
        "properties": {
          "columns": {
            "additionalProperties": {
              "maxLength": 256,
              "minLength": 1,
              "type": "string"
            },
            "maxProperties": 256,
            "minProperties": 1,
            "title": "Columns",
            "type": "object"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "dim": {
            "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Dim",
            "type": "string"
          },
          "dim_spec": {
            "$ref": "#/components/schemas/DimSpec"
          },
          "missing": {
            "default": "forbid",
            "enum": [
              "forbid",
              "allow",
              "mask"
            ],
            "title": "Missing",
            "type": "string"
          },
          "role": {
            "$ref": "#/components/schemas/Role",
            "default": "covariate"
          },
          "units": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Units"
          }
        },
        "required": [
          "dim",
          "columns"
        ],
        "title": "WideVarMapping",
        "type": "object"
      },
      "Workflow": {
        "description": "A saved workflow (``workflow://project/name``) and its latest revision.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "id": "wf_01jaf3e1f2g3h4j5k6m7n8p9q0",
            "latest_revision": 2,
            "name": "ts-readiness",
            "project_id": "growth",
            "ref": "workflow://growth/ts-readiness",
            "tenant_id": "acme",
            "updated_at": "2026-10-15T09:30:00Z"
          }
        ],
        "properties": {
          "archived": {
            "default": false,
            "title": "Archived",
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "latest_revision": {
            "minimum": 1.0,
            "title": "Latest Revision",
            "type": "integer"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "ref": {
            "description": "workflow://project/name",
            "title": "Ref",
            "type": "string"
          },
          "template": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Gallery template it was created from",
            "title": "Template"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tenant_id",
          "project_id",
          "name",
          "ref",
          "latest_revision",
          "created_at",
          "updated_at"
        ],
        "title": "Workflow",
        "type": "object"
      },
      "WorkflowCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/workflows``: a workflow with its first revision (the document).",
        "examples": [
          {
            "document": {
              "apiVersion": "mapi/v1",
              "inputs": {
                "data": {
                  "type": "dataset"
                }
              },
              "kind": "Workflow",
              "metadata": {
                "name": "ts-readiness",
                "project": "growth"
              },
              "nodes": [
                {
                  "id": "adf",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.adf",
                  "with": {
                    "alpha": {
                      "$param": "alpha"
                    }
                  }
                },
                {
                  "id": "kpss",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.kpss"
                },
                {
                  "id": "wanders",
                  "use": "branch.if",
                  "with": {
                    "condition": "nodes.adf.p_value >= params.alpha or nodes.kpss.reject"
                  }
                },
                {
                  "id": "diff",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "transform.difference",
                  "when": "wanders.then"
                },
                {
                  "id": "order",
                  "inputs": {
                    "data": [
                      "diff.data",
                      "inputs.data"
                    ]
                  },
                  "use": "search.arma_order"
                }
              ],
              "outputs": {
                "orders": "order.table"
              },
              "params": {
                "alpha": {
                  "default": 0.05,
                  "type": "number"
                }
              }
            },
            "message": "first version"
          }
        ],
        "properties": {
          "document": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "The WorkflowSpec as JSON",
            "title": "Document"
          },
          "message": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "template": {
            "anyOf": [
              {
                "pattern": "^[a-z][a-z0-9_]{0,63}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Or a gallery template id",
            "title": "Template"
          },
          "text": {
            "anyOf": [
              {
                "maxLength": 262144,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Or YAML/JSON text",
            "title": "Text"
          }
        },
        "title": "WorkflowCreate",
        "type": "object"
      },
      "WorkflowEvent": {
        "examples": [
          {
            "data": {
              "arm": "then"
            },
            "node_id": "wanders",
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "seq": 7,
            "ts": "2026-10-15T09:30:00Z",
            "type": "workflow.branch.decided"
          }
        ],
        "properties": {
          "data": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Data",
            "type": "object"
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node Id"
          },
          "run_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "seq": {
            "minimum": 0.0,
            "title": "Seq",
            "type": "integer"
          },
          "ts": {
            "format": "date-time",
            "title": "Ts",
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/WorkflowEventType"
          }
        },
        "required": [
          "seq",
          "type",
          "run_id",
          "ts"
        ],
        "title": "WorkflowEvent",
        "type": "object"
      },
      "WorkflowEventType": {
        "description": "Events of a workflow run (SSE on ``…/events``; the terminal ones also go to\nwebhooks as ``workflow.run.succeeded`` / ``workflow.run.failed``).",
        "enum": [
          "workflow.run.started",
          "workflow.node.queued",
          "workflow.node.started",
          "workflow.node.succeeded",
          "workflow.node.cached",
          "workflow.node.skipped",
          "workflow.node.failed",
          "workflow.node.retrying",
          "workflow.branch.decided",
          "workflow.run.succeeded",
          "workflow.run.failed",
          "workflow.run.cancelled"
        ],
        "title": "WorkflowEventType",
        "type": "string"
      },
      "WorkflowRevision": {
        "description": "An immutable, hashed revision; ``validation`` is its static check at save time\n(revisions with errors are stored but cannot run: ``WORKFLOW_NOT_RUNNABLE``).",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "document": {
              "apiVersion": "mapi/v1",
              "inputs": {
                "data": {
                  "type": "dataset"
                }
              },
              "kind": "Workflow",
              "metadata": {
                "name": "ts-readiness",
                "project": "growth"
              },
              "nodes": [
                {
                  "id": "adf",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.adf",
                  "with": {
                    "alpha": {
                      "$param": "alpha"
                    }
                  }
                },
                {
                  "id": "kpss",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.kpss"
                },
                {
                  "id": "wanders",
                  "use": "branch.if",
                  "with": {
                    "condition": "nodes.adf.p_value >= params.alpha or nodes.kpss.reject"
                  }
                },
                {
                  "id": "diff",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "transform.difference",
                  "when": "wanders.then"
                },
                {
                  "id": "order",
                  "inputs": {
                    "data": [
                      "diff.data",
                      "inputs.data"
                    ]
                  },
                  "use": "search.arma_order"
                }
              ],
              "outputs": {
                "orders": "order.table"
              },
              "params": {
                "alpha": {
                  "default": 0.05,
                  "type": "number"
                }
              }
            },
            "ref": "workflow://growth/ts-readiness@r2",
            "revision": 2,
            "spec_hash": "sha256:5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a",
            "validation": {
              "issues": [],
              "order": [
                "adf",
                "kpss",
                "wanders",
                "diff",
                "order"
              ],
              "valid": true
            },
            "workflow_id": "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
          }
        ],
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "document": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Document",
            "type": "object"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "ref": {
            "description": "workflow://project/name@rN",
            "title": "Ref",
            "type": "string"
          },
          "revision": {
            "minimum": 1.0,
            "title": "Revision",
            "type": "integer"
          },
          "spec_hash": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "title": "Spec Hash",
            "type": "string"
          },
          "validation": {
            "$ref": "#/components/schemas/WorkflowValidation"
          },
          "workflow_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Workflow Id",
            "type": "string"
          }
        },
        "required": [
          "workflow_id",
          "revision",
          "ref",
          "document",
          "spec_hash",
          "validation",
          "created_at"
        ],
        "title": "WorkflowRevision",
        "type": "object"
      },
      "WorkflowRevisionCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/workflows/{workflow_id}/revisions``.",
        "examples": [
          {
            "document": {
              "apiVersion": "mapi/v1",
              "inputs": {
                "data": {
                  "type": "dataset"
                }
              },
              "kind": "Workflow",
              "metadata": {
                "name": "ts-readiness",
                "project": "growth"
              },
              "nodes": [
                {
                  "id": "adf",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.adf",
                  "with": {
                    "alpha": {
                      "$param": "alpha"
                    }
                  }
                },
                {
                  "id": "kpss",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.kpss"
                },
                {
                  "id": "wanders",
                  "use": "branch.if",
                  "with": {
                    "condition": "nodes.adf.p_value >= params.alpha or nodes.kpss.reject"
                  }
                },
                {
                  "id": "diff",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "transform.difference",
                  "when": "wanders.then"
                },
                {
                  "id": "order",
                  "inputs": {
                    "data": [
                      "diff.data",
                      "inputs.data"
                    ]
                  },
                  "use": "search.arma_order"
                }
              ],
              "outputs": {
                "orders": "order.table"
              },
              "params": {
                "alpha": {
                  "default": 0.05,
                  "type": "number"
                }
              }
            },
            "expected_revision": 1
          }
        ],
        "properties": {
          "document": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document"
          },
          "expected_revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Refuse (409) when the latest revision is different",
            "title": "Expected Revision"
          },
          "message": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "text": {
            "anyOf": [
              {
                "maxLength": 262144,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text"
          }
        },
        "title": "WorkflowRevisionCreate",
        "type": "object"
      },
      "WorkflowRun": {
        "description": "``GET /v1/workflow-runs/{run_id}``: a run of a workflow revision with every node.",
        "examples": [
          {
            "created_at": "2026-10-15T09:30:00Z",
            "decisions": [
              {
                "arm": "then",
                "condition": "nodes.adf.p_value >= params.alpha or nodes.kpss.reject",
                "decided_at": "2026-10-15T09:30:00Z",
                "explain_plain": "The tests found that the series wanders and does not return to a steady level. The workflow applied a difference.",
                "inputs": {
                  "nodes.adf.p_value": 0.57,
                  "nodes.kpss.reject": true,
                  "params.alpha": 0.05
                },
                "node_id": "wanders",
                "value": true
              }
            ],
            "inputs": {
              "data": "dataset://growth/weekly_sales@v4"
            },
            "nodes": [
              {
                "attempt": 1,
                "cache_key": "sha256:5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a",
                "finished_at": "2026-10-15T09:30:04Z",
                "kind": "test",
                "node_id": "adf",
                "outputs": {
                  "result": {
                    "inline": {
                      "test": "test.adf"
                    },
                    "type": "test_result"
                  }
                },
                "params": {
                  "alpha": 0.05,
                  "regression": "c"
                },
                "result": {
                  "decision": "unit_root",
                  "p_value": 0.57,
                  "reject": false,
                  "statistic": -1.42
                },
                "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
                "started_at": "2026-10-15T09:30:00Z",
                "status": "succeeded",
                "use": "test.adf@1.0.0"
              }
            ],
            "params": {
              "alpha": 0.05
            },
            "project_id": "growth",
            "revision": 2,
            "run_id": "run_01jaf3q2x8m9v7k5h4g3f2e1d0",
            "started_at": "2026-10-15T09:30:00Z",
            "status": "running",
            "tenant_id": "acme",
            "workflow_id": "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
          }
        ],
        "properties": {
          "cost": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RunCost"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "decisions": {
            "items": {
              "$ref": "#/components/schemas/BranchDecision"
            },
            "title": "Decisions",
            "type": "array"
          },
          "error": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NodeError"
              },
              {
                "type": "null"
              }
            ]
          },
          "finished_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "inputs": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Inputs",
            "type": "object"
          },
          "nodes": {
            "items": {
              "$ref": "#/components/schemas/NodeRun"
            },
            "title": "Nodes",
            "type": "array"
          },
          "outputs": {
            "additionalProperties": {
              "$ref": "#/components/schemas/NodeOutputRef"
            },
            "title": "Outputs",
            "type": "object"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params",
            "type": "object"
          },
          "parent_run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Run Id"
          },
          "project_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Project Id",
            "type": "string"
          },
          "revision": {
            "minimum": 1.0,
            "title": "Revision",
            "type": "integer"
          },
          "run_id": {
            "description": "The parent run (kind workflow)",
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Run Id",
            "type": "string"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "status": {
            "$ref": "#/components/schemas/WorkflowRunStatus"
          },
          "tenant_id": {
            "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
            "title": "Tenant Id",
            "type": "string"
          },
          "trigger": {
            "$ref": "#/components/schemas/WorkflowTriggerEvent",
            "default": "manual"
          },
          "trigger_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The schedule or trigger that started it",
            "title": "Trigger Id"
          },
          "workflow_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Workflow Id",
            "type": "string"
          }
        },
        "required": [
          "run_id",
          "workflow_id",
          "revision",
          "tenant_id",
          "project_id",
          "status",
          "created_at"
        ],
        "title": "WorkflowRun",
        "type": "object"
      },
      "WorkflowRunCreate": {
        "additionalProperties": false,
        "description": "``POST /v1/workflows/{workflow_id}/runs`` (``Idempotency-Key``).",
        "examples": [
          {
            "inputs": {
              "data": "dataset://growth/weekly_sales@v4"
            },
            "params": {
              "alpha": 0.05
            }
          }
        ],
        "properties": {
          "experiment_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Experiment of the workflow run and of every run it starts (v0.14; not an archived one). Default: the experiment of the parent run, if any",
            "title": "Experiment Id"
          },
          "inputs": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "input name -> reference",
            "maxProperties": 16,
            "title": "Inputs",
            "type": "object"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "maxProperties": 64,
            "title": "Params",
            "type": "object"
          },
          "resource_class": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResourceClass"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Default: the latest revision",
            "title": "Revision"
          },
          "use_cache": {
            "default": true,
            "description": "Reuse unchanged node results",
            "title": "Use Cache",
            "type": "boolean"
          }
        },
        "title": "WorkflowRunCreate",
        "type": "object"
      },
      "WorkflowRunStatus": {
        "enum": [
          "queued",
          "running",
          "succeeded",
          "failed",
          "cancelling",
          "cancelled"
        ],
        "title": "WorkflowRunStatus",
        "type": "string"
      },
      "WorkflowSchedule": {
        "examples": [
          {
            "active": true,
            "created_at": "2026-10-15T09:30:00Z",
            "cron": "0 6 * * 1",
            "id": "sch_01jaf3f1g2h3j4k5m6n7p8q9r0",
            "next_run_at": "2026-10-19T04:00:00Z",
            "timezone": "Europe/Berlin",
            "workflow_id": "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
          }
        ],
        "properties": {
          "active": {
            "title": "Active",
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "cron": {
            "title": "Cron",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "inputs": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Inputs",
            "type": "object"
          },
          "last_run_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Run At"
          },
          "last_run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Run Id"
          },
          "next_run_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Run At"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params",
            "type": "object"
          },
          "revision": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revision"
          },
          "timezone": {
            "title": "Timezone",
            "type": "string"
          },
          "workflow_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Workflow Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "workflow_id",
          "cron",
          "timezone",
          "active",
          "created_at"
        ],
        "title": "WorkflowSchedule",
        "type": "object"
      },
      "WorkflowTemplate": {
        "description": "A gallery template: its About card and the workflow document.",
        "examples": [
          {
            "about": {
              "assumptions": [
                "Numbers can be added up (spend, sales); averages are averaged"
              ],
              "avoid_when": [
                "Your data already has one row per week"
              ],
              "data_needs": [
                "A date column"
              ],
              "difficulty": "beginner",
              "example": "Daily TV spend of 100 each day becomes 700 for the week.",
              "fits": {
                "goal": [
                  "check_data"
                ]
              },
              "outputs": [
                "The same columns, one row per week"
              ],
              "related": [
                "core.calendar"
              ],
              "summary_plain": "Adds up daily numbers into one number per week (or month), so that every row covers the same length of time.",
              "title": "Weekly totals",
              "typical_runtime": "instant",
              "use_when": [
                "Your data is daily but you want to plan or report by week"
              ]
            },
            "document": {
              "apiVersion": "mapi/v1",
              "inputs": {
                "data": {
                  "type": "dataset"
                }
              },
              "kind": "Workflow",
              "metadata": {
                "name": "readiness",
                "project": "templates"
              },
              "nodes": [
                {
                  "id": "adf",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.adf"
                }
              ]
            },
            "id": "readiness",
            "tags": [
              "forecast"
            ]
          }
        ],
        "properties": {
          "about": {
            "$ref": "#/components/schemas/About"
          },
          "document": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Document",
            "type": "object"
          },
          "id": {
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "title": "Id",
            "type": "string"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "maxItems": 16,
            "title": "Tags",
            "type": "array"
          },
          "version": {
            "default": "1.0.0",
            "pattern": "^\\d+\\.\\d+\\.\\d+$",
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "id",
          "about",
          "document"
        ],
        "title": "WorkflowTemplate",
        "type": "object"
      },
      "WorkflowTrigger": {
        "examples": [
          {
            "active": true,
            "created_at": "2026-10-15T09:30:00Z",
            "dataset": "dataset://growth/weekly_sales",
            "event": "dataset.version.created",
            "id": "trg_01jaf3g1h2j3k4m5n6p7q8r9s0",
            "input": "data",
            "workflow_id": "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
          }
        ],
        "properties": {
          "active": {
            "title": "Active",
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "dataset": {
            "title": "Dataset",
            "type": "string"
          },
          "debounce_seconds": {
            "default": 300,
            "title": "Debounce Seconds",
            "type": "integer"
          },
          "event": {
            "const": "dataset.version.created",
            "title": "Event",
            "type": "string"
          },
          "id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Id",
            "type": "string"
          },
          "input": {
            "title": "Input",
            "type": "string"
          },
          "last_fired_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Fired At"
          },
          "last_run_id": {
            "anyOf": [
              {
                "examples": [
                  "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
                ],
                "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Run Id"
          },
          "params": {
            "additionalProperties": {
              "$ref": "#/components/schemas/JsonValue"
            },
            "title": "Params",
            "type": "object"
          },
          "revision": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revision"
          },
          "workflow_id": {
            "examples": [
              "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
            ],
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
            "title": "Workflow Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "workflow_id",
          "event",
          "dataset",
          "input",
          "active",
          "created_at"
        ],
        "title": "WorkflowTrigger",
        "type": "object"
      },
      "WorkflowTriggerEvent": {
        "enum": [
          "manual",
          "schedule",
          "dataset.version.created",
          "parent",
          "validation"
        ],
        "title": "WorkflowTriggerEvent",
        "type": "string"
      },
      "WorkflowUpdate": {
        "additionalProperties": false,
        "description": "``PATCH /v1/workflows/{workflow_id}``: metadata only (documents are revisions).",
        "examples": [
          {
            "archived": false,
            "description": "Weekly readiness checks"
          }
        ],
        "properties": {
          "archived": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 4000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "title": "WorkflowUpdate",
        "type": "object"
      },
      "WorkflowValidateRequest": {
        "additionalProperties": false,
        "description": "``POST /v1/workflows:validate`` (sync, stores nothing).",
        "examples": [
          {
            "document": {
              "apiVersion": "mapi/v1",
              "inputs": {
                "data": {
                  "type": "dataset"
                }
              },
              "kind": "Workflow",
              "metadata": {
                "name": "ts-readiness",
                "project": "growth"
              },
              "nodes": [
                {
                  "id": "adf",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.adf",
                  "with": {
                    "alpha": {
                      "$param": "alpha"
                    }
                  }
                },
                {
                  "id": "kpss",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "test.kpss"
                },
                {
                  "id": "wanders",
                  "use": "branch.if",
                  "with": {
                    "condition": "nodes.adf.p_value >= params.alpha or nodes.kpss.reject"
                  }
                },
                {
                  "id": "diff",
                  "inputs": {
                    "data": "inputs.data"
                  },
                  "use": "transform.difference",
                  "when": "wanders.then"
                },
                {
                  "id": "order",
                  "inputs": {
                    "data": [
                      "diff.data",
                      "inputs.data"
                    ]
                  },
                  "use": "search.arma_order"
                }
              ],
              "outputs": {
                "orders": "order.table"
              },
              "params": {
                "alpha": {
                  "default": 0.05,
                  "type": "number"
                }
              }
            }
          }
        ],
        "properties": {
          "document": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/JsonValue"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document"
          },
          "text": {
            "anyOf": [
              {
                "maxLength": 262144,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text"
          }
        },
        "title": "WorkflowValidateRequest",
        "type": "object"
      },
      "WorkflowValidation": {
        "description": "``POST /v1/workflows:validate``: issues located by JSON pointers, the execution order\nand the resolved implementation of every node.",
        "examples": [
          {
            "issues": [
              {
                "code": "WORKFLOW_INVALID",
                "message": "node 'order' binds 'diff.series', but transform.difference has no output 'series' (it has: data)",
                "pointer": "/nodes/3/inputs/data",
                "severity": "error"
              }
            ],
            "order": [],
            "valid": false
          }
        ],
        "properties": {
          "issues": {
            "items": {
              "$ref": "#/components/schemas/Issue"
            },
            "title": "Issues",
            "type": "array"
          },
          "order": {
            "items": {
              "type": "string"
            },
            "title": "Order",
            "type": "array"
          },
          "resolved": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "node id -> implementation ref (id@version)",
            "title": "Resolved",
            "type": "object"
          },
          "valid": {
            "title": "Valid",
            "type": "boolean"
          }
        },
        "required": [
          "valid"
        ],
        "title": "WorkflowValidation",
        "type": "object"
      },
      "XrJsonDataset": {
        "additionalProperties": false,
        "description": "An inline dataset (``xr.Dataset.to_dict()`` shape). Dim lengths must agree across\nvariables; every dim of a data variable should have a coord (checked in the sandbox\nagainst the model's schema).",
        "examples": [
          {
            "coords": {
              "channel": {
                "data": [
                  "tv",
                  "search"
                ],
                "dims": [
                  "channel"
                ]
              },
              "time": {
                "data": [
                  "2026-11-01",
                  "2026-11-08"
                ],
                "dims": [
                  "time"
                ]
              }
            },
            "data_vars": {
              "spend": {
                "data": [
                  [
                    1000.0,
                    1200.0
                  ],
                  [
                    400.0,
                    380.0
                  ]
                ],
                "dims": [
                  "channel",
                  "time"
                ]
              }
            }
          }
        ],
        "properties": {
          "attrs": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ]
            },
            "maxProperties": 64,
            "title": "Attrs",
            "type": "object"
          },
          "coords": {
            "maxProperties": 64,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "$ref": "#/components/schemas/XrJsonVariable"
              }
            },
            "title": "Coords",
            "type": "object"
          },
          "data_vars": {
            "maxProperties": 256,
            "minProperties": 1,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "$ref": "#/components/schemas/XrJsonVariable"
              }
            },
            "title": "Data Vars",
            "type": "object"
          },
          "dims": {
            "maxProperties": 16,
            "patternProperties": {
              "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$": {
                "type": "integer"
              }
            },
            "title": "Dims",
            "type": "object"
          }
        },
        "required": [
          "data_vars"
        ],
        "title": "XrJsonDataset",
        "type": "object"
      },
      "XrJsonVariable": {
        "additionalProperties": false,
        "description": "A coord or data variable: ``data`` nested ``len(dims)`` deep (a scalar for no dims).",
        "properties": {
          "attrs": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ]
            },
            "maxProperties": 64,
            "title": "Attrs",
            "type": "object"
          },
          "data": {
            "$ref": "#/components/schemas/JsonValue"
          },
          "dims": {
            "items": {
              "pattern": "^[A-Za-z_][A-Za-z0-9_.\\-]{0,127}$",
              "type": "string"
            },
            "maxItems": 16,
            "title": "Dims",
            "type": "array"
          }
        },
        "required": [
          "data"
        ],
        "title": "XrJsonVariable",
        "type": "object"
      }
    }
  },
  "info": {
    "description": "Contract version 0.2. Errors are RFC 7807 problem documents (`application/problem+json`) with stable `code`s. Programs authenticate with `Authorization: Bearer mapi_…` API tokens, browsers with the BFF session (`/auth/login`); project-scoped routes act in the project named by the `X-Mapi-Project: <tenant>/<project>` header (or the token's project). The single-tenant profile accepts credential-less requests on loopback as the local administrator.",
    "summary": "Typed xarray modelling runtime: control plane API (v1)",
    "title": "modeling-api",
    "version": "0.15.1"
  },
  "openapi": "3.1.0",
  "paths": {
    "/auth/callback": {
      "get": {
        "description": "Finish sign-in: one-time transaction, state check, code exchange, ID-token checks.",
        "operationId": "auth_callback",
        "parameters": [
          {
            "in": "query",
            "name": "code",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 2048,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Code"
            }
          },
          {
            "in": "query",
            "name": "state",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 256,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "State"
            }
          },
          {
            "in": "query",
            "name": "error",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 256,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Error"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "Signed in; redirect to the return path"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Sign-in failed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Auth Callback",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/login": {
      "get": {
        "description": "Start sign-in: Authorization Code + PKCE (S256) + nonce, state kept server-side.",
        "operationId": "auth_login",
        "parameters": [
          {
            "in": "query",
            "name": "return_to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 2048,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Return To"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to the identity provider"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Auth Login",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/logout": {
      "post": {
        "description": "End the session (idempotent) and clear the cookies. Cookie-authenticated, so it\nneeds the CSRF header like every other mutation.",
        "operationId": "auth_logout",
        "responses": {
          "204": {
            "description": "Successful Response"
          }
        },
        "summary": "Auth Logout",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/session": {
      "get": {
        "description": "Is this browser signed in? The CSRF token comes back in ``X-CSRF-Token``.",
        "operationId": "auth_session",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionInfo"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Auth Session",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/signup": {
      "post": {
        "description": "Self-service sign-up. The answer is the same for new and known addresses; the link\nin the e-mail (valid 24 hours, single use) creates a ``public``-tier workspace.",
        "operationId": "signup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignupAccepted"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `SCHEMA_INVALID`, `EMAIL_NOT_ALLOWED`, `TERMS_NOT_ACCEPTED`"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `RATE_LIMITED`"
          }
        },
        "summary": "Signup Route",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/verify-email": {
      "post": {
        "description": "Verify the address with the e-mailed token: creates the workspace (sign in next).",
        "operationId": "verify_email",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailVerify"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "410": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `LINK_EXPIRED`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `SCHEMA_INVALID`"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `RATE_LIMITED`"
          }
        },
        "summary": "Verify Email Route",
        "tags": [
          "auth"
        ]
      }
    },
    "/healthz": {
      "get": {
        "description": "Process liveness (never touches dependencies).",
        "operationId": "health",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Healthz",
        "tags": [
          "health"
        ]
      }
    },
    "/internal/events": {
      "post": {
        "operationId": "ingest_event",
        "parameters": [
          {
            "in": "header",
            "name": "authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Ingest Event",
        "tags": [
          "internal"
        ]
      }
    },
    "/readyz": {
      "get": {
        "description": "Postgres and the object store are reachable (503 with the same body if not).",
        "operationId": "ready",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            },
            "description": "Successful Response"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            },
            "description": "Service Unavailable"
          }
        },
        "summary": "Readyz",
        "tags": [
          "health"
        ]
      }
    },
    "/v1/admin/audit": {
      "get": {
        "description": "The platform audit log (every tenant and platform-level actions), newest first.",
        "operationId": "admin_list_audit",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "tenant_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 64,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Tenant Id"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 64,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Project Id"
            }
          },
          {
            "in": "query",
            "name": "actor_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 128,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Actor Id"
            }
          },
          {
            "in": "query",
            "name": "action",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AuditAction"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "in": "query",
            "name": "outcome",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AuditOutcome"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Outcome"
            }
          },
          {
            "in": "query",
            "name": "since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Since"
            }
          },
          {
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Until"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_AuditEvent_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin List Audit",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/executors": {
      "get": {
        "operationId": "admin_list_executors",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ExecutorHealth_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin List Executors",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/executors/{name}": {
      "get": {
        "operationId": "admin_get_executor",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "pattern": "^[a-z][a-z0-9-]{0,63}$",
              "title": "Name",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutorHealth"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Get Executor",
        "tags": [
          "admin"
        ]
      },
      "put": {
        "description": "Enable or disable an executor. Orchestrators lease nothing onto a disabled one (their\nreports never re-enable it); runs already placed on it are not cancelled here.",
        "operationId": "admin_put_executor",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "pattern": "^[a-z][a-z0-9-]{0,63}$",
              "title": "Name",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecutorUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutorHealth"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Put Executor",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/executors/{name}/evidence": {
      "get": {
        "operationId": "admin_get_executor_evidence",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "pattern": "^[a-z][a-z0-9-]{0,54}$",
              "title": "Name",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutorEvidence"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Get Executor Evidence",
        "tags": [
          "admin"
        ]
      },
      "put": {
        "description": "Record executor-conformance and/or security-suite results (plan §8.4). The dispatcher\nplaces verified and public tenants on an executor only while both reports passed for the\ncaps it currently reports and neither has expired (``MAPI_EXECUTOR_EVIDENCE_MAX_AGE_S``).",
        "operationId": "admin_put_executor_evidence",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "pattern": "^[a-z][a-z0-9-]{0,54}$",
              "title": "Name",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecutorEvidenceUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExecutorEvidence"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Put Executor Evidence",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/kill-switches": {
      "get": {
        "operationId": "admin_get_kill_switches",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KillSwitches"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Admin Get Kill Switches",
        "tags": [
          "admin"
        ]
      },
      "put": {
        "description": "Flip kill switches. Enforced at run creation and by the dispatcher at lease time.\n\nPausing untrusted execution holds new work only. ``cancel_untrusted_runs`` also cancels\nevery unfinished run of tenant-uploaded code (the reconciler then stops their\nexecutions): the containment step for a suspected sandbox escape.",
        "operationId": "admin_put_kill_switches",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KillSwitchUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KillSwitches"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Put Kill Switches",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/quotas": {
      "get": {
        "description": "Stored policies (tier defaults apply where none is stored).",
        "operationId": "admin_list_quotas",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "scope",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/QuotaScope"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Scope"
            }
          },
          {
            "in": "query",
            "name": "subject_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 64,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Subject Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_QuotaPolicy_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin List Quotas",
        "tags": [
          "admin"
        ]
      },
      "put": {
        "operationId": "admin_put_quota",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotaPolicyUpsert"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotaPolicy"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Put Quota",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/quotas/{scope}/{subject_id}": {
      "delete": {
        "operationId": "admin_delete_quota",
        "parameters": [
          {
            "in": "path",
            "name": "scope",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/QuotaScope"
            }
          },
          {
            "in": "path",
            "name": "subject_id",
            "required": true,
            "schema": {
              "maxLength": 64,
              "title": "Subject Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Delete Quota",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/signups": {
      "get": {
        "description": "Sign-ups, newest first; ``review=flagged`` is the Sybil review queue.",
        "operationId": "admin_list_signups",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "review",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/SignupReviewState"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Review"
            }
          },
          {
            "in": "query",
            "name": "tenant_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 64,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Tenant Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_SignupReview_"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin List Signups",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/signups/{signup_id}/review": {
      "post": {
        "description": "Approve or reject a sign-up; a rejection suspends the workspace it created.",
        "operationId": "admin_review_signup",
        "parameters": [
          {
            "in": "path",
            "name": "signup_id",
            "required": true,
            "schema": {
              "pattern": "^sgn_[0-9a-z]{26}$",
              "title": "Signup Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignupReviewDecision"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignupReview"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `CONFLICT`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `SCHEMA_INVALID`"
          }
        },
        "summary": "Admin Review Signup",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/tenants": {
      "get": {
        "operationId": "admin_list_tenants",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/TenantStatus"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "trust_tier",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/TrustTier"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Trust Tier"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Tenant_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin List Tenants",
        "tags": [
          "admin"
        ]
      },
      "post": {
        "description": "Create a tenant; ``initial_admin_email`` is invited as its tenant admin.",
        "operationId": "admin_create_tenant",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TenantCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tenant"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Create Tenant",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/tenants/{tenant_id}": {
      "get": {
        "operationId": "admin_get_tenant",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tenant"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Get Tenant",
        "tags": [
          "admin"
        ]
      },
      "patch": {
        "description": "Change a tenant's name, tier, status or residency. Suspended tenants are read-only;\n``deleting`` tenants are inaccessible (their data is removed by a separate procedure).",
        "operationId": "admin_update_tenant",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TenantAdminUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tenant"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Update Tenant",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/tenants/{tenant_id}/deletion/retry": {
      "post": {
        "description": "Restart a failed purge (the orchestrator picks it up on its next pass).",
        "operationId": "admin_retry_tenant_deletion",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantDeletion"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `CONFLICT`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Retry Tenant Deletion",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/tenants/{tenant_id}/verification": {
      "put": {
        "description": "Record (or revoke) identity verification of a tenant; audited with the reason.",
        "operationId": "admin_put_tenant_verification",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerificationUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationStatus"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `SCHEMA_INVALID`"
          }
        },
        "summary": "Admin Put Tenant Verification",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/admin/usage": {
      "get": {
        "description": "Cost by tenant for one UTC period (from the ledger) and the current spend against the\nglobal spend cap. Summed in the database: the ledger is never loaded row by row here.",
        "operationId": "admin_get_usage",
        "parameters": [
          {
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "default": "month",
              "enum": [
                "day",
                "month"
              ],
              "title": "Period",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "start",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminUsageReport"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Admin Get Usage",
        "tags": [
          "admin"
        ]
      }
    },
    "/v1/catalog": {
      "get": {
        "operationId": "get_catalog",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Catalog",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/abouts": {
      "get": {
        "description": "The plain-language About card of every model, preprocessing step, split, template,\nworkflow template, workflow node and governance check a user can pick.",
        "operationId": "list_catalog_abouts",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AboutKind"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_CatalogAbout_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "About cards of catalog items (filter: kind)",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/chooser": {
      "get": {
        "description": "The questions of \"Help me choose\", in the order to ask them; answer them as the\nquery of ``GET /v1/catalog/recommendations``.",
        "operationId": "get_chooser",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChooserQuestionnaire"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "The Help-me-choose questions",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/governance-checks": {
      "get": {
        "description": "Every check a policy can require, with its About card, metric, direction, default\nthresholds and parameter schema.",
        "operationId": "list_governance_checks",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_GovernanceCheckDef_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "The governance check catalog",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/catalog/models": {
      "get": {
        "operationId": "list_catalog_models",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ModelCatalogEntry_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Catalog Models",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/models/{model_id}/{version}": {
      "get": {
        "operationId": "get_catalog_model",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "title": "Version",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelCatalogEntry"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Catalog Model",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/plots": {
      "get": {
        "operationId": "list_catalog_plots",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_PlotCatalogEntry_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Catalog Plots",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/plots/{plot_id}/{version}/example": {
      "get": {
        "description": "The plot recipe rendered on its synthetic example data (made by the describe run,\ndatasets inline). ``404`` when the recipe, or its example, does not exist.",
        "operationId": "get_catalog_plot_example",
        "parameters": [
          {
            "in": "path",
            "name": "plot_id",
            "required": true,
            "schema": {
              "title": "Plot Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "title": "Version",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlotSpec"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Get Catalog Plot Example",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/recommendations": {
      "get": {
        "description": "Catalog items ranked for the answers (``?goal=forecast&data_shape=panel``; repeat\na question or separate values with commas), each with plain reasons and cautions.\nWithout ``kind`` the candidates are models, guided templates and workflow templates;\n``kind`` ranks one kind (steps, nodes, checks, ...). An unknown question or answer is\n``CHOOSER_ANSWER_INVALID``.",
        "operationId": "recommend_catalog_items",
        "parameters": [
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AboutKind"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 10,
              "maximum": 50,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChooserResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CHOOSER_ANSWER_INVALID": {
                    "summary": "A chooser answer is not valid",
                    "value": {
                      "code": "CHOOSER_ANSWER_INVALID",
                      "detail": "A chooser answer is not valid",
                      "errors": [],
                      "status": 422,
                      "title": "A chooser answer is not valid",
                      "type": "urn:mapi:error:CHOOSER_ANSWER_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CHOOSER_ANSWER_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Ranked recommendations for chooser answers (query: one parameter per question)",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/steps": {
      "get": {
        "operationId": "list_catalog_steps",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_StepCatalogEntry_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Catalog Steps",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/workflow-nodes": {
      "get": {
        "operationId": "list_workflow_nodes",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/NodeKind"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_NodeImplementation_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Workflow node implementations with ports, parameters and About cards",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/catalog/workflow-nodes/{node_id}": {
      "get": {
        "operationId": "get_workflow_node",
        "parameters": [
          {
            "in": "path",
            "name": "node_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z]+\\.[a-z0-9_]+$",
              "title": "Node Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NodeImplementation"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "One node implementation",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/datasets": {
      "get": {
        "operationId": "list_datasets",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Dataset_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Datasets",
        "tags": [
          "datasets"
        ]
      },
      "post": {
        "operationId": "create_dataset",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dataset"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Dataset",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}": {
      "get": {
        "operationId": "get_dataset",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dataset"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Dataset",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/about": {
      "get": {
        "description": "A plain-language summary from the latest version's schema and coordinates: periods,\nmarkets, what each measure is.",
        "operationId": "get_dataset_about",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetAbout"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "The owner's description and the generated summary of the latest version",
        "tags": [
          "explorers"
        ]
      },
      "patch": {
        "operationId": "update_dataset_about",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetAboutUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetAbout"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema"
          }
        },
        "summary": "Change the owner's description",
        "tags": [
          "explorers"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/blobs/missing": {
      "post": {
        "description": "The digests of ``body.sha256`` that the base collection version does not hold, in\nquery order (v0.15). Upload only those: a new version takes the others from the base.\nOnly versions of this dataset are compared (no lookup across datasets or projects).",
        "operationId": "find_missing_images",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlobQuery"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlobMissing"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Which images (by sha256) a collection version does not hold",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/uploads": {
      "post": {
        "operationId": "create_upload",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UploadCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadSession"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Upload",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/uploads/{upload_id}": {
      "get": {
        "description": "An upload with ``received``: whether its file arrived. A client that resumes an\nupload skips the files that arrived and renews the URL of the others when it expired\n(v0.15).",
        "operationId": "get_upload",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "upload_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Upload Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadSession"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "An upload and whether its file arrived (resume an upload)",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/uploads/{upload_id}/inspect": {
      "post": {
        "description": "List the groups and arrays of an upload (an ``inspect`` run reading metadata only;\nM4). Idempotent per upload: while an inspection runs, or once one succeeded, that run\nis returned instead of starting another (a failed one is started again).",
        "operationId": "inspect_upload",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "upload_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Upload Id",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "QUOTA_EXCEEDED": {
                    "summary": "Quota exceeded",
                    "value": {
                      "code": "QUOTA_EXCEEDED",
                      "detail": "Quota exceeded",
                      "errors": [],
                      "status": 429,
                      "title": "Quota exceeded",
                      "type": "urn:mapi:error:QUOTA_EXCEEDED"
                    }
                  },
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED, QUOTA_EXCEEDED"
          }
        },
        "summary": "List the groups and arrays of an upload (an inspect run)",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/uploads/{upload_id}/inspection": {
      "get": {
        "description": "What the upload's inspect run found (``409 NOT_READY`` while it runs; ``404`` when\nno inspection was requested or its run ended without one - the run's ``problem`` says\nwhy it failed).",
        "operationId": "get_upload_inspection",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "upload_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Upload Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadInspection"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_READY": {
                    "summary": "The result is not ready yet",
                    "value": {
                      "code": "NOT_READY",
                      "detail": "The result is not ready yet",
                      "errors": [],
                      "status": 409,
                      "title": "The result is not ready yet",
                      "type": "urn:mapi:error:NOT_READY"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_READY"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "The groups and arrays an inspect run found",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/uploads/{upload_id}/renew": {
      "post": {
        "description": "A fresh signed PUT (valid 1 h) for the same object of an upload whose file has not\narrived; an expired upload becomes ``pending`` again. ``409`` when the upload was turned\ninto a dataset version or its file already arrived (v0.15). Quota usage stops counting an\nupload once it is ``expired``, so renewing one admits its size again (a ``pending`` upload\nis counted already, also after its PUT expired).",
        "operationId": "renew_upload",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "upload_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Upload Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadSession"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Sign a fresh PUT URL for an upload whose file did not arrive",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/versions": {
      "get": {
        "operationId": "list_dataset_versions",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_DatasetVersion_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Dataset Versions",
        "tags": [
          "datasets"
        ]
      },
      "post": {
        "operationId": "create_dataset_version",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetVersionCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetVersion"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Dataset Version",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/versions/{version}": {
      "get": {
        "operationId": "get_dataset_version",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetVersion"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Dataset Version",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/versions/{version}/artifacts/{name}": {
      "get": {
        "description": "Signed, generation-pinned URL for ``data.zarr.zip``/``schema.json``/``profile.json``/\n``preview.json``/``summary.json``/``columns.json`` and (M3.5) the Data Explorer views\n``ui/explore/…`` written at ingest (15 min, HTTP Range works).",
        "operationId": "get_dataset_artifact",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "title": "Name",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArtifactLink"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Dataset Artifact",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/versions/{version}/explore": {
      "post": {
        "description": "STL, stationarity, cross-correlations, VIF and every other section on demand.",
        "operationId": "explore_dataset_version",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DataExploreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Exploration"
                }
              }
            },
            "description": "Already computed (or an idempotent replay)"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Exploration"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `EXPLORE_INVALID`: The explorer request is not valid"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `QUOTA_EXCEEDED`: Quota exceeded"
          }
        },
        "summary": "Compute Data Explorer sections (an explore run)",
        "tags": [
          "explorers"
        ]
      }
    },
    "/v1/datasets/{dataset_id}/versions/{version}/{view}": {
      "get": {
        "description": "``…/preview``, ``…/schema``, ``…/profile``, ``…/summary``: 307 to the signed URL.",
        "operationId": "redirect_dataset_view",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "path",
            "name": "view",
            "required": true,
            "schema": {
              "pattern": "^(preview|schema|profile|summary)$",
              "title": "View",
              "type": "string"
            }
          }
        ],
        "responses": {
          "307": {
            "description": "Redirect to a signed URL"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Redirect Dataset View",
        "tags": [
          "datasets"
        ]
      }
    },
    "/v1/embeds/{embed_token}": {
      "get": {
        "description": "Public: the embedded plot with every dataset inline (``410 LINK_EXPIRED`` once\nexpired or revoked, ``404`` for an unknown token, ``429`` past the per-link or\nper-address rate). Cookies and ``Authorization`` are ignored; browsers may read it only\nfrom the plot-sandbox origin (CORS), which renders it under its own CSP.",
        "operationId": "get_embed",
        "parameters": [
          {
            "in": "path",
            "name": "embed_token",
            "required": true,
            "schema": {
              "maxLength": 128,
              "minLength": 1,
              "title": "Embed Token",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmbedView"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "410": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`LINK_EXPIRED`)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          }
        },
        "summary": "Public: the embedded plot with inline data (410 when expired or revoked)",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/endpoints": {
      "get": {
        "description": "Endpoints of the project, by alias.",
        "operationId": "list_endpoints",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Endpoint_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Endpoints of the project",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/endpoints/{alias}": {
      "delete": {
        "operationId": "delete_endpoint",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Delete the alias (model versions stay)",
        "tags": [
          "endpoints"
        ]
      },
      "get": {
        "operationId": "get_endpoint",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Endpoint"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "An endpoint and the version it serves",
        "tags": [
          "endpoints"
        ]
      },
      "put": {
        "description": "Point the alias at a model version (creating the alias if needed).\n\nThe promotion gate decides: a version whose scorecard passes, that was fitted with\n``evaluate_then_refit`` (unless the endpoint's policy allows ``train_only``) and whose\ninput contract does not break the endpoint's callers is promoted. A ``warn`` scorecard\n(or no scorecard) needs ``override=true`` with a ``reason`` from a signed-in project admin\n(``409 OVERRIDE_REQUIRED`` otherwise; API tokens can never override); a ``fail``\nscorecard, an interrupted fit or a ``train_only`` fit is ``409 PROMOTION_BLOCKED``.\nThe problem's ``errors`` list the gate's reasons.",
        "operationId": "promote_endpoint",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EndpointPromote"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Endpoint"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  },
                  "NOT_VALIDATED": {
                    "summary": "The governance policy needs a validated model",
                    "value": {
                      "code": "NOT_VALIDATED",
                      "detail": "The governance policy needs a validated model",
                      "errors": [],
                      "status": 409,
                      "title": "The governance policy needs a validated model",
                      "type": "urn:mapi:error:NOT_VALIDATED"
                    }
                  },
                  "OVERRIDE_REQUIRED": {
                    "summary": "Promotion needs an administrator override with a reason",
                    "value": {
                      "code": "OVERRIDE_REQUIRED",
                      "detail": "Promotion needs an administrator override with a reason",
                      "errors": [],
                      "status": 409,
                      "title": "Promotion needs an administrator override with a reason",
                      "type": "urn:mapi:error:OVERRIDE_REQUIRED"
                    }
                  },
                  "PROMOTION_BLOCKED": {
                    "summary": "The scorecard blocks the promotion",
                    "value": {
                      "code": "PROMOTION_BLOCKED",
                      "detail": "The scorecard blocks the promotion",
                      "errors": [],
                      "status": 409,
                      "title": "The scorecard blocks the promotion",
                      "type": "urn:mapi:error:PROMOTION_BLOCKED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT, PROMOTION_BLOCKED, OVERRIDE_REQUIRED, NOT_VALIDATED"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Create or promote (gated on the scorecard; override = admin + reason, audited)",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/endpoints/{alias}/history": {
      "get": {
        "operationId": "list_endpoint_history",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_EndpointRevision_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Promotions and rollbacks, newest first",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/endpoints/{alias}/rollback": {
      "post": {
        "operationId": "rollback_endpoint",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EndpointRollback"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Endpoint"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  },
                  "NOT_VALIDATED": {
                    "summary": "The governance policy needs a validated model",
                    "value": {
                      "code": "NOT_VALIDATED",
                      "detail": "The governance policy needs a validated model",
                      "errors": [],
                      "status": 409,
                      "title": "The governance policy needs a validated model",
                      "type": "urn:mapi:error:NOT_VALIDATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT, NOT_VALIDATED"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Point the alias back at an earlier revision's version (audited)",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/endpoints/{alias}/schema": {
      "get": {
        "description": "What to send: the input contract frozen at promotion and an example call body that\nvalidates against it.",
        "operationId": "get_endpoint_schema",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointSchema"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Input schema of the current version and an example payload",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/endpoints/{alias}/score": {
      "post": {
        "description": "Score the version the alias serves now, with replayed preprocessing.\n\n``data``/``scenario`` are ``dataset://`` references or inline XrJSON (up to 5 MB each).\n``Prefer: wait=N`` (N <= 60) waits up to N seconds: ``200`` with links to the outputs if\nthe run finished, else ``202`` with the run. Repeat the call with the same\n``Idempotency-Key`` (and ``Prefer: wait``) to collect the result later: tokens scoped to\n``score:<alias>`` need nothing else. Per-token rate limits and vCPU budgets apply.",
        "operationId": "score_endpoint",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          },
          {
            "description": "wait=N (N <= 60): wait up to N s for the result",
            "in": "header",
            "name": "Prefer",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "wait=N (N <= 60): wait up to N s for the result",
              "title": "Prefer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EndpointScoreCall"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreCallResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreCallResult"
                }
              }
            },
            "description": "Still running: the run"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "HORIZON_EXCEEDS_FIT": {
                    "summary": "Horizon exceeds the fitted range",
                    "value": {
                      "code": "HORIZON_EXCEEDS_FIT",
                      "detail": "Horizon exceeds the fitted range",
                      "errors": [],
                      "status": 409,
                      "title": "Horizon exceeds the fitted range",
                      "type": "urn:mapi:error:HORIZON_EXCEEDS_FIT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: HORIZON_EXCEEDS_FIT"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "PAYLOAD_TOO_LARGE": {
                    "summary": "The document exceeds a size limit",
                    "value": {
                      "code": "PAYLOAD_TOO_LARGE",
                      "detail": "The document exceeds a size limit",
                      "errors": [],
                      "status": 413,
                      "title": "The document exceeds a size limit",
                      "type": "urn:mapi:error:PAYLOAD_TOO_LARGE"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: PAYLOAD_TOO_LARGE"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "ACTUALS_INVALID": {
                    "summary": "The supplied actuals cannot be used for this forecast",
                    "value": {
                      "code": "ACTUALS_INVALID",
                      "detail": "The supplied actuals cannot be used for this forecast",
                      "errors": [],
                      "status": 422,
                      "title": "The supplied actuals cannot be used for this forecast",
                      "type": "urn:mapi:error:ACTUALS_INVALID"
                    }
                  },
                  "ACTUALS_NOT_SUPPORTED": {
                    "summary": "The model cannot update its forecast with supplied actuals",
                    "value": {
                      "code": "ACTUALS_NOT_SUPPORTED",
                      "detail": "The model cannot update its forecast with supplied actuals",
                      "errors": [],
                      "status": 422,
                      "title": "The model cannot update its forecast with supplied actuals",
                      "type": "urn:mapi:error:ACTUALS_NOT_SUPPORTED"
                    }
                  },
                  "CAPABILITY_UNSUPPORTED": {
                    "summary": "The model lacks this capability",
                    "value": {
                      "code": "CAPABILITY_UNSUPPORTED",
                      "detail": "The model lacks this capability",
                      "errors": [],
                      "status": 422,
                      "title": "The model lacks this capability",
                      "type": "urn:mapi:error:CAPABILITY_UNSUPPORTED"
                    }
                  },
                  "COORD_NOT_ALLOWED": {
                    "summary": "Coordinates not allowed by dim policy",
                    "value": {
                      "code": "COORD_NOT_ALLOWED",
                      "detail": "Coordinates not allowed by dim policy",
                      "errors": [],
                      "status": 422,
                      "title": "Coordinates not allowed by dim policy",
                      "type": "urn:mapi:error:COORD_NOT_ALLOWED"
                    }
                  },
                  "MISSING_FUTURE_COVARIATE": {
                    "summary": "A future covariate is missing",
                    "value": {
                      "code": "MISSING_FUTURE_COVARIATE",
                      "detail": "A future covariate is missing",
                      "errors": [],
                      "status": 422,
                      "title": "A future covariate is missing",
                      "type": "urn:mapi:error:MISSING_FUTURE_COVARIATE"
                    }
                  },
                  "MODE_NOT_SUPPORTED": {
                    "summary": "Score mode not supported",
                    "value": {
                      "code": "MODE_NOT_SUPPORTED",
                      "detail": "Score mode not supported",
                      "errors": [],
                      "status": 422,
                      "title": "Score mode not supported",
                      "type": "urn:mapi:error:MODE_NOT_SUPPORTED"
                    }
                  },
                  "NON_CONTIGUOUS_EXTENSION": {
                    "summary": "Extension is not contiguous",
                    "value": {
                      "code": "NON_CONTIGUOUS_EXTENSION",
                      "detail": "Extension is not contiguous",
                      "errors": [],
                      "status": 422,
                      "title": "Extension is not contiguous",
                      "type": "urn:mapi:error:NON_CONTIGUOUS_EXTENSION"
                    }
                  },
                  "RECURSIVE_UNSUPPORTED": {
                    "summary": "Recursive forecasting unsupported",
                    "value": {
                      "code": "RECURSIVE_UNSUPPORTED",
                      "detail": "Recursive forecasting unsupported",
                      "errors": [],
                      "status": 422,
                      "title": "Recursive forecasting unsupported",
                      "type": "urn:mapi:error:RECURSIVE_UNSUPPORTED"
                    }
                  },
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  },
                  "UNSEEN_LEVELS": {
                    "summary": "Unseen levels on a dim that forbids them",
                    "value": {
                      "code": "UNSEEN_LEVELS",
                      "detail": "Unseen levels on a dim that forbids them",
                      "errors": [],
                      "status": 422,
                      "title": "Unseen levels on a dim that forbids them",
                      "type": "urn:mapi:error:UNSEEN_LEVELS"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, MODE_NOT_SUPPORTED, UNSEEN_LEVELS, COORD_NOT_ALLOWED, MISSING_FUTURE_COVARIATE, NON_CONTIGUOUS_EXTENSION, CAPABILITY_UNSUPPORTED, RECURSIVE_UNSUPPORTED, ACTUALS_NOT_SUPPORTED, ACTUALS_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "QUOTA_EXCEEDED": {
                    "summary": "Quota exceeded",
                    "value": {
                      "code": "QUOTA_EXCEEDED",
                      "detail": "Quota exceeded",
                      "errors": [],
                      "status": 429,
                      "title": "Quota exceeded",
                      "type": "urn:mapi:error:QUOTA_EXCEEDED"
                    }
                  },
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED, QUOTA_EXCEEDED"
          }
        },
        "summary": "Score the current version (Prefer: wait=N -> 200 if done, else 202 with the run)",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/endpoints/{alias}/snippets": {
      "get": {
        "description": "Ready-to-run code that scores the endpoint with its example payload. The API token is\nread from ``MAPI_TOKEN`` (an Apps Script property): snippets never contain a secret.\n\nWith the endpoint's input table the Apps Script reads an \"Input\" sheet of actuals and\ndates to forecast, and the other snippets add a forecast over the periods after the fit\nto fill with actuals.",
        "operationId": "list_endpoint_snippets",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          },
          {
            "description": "Only these languages (repeatable)",
            "in": "query",
            "name": "language",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "$ref": "#/components/schemas/SnippetLanguage"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only these languages (repeatable)",
              "title": "Language"
            }
          },
          {
            "description": "The API base URL to embed (default: this server's)",
            "in": "query",
            "name": "base_url",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 500,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The API base URL to embed (default: this server's)",
              "title": "Base Url"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnippetSet"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Python, TypeScript, curl, R, Apps Script and notebook code for the endpoint",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/endpoints/{alias}/validate": {
      "post": {
        "description": "The checks ``…/score`` runs before it submits anything: the inline payload against the\nendpoint's input contract (variables, dims, coordinates), CoordPlan (modes, horizon,\nunseen levels, future covariates) and dataset references. ``200`` even when invalid.",
        "operationId": "validate_endpoint_request",
        "parameters": [
          {
            "description": "The endpoint alias (a slug)",
            "in": "path",
            "name": "alias",
            "required": true,
            "schema": {
              "description": "The endpoint alias (a slug)",
              "examples": [
                "geo-mmm-prod"
              ],
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,126}[a-z0-9])?$",
              "title": "Alias",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EndpointScoreCall"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EndpointValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "PAYLOAD_TOO_LARGE": {
                    "summary": "The document exceeds a size limit",
                    "value": {
                      "code": "PAYLOAD_TOO_LARGE",
                      "detail": "The document exceeds a size limit",
                      "errors": [],
                      "status": 413,
                      "title": "The document exceeds a size limit",
                      "type": "urn:mapi:error:PAYLOAD_TOO_LARGE"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: PAYLOAD_TOO_LARGE"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Static checks of a score call without running it",
        "tags": [
          "endpoints"
        ]
      }
    },
    "/v1/experiments": {
      "get": {
        "description": "Experiments of the project, newest first. ``name`` is a case-insensitive substring;\n``archived`` keeps the archived (true) or the active (false) ones.",
        "operationId": "list_experiments",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "name",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 200,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Name"
            }
          },
          {
            "in": "query",
            "name": "archived",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Archived"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Experiment_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Experiments",
        "tags": [
          "experiments"
        ]
      },
      "post": {
        "operationId": "create_experiment",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExperimentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Experiment"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Experiment",
        "tags": [
          "experiments"
        ]
      }
    },
    "/v1/experiments/{experiment_id}": {
      "delete": {
        "description": "Delete an experiment: its runs stay (they leave the experiment) and its saved views\nare deleted.",
        "operationId": "delete_experiment",
        "parameters": [
          {
            "in": "path",
            "name": "experiment_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Experiment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Experiment",
        "tags": [
          "experiments"
        ]
      },
      "get": {
        "operationId": "get_experiment",
        "parameters": [
          {
            "in": "path",
            "name": "experiment_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Experiment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Experiment"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Experiment",
        "tags": [
          "experiments"
        ]
      },
      "patch": {
        "description": "Merge patch: rename (names stay unique per project), describe, archive or unarchive.\nThe description text is never written to the audit log.",
        "operationId": "update_experiment",
        "parameters": [
          {
            "in": "path",
            "name": "experiment_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Experiment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExperimentPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Experiment"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Experiment",
        "tags": [
          "experiments"
        ]
      }
    },
    "/v1/experiments/{experiment_id}/runs": {
      "post": {
        "description": "Move runs into the experiment (``add``; a run leaves its previous experiment) or out\nof it (``remove``). Ids that are not runs of the project come back in ``missing``. An\narchived experiment takes no new runs (409).",
        "operationId": "update_experiment_runs",
        "parameters": [
          {
            "in": "path",
            "name": "experiment_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Experiment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExperimentRunsWrite"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExperimentRunsResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Experiment Runs",
        "tags": [
          "experiments"
        ]
      }
    },
    "/v1/explorations/{run_id}": {
      "get": {
        "description": "``done`` once the run is terminal; ``index`` and ``views`` only when it succeeded.",
        "operationId": "get_exploration",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Exploration"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "An explore run and, once done, links to its views",
        "tags": [
          "explorers"
        ]
      }
    },
    "/v1/governance/policies": {
      "get": {
        "description": "Tenant-wide policies first (every project's floor), then the project's own. The\nplatform's default policies are seeded on the tenant's first use.",
        "operationId": "list_policies",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "scope",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "tenant",
                    "project"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Scope"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_GovernancePolicy_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Policies in force in the project (its own and the tenant's)",
        "tags": [
          "governance"
        ]
      },
      "post": {
        "operationId": "create_policy",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GovernancePolicyCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GovernancePolicy"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `POLICY_INVALID`: The governance policy is not valid"
          }
        },
        "summary": "Add a project policy (version 1)",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/governance/policies/{policy_id}": {
      "delete": {
        "operationId": "delete_policy",
        "parameters": [
          {
            "in": "path",
            "name": "policy_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Policy Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Retire a policy (its versions stay for audit)",
        "tags": [
          "governance"
        ]
      },
      "get": {
        "description": "A project policy, or a tenant-wide one in force in the project.",
        "operationId": "get_policy",
        "parameters": [
          {
            "in": "path",
            "name": "policy_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Policy Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GovernancePolicy"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "The latest version of a policy",
        "tags": [
          "governance"
        ]
      },
      "put": {
        "operationId": "update_policy",
        "parameters": [
          {
            "in": "path",
            "name": "policy_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Policy Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GovernancePolicyUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GovernancePolicy"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `CONFLICT`: Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `POLICY_INVALID`: The governance policy is not valid"
          }
        },
        "summary": "Save a new version (expected_version guards concurrent edits)",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/governance/policies/{policy_id}/versions": {
      "get": {
        "operationId": "list_policy_versions",
        "parameters": [
          {
            "in": "path",
            "name": "policy_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Policy Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_GovernancePolicy_"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Every version of a policy, newest first",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/guided/detect-roles": {
      "post": {
        "description": "Rank the columns for each question of a template and pre-fill the answers.\n\nSend ``columns`` (profiled in the browser) or name a stored ``dataset`` version; the\nprofiles of a stored version come from its ingest run (``columns.json``: the uploaded\ncolumns, for MFF uploads the pivoted variables) or, for older versions, from its dims\nand variables.",
        "operationId": "detect_roles",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DetectRolesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleSuggestions"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          }
        },
        "summary": "Suggest a column for every question from column profiles",
        "tags": [
          "guided"
        ]
      }
    },
    "/v1/guided/drafts": {
      "post": {
        "description": "Turn answers into the ingest mapping for the upload, the ``ModelSpec`` (and its YAML)\nfor the request's project, and the static validator's findings. ``422\nGUIDED_ANSWERS_INVALID`` points at ``/answers/<question>`` for a missing or impossible\nanswer; problems the validator finds come back as ``issues`` (200).",
        "operationId": "create_guided_draft",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GuidedAnswers"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuidedDraft"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "GUIDED_ANSWERS_INVALID": {
                    "summary": "The guided answers do not fit the template",
                    "value": {
                      "code": "GUIDED_ANSWERS_INVALID",
                      "detail": "The guided answers do not fit the template",
                      "errors": [],
                      "status": 422,
                      "title": "The guided answers do not fit the template",
                      "type": "urn:mapi:error:GUIDED_ANSWERS_INVALID"
                    }
                  },
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, GUIDED_ANSWERS_INVALID"
          }
        },
        "summary": "Answers -> ingest mapping + ModelSpec draft (+ YAML); stores nothing",
        "tags": [
          "guided"
        ]
      }
    },
    "/v1/guided/prior-translations": {
      "post": {
        "description": "Business priors (ROI or share ranges with a credibility, a baseline share) to\nmodel-space priors for the spec's model, with a prior-predictive preview in business\nunits. Static problems (an unknown channel, shares adding up to more than the KPI, a\nmodel without ``business_priors`` calibration) are refused before any run starts.",
        "operationId": "create_prior_translation",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriorTranslationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriorTranslation"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriorTranslation"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `BUSINESS_PRIORS_INVALID`: The business priors are inconsistent; `CALIBRATION_UNSUPPORTED`: The model cannot use this calibration data"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `QUOTA_EXCEEDED`: Quota exceeded"
          }
        },
        "summary": "Translate business priors (sandboxed translate_priors run)",
        "tags": [
          "guided"
        ]
      }
    },
    "/v1/guided/prior-translations/{run_id}": {
      "get": {
        "description": "``done`` once the run is terminal; ``result`` only when it succeeded (a failed run's\nproblem is on ``run.problem``).",
        "operationId": "get_prior_translation",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriorTranslation"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "A prior translation and, once done, its priors and preview",
        "tags": [
          "guided"
        ]
      }
    },
    "/v1/guided/requests:compile": {
      "post": {
        "description": "Compile a slider scenario (``whatif``), a forecast over a horizon or an intervention\npreset (``counterfactual``: channel off, budget x k) into the exact ``ScoreRequest``\n(\"Run exact\" submits it with ``POST /v1/models/{id}/versions/{v}:score``). The request\nis checked statically against the model version's score metadata (for an\n``endpoint://`` target, the version the endpoint serves now): an unknown model is\n``404``, and a request the version cannot score (unknown coordinates, missing future\ncovariates under ``future_covariates: supplied``) is ``422`` with JSON pointers.\nA what-if or preset over the fit window (no horizon) scores the data the version was\nfitted on, so the compiled request names that dataset version in ``data``.\nNothing is stored and no run starts.",
        "operationId": "compile_guided_request",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GuidedCompile"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreRequest"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "MISSING_FUTURE_COVARIATE": {
                    "summary": "A future covariate is missing",
                    "value": {
                      "code": "MISSING_FUTURE_COVARIATE",
                      "detail": "A future covariate is missing",
                      "errors": [],
                      "status": 422,
                      "title": "A future covariate is missing",
                      "type": "urn:mapi:error:MISSING_FUTURE_COVARIATE"
                    }
                  },
                  "REF_UNRESOLVED": {
                    "summary": "A reference could not be resolved",
                    "value": {
                      "code": "REF_UNRESOLVED",
                      "detail": "A reference could not be resolved",
                      "errors": [],
                      "status": 422,
                      "title": "A reference could not be resolved",
                      "type": "urn:mapi:error:REF_UNRESOLVED"
                    }
                  },
                  "SCENARIO_OUT_OF_RANGE": {
                    "summary": "The scenario is outside the precomputed grid",
                    "value": {
                      "code": "SCENARIO_OUT_OF_RANGE",
                      "detail": "The scenario is outside the precomputed grid",
                      "errors": [],
                      "status": 422,
                      "title": "The scenario is outside the precomputed grid",
                      "type": "urn:mapi:error:SCENARIO_OUT_OF_RANGE"
                    }
                  },
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, REF_UNRESOLVED, SCENARIO_OUT_OF_RANGE, MISSING_FUTURE_COVARIATE"
          }
        },
        "summary": "What-if scenario, forecast or preset -> the ScoreRequest it stands for ('Run exact')",
        "tags": [
          "guided"
        ]
      }
    },
    "/v1/guided/templates": {
      "get": {
        "description": "The built-in templates in id order: questions, the spec template, scorecard checks\nand ``x-ui-level`` hints. Templates are data and the same for every tenant.",
        "operationId": "list_guided_templates",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_GuidedTemplate_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          }
        },
        "summary": "Guided templates (geo marketing mix, weekly forecast, demand by store, choice)",
        "tags": [
          "guided"
        ]
      }
    },
    "/v1/guided/templates/{template_id}": {
      "get": {
        "operationId": "get_guided_template",
        "parameters": [
          {
            "in": "path",
            "name": "template_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Template Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuidedTemplate"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "One template: questions, spec template, scorecard checks, UI levels",
        "tags": [
          "guided"
        ]
      }
    },
    "/v1/me": {
      "get": {
        "description": "Who is calling, and the tenants, projects and roles they can act in. For a token:\nonly its own project (its scopes narrow every role shown).",
        "operationId": "get_me",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Me",
        "tags": [
          "tenants",
          "identity"
        ]
      }
    },
    "/v1/models": {
      "get": {
        "operationId": "list_models",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Model_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Models",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}": {
      "get": {
        "operationId": "get_model",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Model"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Model",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions": {
      "get": {
        "operationId": "list_model_versions",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ModelVersion_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Model Versions",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}": {
      "get": {
        "operationId": "get_model_version",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelVersion"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Model Version",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}/artifacts/{name}": {
      "get": {
        "description": "Signed URL for a bundle object or ``ui/…`` view, minted only after the signed bundle\nmanifest verifies (``INTEGRITY_FAILURE`` otherwise). Audited.",
        "operationId": "get_model_artifact",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "title": "Name",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArtifactLink"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Model Artifact",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}/explore": {
      "post": {
        "description": "Forecasts, backtests (refits on a split plan) and comparisons on demand; the fit\nsections were already written by the fit.",
        "operationId": "explore_model_version",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelExploreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Exploration"
                }
              }
            },
            "description": "Already computed (or an idempotent replay)"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Exploration"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `EXPLORE_INVALID`: The explorer request is not valid; `CAPABILITY_UNSUPPORTED`: The model lacks this capability"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `QUOTA_EXCEEDED`: Quota exceeded"
          }
        },
        "summary": "Compute Model Explorer sections (an explore run)",
        "tags": [
          "explorers"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}/inputs": {
      "get": {
        "description": "The input contract of the version (the one an endpoint serving it would freeze): the\ninput dims and variables under the spec's canonical names, which are needed on future\nperiods, the fitted coordinates, and the input table with ``periods`` periods after the\nfit (1-200) for a model that forecasts.",
        "operationId": "get_model_inputs",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "periods",
            "required": false,
            "schema": {
              "default": 8,
              "title": "Periods",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelInputSchema"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "What a score call can send: the input contract and the input table",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}/plots": {
      "get": {
        "operationId": "list_plots",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_PlotListItem_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Plots",
        "tags": [
          "models",
          "plots"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}/plots/{plot_id}": {
      "get": {
        "description": "A sanitized PlotSpec — render it only in the plot-sandbox origin. The manifest is\nverified first, and the stored spec is re-sanitized on the way out.",
        "operationId": "get_plot",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "path",
            "name": "plot_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9_.\\-]{1,128}$",
              "title": "Plot Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlotSpec"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Plot",
        "tags": [
          "models",
          "plots"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}/ui/{path}": {
      "get": {
        "description": "Precomputed ``ui/`` views (summaries, thin draws, grids): 307 to a signed URL.",
        "operationId": "redirect_model_ui",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "path",
            "name": "path",
            "required": true,
            "schema": {
              "title": "Path",
              "type": "string"
            }
          }
        ],
        "responses": {
          "307": {
            "description": "Redirect to a signed URL of the precomputed view"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Redirect Model Ui",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}/validations": {
      "get": {
        "operationId": "list_model_validations",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ModelValidation_"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Validations of a model version, newest first",
        "tags": [
          "governance"
        ]
      },
      "post": {
        "description": "Every policy in force for the model's family (plus any ``policy_ids``, which can only\nadd policies) decides the checks; they run in the sandbox and the validation advances\nwhen they finish.",
        "operationId": "request_model_validation",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelValidation"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `VALIDATION_TRANSITION_INVALID`: The model's validation status does not allow this"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `POLICY_INVALID`: The governance policy is not valid"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `QUOTA_EXCEEDED`: Quota exceeded"
          }
        },
        "summary": "Submit a model version: runs the policy checks as a governance run",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}:evaluate": {
      "post": {
        "operationId": "evaluate_model",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EvaluateCall"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "The evaluate run"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Evaluate Model",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}:optimize": {
      "post": {
        "description": "How should the budget be split across channels (and geos)? The plan comes from the\nmodel's posterior: the allocation with its expected KPI and interval, the uplift over the\ncurrent plan and the chance it is positive, the expected regret of committing to one\nplan, the marginal return of every channel and, on request, the efficient frontier.\nStatic problems (a model that cannot optimise, a version that is not ready) are refused\nbefore any run starts; bounds the data cannot meet fail the run with\n``OPTIMIZE_INFEASIBLE``.",
        "operationId": "optimize_model_version",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Prefer",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Prefer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "example0": {
                  "value": {
                    "channels": {
                      "search": {
                        "min_spend": 50000
                      },
                      "tv": {
                        "max_multiplier": 1.5,
                        "min_multiplier": 0.5
                      }
                    },
                    "frontier": {
                      "n_points": 10
                    },
                    "groups": [
                      {
                        "channels": [
                          "search",
                          "social"
                        ],
                        "min_share": 0.4,
                        "name": "digital"
                      }
                    ],
                    "objective": "p10",
                    "total_budget": 1000000
                  }
                },
                "example1": {
                  "value": {
                    "budget_change_pct": -10,
                    "objective": "mean"
                  }
                },
                "example2": {
                  "value": {
                    "mode": "free",
                    "value_per_kpi": 1.0
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/OptimizeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Optimization"
                }
              }
            },
            "description": "Successful Response"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Optimization"
                }
              }
            },
            "description": "Still running (poll the optimization)"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `OPTIMIZE_INFEASIBLE`: The budget constraints cannot all be met; `CAPABILITY_UNSUPPORTED`: The model lacks this capability"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `QUOTA_EXCEEDED`: Quota exceeded"
          }
        },
        "summary": "Optimise a budget across channels (Prefer: wait=N -> 200 if done, else 202)",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models/{model_id}/versions/{version}:score": {
      "post": {
        "description": "Score with replayed preprocessing. ``Prefer: wait=N`` (≤ 60) waits up to N s:\n200 with output links if the run finished, else 202 with the run. ``inline`` data is\nchecked against the version's input contract (``GET …/inputs``) and stored as a run\ninput, as an endpoint's inline payloads are.",
        "operationId": "score_model",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Model Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Version",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Prefer",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Prefer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScoreCall"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreCallResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreCallResult"
                }
              }
            },
            "description": "Still running"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Score Model",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/models:compare": {
      "post": {
        "description": "Holdout metrics of every version, a ranking per metric and pairwise Diebold-Mariano\ntests on the first version's held-out periods.",
        "operationId": "compare_model_versions",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelCompareRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Exploration"
                }
              }
            },
            "description": "Already computed (or an idempotent replay)"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Exploration"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `EXPLORE_INVALID`: The explorer request is not valid"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `QUOTA_EXCEEDED`: Quota exceeded"
          }
        },
        "summary": "Compare several model versions side by side",
        "tags": [
          "explorers"
        ]
      }
    },
    "/v1/optimizations/{run_id}": {
      "get": {
        "description": "``done`` once the run is terminal; ``result`` only when it succeeded (a failed run's\nproblem, e.g. ``OPTIMIZE_INFEASIBLE``, is on ``run.problem``).",
        "operationId": "get_optimization",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Optimization"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "An optimize run and, once done, its plan",
        "tags": [
          "models"
        ]
      }
    },
    "/v1/plots": {
      "get": {
        "description": "Saved plots of the project, newest first (without their specs).",
        "operationId": "list_saved_plots",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_SavedPlot_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          }
        },
        "summary": "Saved plots",
        "tags": [
          "plots"
        ]
      },
      "post": {
        "description": "Save a model version's plot (``source``: verified against the signed bundle manifest)\nor a user-authored PlotSpec (``spec``: sanitized; its provenance is recorded as\n``author`` and it can never be embedded). ``PLOT_UNSAFE`` when the sanitizer refuses it.",
        "operationId": "create_saved_plot",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SavedPlotCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SavedPlot"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`SCHEMA_INVALID`, `PLOT_UNSAFE`)"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`INTEGRITY_FAILURE`)"
          }
        },
        "summary": "Save a model version's plot or a user-authored PlotSpec",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/plots/renders/{run_id}": {
      "get": {
        "description": "A render run and, once it succeeded, signed links to its files.",
        "operationId": "get_plot_render",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlotRender"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          }
        },
        "summary": "A render run and links to its files",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/plots/{plot_id}": {
      "delete": {
        "description": "Delete a saved plot. Its embed links stop working (404) and their images are removed.",
        "operationId": "delete_saved_plot",
        "parameters": [
          {
            "in": "path",
            "name": "plot_id",
            "required": true,
            "schema": {
              "pattern": "^plt_[0-9a-z]{26}$",
              "title": "Plot Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          }
        },
        "summary": "Delete a saved plot (revokes its embeds)",
        "tags": [
          "plots"
        ]
      },
      "get": {
        "description": "A saved plot with its spec, sanitized again on the way out. Render it only in the\nplot-sandbox origin.",
        "operationId": "get_saved_plot",
        "parameters": [
          {
            "in": "path",
            "name": "plot_id",
            "required": true,
            "schema": {
              "pattern": "^plt_[0-9a-z]{26}$",
              "title": "Plot Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SavedPlot"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          }
        },
        "summary": "A saved plot with its sanitized spec",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/plots/{plot_id}/embeds": {
      "get": {
        "description": "Embed links of a saved plot, newest first (never their tokens).",
        "operationId": "list_plot_embeds",
        "parameters": [
          {
            "in": "path",
            "name": "plot_id",
            "required": true,
            "schema": {
              "pattern": "^plt_[0-9a-z]{26}$",
              "title": "Plot Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_PlotEmbed_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          }
        },
        "summary": "Embed links of a plot",
        "tags": [
          "plots"
        ]
      },
      "post": {
        "description": "Mint a read-only link (the token is in the response once; only its HMAC is stored).\nOnly plots a model version drew with a platform recipe can be embedded\n(``EMBED_NOT_ALLOWED`` for plugin- and user-authored plots). When the caller may start\nrender runs, a PNG of the plot is rendered in the sandbox as the embed page's fallback.\nAudited.",
        "operationId": "create_plot_embed",
        "parameters": [
          {
            "in": "path",
            "name": "plot_id",
            "required": true,
            "schema": {
              "pattern": "^plt_[0-9a-z]{26}$",
              "title": "Plot Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlotEmbedCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlotEmbedCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`SCHEMA_INVALID`, `EMBED_NOT_ALLOWED`, `PLOT_UNSAFE`)"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`INTEGRITY_FAILURE`)"
          }
        },
        "summary": "Tokenised read-only link (platform recipes only; shown once)",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/plots/{plot_id}/embeds/{embed_id}": {
      "delete": {
        "description": "Revoke an embed link: it answers ``410 LINK_EXPIRED`` from now on. Idempotent.",
        "operationId": "revoke_plot_embed",
        "parameters": [
          {
            "in": "path",
            "name": "plot_id",
            "required": true,
            "schema": {
              "pattern": "^plt_[0-9a-z]{26}$",
              "title": "Plot Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "embed_id",
            "required": true,
            "schema": {
              "pattern": "^emb_[0-9a-z]{26}$",
              "title": "Embed Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`RATE_LIMITED`)"
          }
        },
        "summary": "Revoke an embed link (idempotent)",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/plots:render": {
      "post": {
        "description": "Render one plot to PNG, SVG or PDF in the sandbox (Vega-Lite through vl-convert with\nnetwork access disabled; Plotly only where the platform enables it, else\n``MODE_NOT_SUPPORTED``). The plot is sanitized first and its data is passed to the run\nas pinned inputs: rendering never fetches a URL. ``Prefer: wait=N`` (≤ 60) waits up to\nN s: 200 with signed links to ``renders/<plot>.<format>`` when done, else 202 with the\nrun (poll ``GET /v1/plots/renders/{run_id}``).",
        "operationId": "render_plot",
        "parameters": [
          {
            "in": "header",
            "name": "Prefer",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Prefer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlotRenderRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlotRender"
                }
              }
            },
            "description": "Successful Response"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlotRender"
                }
              }
            },
            "description": "Still rendering"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`UNAUTHENTICATED`)"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`FORBIDDEN`)"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`NOT_FOUND`)"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`SCHEMA_INVALID`, `PLOT_UNSAFE`, `MODE_NOT_SUPPORTED`)"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`QUOTA_EXCEEDED`, `RATE_LIMITED`)"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem (`INTEGRITY_FAILURE`)"
          }
        },
        "summary": "PNG, SVG or PDF in the sandbox (Prefer: wait=N -> 200 if done, else 202)",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/plots:validate": {
      "post": {
        "description": "Run the server-side plot sanitizer on a user-authored PlotSpec (200 even when it is\nunsafe: the verdict is ``valid`` + ``issues``).",
        "operationId": "validate_plot",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlotSpec",
                "additionalProperties": true,
                "description": "A PlotSpec document",
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlotValidateResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Validate Plot",
        "tags": [
          "plots"
        ]
      }
    },
    "/v1/projects": {
      "get": {
        "description": "Every project the caller can act in, across its tenants (ordered by tenant, id).",
        "operationId": "list_projects",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Project_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Projects",
        "tags": [
          "projects"
        ]
      }
    },
    "/v1/projects/{project_id}": {
      "get": {
        "description": "The selected project (its tenant comes from ``X-Mapi-Project``, the token, or the\ncaller's only tenant).",
        "operationId": "get_project",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Project",
        "tags": [
          "projects"
        ]
      }
    },
    "/v1/run-compare": {
      "get": {
        "description": "Compare 2 to 10 runs (``run``, repeatable, in the order shown): every metric series\nsummary, the histories of up to 12 metric keys (``key``; default the keys most of the\nruns have), the params with the ones that differ (``params=false`` leaves them out) and\nup to 4 media keys (``media_key``) with signed links. A run of another project is 404.",
        "operationId": "compare_runs",
        "parameters": [
          {
            "in": "query",
            "name": "run",
            "required": true,
            "schema": {
              "items": {
                "type": "string"
              },
              "maxItems": 64,
              "title": "Run",
              "type": "array"
            }
          },
          {
            "in": "query",
            "name": "key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 64,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Key"
            }
          },
          {
            "in": "query",
            "name": "media_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 64,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Media Key"
            }
          },
          {
            "in": "query",
            "name": "max_points",
            "required": false,
            "schema": {
              "default": 300,
              "maximum": 2000,
              "minimum": 10,
              "title": "Max Points",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "params",
            "required": false,
            "schema": {
              "default": true,
              "title": "Params",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunCompare"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Compare Runs",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/run-keys": {
      "get": {
        "description": "Metric series, param keys and tag keys of the project's runs (or one experiment's),\nwith how many runs have each, most common first. ``prefix`` keeps keys that start with\nit. Lists are capped (metrics and params 500, tags 200; ``truncated``).",
        "operationId": "list_run_keys",
        "parameters": [
          {
            "in": "query",
            "name": "experiment_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Experiment Id"
            }
          },
          {
            "in": "query",
            "name": "prefix",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 250,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Prefix"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunKeys"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Run Keys",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/run-views": {
      "get": {
        "description": "Saved views of the project ordered by name; ``experiment_id`` keeps the views of\nthat experiment.",
        "operationId": "list_run_views",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "experiment_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Experiment Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_RunView_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Run Views",
        "tags": [
          "runs"
        ]
      },
      "post": {
        "operationId": "create_run_view",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunViewCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunView"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Run View",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/run-views/{view_id}": {
      "delete": {
        "operationId": "delete_run_view",
        "parameters": [
          {
            "in": "path",
            "name": "view_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "View Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Run View",
        "tags": [
          "runs"
        ]
      },
      "patch": {
        "operationId": "update_run_view",
        "parameters": [
          {
            "in": "path",
            "name": "view_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "View Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunViewPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunView"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Run View",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs": {
      "get": {
        "description": "Runs of the project, newest first by default.\n\n``experiment_id`` (v0.14) keeps the runs of one experiment. ``name`` is a\ncase-insensitive substring of the run name; ``tag`` (repeatable) is ``key``\n(the run has the tag) or ``key:value``; ``filter`` (repeatable, at most 8) compares a\nmetric series summary, a param, a tag or the name (``metric.rmse < 0.5``); ``order_by``\nsorts on one ref (``-metric.rmse``; runs without the value sort last); ``column``\n(repeatable, at most 16) returns those values in ``Run.columns``.",
        "operationId": "list_runs",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/RunKind"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "state",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/RunState"
                },
                {
                  "type": "null"
                }
              ],
              "title": "State"
            }
          },
          {
            "in": "query",
            "name": "spec_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Spec Id"
            }
          },
          {
            "in": "query",
            "name": "parent_run_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Parent Run Id"
            }
          },
          {
            "in": "query",
            "name": "experiment_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Experiment Id"
            }
          },
          {
            "in": "query",
            "name": "name",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 200,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Name"
            }
          },
          {
            "in": "query",
            "name": "tag",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Tag"
            }
          },
          {
            "in": "query",
            "name": "filter",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Filter"
            }
          },
          {
            "in": "query",
            "name": "order_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 512,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Order By"
            }
          },
          {
            "in": "query",
            "name": "column",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Column"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Run_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Runs",
        "tags": [
          "runs"
        ]
      },
      "post": {
        "operationId": "create_run",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Run",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}": {
      "get": {
        "operationId": "get_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Run",
        "tags": [
          "runs"
        ]
      },
      "patch": {
        "description": "Merge patch: a field left out is unchanged, ``null`` clears the name or the note, and\na tag set to ``null`` is deleted. ``experiment_id`` (v0.14) moves the run to another\nexperiment (not an archived one; unknown: 422) and ``null`` takes it out of its\nexperiment. The note text is never written to the audit log.",
        "operationId": "update_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Run",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/events": {
      "get": {
        "description": "``Accept: text/event-stream`` → live SSE; anything else → a JSON page of events.",
        "operationId": "run_events",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "After"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Last-Event-ID",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Last-Event-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_RunEventView_"
                }
              },
              "text/event-stream": {}
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Run Events",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/logs": {
      "get": {
        "description": "Captured and user lines, oldest first. ``line`` and ``fields`` are untrusted text:\nrender them as text only. ``level`` is the minimum level (``debug < info < warning <\nerror``); lines without a level count as ``info``.\n\n``user`` lines come back only with ``stream=user`` or ``include_user=true``: a client\nolder than v0.11 knows only the streams ``stdout``, ``stderr`` and ``system``.",
        "operationId": "run_logs",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "attempt",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attempt"
            }
          },
          {
            "in": "query",
            "name": "stream",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "pattern": "^(stdout|stderr|system|user)$",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Stream"
            }
          },
          {
            "in": "query",
            "name": "level",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "debug",
                    "info",
                    "warning",
                    "error"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Level"
            }
          },
          {
            "description": "Also return the structured 'user' lines (v0.11)",
            "in": "query",
            "name": "include_user",
            "required": false,
            "schema": {
              "default": false,
              "description": "Also return the structured 'user' lines (v0.11)",
              "title": "Include User",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_LogLine_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Run Logs",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/media": {
      "get": {
        "description": "The run's media, ordered by key, labels, step and id. ``links`` (default true) adds a\nsigned GET (``url``, ``expires_at``) of each item; ``caption`` is untrusted text.",
        "operationId": "list_run_media",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "pattern": "^[a-z][a-z0-9_]{0,63}$",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Key"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "image",
                    "table"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "attempt",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attempt"
            }
          },
          {
            "in": "query",
            "name": "links",
            "required": false,
            "schema": {
              "default": true,
              "title": "Links",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_RunMedia_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Run Media",
        "tags": [
          "runs"
        ]
      },
      "post": {
        "description": "Log one image (PNG/JPEG) or table (JSON) into the run's current attempt (also after\nthe run finished). The same bytes at the same key, labels and step are stored once;\nother bytes replace the item. Over the run's media budget: ``QUOTA_EXCEEDED``.",
        "operationId": "log_run_media",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediaWrite"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunMedia"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Log Run Media",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/media-keys": {
      "get": {
        "description": "The run's media series (key + labels) with their item counts and steps, ordered by\nkey and labels.",
        "operationId": "list_run_media_keys",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "attempt",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attempt"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_MediaKeySummary_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Run Media Keys",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/media/{media_id}": {
      "get": {
        "description": "One media item with a signed GET of the stored copy (verify ``size`` and ``crc32c``).",
        "operationId": "get_run_media",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "media_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Media Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunMedia"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Run Media",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/metrics": {
      "get": {
        "description": "The run's metric series, ordered by key and labels. Without ``attempt`` each series is\nsummarised for the newest attempt that wrote it; with it, for that attempt only.",
        "operationId": "list_run_metrics",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "pattern": "^[a-z][a-z0-9_]{0,63}$",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Key"
            }
          },
          {
            "in": "query",
            "name": "attempt",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attempt"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_MetricSeries_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Run Metrics",
        "tags": [
          "runs"
        ]
      },
      "post": {
        "description": "Log metric points (for example business KPIs measured after the fit) into the run's\ncurrent attempt. A stepped point already stored is kept (``duplicates``); a scalar point\nreplaces an older one.",
        "operationId": "log_run_metrics",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetricsWrite"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricsWriteResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Log Run Metrics",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/metrics/{key}": {
      "get": {
        "description": "Every series of ``key`` (at most 64, by labels), downsampled to ``max_points`` per\nseries (LTTB over step and value; the first and the last point are always kept).\n``label=k:v`` (repeatable) keeps the series with that label value.",
        "operationId": "get_metric_history",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "pattern": "^[a-z][a-z0-9_]{0,63}$",
              "title": "Key",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "max_points",
            "required": false,
            "schema": {
              "default": 1000,
              "maximum": 10000,
              "minimum": 10,
              "title": "Max Points",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "attempt",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attempt"
            }
          },
          {
            "in": "query",
            "name": "label",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "maxItems": 8,
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Label"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricHistory"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Metric History",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/params": {
      "get": {
        "description": "The run's params, ordered by key. ``value`` is untrusted text: render it as text.",
        "operationId": "list_run_params",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "prefix",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 250,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Prefix"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_RunParam_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Run Params",
        "tags": [
          "runs"
        ]
      },
      "post": {
        "description": "Log params. A param is write-once: logging the stored value again is ``unchanged``;\na different value refuses the whole write (409 ``CONFLICT``, nothing is written).",
        "operationId": "log_run_params",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParamsWrite"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParamsWriteResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Log Run Params",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}/plots": {
      "get": {
        "description": "Plots a run rendered (``plots.json``) in its newest attempt that has them: succeeded\nand partial runs, and failed or cancelled runs whose earlier partial attempt wrote plots.\nEvery read passes the plot sanitizer; plots it rejects are left out. Empty while no\nattempt has plots. The control plane decodes nothing but this size-capped JSON, read at\nthe generation the finalizer verified.",
        "operationId": "list_run_plots",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_PlotSpec_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Run Plots",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}:cancel": {
      "post": {
        "description": "Idempotent: ``cancelling``, or the terminal state if the run already finished.\n\nA ``finalizing`` run is left alone (the response shows it still finalizing): its\nexecution is over, and cancelling would only throw away a complete result after the\nfinalizer reserved a version number and copied write-once bundle objects.",
        "operationId": "cancel_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Cancel Run",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}:resume": {
      "post": {
        "description": "Re-queue a ``partial`` run from its checkpoints (new attempt).",
        "operationId": "resume_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Resume Run",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/runs/{run_id}:retry": {
      "post": {
        "description": "A *new* run from a failed one (optionally one resource class up or a new seed).",
        "operationId": "retry_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunRetry"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Retry Run",
        "tags": [
          "runs"
        ]
      }
    },
    "/v1/schemas/{name}": {
      "get": {
        "description": "An exported JSON Schema, e.g. ``modelspec.json`` (drives Monaco and JSON Forms).",
        "operationId": "get_schema",
        "parameters": [
          {
            "in": "path",
            "name": "name",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9_.\\-]{1,128}$",
              "title": "Name",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Get Schema",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Schema",
        "tags": [
          "catalog"
        ]
      }
    },
    "/v1/specs": {
      "get": {
        "operationId": "list_specs",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_SpecDoc_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Specs",
        "tags": [
          "specs"
        ]
      },
      "post": {
        "description": "Store revision 1 (invalid documents are stored too, with ``valid: false``).\n\nIn a Guided-locked project, members below admin may store Guided specs only (``403``\nwith the offending pointers otherwise; see ``Project.guided_locked``).",
        "operationId": "create_spec",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpecCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpecDoc"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Spec",
        "tags": [
          "specs"
        ]
      }
    },
    "/v1/specs/{spec_id}": {
      "get": {
        "operationId": "get_spec",
        "parameters": [
          {
            "in": "path",
            "name": "spec_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Spec Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpecDoc"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Spec",
        "tags": [
          "specs"
        ]
      }
    },
    "/v1/specs/{spec_id}/revisions": {
      "get": {
        "operationId": "list_spec_revisions",
        "parameters": [
          {
            "in": "path",
            "name": "spec_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Spec Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_SpecRevision_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Spec Revisions",
        "tags": [
          "specs"
        ]
      },
      "post": {
        "operationId": "create_spec_revision",
        "parameters": [
          {
            "in": "path",
            "name": "spec_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Spec Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpecRevisionCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpecRevision"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Spec Revision",
        "tags": [
          "specs"
        ]
      }
    },
    "/v1/specs/{spec_id}/revisions/{revision}": {
      "get": {
        "operationId": "get_spec_revision",
        "parameters": [
          {
            "in": "path",
            "name": "spec_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Spec Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "revision",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Revision",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpecRevision"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Spec Revision",
        "tags": [
          "specs"
        ]
      }
    },
    "/v1/specs/{spec_id}/revisions/{revision}/diff": {
      "get": {
        "description": "What changed from ``against`` (default: the previous revision) to ``revision``.",
        "operationId": "diff_spec_revisions",
        "parameters": [
          {
            "in": "path",
            "name": "spec_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Spec Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "revision",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Revision",
              "type": "integer"
            }
          },
          {
            "description": "Default: revision - 1",
            "in": "query",
            "name": "against",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Default: revision - 1",
              "title": "Against"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SpecDiff"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Diff Spec Revisions",
        "tags": [
          "specs"
        ]
      }
    },
    "/v1/specs/{spec_id}/revisions/{revision}:dry-run": {
      "post": {
        "description": "Explicit sandboxed dry-run: the same as ``POST /v1/runs`` with ``kind: validate``.",
        "operationId": "dry_run_spec",
        "parameters": [
          {
            "in": "path",
            "name": "spec_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Spec Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "revision",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Revision",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Run"
                }
              }
            },
            "description": "The validate run"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Dry Run Spec",
        "tags": [
          "specs"
        ]
      }
    },
    "/v1/specs:validate": {
      "post": {
        "description": "200 even for invalid documents: the verdict is ``valid`` + ``issues``.",
        "operationId": "validate_spec",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidateResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Validate Spec",
        "tags": [
          "specs"
        ]
      }
    },
    "/v1/tenants": {
      "get": {
        "description": "Tenants the caller belongs to (operators: use ``/v1/admin/tenants`` for all).",
        "operationId": "list_tenants",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Tenant_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tenants",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}": {
      "get": {
        "operationId": "get_tenant",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tenant"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Tenant",
        "tags": [
          "tenants"
        ]
      },
      "patch": {
        "operationId": "update_tenant",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TenantUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tenant"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Tenant",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/audit": {
      "get": {
        "description": "The tenant's audit log, newest first (tenant admins).",
        "operationId": "list_tenant_audit",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 64,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Project Id"
            }
          },
          {
            "in": "query",
            "name": "actor_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 128,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Actor Id"
            }
          },
          {
            "in": "query",
            "name": "action",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AuditAction"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "in": "query",
            "name": "outcome",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AuditOutcome"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Outcome"
            }
          },
          {
            "in": "query",
            "name": "since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Since"
            }
          },
          {
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Until"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_AuditEvent_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tenant Audit",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/deletion": {
      "delete": {
        "description": "Cancel a scheduled deletion (``CONFLICT`` once the purge has started).",
        "operationId": "cancel_tenant_deletion",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantDeletion"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `CONFLICT`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Cancel Tenant Deletion",
        "tags": [
          "tenants"
        ]
      },
      "get": {
        "description": "The latest deletion of the tenant and its progress per store.",
        "operationId": "get_tenant_deletion",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantDeletion"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Tenant Deletion",
        "tags": [
          "tenants"
        ]
      },
      "post": {
        "description": "Schedule the deletion of the whole tenant. ``confirm`` repeats the tenant id. The\ntenant is suspended at once and its unfinished runs are cancelled; the purge starts\nwhen the grace period ends and can be cancelled until then.",
        "operationId": "request_tenant_deletion",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TenantDeletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantDeletion"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `CONFLICT`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `SCHEMA_INVALID`"
          }
        },
        "summary": "Request Tenant Deletion",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/exports": {
      "get": {
        "description": "The tenant's exports, newest first: what is being built and what can be downloaded\n(``GET`` one export for its download link).",
        "operationId": "list_tenant_exports",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_GdprExport_"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tenant Exports",
        "tags": [
          "tenants"
        ]
      },
      "post": {
        "description": "Queue a GDPR export of everything the tenant stored; poll it for the link.",
        "operationId": "create_tenant_export",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GdprExportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprExport"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `SCHEMA_INVALID`"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `QUOTA_EXCEEDED`"
          }
        },
        "summary": "Create Tenant Export",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/exports/{export_id}": {
      "get": {
        "description": "An export; once ``ready``, ``download_url`` is a fresh short-lived signed link.",
        "operationId": "get_tenant_export",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "export_id",
            "required": true,
            "schema": {
              "pattern": "^exp_[0-9a-z]{26}$",
              "title": "Export Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GdprExport"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Tenant Export",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/governance/policies": {
      "get": {
        "operationId": "list_tenant_policies",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_GovernancePolicy_"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Tenant-wide policies (every project's floor)",
        "tags": [
          "governance"
        ]
      },
      "post": {
        "operationId": "create_tenant_policy",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GovernancePolicyCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GovernancePolicy"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `POLICY_INVALID`: The governance policy is not valid"
          }
        },
        "summary": "Add a tenant-wide policy",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/governance/policies/{policy_id}": {
      "delete": {
        "operationId": "delete_tenant_policy",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "policy_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Policy Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Retire a tenant-wide policy",
        "tags": [
          "governance"
        ]
      },
      "get": {
        "operationId": "get_tenant_policy",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "policy_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Policy Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GovernancePolicy"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "A tenant-wide policy",
        "tags": [
          "governance"
        ]
      },
      "put": {
        "operationId": "update_tenant_policy",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "policy_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Policy Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GovernancePolicyUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GovernancePolicy"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `CONFLICT`: Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema; `POLICY_INVALID`: The governance policy is not valid"
          }
        },
        "summary": "Save a new version of a tenant-wide policy",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/members": {
      "get": {
        "operationId": "list_tenant_members",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Membership_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tenant Members",
        "tags": [
          "tenants"
        ]
      },
      "post": {
        "operationId": "add_tenant_member",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MembershipCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Membership"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Add Tenant Member",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/members/{principal_id}": {
      "delete": {
        "operationId": "remove_tenant_member",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "principal_id",
            "required": true,
            "schema": {
              "pattern": "^(?:usr|sa)_[0-9a-z]{26}$",
              "title": "Principal Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Remove Tenant Member",
        "tags": [
          "tenants"
        ]
      },
      "patch": {
        "operationId": "update_tenant_member",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "principal_id",
            "required": true,
            "schema": {
              "pattern": "^(?:usr|sa)_[0-9a-z]{26}$",
              "title": "Principal Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MembershipUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Membership"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Tenant Member",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/projects": {
      "get": {
        "operationId": "list_tenant_projects",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Project_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tenant Projects",
        "tags": [
          "tenants",
          "projects"
        ]
      },
      "post": {
        "operationId": "create_project",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Project",
        "tags": [
          "tenants",
          "projects"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/projects/{project_id}": {
      "delete": {
        "description": "Delete an empty project (its memberships and tokens go with it). 409 while it holds\ndatasets, specs, runs or models, and for the platform's default project.",
        "operationId": "delete_project",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Project",
        "tags": [
          "tenants",
          "projects"
        ]
      },
      "patch": {
        "operationId": "update_project",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Project",
        "tags": [
          "tenants",
          "projects"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/projects/{project_id}/members": {
      "get": {
        "description": "Project grants plus tenant-wide grants (which apply to every project).",
        "operationId": "list_members",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Membership_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Members",
        "tags": [
          "tenants"
        ]
      },
      "post": {
        "operationId": "add_member",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MembershipCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Membership"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Add Project Member",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/projects/{project_id}/members/{principal_id}": {
      "delete": {
        "operationId": "remove_member",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "principal_id",
            "required": true,
            "schema": {
              "pattern": "^(?:usr|sa)_[0-9a-z]{26}$",
              "title": "Principal Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Remove Project Member",
        "tags": [
          "tenants"
        ]
      },
      "patch": {
        "operationId": "update_member",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "principal_id",
            "required": true,
            "schema": {
              "pattern": "^(?:usr|sa)_[0-9a-z]{26}$",
              "title": "Principal Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MembershipUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Membership"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Project Member",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/usage": {
      "get": {
        "description": "Cost of the whole tenant (tenant admins).",
        "operationId": "get_tenant_usage",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "default": "month",
              "enum": [
                "day",
                "month"
              ],
              "title": "Period",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "start",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start"
            }
          },
          {
            "in": "query",
            "name": "group_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "resource_class",
                    "project",
                    "day",
                    "token",
                    "run"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Group By"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsageReport"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Tenant Usage",
        "tags": [
          "usage",
          "tenants"
        ]
      }
    },
    "/v1/tenants/{tenant_id}/verification": {
      "get": {
        "description": "E-mail and identity verification, and whether the workspace may upload code.",
        "operationId": "get_tenant_verification",
        "parameters": [
          {
            "in": "path",
            "name": "tenant_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$",
              "title": "Tenant Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationStatus"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `FORBIDDEN`"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (`application/problem+json`); code `NOT_FOUND`"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Tenant Verification",
        "tags": [
          "tenants"
        ]
      }
    },
    "/v1/tokens": {
      "get": {
        "description": "The caller's tokens in the project, newest first (``all=true``: everyone's).",
        "operationId": "list_tokens",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "all",
            "required": false,
            "schema": {
              "default": false,
              "title": "All",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/TokenStatus"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ApiToken_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tokens",
        "tags": [
          "tokens"
        ]
      },
      "post": {
        "description": "Mint a token in the selected project; ``secret`` is returned now and never again.",
        "operationId": "create_token",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TokenCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Token",
        "tags": [
          "tokens"
        ]
      }
    },
    "/v1/tokens/{token_id}": {
      "delete": {
        "description": "Revoke a token (idempotent). The next request with it is ``401``.",
        "operationId": "revoke_token",
        "parameters": [
          {
            "in": "path",
            "name": "token_id",
            "required": true,
            "schema": {
              "pattern": "^tok_[0-9a-z]{26}$",
              "title": "Token Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Revoke Token",
        "tags": [
          "tokens"
        ]
      },
      "get": {
        "operationId": "get_token",
        "parameters": [
          {
            "in": "path",
            "name": "token_id",
            "required": true,
            "schema": {
              "pattern": "^tok_[0-9a-z]{26}$",
              "title": "Token Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiToken"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Token",
        "tags": [
          "tokens"
        ]
      }
    },
    "/v1/usage": {
      "get": {
        "description": "Cost of the selected project for one UTC period, and the quotas in force now.",
        "operationId": "get_usage",
        "parameters": [
          {
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "default": "month",
              "enum": [
                "day",
                "month"
              ],
              "title": "Period",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "start",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Start"
            }
          },
          {
            "in": "query",
            "name": "group_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "resource_class",
                    "project",
                    "day",
                    "token",
                    "run"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Group By"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsageReport"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Usage",
        "tags": [
          "usage"
        ]
      }
    },
    "/v1/validations": {
      "get": {
        "description": "``?status=awaiting_approval`` is the reviewers' queue.",
        "operationId": "list_validations",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/ValidationStatus"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ModelValidation_"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Validations of the project (filter: status, e.g. the reviewers' queue)",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/validations/{validation_id}": {
      "get": {
        "operationId": "get_validation",
        "parameters": [
          {
            "in": "path",
            "name": "validation_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Validation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "A validation: status, results, approvals, history",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/validations/{validation_id}/approvals": {
      "post": {
        "description": "Needs the ``reviewer`` capability (or project admin) and a signed-in session; a\nrejection needs a comment.",
        "operationId": "decide_validation",
        "parameters": [
          {
            "in": "path",
            "name": "validation_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Validation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApprovalCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed; `SELF_APPROVAL_FORBIDDEN`: Approver and submitter must be different people"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `VALIDATION_TRANSITION_INVALID`: The model's validation status does not allow this; `CONFLICT`: Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema"
          }
        },
        "summary": "A reviewer approves or rejects (never the submitter; audited)",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/validations/{validation_id}/evidence": {
      "get": {
        "operationId": "list_validation_evidence",
        "parameters": [
          {
            "in": "path",
            "name": "validation_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Validation Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_CheckResult_"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Every check result with its evidence",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/validations/{validation_id}/evidence-pack": {
      "post": {
        "description": "Self-contained: the HTML has inline styles, no scripts and no external assets.",
        "operationId": "export_evidence_pack",
        "parameters": [
          {
            "in": "path",
            "name": "validation_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Validation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EvidencePackRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvidencePack"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema"
          }
        },
        "summary": "The audit export (JSON, and a signed link to the HTML rendering)",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/validations/{validation_id}:cancel": {
      "post": {
        "operationId": "cancel_validation",
        "parameters": [
          {
            "in": "path",
            "name": "validation_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Validation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidationNote"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `VALIDATION_TRANSITION_INVALID`: The model's validation status does not allow this"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema"
          }
        },
        "summary": "Stop running checks (back to draft)",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/validations/{validation_id}:deprecate": {
      "post": {
        "operationId": "deprecate_validation",
        "parameters": [
          {
            "in": "path",
            "name": "validation_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Validation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidationNote"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `FORBIDDEN`: Not allowed"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `VALIDATION_TRANSITION_INVALID`: The model's validation status does not allow this"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema"
          }
        },
        "summary": "Retire a validated model version (audited with the reason)",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/validations/{validation_id}:resubmit": {
      "post": {
        "description": "A new round under the policies in force now (earlier approvals no longer count).",
        "operationId": "resubmit_validation",
        "parameters": [
          {
            "in": "path",
            "name": "validation_id",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Validation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidationNote"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModelValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `NOT_FOUND`: Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `VALIDATION_TRANSITION_INVALID`: The model's validation status does not allow this"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `SCHEMA_INVALID`: The document does not match its schema"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem document (application/problem+json) - `QUOTA_EXCEEDED`: Quota exceeded"
          }
        },
        "summary": "Run the checks again after a failure or a rejection",
        "tags": [
          "governance"
        ]
      }
    },
    "/v1/webhooks": {
      "get": {
        "operationId": "list_webhooks",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Webhook_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Webhooks of the project",
        "tags": [
          "webhooks"
        ]
      },
      "post": {
        "description": "Subscribe ``url`` to ``events`` of this project. The answer holds the signing secret\n(``whsec_…``) - the only time it is returned; deliveries are signed with it\n(``Mapi-Signature: t=…,v1=…``). At most ``MAPI_WEBHOOK_MAX_PER_PROJECT`` webhooks per\nproject (``409 CONFLICT``).",
        "operationId": "create_webhook",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  },
                  "WEBHOOK_URL_BLOCKED": {
                    "summary": "The egress policy does not allow the webhook URL",
                    "value": {
                      "code": "WEBHOOK_URL_BLOCKED",
                      "detail": "The egress policy does not allow the webhook URL",
                      "errors": [],
                      "status": 422,
                      "title": "The egress policy does not allow the webhook URL",
                      "type": "urn:mapi:error:WEBHOOK_URL_BLOCKED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, WEBHOOK_URL_BLOCKED"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Add a webhook (the secret is shown once)",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/webhooks/{webhook_id}": {
      "delete": {
        "operationId": "delete_webhook",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "examples": [
                "whk_01jaf3h1j2k3m4n5p6q7r8s9t0"
              ],
              "pattern": "^whk_[0-9a-z]{26}$",
              "title": "Webhook Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Delete a webhook and its delivery log",
        "tags": [
          "webhooks"
        ]
      },
      "get": {
        "operationId": "get_webhook",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "examples": [
                "whk_01jaf3h1j2k3m4n5p6q7r8s9t0"
              ],
              "pattern": "^whk_[0-9a-z]{26}$",
              "title": "Webhook Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Webhook"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "A webhook (never its secret)",
        "tags": [
          "webhooks"
        ]
      },
      "patch": {
        "description": "Re-activating a webhook (``active: true``) resets its consecutive-failure count and\nclears the reason it was disabled for.",
        "operationId": "update_webhook",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "examples": [
                "whk_01jaf3h1j2k3m4n5p6q7r8s9t0"
              ],
              "pattern": "^whk_[0-9a-z]{26}$",
              "title": "Webhook Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Webhook"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  },
                  "WEBHOOK_URL_BLOCKED": {
                    "summary": "The egress policy does not allow the webhook URL",
                    "value": {
                      "code": "WEBHOOK_URL_BLOCKED",
                      "detail": "The egress policy does not allow the webhook URL",
                      "errors": [],
                      "status": 422,
                      "title": "The egress policy does not allow the webhook URL",
                      "type": "urn:mapi:error:WEBHOOK_URL_BLOCKED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, WEBHOOK_URL_BLOCKED"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Change URL, events or active",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/webhooks/{webhook_id}/deliveries": {
      "get": {
        "description": "``response_excerpt`` is the start of the receiver's answer: untrusted text.",
        "operationId": "list_webhook_deliveries",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "examples": [
                "whk_01jaf3h1j2k3m4n5p6q7r8s9t0"
              ],
              "pattern": "^whk_[0-9a-z]{26}$",
              "title": "Webhook Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/DeliveryStatus"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WebhookDelivery_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Delivery log, newest first (filter: status)",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/webhooks/{webhook_id}/deliveries/{delivery_id}:replay": {
      "post": {
        "description": "A new delivery of the same event (same event id, so receivers can deduplicate), sent\nby the worker within seconds; the webhook must be active.",
        "operationId": "replay_webhook_delivery",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "examples": [
                "whk_01jaf3h1j2k3m4n5p6q7r8s9t0"
              ],
              "pattern": "^whk_[0-9a-z]{26}$",
              "title": "Webhook Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "delivery_id",
            "required": true,
            "schema": {
              "pattern": "^whd_[0-9a-z]{26}$",
              "title": "Delivery Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDelivery"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "WEBHOOK_URL_BLOCKED": {
                    "summary": "The egress policy does not allow the webhook URL",
                    "value": {
                      "code": "WEBHOOK_URL_BLOCKED",
                      "detail": "The egress policy does not allow the webhook URL",
                      "errors": [],
                      "status": 422,
                      "title": "The egress policy does not allow the webhook URL",
                      "type": "urn:mapi:error:WEBHOOK_URL_BLOCKED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: WEBHOOK_URL_BLOCKED"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Send an event again (a new delivery, replay_of set)",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/webhooks/{webhook_id}:rotate-secret": {
      "post": {
        "description": "While the previous secret is still valid, deliveries carry two ``v1`` signatures.",
        "operationId": "rotate_webhook_secret",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "examples": [
                "whk_01jaf3h1j2k3m4n5p6q7r8s9t0"
              ],
              "pattern": "^whk_[0-9a-z]{26}$",
              "title": "Webhook Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "New secret (shown once); the old one signs too for 24 h",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/workflow-runs/{run_id}": {
      "get": {
        "operationId": "get_workflow_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowRun"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "A workflow run with every node, decision and output",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflow-runs/{run_id}/events": {
      "get": {
        "description": "``Accept: text/event-stream`` → a live stream: ``snapshot`` (the run), then one frame\nper event (``event:`` is its type, ``id:`` its sequence number), then ``end``; anything\nelse → a JSON page of events after ``after``.",
        "operationId": "workflow_run_events",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "After"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Last-Event-ID",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Last-Event-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WorkflowEvent_"
                }
              },
              "text/event-stream": {}
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Workflow run events (SSE, Last-Event-ID)",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflow-runs/{run_id}/nodes": {
      "get": {
        "operationId": "list_workflow_node_runs",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/NodeRunStatus"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_NodeRun_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "The node runs of a workflow run",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflow-runs/{run_id}/nodes/{node_id}": {
      "get": {
        "operationId": "get_workflow_node_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "node_id",
            "required": true,
            "schema": {
              "examples": [
                "adf"
              ],
              "pattern": "^[a-z][a-z0-9_]{0,62}$",
              "title": "Node Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NodeRun"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "One node's status, result and outputs",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflow-runs/{run_id}/nodes/{node_id}/outputs/{port}": {
      "get": {
        "description": "A dataset output links to its ``data.zarr.zip`` (``data.tree.zip`` for a tree), a\nmodel output to its bundle; JSON outputs (test results, metrics, tables, reports) are\ninline in the node and have no object (``404``).",
        "operationId": "get_workflow_node_output",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "node_id",
            "required": true,
            "schema": {
              "examples": [
                "adf"
              ],
              "pattern": "^[a-z][a-z0-9_]{0,62}$",
              "title": "Node Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "port",
            "required": true,
            "schema": {
              "pattern": "^[a-z][a-z0-9_]{0,62}$",
              "title": "Port",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArtifactLink"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "A signed link to a node output's object",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflow-runs/{run_id}:cancel": {
      "post": {
        "description": "Idempotent: ``cancelling`` until every running child stopped, then ``cancelled``\n(a finished run is returned as it is).",
        "operationId": "cancel_workflow_run",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "examples": [
                "run_01jaf3q2x8m9v7k5h4g3f2e1d0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowRun"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Cancel a workflow run and its running children",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflow-templates": {
      "get": {
        "operationId": "list_workflow_templates",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WorkflowTemplate_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "The gallery of workflow templates",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflow-templates/{template_id}": {
      "get": {
        "operationId": "get_workflow_template",
        "parameters": [
          {
            "in": "path",
            "name": "template_id",
            "required": true,
            "schema": {
              "pattern": "^[a-z][a-z0-9_]{0,63}$",
              "title": "Template Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowTemplate"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "One gallery template",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows": {
      "get": {
        "operationId": "list_workflows",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "archived",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Archived"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Workflow_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Workflows of the project",
        "tags": [
          "workflows"
        ]
      },
      "post": {
        "description": "Stores revision 1 with its static validation (a document with errors is stored but\ncannot run until a valid revision is added). The workflow's name is\n``metadata.name``; ``409 CONFLICT`` when the project already has one of that name.",
        "operationId": "create_workflow",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workflow"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SPEC_PARSE_ERROR": {
                    "summary": "The document could not be parsed",
                    "value": {
                      "code": "SPEC_PARSE_ERROR",
                      "detail": "The document could not be parsed",
                      "errors": [],
                      "status": 400,
                      "title": "The document could not be parsed",
                      "type": "urn:mapi:error:SPEC_PARSE_ERROR"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SPEC_PARSE_ERROR"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "PAYLOAD_TOO_LARGE": {
                    "summary": "The document exceeds a size limit",
                    "value": {
                      "code": "PAYLOAD_TOO_LARGE",
                      "detail": "The document exceeds a size limit",
                      "errors": [],
                      "status": 413,
                      "title": "The document exceeds a size limit",
                      "type": "urn:mapi:error:PAYLOAD_TOO_LARGE"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: PAYLOAD_TOO_LARGE"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  },
                  "WORKFLOW_INVALID": {
                    "summary": "The workflow is not valid",
                    "value": {
                      "code": "WORKFLOW_INVALID",
                      "detail": "The workflow is not valid",
                      "errors": [],
                      "status": 422,
                      "title": "The workflow is not valid",
                      "type": "urn:mapi:error:WORKFLOW_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, WORKFLOW_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Create a workflow from a document, YAML text or a gallery template",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}": {
      "delete": {
        "description": "``409 CONFLICT`` while one of its runs is still going (cancel it first).",
        "operationId": "delete_workflow",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Delete a workflow (its runs, schedules and triggers go with it)",
        "tags": [
          "workflows"
        ]
      },
      "get": {
        "operationId": "get_workflow",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workflow"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "A workflow",
        "tags": [
          "workflows"
        ]
      },
      "patch": {
        "operationId": "update_workflow",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workflow"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Change the description or archive it",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}/revisions": {
      "get": {
        "operationId": "list_workflow_revisions",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WorkflowRevision_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Revisions, newest first",
        "tags": [
          "workflows"
        ]
      },
      "post": {
        "description": "``expected_revision`` guards concurrent edits (``409`` when another revision was\nsaved in between). The document's ``metadata.name`` must stay the workflow's name.",
        "operationId": "create_workflow_revision",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowRevisionCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowRevision"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SPEC_PARSE_ERROR": {
                    "summary": "The document could not be parsed",
                    "value": {
                      "code": "SPEC_PARSE_ERROR",
                      "detail": "The document could not be parsed",
                      "errors": [],
                      "status": 400,
                      "title": "The document could not be parsed",
                      "type": "urn:mapi:error:SPEC_PARSE_ERROR"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SPEC_PARSE_ERROR"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "CONFLICT": {
                    "summary": "Conflict",
                    "value": {
                      "code": "CONFLICT",
                      "detail": "Conflict",
                      "errors": [],
                      "status": 409,
                      "title": "Conflict",
                      "type": "urn:mapi:error:CONFLICT"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: CONFLICT"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "PAYLOAD_TOO_LARGE": {
                    "summary": "The document exceeds a size limit",
                    "value": {
                      "code": "PAYLOAD_TOO_LARGE",
                      "detail": "The document exceeds a size limit",
                      "errors": [],
                      "status": 413,
                      "title": "The document exceeds a size limit",
                      "type": "urn:mapi:error:PAYLOAD_TOO_LARGE"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: PAYLOAD_TOO_LARGE"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Save a new revision (validated; errors make it unrunnable)",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}/revisions/{revision}": {
      "get": {
        "operationId": "get_workflow_revision",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "revision",
            "required": true,
            "schema": {
              "minimum": 1,
              "title": "Revision",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowRevision"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "A revision with its validation",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}/runs": {
      "get": {
        "operationId": "list_workflow_runs",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/WorkflowRunStatus"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WorkflowRun_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Runs of a workflow, newest first",
        "tags": [
          "workflows"
        ]
      },
      "post": {
        "description": "Starts a run of a revision (default: the latest). Inputs are references\n(``dataset://project/name@latest`` is pinned to the version ready now); parameters are\nchecked against the workflow's ``params``. The orchestrator then starts every node that\ncan run; follow it with ``GET /v1/workflow-runs/{run_id}/events``.",
        "operationId": "start_workflow_run",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowRunCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowRun"
                }
              }
            },
            "description": "Idempotent replay"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowRun"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "IDEMPOTENCY_CONFLICT": {
                    "summary": "Idempotency key reused",
                    "value": {
                      "code": "IDEMPOTENCY_CONFLICT",
                      "detail": "Idempotency key reused",
                      "errors": [],
                      "status": 409,
                      "title": "Idempotency key reused",
                      "type": "urn:mapi:error:IDEMPOTENCY_CONFLICT"
                    }
                  },
                  "WORKFLOW_NOT_RUNNABLE": {
                    "summary": "The workflow revision cannot be run (it has errors)",
                    "value": {
                      "code": "WORKFLOW_NOT_RUNNABLE",
                      "detail": "The workflow revision cannot be run (it has errors)",
                      "errors": [],
                      "status": 409,
                      "title": "The workflow revision cannot be run (it has errors)",
                      "type": "urn:mapi:error:WORKFLOW_NOT_RUNNABLE"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: WORKFLOW_NOT_RUNNABLE, IDEMPOTENCY_CONFLICT"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  },
                  "WORKFLOW_INVALID": {
                    "summary": "The workflow is not valid",
                    "value": {
                      "code": "WORKFLOW_INVALID",
                      "detail": "The workflow is not valid",
                      "errors": [],
                      "status": 422,
                      "title": "The workflow is not valid",
                      "type": "urn:mapi:error:WORKFLOW_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, WORKFLOW_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "QUOTA_EXCEEDED": {
                    "summary": "Quota exceeded",
                    "value": {
                      "code": "QUOTA_EXCEEDED",
                      "detail": "Quota exceeded",
                      "errors": [],
                      "status": 429,
                      "title": "Quota exceeded",
                      "type": "urn:mapi:error:QUOTA_EXCEEDED"
                    }
                  },
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED, QUOTA_EXCEEDED"
          }
        },
        "summary": "Run a revision (a workflow parent run)",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}/schedules": {
      "get": {
        "operationId": "list_workflow_schedules",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WorkflowSchedule_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Cron schedules",
        "tags": [
          "workflows"
        ]
      },
      "post": {
        "description": "Five-field cron in an IANA time zone, at most every 15 minutes\n(``SCHEDULE_INVALID``). Inputs may say ``@latest``: each run pins the version ready then.\nAt most ``MAPI_WORKFLOW_MAX_SCHEDULES`` active schedules per project (429).",
        "operationId": "create_workflow_schedule",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScheduleCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowSchedule"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEDULE_INVALID": {
                    "summary": "The schedule or trigger is not valid",
                    "value": {
                      "code": "SCHEDULE_INVALID",
                      "detail": "The schedule or trigger is not valid",
                      "errors": [],
                      "status": 422,
                      "title": "The schedule or trigger is not valid",
                      "type": "urn:mapi:error:SCHEDULE_INVALID"
                    }
                  },
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, SCHEDULE_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Run the workflow on a cron schedule",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}/schedules/{schedule_id}": {
      "delete": {
        "operationId": "delete_workflow_schedule",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "schedule_id",
            "required": true,
            "schema": {
              "examples": [
                "sch_01jaf3f1g2h3j4k5m6n7p8q9r0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Schedule Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Delete a schedule",
        "tags": [
          "workflows"
        ]
      },
      "patch": {
        "operationId": "update_workflow_schedule",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "schedule_id",
            "required": true,
            "schema": {
              "examples": [
                "sch_01jaf3f1g2h3j4k5m6n7p8q9r0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Schedule Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScheduleUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowSchedule"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEDULE_INVALID": {
                    "summary": "The schedule or trigger is not valid",
                    "value": {
                      "code": "SCHEDULE_INVALID",
                      "detail": "The schedule or trigger is not valid",
                      "errors": [],
                      "status": 422,
                      "title": "The schedule or trigger is not valid",
                      "type": "urn:mapi:error:SCHEDULE_INVALID"
                    }
                  },
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, SCHEDULE_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Change or pause a schedule",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}/triggers": {
      "get": {
        "operationId": "list_workflow_triggers",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WorkflowTrigger_"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Dataset triggers",
        "tags": [
          "workflows"
        ]
      },
      "post": {
        "description": "The new version is bound to the workflow input ``input`` (a dataset input of the\nlatest revision, ``SCHEDULE_INVALID`` otherwise); versions arriving within\n``debounce_seconds`` start one run.",
        "operationId": "create_workflow_trigger",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowTrigger"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEDULE_INVALID": {
                    "summary": "The schedule or trigger is not valid",
                    "value": {
                      "code": "SCHEDULE_INVALID",
                      "detail": "The schedule or trigger is not valid",
                      "errors": [],
                      "status": 422,
                      "title": "The schedule or trigger is not valid",
                      "type": "urn:mapi:error:SCHEDULE_INVALID"
                    }
                  },
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID, SCHEDULE_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Run the workflow when a dataset gets a new version",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows/{workflow_id}/triggers/{trigger_id}": {
      "delete": {
        "operationId": "delete_workflow_trigger",
        "parameters": [
          {
            "in": "path",
            "name": "workflow_id",
            "required": true,
            "schema": {
              "examples": [
                "wf_01jaf3e1f2g3h4j5k6m7n8p9q0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Workflow Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "trigger_id",
            "required": true,
            "schema": {
              "examples": [
                "trg_01jaf3g1h2j3k4m5n6p7q8r9s0"
              ],
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.\\-]{0,127}$",
              "title": "Trigger Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Delete a trigger",
        "tags": [
          "workflows"
        ]
      }
    },
    "/v1/workflows:validate": {
      "post": {
        "description": "200 even for invalid documents: the verdict is ``valid`` + ``issues``.",
        "operationId": "validate_workflow",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkflowValidateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowValidation"
                }
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SPEC_PARSE_ERROR": {
                    "summary": "The document could not be parsed",
                    "value": {
                      "code": "SPEC_PARSE_ERROR",
                      "detail": "The document could not be parsed",
                      "errors": [],
                      "status": 400,
                      "title": "The document could not be parsed",
                      "type": "urn:mapi:error:SPEC_PARSE_ERROR"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SPEC_PARSE_ERROR"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "UNAUTHENTICATED": {
                    "summary": "Authentication required",
                    "value": {
                      "code": "UNAUTHENTICATED",
                      "detail": "Authentication required",
                      "errors": [],
                      "status": 401,
                      "title": "Authentication required",
                      "type": "urn:mapi:error:UNAUTHENTICATED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: UNAUTHENTICATED"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "FORBIDDEN": {
                    "summary": "Not allowed",
                    "value": {
                      "code": "FORBIDDEN",
                      "detail": "Not allowed",
                      "errors": [],
                      "status": 403,
                      "title": "Not allowed",
                      "type": "urn:mapi:error:FORBIDDEN"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: FORBIDDEN"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "NOT_FOUND": {
                    "summary": "Not found",
                    "value": {
                      "code": "NOT_FOUND",
                      "detail": "Not found",
                      "errors": [],
                      "status": 404,
                      "title": "Not found",
                      "type": "urn:mapi:error:NOT_FOUND"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: NOT_FOUND"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "PAYLOAD_TOO_LARGE": {
                    "summary": "The document exceeds a size limit",
                    "value": {
                      "code": "PAYLOAD_TOO_LARGE",
                      "detail": "The document exceeds a size limit",
                      "errors": [],
                      "status": 413,
                      "title": "The document exceeds a size limit",
                      "type": "urn:mapi:error:PAYLOAD_TOO_LARGE"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: PAYLOAD_TOO_LARGE"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "SCHEMA_INVALID": {
                    "summary": "The document does not match its schema",
                    "value": {
                      "code": "SCHEMA_INVALID",
                      "detail": "The document does not match its schema",
                      "errors": [],
                      "status": 422,
                      "title": "The document does not match its schema",
                      "type": "urn:mapi:error:SCHEMA_INVALID"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: SCHEMA_INVALID"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "RATE_LIMITED": {
                    "summary": "Too many requests",
                    "value": {
                      "code": "RATE_LIMITED",
                      "detail": "Too many requests",
                      "errors": [],
                      "status": 429,
                      "title": "Too many requests",
                      "type": "urn:mapi:error:RATE_LIMITED"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "description": "Problem: RATE_LIMITED"
          }
        },
        "summary": "Static checks of a workflow document (JSON pointers); stores nothing",
        "tags": [
          "workflows"
        ]
      }
    }
  },
  "tags": [
    {
      "name": "health"
    },
    {
      "name": "identity"
    },
    {
      "name": "auth"
    },
    {
      "name": "tenants"
    },
    {
      "name": "projects"
    },
    {
      "name": "tokens"
    },
    {
      "name": "usage"
    },
    {
      "name": "admin"
    },
    {
      "name": "catalog"
    },
    {
      "name": "datasets"
    },
    {
      "name": "specs"
    },
    {
      "name": "guided"
    },
    {
      "name": "runs"
    },
    {
      "name": "models"
    },
    {
      "name": "endpoints"
    },
    {
      "name": "webhooks"
    },
    {
      "name": "workflows"
    },
    {
      "name": "plots"
    },
    {
      "name": "internal"
    }
  ]
}
