Skip to content
← All services

ProjectX Ops Intelligence

The ask plane: one question, answered across the data, video, identity and cloud pillars at once. An answer arrives with the plan that produced it, the query sent to each pillar, the permission each pillar applied and the sources read, because a correlated number nobody can trace is a number nobody will act on. Every leg is planned by its own pillar, as the asking principal, before any leg runs. Legs the caller's entitlements do not reach are dropped at plan time and named in `excluded`, so two people asking the same question get different answers and both are told why theirs is shaped the way it is.

42 operations · https://api.projectx.dev

Generated from the checked-in OpenAPI document for this service. The document itself is the authority, and it is what a generated client is built from.

agent 14

  • GET/v1/ops/agent-runs/{run}Requires platform:agent:read

    The full replayable trace of one run.

    Every step in order: the runtime's reason for the call, the tool and its inputs, the PDP's decision, and the outcome — so what an agent did and why is read from the record rather than reconstructed.

    Parameters (2)
    • run · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • GET/v1/ops/agentsRequires platform:agent:read

    This tenant's registered agents, with their tools and guardrails.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/agentsRequires platform:agent:configure

    Register an agent runtime over an identity principal.

    The agent is a principal in the identity pillar; this registers the runtime that plans and calls tools as it. A tool names the one permission it needs and the inputs it accepts, and the guardrails set the allow-list, the step and blast-radius limits, the token and currency budget, and whether destructive steps wait for a human. Nothing here widens what the identity principal may do — a tool call is checked against the narrower of the agent's and the caller's permissions at run time.

    Body
    RegisterAgentRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/agents:catalogRequires platform:agent:read

    The six reference agents, as installable presets.

    Security Analyst, Ops Responder, FinOps Optimizer, Data Steward, Access Reviewer and Onboarding/Offboarding. Each is a named tool set with safe defaults — read-only agents take no destructive action, acting agents ship approval-gated with a tight blast radius. A preset names the scopes its tools need so an install over a principal that cannot exercise it is refused rather than producing an agent that refuses every step.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/agents:installRequires platform:agent:configure

    Install a reference agent over an identity principal.

    The preset supplies the tools and guardrails; you supply the identity principal it runs as and that principal's scopes. The install is refused, with the missing scope named, if the principal cannot exercise the preset — the preset never widens what the principal may do, and the runtime still checks the agent-and-caller intersection on every call.

    Body
    InstallReferenceAgentRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/agents/{agent}Requires platform:agent:read

    One agent's registration.

    Parameters (2)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/agents/{agent}/killRequires platform:agent:kill

    Engage the kill switch for one agent, the tenant, or globally.

    `{ scope: "agent" | "tenant" | "global" }`. A killed agent stops before its next step rather than after a sweep — the check is on the hot path of every run, so the stop takes effect within seconds. `tenant` halts every agent in the tenant; `global` halts every agent everywhere, the break-glass for a runtime behaving badly across tenants.

    Body
    KillAgentRequest
    Parameters (3)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/agents/{agent}/memoryRequires platform:agent:read

    Recall an agent's long-term memory, newest first.

    Parameters (3)
    • agent · path · required
    • key · query — Recall only the entries under this key.
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/agents/{agent}/memoryRequires platform:agent:run

    Write a fact to an agent's long-term memory.

    Short-term memory is the run's own step trace; this is the long-term kind — a fact an agent chose to keep across runs, so a later run does not start from nothing. Scoped to the agent that wrote it: recall reads only this agent's memory, never another's.

    Body
    RememberRequest
    Parameters (3)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/agents/{agent}/runRequires platform:agent:run

    Run an agent against a goal with a planned sequence of tool calls.

    Each planned call is held to the guardrails before it runs: the kill switch and the budget are checked, the tool must be on the allow-list and inside the narrower of the agent's and your permissions, the blast radius is not exceeded, and a destructive step waits for approval. Only then is the action authorized against the one PDP as you — a denied step records the denial and the run does not retry around it. Every step is kept for the replayable trace.

    Body
    RunAgentRequest
    Parameters (3)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/agents/{agent}/runsRequires platform:agent:read

    An agent's run history, newest first.

    Parameters (2)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • GET/v1/ops/agents/{agent}/versionsRequires platform:agent:read

    An agent's version history, with the stage each has reached.

    Parameters (2)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/agents/{agent}/versionsRequires platform:agent:configure

    Publish the agent's current tools and guardrails as a new version.

    A version freezes behaviour at a point in time, so the history answers what an agent was allowed to do when it did something. A new version starts in `draft` and reaches runs only by being promoted through canary to live.

    Body
    PublishAgentVersionRequest
    Parameters (3)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/agents/{agent}/versions:promoteRequires platform:agent:configure

    Promote a version along its rollout, or roll it back.

    `{ version, to: "canary" | "live" | "rolled_back" }`. A draft reaches live only through canary, so no untested version goes straight to every run; a rolled-back version is terminal. The transition is itself recorded, so a rollback is part of the audited history rather than a quiet reversal.

    Body
    PromoteAgentVersionRequest
    Parameters (3)
    • agent · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.

