Sume API key with actions:read only: list schedules, not start runs
A Sume key with actions:read can list and read schedules and runs. Starting or canceling a run needs actions:write; keys made before the trigger lack both.

Yes, a key with only actions:read can list schedules, read one, and read its runs, but it cannot start or cancel a run. The Sume docs give actions:read for "List and read Actions, read and list runs" and actions:write for "Create a run, cancel a run". Use the read-only key for dashboards and monitors, and keep the write key on the one service that triggers runs.
The scope split
Starting a run needs three things together: the schedule is active, api_trigger_enabled is true, and the key has both actions:read and actions:write. A key lacking a scope fails with 403 insufficient_scope.
| Scope | Allows | Typical holder |
|---|---|---|
| actions:read | List and read Actions, read and list runs | Monitoring, reporting |
| actions:write | Create a run, cancel a run | The service that triggers runs |
| Both | Everything above | Only if one service does both |
Old keys and service accounts
Keys created before the API-call trigger shipped do not carry these scopes. You cannot add scopes to an existing key, so the fix is to create a new key in the dashboard and rotate to it. See Authentication for how keys are sent.
Service-account keys cannot create schedule runs at all. They fail with 403 insufficient_scope and a details.reason of service_account_action_runs_unsupported. If you see that reason, switching to another service-account key will not help; the run has to be started by a regular key.
A split that limits damage
If the monitor key leaks, an attacker can read run receipts but cannot start work. A leaked write key can start runs. Each run has a generation cap, 1.00 dollar by default, but a caller can send generation_spend_cap_usd as null to run without that ceiling, and then only wallet balance, generation admission and org limits apply. Treat the write key as spending authority.
- Monitoring dashboard: a read-only key that lists schedules and reads receipts.
- Trigger service: a write key stored in its secret manager.
- Both keys: kept out of logs, per the safe-automation list of unsafe log content.
Reading a run safely
With the read key, poll GET /v1/action-runs/{run_id}/status for a trimmed payload, and read the full receipt only once it is terminal. Log the request_id from the receipt, which the docs ask you to record, and avoid logging signed media URLs from the artifacts list.
Sources
Related posts
More in Agents
- How to cap an AI video agent's spend: five limits, in order
A video agent has five separate limits: model budget, turns, per-call max_spend_usd, run cap and plan queue. Which stops a runaway Sume job, and which does not.
- Agent SDK verbatim_prompts vs Sume Agent Completions input
The Claude Agent SDK verbatim_prompts option stops @path and slash expansion of user text. Sume Agent Completions keeps input as data in a file. Compare them.
- claude --fallback-model when overloaded: Sume paid calls
--fallback-model switches Claude Code to another model when the main one is overloaded. Sume's spend caps and idempotency keys are independent of the model.
- Stopped a Sume MCP call in Claude Code? The job still runs
Stopping a long Sume MCP wait in Claude Code does not stop the render. The job keeps running and billing; find the job id, then wait again, read or cancel.
Written by Sume