Skip to main content
The Scrums.com API is planned and not yet publicly available. Endpoints and behaviour are subject to change before release.

Overview

The AI Agent Gateway is the controlled execution environment for all AI agents on the Scrums.com platform. Every agent invocation on the platform flows through the gateway, which enforces policies, controls tool access, routes requests to the appropriate execution context, and records a complete audit trail. Agents are not raw API callers. They operate within a governed runtime: their capabilities are declared, their tool access is explicitly granted, their outputs are logged, and every action is auditable. The gateway is designed for production use in enterprise environments where agent behavior must be predictable, auditable, and constrained. Every active agent deployment is a Service Line with execution_model: agent_runtime. Usage is metered in runs and tokens. All run outputs are traceable back to the RUN-* record and the originating AGT-*.

Core Concepts

Agents

An agent (AGT-*) is a configured execution unit with a defined purpose, model, system prompt, tool access list, and governing policy. Agents are not general-purpose. Each agent is scoped to a specific task domain and its capabilities are explicitly bounded by its configuration and policy.

Policies

A policy (POL-*) is a governance rule set applied to an agent. It defines:
  • Which tools the agent is permitted to access
  • Which data sources the agent can read or write
  • Rate limits on invocations
  • Required human approval steps
  • Output filtering rules
Policies are the primary control mechanism. An agent without a policy cannot be activated.

Tools

Tools are the capabilities granted to an agent — the external systems it can interact with. Tools are declared on the gateway and granted to agents explicitly via policy. Available tool types:
Tool typeDescription
githubRead repos, PRs, issues; create comments
jiraRead and write issues, sprints, transitions
clickupRead and write tasks, lists
scrums_tasksCreate and update platform tasks (TSK-*)
scrums_observabilityRead observability and metric data
code_executorExecute sandboxed code
web_fetchFetch public URLs
slack_notifySend messages to configured Slack channels

Runs

A run (RUN-*) is a single agent invocation. Runs have structured inputs, outputs, tool call logs, token usage, duration, and an outcome status. Every run is immutable after completion and is recorded in the Audit Logs.

Human-in-the-loop

Policies can require human approval before certain agent actions. When an agent reaches an approval gate, the run is paused with status: "awaiting_approval". A human reviews the pending action and approves or rejects it via the API. The run then resumes or terminates.

Endpoints

GET /v1/agents

List agents in a workspace.

Request

GET /v1/agents?workspace_id=WS-26-000021&status=active
Authorization: Bearer <token>

Response

{
  "data": [
    {
      "id": "AGT-26-000012",
      "workspace_id": "WS-26-000021",
      "service_line_id": "LIN-26-091100",
      "name": "Delivery Summary Agent",
      "description": "Generates weekly delivery summaries from task and metric data.",
      "model": "claude-opus-4-6",
      "status": "active",
      "policy_id": "POL-26-000004",
      "tools": ["scrums_tasks", "scrums_observability", "slack_notify"],
      "run_count": 1203,
      "last_run_at": "2026-04-15T09:12:44Z",
      "created_at": "2026-01-10T10:00:00Z"
    }
  ]
}

POST /v1/agents

Create and deploy a new agent.

Request

{
  "workspace_id": "WS-26-000021",
  "subscription_id": "SUB-26-001122",
  "name": "Delivery Summary Agent",
  "description": "Generates weekly delivery summaries from task and metric data.",
  "model": "claude-opus-4-6",
  "system_prompt": "You are a delivery reporting assistant. When invoked, you retrieve task completion data and metric summaries for the specified workspace and period, then produce a structured delivery summary report.",
  "policy_id": "POL-26-000004",
  "tools": ["scrums_tasks", "scrums_observability", "slack_notify"],
  "project_tags": []
}

Response

Returns the created agent with status: "active" and a linked LIN-* Service Line.

Notes

  • policy_id is required. An agent cannot be created without a governing policy.
  • Tools listed in tools must all be permitted by the referenced policy. A mismatch returns 422.
  • Creating an agent activates a Service Line immediately.

GET /v1/agents/

Retrieve an agent with full configuration and recent run summary.

PATCH /v1/agents/

Update an agent’s configuration.

Request

