API reference
Oruoma is API-first. The dashboard, SDK, and custom integrations should all consume the same workspace API surface instead of bypassing the service layer.
This page is a practical endpoint map for builders. Exact response payloads may evolve, but these resource groups and safety rules are the stable contract.
URL structure
Workspace routes are scoped by workspace id:
/api/ws/{workspace_id}/...Platform/control routes are intentionally separate:
/api/platform/...
/api/workspaces
/api/meIf an integration is operating on tenant data, prefer the workspace route. Avoid control-account routes for automation unless you are building platform administration features.
Authentication
Use a workspace account API key for workspace routes:
Authorization: Bearer <workspace-account-api-key>Recommended key policy:
| Integration | Key owner | Role |
|---|---|---|
| CI workflow creating jobs | dedicated service account | least role needed |
| Admin automation managing accounts/secrets | dedicated admin service account | admin |
| Public app user session | human workspace account | least role possible |
Create one key per integration or machine. Never share one owner key across every tool like it is a communal toothbrush.
Common response conventions
List endpoints generally return either:
{ "items": [] }or a resource-specific collection:
{ "models": [] }Errors return a JSON object with a human-readable message:
{ "error": "This account does not have permission to perform that action" }Treat non-2xx responses as actionable failures and surface the error field to administrators or integration owners.
Workspaces and current user
| Method | Path | Purpose |
|---|---|---|
GET | /api/me | Current authenticated identity. |
GET | /api/workspaces | Workspaces visible to the control user/session. |
GET | /api/workspace/current | Current selected workspace. |
POST | /api/workspaces | Create a workspace. |
Workspace accounts and API keys
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/accounts | List workspace accounts. |
POST | /api/ws/{workspace_id}/accounts | Create a human or agent account. |
GET | /api/ws/{workspace_id}/accounts/{account_id} | Get one account. |
PATCH | /api/ws/{workspace_id}/accounts/{account_id} | Update account metadata/role. |
POST | /api/ws/{workspace_id}/accounts/{account_id}/disable | Disable an account. |
POST | /api/ws/{workspace_id}/accounts/{account_id}/enable | Re-enable an account. |
GET | /api/ws/{workspace_id}/accounts/{account_id}/api-keys | List API key metadata. |
POST | /api/ws/{workspace_id}/accounts/{account_id}/api-keys | Create an API key; raw key is returned once. |
DELETE | /api/ws/{workspace_id}/api-keys/{api_key_id} | Revoke an API key. |
Account roles:
| Role | Typical use |
|---|---|
owner | Workspace ownership and billing/security decisions. |
admin | Accounts, secrets, policies, broad operations. |
operator | Jobs, workflows, and approved integrations. |
viewer | Read-only observation, limited visibility by policy. |
Jobs and tasks
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/jobs | List jobs. |
POST | /api/ws/{workspace_id}/jobs | Create a durable job. |
GET | /api/ws/{workspace_id}/jobs/{job_id} | Get a job with tasks. |
PATCH | /api/ws/{workspace_id}/jobs/{job_id} | Update job fields/status. |
POST | /api/ws/{workspace_id}/jobs/{job_id}/terminate | Cancel remaining job tasks. |
PATCH | /api/ws/{workspace_id}/jobs/{job_id}/tasks/{task_id} | Update task status/checkpoint. |
POST | /api/ws/{workspace_id}/jobs/{job_id}/tasks/{task_id}/notes | Append immutable task note. |
POST | /api/ws/{workspace_id}/jobs/{job_id}/tasks/{task_id}/renew | Renew active task lease. |
POST | /api/ws/{workspace_id}/jobs/{job_id}/tasks/{task_id}/terminate | Cancel one task. |
GET | /api/ws/{workspace_id}/due-tasks | List pending/stale tasks. |
Task status lifecycle:
| Status | Meaning |
|---|---|
pending | Ready to start. |
running | Actor is actively working. |
completed | Work is finished but may not yet be reported. |
reported | Human/system recipient has received the result. |
failed | Attempt failed and may retry. |
cancelled | Work was intentionally stopped. |
exhausted | Retries are exhausted. |
Teams and delegation graphs
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/teams | List teams. |
POST | /api/ws/{workspace_id}/teams | Create a team. |
GET | /api/ws/{workspace_id}/teams/{team_id} | Get team metadata. |
PATCH | /api/ws/{workspace_id}/teams/{team_id} | Update team metadata. |
GET | /api/ws/{workspace_id}/teams/{team_id}/graph | Get team delegation graph. |
PUT | /api/ws/{workspace_id}/teams/{team_id}/graph | Replace graph nodes/edges. |
Use delegation graph edges to make authority explicit. If agent A can delegate to agent B, that should be visible in the graph rather than hidden in a prompt.
Workflows
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/workflows | List workflows. |
POST | /api/ws/{workspace_id}/workflows | Create workflow. |
GET | /api/ws/{workspace_id}/workflows/{workflow_id} | Get workflow detail. |
PATCH | /api/ws/{workspace_id}/workflows/{workflow_id} | Update workflow metadata/graph. |
POST | /api/ws/{workspace_id}/workflows/{workflow_id}/validate | Validate graph without saving. |
POST | /api/ws/{workspace_id}/workflows/{workflow_id}/runs | Start a run. |
GET | /api/ws/{workspace_id}/workflow-runs | List runs. |
GET | /api/ws/{workspace_id}/workflow-runs/{run_id} | Get run detail and steps. |
POST | /api/ws/{workspace_id}/workflow-runs/{run_id}/cancel | Stop/cancel a run. |
POST | /api/ws/{workspace_id}/workflow-runs/{run_id}/terminate | Force-stop synonym for integrations. |
GET | /api/ws/{workspace_id}/workflow-runs/{run_id}/steps/{step_id}/deliverables | Get step deliverable status. |
PATCH | /api/ws/{workspace_id}/workflow-run-steps/{step_id}/deliverables/{deliverable_id} | Mark deliverable complete/incomplete. |
Deliverable actions
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/deliverable-actions | List built-in, community, and custom actions visible to the workspace. |
POST | /api/ws/{workspace_id}/custom-deliverable-actions | Create workspace custom action. |
PATCH | /api/ws/{workspace_id}/custom-deliverable-actions/{action_id} | Update workspace custom action. |
POST | /api/ws/{workspace_id}/deliverable-actions/resolve | Resolve an action reference for execution/rendering. |
Use deliverable actions to replace vague “done” with explicit output shapes: approval decisions, URLs, reports, files, review forms, QA results, and similar artifacts.
Triggers
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/triggers | List trigger definitions. |
POST | /api/ws/{workspace_id}/custom-triggers | Create workspace custom trigger. |
PATCH | /api/ws/{workspace_id}/custom-triggers/{trigger_id} | Update workspace custom trigger. |
Triggers should use workspace secrets for credentials and fail closed when a required secret is absent.
Workspace secrets
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/secrets | List secret metadata only. |
POST | /api/ws/{workspace_id}/secrets | Create/update encrypted secret. |
PATCH | /api/ws/{workspace_id}/secrets/{name} | Update encrypted secret. |
DELETE | /api/ws/{workspace_id}/secrets/{name} | Delete secret. |
Secret values are never returned after write. Reference them in configs with:
${secret.NAME}
${secrets.NAME}Visibility policy
| Method | Path | Purpose |
|---|---|---|
GET | /api/ws/{workspace_id}/visibility-policy | Get policy. |
PUT | /api/ws/{workspace_id}/visibility-policy | Replace policy. |
GET | /api/ws/{workspace_id}/visibility-capabilities | Get current caller capabilities. |
Visibility policy controls which users can see accounts, teams, workflows, and other workspace resources. It should narrow views by default and expand access intentionally.
SDK example coverage
The private examples repository maps every user-facing SDK-exposed feature to a working path. Use these links when turning endpoint groups into runnable automation:
| API/resource group | Working example path |
|---|---|
| Jobs, tasks, delegation, messages, team chat, tunnels, teams, workflows, custom nodes, accounts, storage, inference, secrets, and trigger URLs | core_workspace_features.py |
| On-the-Job workflow graph and evidence-gated daily job | on_the_job_workflow.py |
| Network Boundary policy and network-solution payload helpers | network_solution_payloads.py |
| Custom private Network Boundary gateway registration and verification | custom_private_gateway.py |
| Network Boundary audit search, explain, and export | network_boundary_audit_examples.py |
| JavaScript Network Solution payload helpers | network-solution-payloads.mjs |
If a route is added to this API page, add or update an example link at the same time. Ghost APIs are how platforms become archaeological sites.
API design rules for builders
- Workspace features must exist at the API layer first; UI and tooling are consumers.
- Do not implement dashboard-only behavior that cannot be automated.
- Return actionable errors with enough context to fix the request.
- Keep tenant data behind
/api/ws/{workspace_id}boundaries. - Use immutable notes/audit events for work history.
- Prefer disabling risky resources before deleting them when administrators need recovery time.
- Use encrypted workspace secrets for credentials.
- Keep generated docs and dashboard docs sourced from repo markdown, not separate hand-written website copies.