alerting 12

  • GET/v1/ops/alert-rulesRequires platform:alerting:read

    This tenant's metric-backed alert rules, by slug.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • PUT/v1/ops/alert-rules/{slug}Requires platform:alerting:configure

    Create or replace a metric-backed alert rule.

    A threshold over a governed metric — the metric's name, a window in the same words the ask box takes, and a warning and/or critical bound. The rule holds no query, so the number it evaluates is computed through the identical Ask path the metrics endpoint, the ask box and agents use, and a metric whose definition changes changes what the rule evaluates without anyone editing it. The metric must exist in the semantic layer; a rule against one that does not would never fire.

    Body
    SaveAlertRuleRequest
    Parameters (3)
    • slug · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/alert-rules/{slug}/evaluateRequires platform:alerting:manage

    Evaluate a rule now: compute its metric and fire if it breaches.

    The metric is computed through the identical Ask.run path every other consumer uses, authorized as the calling principal. A breach fires through the alert queue with the rule's slug as the dedupe key, so a condition that stays breached is one alert that keeps happening; an evaluation within thresholds fires nothing, and the returned record still carries the value and the metric's certification.

    Parameters (3)
    • slug · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/alertsRequires platform:alerting:read

    The alert queue, newest activity first.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/alertsRequires platform:alerting:fire

    Fire an alert, or fold it into an open duplicate.

    One model for every pillar's alarm. A repeat of an open alert with the same dedupe key folds in — the count grows and the worse severity wins — rather than filling the queue, so the next real alert is not buried.

    Body
    FireAlertRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/alerts:analyticsRequires platform:alerting:read

    Volume, precision, MTTA and MTTR by source pillar.

    Done by source so a pillar drowning the queue in false positives is found by its poor precision, not by an operator's sense that a pillar is noisy.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/alerts/{alert}/transitionRequires platform:alerting:manage

    Move an alert along its lifecycle.

    fired, acknowledged, assigned, resolved, reviewed — a jump that skips acknowledgement or reopens a reviewed alert is refused, so every alert took a path somebody can report on.

    Body
    TransitionAlertRequest
    Parameters (3)
    • alert · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/connectorsRequires platform:alerting:read

    This tenant's connectors.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/connectorsRequires platform:alerting:configure

    Register a connector to an external system.

    Notification, incident, ITSM, physical or generic — or a custom connector declaring its own config schema and auth. A connector that authenticates must name its credential.

    Body
    SaveConnectorRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/incidentsRequires platform:alerting:manage

    Group related alerts into an incident.

    The incident takes the worst severity among its alerts, and carries the ownership and SLA the response is measured against.

    Body
    OpenIncidentRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/incidents/{incident}/reviewRequires platform:alerting:manage

    Record a structured post-incident review with linked evidence.

    Named fields — what happened, why, what was done, what changes — plus the URNs of the alerts, clips and audit entries that support the account, linked rather than pasted.

    Body
    ReviewIncidentRequest
    Parameters (3)
    • incident · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/on-callRequires platform:alerting:manage

    Define an on-call rotation with an escalation chain.

    Members rotate through shifts; escalation tiers are pulled cumulatively when an alert goes unacknowledged, because paging the manager instead of the engineer is how a page gets dropped.

    Body
    OnCallRotationRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.