{
  "system_prompt": "Updated system prompt...",
  "tools": ["scrums_tasks", "scrums_observability", "slack_notify", "jira"]
}

Notes

  • Adding a tool that is not permitted by the current policy returns 422. Update the policy first, then update the agent.
  • Changes to system_prompt or tools take effect on the next run. In-progress runs are not affected.

POST /v1/agents//runs

Trigger an agent run.

Request

{
  "input": {
    "workspace_id": "WS-26-000021",
    "period": "2026-W15",
    "report_channel": "C08DELIVERY"
  },
  "triggered_by": "USR-26-000044"
}

Response

{
  "data": {
    "id": "RUN-26-001812",
    "agent_id": "AGT-26-000012",
    "service_line_id": "LIN-26-091100",
    "status": "running",
    "input": {
      "workspace_id": "WS-26-000021",
      "period": "2026-W15",
      "report_channel": "C08DELIVERY"
    },
    "triggered_by": "USR-26-000044",
    "started_at": "2026-04-15T09:12:44Z"
  }
}

GET /v1/agents/runs/

Retrieve a completed run with full output, tool call log, and token usage.

Response

{
  "data": {
    "id": "RUN-26-001812",
    "agent_id": "AGT-26-000012",
    "service_line_id": "LIN-26-091100",
    "status": "completed",
    "input": {
      "workspace_id": "WS-26-000021",
      "period": "2026-W15"
    },
    "output": {
      "report": "Week 15 delivery summary: 19 tasks completed, velocity up 12% vs W14...",
      "delivered_to_slack": true,
      "channel": "C08DELIVERY"
    },
    "tool_calls": [
      {
        "tool": "scrums_tasks",
        "action": "list",
        "input": { "workspace_id": "WS-26-000021", "status": "done", "updated_after": "2026-04-07" },
        "output_summary": "19 tasks returned",
        "at": "2026-04-15T09:12:44Z"
      },
      {
        "tool": "scrums_observability",
        "action": "metrics",
        "input": { "workspace_id": "WS-26-000021", "metric": "delivery_velocity", "period": "2026-W15" },
        "output_summary": "Velocity: 19 tasks, +12% vs prior week",
        "at": "2026-04-15T09:12:45Z"
      },
      {
        "tool": "slack_notify",
        "action": "send_message",
        "input": { "channel": "C08DELIVERY", "text": "Week 15 delivery summary..." },
        "output_summary": "Message delivered",
        "at": "2026-04-15T09:12:46Z"
      }
    ],
    "tokens_used": 1840,
    "duration_ms": 2411,
    "started_at": "2026-04-15T09:12:44Z",
    "completed_at": "2026-04-15T09:12:46Z"
  }
}

GET /v1/agents/tools

List all available tools that can be granted to agents.

POST /v1/agents/tools

Register a custom tool endpoint for use by agents in a workspace.

Request

{
  "workspace_id": "WS-26-000021",
  "name": "internal_metrics_api",
  "description": "Access internal Apex Digital metrics API",
  "endpoint": "https://metrics.internal.apexdigital.com/v1",
  "auth_type": "bearer",
  "auth_secret_ref": "secret/metrics-api-token",
  "schema": { ... }
}

GET /v1/agents/policies

List agent policies for a workspace.

Response

{
  "data": [
    {
      "id": "POL-26-000004",
      "workspace_id": "WS-26-000021",
      "name": "Reporting Agents Policy",
      "status": "active",
      "permitted_tools": ["scrums_tasks", "scrums_observability", "slack_notify"],
      "rate_limit": { "runs_per_hour": 10, "tokens_per_day": 500000 },
      "require_approval_for": [],
      "output_filtering": { "redact_pii": true }
    }
  ]
}

POST /v1/agents/policies

Create a new agent policy.

Request

{
  "workspace_id": "WS-26-000021",
  "name": "Code Analysis Policy",
  "permitted_tools": ["github", "scrums_tasks", "code_executor"],
  "rate_limit": {
    "runs_per_hour": 5,
    "tokens_per_day": 1000000
  },
  "require_approval_for": [
    { "tool": "code_executor", "action": "execute" }
  ],
  "output_filtering": {
    "redact_pii": true,
    "block_secret_patterns": true
  },
  "data_access": {
    "allowed_repositories": ["apex-digital/payments-api"],
    "allowed_jira_projects": []
  }
}