ask 5

  • POST/v1/ops/askRequires platform:ask:query

    Ask a question across every pillar.

    Returns the answer together with the plan, the query generated for each leg, the permission applied to each leg and the sources read. Every leg is planned by its pillar, as you, before any leg is executed. A leg your entitlements do not reach is dropped at plan time and named in `excluded` — so a short answer always says whether it is short because nothing happened or because you may not see it. `confidence` is below 1.0 whenever something reduced the answer, and `answer.caveats` says what. A word the parser did not understand is reported rather than ignored.

    Body
    AskRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/ask:planRequires platform:ask:query

    Compile the question and return the plan without running it.

    Same authorization and the same per-leg pillar planning, no execution and no meter. What the answer view calls to show “this is what I am about to read”, and what an operator uses to find out which legs a policy will refuse.

    Body
    AskPlanRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/queryRequires platform:ask:query

    Ask the same question as structure rather than as English.

    `{ subject, intent, constraints: [{attribute, value}], window: { phrase } | { start, end }, absent: [...] }`. For saved questions, scheduled reports and agents, where a parser improvement silently changing what a stored question means would be a bug. Takes business vocabulary only — no dataset, column or predicate — and shares every downstream step with `/v1/ops/ask`, including plan-time entitlement filtering.

    Body
    StructuredQueryRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/saved-questionsRequires platform:ask:query

    Saved questions visible to you — your own, plus the tenant's shared ones.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/saved-questionsRequires platform:ask:query

    Save a question to re-ask.

    Stores the question, never the answer — a shared saved question is re-run as whoever runs it, so it returns each person the answer their own entitlements allow and can never leak the saver's rows.

    Body
    SaveQuestionRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.

metric 3

  • GET/v1/ops/metricsRequires platform:metric:read

    List governed metrics with their certification status.

    Parameters (2)
    • certification · query — certified, experimental or deprecated.
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • GET/v1/ops/metrics/{metric}Requires platform:metric:read

    One metric's definition, unit, version and certification.

    Parameters (2)
    • metric · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/metrics/{metric}Requires platform:metric:compute

    Compute a metric over a window.

    `{ window: "last month" }`, in the same words the Ask box takes. Runs the identical code path an asked question runs — the metric is turned into a question and planned, authorized and executed exactly as one. That is what makes the number here and the number in an answer the same number rather than two implementations that agree today.

    Body
    ComputeMetricRequest
    Parameters (3)
    • metric · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.

semantic_model 1

  • GET/v1/ops/semanticRequires platform:semantic_model:read

    The semantic layer: entities, relationships, mappings, metrics.

    The vocabulary the ask plane answers to, including the synonyms. Entities with no mapping are listed on purpose — a question about one resolves and then discloses that no pillar records it yet.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.

workflow 7

  • GET/v1/ops/workflowsRequires platform:workflow:read

    List this tenant's workflows.

    Parameters (1)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/workflowsRequires platform:workflow:configure

    Create or replace a workflow.

    The same structure the visual builder produces and code writes — a trigger, conditions and actions. Every action names the permission it authorizes against as the triggering principal; one that names none is refused, because an action the PDP cannot be asked about is one that would run unauthorized.

    Body
    SaveWorkflowRequest
    Parameters (2)
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/workflows/{workflow}Requires platform:workflow:read

    One workflow's current definition.

    Parameters (2)
    • workflow · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • POST/v1/ops/workflows/{workflow}/rollbackRequires platform:workflow:configure

    Roll a workflow back to a prior version.

    The prior definition becomes current under a new version number, so the history stays append-only and the rollback is itself a recorded change.

    Body
    RollbackWorkflowRequest
    Parameters (3)
    • workflow · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • POST/v1/ops/workflows/{workflow}/runRequires platform:workflow:run

    Run a workflow, or simulate it with no side effects.

    `{ dry_run: true }` plans and authorizes every action exactly as a real run would, and takes none of them — a faithful preview of what would happen and what policy would allow. Either way every action is authorized against the PDP as you, the triggering principal: a workflow that was approved does not let an action skip that, because approval is consent to the workflow and authorization is per action.

    Body
    RunWorkflowRequest
    Parameters (3)
    • workflow · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
    • Idempotency-Key · header — Makes a retry safe. A replay of the same key and body returns the stored response with Idempotency-Replayed: true; the same key with a different body is a 409.
  • GET/v1/ops/workflows/{workflow}/runsRequires platform:workflow:read

    A workflow's run history, with inputs and per-step outcomes.

    Parameters (2)
    • workflow · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
  • GET/v1/ops/workflows/{workflow}/versionsRequires platform:workflow:read

    A workflow's version history, for rollback.

    Parameters (2)
    • workflow · path · required
    • X-Request-Id · header — Echoed on the response and recorded on the audit event.
ProjectX Ops Intelligence · API reference · ProjectX