GET /v1/agents/audit

Query the agent audit log for a workspace — every run, every tool call, every approval, every policy violation.

Request

GET /v1/agents/audit?workspace_id=WS-26-000021&from=2026-04-01&event_type=policy_violation
Authorization: Bearer <token>

Response

{
  "data": [
    {
      "id": "AAUDIT-26-000041",
      "agent_id": "AGT-26-000012",
      "run_id": "RUN-26-001801",
      "event_type": "policy_violation",
      "detail": "Agent attempted to call tool 'jira' which is not in the permitted_tools list for policy POL-26-000004.",
      "action_taken": "tool_call_blocked",
      "occurred_at": "2026-04-12T14:22:00Z"
    }
  ]
}

Common Workflows

Deploying a governed agent

# 1. Create a policy defining tool access and limits
POST /v1/agents/policies
{ "name": "Reporting Agents Policy", "permitted_tools": ["scrums_tasks", "scrums_observability", "slack_notify"], ... }

# 2. Create the agent, referencing the policy
POST /v1/agents
{ "name": "Delivery Summary Agent", "policy_id": "POL-26-000004", "tools": ["scrums_tasks", "scrums_observability", "slack_notify"], ... }

# 3. Trigger a run
POST /v1/agents/AGT-26-000012/runs
{ "input": { "workspace_id": "WS-26-000021", "period": "2026-W15" } }

# 4. Retrieve the run result
GET /v1/agents/runs/RUN-26-001812

# 5. Audit run activity
GET /v1/agents/audit?agent_id=AGT-26-000012

Reviewing policy violations

GET /v1/agents/audit?workspace_id=WS-26-000021&event_type=policy_violation&from=2026-04-01

Objects

Agent (AGT-*)

FieldTypeDescription
idstringAGT-* identifier
workspace_idstringScoped workspace
service_line_idstringLinked LIN-* (execution contract)
namestringAgent display name
modelstringModel identifier
statusenumactive, disabled, error
policy_idstringGoverning policy (POL-*)
toolsarrayGranted tool identifiers
run_countintegerTotal runs executed
last_run_atdatetimeMost recent run timestamp

Policy (POL-*)

FieldTypeDescription
idstringPOL-* identifier
workspace_idstringScoped workspace
namestringPolicy name
permitted_toolsarrayTools the agent may use
rate_limitobjectRuns and tokens per period
require_approval_forarrayTool/action pairs requiring human approval
output_filteringobjectPII and secret redaction config
data_accessobjectExplicit data source access list

Run (RUN-*)

FieldTypeDescription
idstringRUN-* identifier
agent_idstringOriginating agent
service_line_idstringLinked LIN-*
statusenumpending, running, awaiting_approval, completed, failed, cancelled
inputobjectRun input payload
outputobjectRun output (populated on completion)
tool_callsarrayOrdered log of tool calls made
tokens_usedintegerTotal tokens consumed
duration_msintegerWall-clock execution duration
started_atdatetimeRun start timestamp
completed_atdatetimeCompletion timestamp

Best Practices

  • Policy before agent, always. Never create an agent without a policy. An agent without a policy cannot be activated. Design the access model before writing the system prompt.
  • Start with narrow tool lists and expand. Granting an agent access to every tool available is not a starting point — it is a governance failure. Start with the minimum set of tools the agent needs for its defined purpose.
  • Review the tool call log, not just the output. The output tells you what the agent produced. The tool call log tells you how it got there and whether it stayed within expected behavior. Both matter for production agents.
  • Use require_approval_for on destructive actions. Any tool call that modifies data in an external system — creating Jira issues, updating tasks, executing code — should be gated behind human approval until the agent has demonstrated reliable behavior in your context.
  • Audit policy violations weekly. A pattern of violations indicates either a misconfigured agent (system prompt is asking for capabilities the policy doesn’t grant) or a misconfigured policy (the agent legitimately needs a tool that isn’t permitted). Both need fixing.
Last modified on April 15, 2026