Hub API report

Pull request #60 · commit 7ba87c2f2a · 2026-10-19 21:56 UTC · the CI run
All API tests pass
Requests
215/215
Bruno requests passing
Checks
759/759
assertions and tests
Spec coverage
135/504
operations the tests call (27%)
p95, median route
6.57 ms
107 GET routes × 20
Slowest p95
142 ms
/v1/overview
Fuzzing findings
17
17 server error

API tests (Bruno)

The collection in api-tests/bruno, run against a scratch hub: no database, no node daemon, no git host. A failing request fails the pull request.

hub3 requests
RequestCallStatusmsSizeResult
Read the hub's identityGET /v1/hub/identity 20021.099 B pass
Read the hub's overviewGET /v1/overview 2008.00202 B pass
Answer 404 for an unknown endpointGET /v1/no-such-endpoint 4044.0028 B pass
skills8 requests
RequestCallStatusmsSizeResult
List skills on an empty hubGET /v1/skills 2003.0013 B pass
Create a skillPOST /v1/skills 20191.0358 B pass
Read the skill backGET /v1/skills/pdf-forms 20016.0657 B pass
Change a skill's title and tagsPUT /v1/skills/pdf-forms 20085.0374 B pass
List skills after the changeGET /v1/skills 20023.0377 B pass
Archive a skillPOST /v1/skills/pdf-forms/archive 20032.0383 B pass
Answer 404 for an unknown skillGET /v1/skills/no-such-skill 4043.0036 B pass
Refuse a create without a titlePOST /v1/skills 4005.0053 B pass
prompts8 requests
RequestCallStatusmsSizeResult
List the built-in promptsGET /v1/prompts 2006.005.3 KiB pass
Create a system promptPOST /v1/prompts 201116282 B pass
Read the created prompt backGET /v1/prompts/planner 2004.00525 B pass
Edit the prompt's detailsPUT /v1/prompts/planner 20033.0291 B pass
List the prompts after the editGET /v1/prompts 2003.005.5 KiB pass
Archive the promptPOST /v1/prompts/planner/archive 20026.0300 B pass
Answer 404 for an unknown prompt idGET /v1/prompts/no-such-prompt 4044.0037 B pass
Reject a create body without a titlePOST /v1/prompts 4003.0053 B pass
rules8 requests
RequestCallStatusmsSizeResult
List the owner's rules on an empty hubGET /v1/laws/rules 2004.0087 B pass
Add a rulePOST /v1/laws/rules 2015.00325 B pass
List the rules after adding oneGET /v1/laws/rules 2002.00412 B pass
Rename a rulePUT /v1/laws/rules/R-001 20010.0334 B pass
List the rules after a renameGET /v1/laws/rules 2005.00421 B pass
Delete a ruleDELETE /v1/laws/rules/R-001 2005.0019 B pass
Answer 404 for an unknown ruleDELETE /v1/laws/rules/no-such-rule 4045.0040 B pass
Refuse a rule whose body is not a JSON objectPOST /v1/laws/rules 4005.0042 B pass
providers8 requests
RequestCallStatusmsSizeResult
List the providersGET /v1/providers 2002.004.4 KiB pass
Add a providerPOST /v1/providers 20182.0204 B pass
Read the provider backGET /v1/providers/scratch-provider 2004.00204 B pass
Replace the provider's settingsPUT /v1/providers/scratch-provider 20048.0204 B pass
List the providers againGET /v1/providers 2002.004.6 KiB pass
Delete the providerDELETE /v1/providers/scratch-provider 20035.030 B pass
Answer 404 for an unknown providerGET /v1/providers/no-such-provider 4044.0042 B pass
Refuse a provider body that does not parsePOST /v1/providers 4002.0085 B pass
vault8 requests
RequestCallStatusmsSizeResult
Show the vault's stateGET /v1/vault 2002.00245 B pass
List the vault's entries before any secret of the owner'sGET /v1/vault/secrets 2003.00695 B pass
Create a secretPOST /v1/vault/secrets 20039.0333 B pass
Change a secret's labelPATCH /v1/vault/secrets/sec_f2pia2hfc5zv 20096.0342 B pass
Read the secret's metadata back from the listGET /v1/vault/secrets 2002.001.0 KiB pass
Delete a secretDELETE /v1/vault/secrets/sec_f2pia2hfc5zv 20443.00 B pass
Answer 404 for an unknown secret idDELETE /v1/vault/secrets/sec_doesnotexist 4044.0026 B pass
Refuse a secret body without a valuePOST /v1/vault/secrets 4001.0053 B pass
settings7 requests
RequestCallStatusmsSizeResult
Read the hub's settingsGET /v1/settings 2002.001.3 KiB pass
Save a valid change to the settingsPUT /v1/settings 2004.001.2 KiB pass
Refuse a settings value out of rangePUT /v1/settings 4001.0044 B pass
Refuse a settings body that is not valid JSON for the typePUT /v1/settings 4004.0094 B pass
Read the saved change backGET /v1/settings 2001.001.3 KiB pass
Check the session is signed inGET /v1/auth/check 2002.0011 B pass
Refuse a sign-in with a wrong owner tokenPOST /v1/auth/session 4011.0039 B pass
plaza20 requests
RequestCallStatusmsSizeResult
List the tasks on an empty hubGET /v1/tasks 2002.0012 B pass
Open a project for the tasksPOST /v1/projects 20160.0659 B pass
Create a taskPOST /v1/tasks 2011.00346 B pass
Read the task backGET /v1/tasks/t1 2002.00346 B pass
List the tasks after a createGET /v1/tasks 2001.00358 B pass
Withdraw an open taskDELETE /v1/tasks/t1 2001.00359 B pass
Answer 404 for an unknown taskGET /v1/tasks/t999999 4042.0035 B pass
Refuse a task with no goalPOST /v1/tasks 4002.0075 B pass
Read the boardGET /v1/board 2002.00134 B pass
Refuse a board post from an unknown agentPOST /v1/board 4041.0037 B pass
Refuse a board post with an empty subjectPOST /v1/board 4002.0037 B pass
Create a task others will run afterPOST /v1/tasks 2012.00301 B pass
Create a task that runs after anotherPOST /v1/tasks 2013.00320 B pass
List only the tasks that can be claimed nowGET /v1/tasks?ready=true 20011.0313 B pass
Refuse a ready filter that is not true or falseGET /v1/tasks?ready=maybe 4001.0054 B pass
Refuse links that would close a cyclePATCH /v1/tasks/t2 4002.0080 B pass
Relink an open taskPATCH /v1/tasks/t3 2002.00311 B pass
Answer 404 for relinking an unknown taskPATCH /v1/tasks/t999999 4041.0035 B pass
Refuse a task outside a projectPOST /v1/tasks 4001.0093 B pass
Refuse a task for an unknown projectPOST /v1/tasks 4041.0038 B pass
library40 requests
RequestCallStatusmsSizeResult
List the library's tool versionsGET /v1/library 2003.002 B pass
Answer 404 for files of an unknown tool versionGET /v1/library/no-such-tool/1/files 4042.0027 B pass
Answer 409 when reviewing an unknown tool versionPOST /v1/library/no-such-tool/1/review 4092.0027 B pass
Answer 400 when a review has no approve fieldPOST /v1/library/no-such-tool/1/review 4005.0054 B pass
Answer 404 when deleting an unknown tool versionDELETE /v1/library/no-such-tool/1 4041.0027 B pass
List the projectsGET /v1/projects 2002.00924 B pass
Answer 404 for an unknown projectGET /v1/projects/no-such-project 4042.0027 B pass
Answer 409 when approving an unknown projectPOST /v1/projects/no-such-project/approve 4092.0044 B pass
Answer 404 for an unknown project's task graphGET /v1/projects/no-such-project/graph 4042.0027 B pass
List a project's agents, none yetGET /v1/projects/pr1/members 2002.002 B pass
Answer 404 for an unknown project's agentsGET /v1/projects/no-such-project/members 4042.0027 B pass
Refuse to add an agent with no cidPOST /v1/projects/pr1/members 4002.0060 B pass
Answer 404 when adding an unknown agentPOST /v1/projects/pr1/members 4043.0025 B pass
Answer 404 when benching an agent not on the projectDELETE /v1/projects/pr1/members/4242 4042.0044 B pass
Pause a projectPOST /v1/projects/pr1/pause 2002.00995 B pass
Resume a paused projectPOST /v1/projects/pr1/resume 2002.001.0 KiB pass
Refuse a project with no titlePOST /v1/projects 40013.045 B pass
Open a project to archivePOST /v1/projects 20193.0619 B pass
Archive a projectPOST /v1/projects/pr2/archive 2002.00694 B pass
Refuse a task for an archived projectPOST /v1/tasks 4092.0058 B pass
Refuse to resume an archived projectPOST /v1/projects/pr2/resume 4092.0035 B pass
Answer 404 when pausing an unknown projectPOST /v1/projects/no-such-project/pause 4045.0027 B pass
Answer 404 when moving an unknown task into a projectPOST /v1/tasks/t999/move 4045.0032 B pass
Refuse to move a task out of its projectPOST /v1/tasks/t1/move 4094.0070 B pass
Refuse a move that names no projectPOST /v1/tasks/t1/move 4002.0046 B pass
Suggest no agents for a project nobody worked onGET /v1/projects/pr1/suggested-members 2002.002 B pass
Answer 404 for an unknown project's suggested agentsGET /v1/projects/no-such-project/suggested-members 4043.0027 B pass
Read a project's settings, none set yetGET /v1/projects/pr1/settings 2004.002 B pass
Override a project's effort and task budgetPATCH /v1/projects/pr1/settings 2002.0036 B pass
Refuse an effort the plaza does not knowPATCH /v1/projects/pr1/settings 4002.00101 B pass
Refuse a setting projects do not havePATCH /v1/projects/pr1/settings 4002.00209 B pass
Show where each of a project's settings comes fromGET /v1/projects/pr1/settings/effective 2002.00562 B pass
Set a project's effort back to the plaza'sPATCH /v1/projects/pr1/settings 2003.0020 B pass
Answer 404 for an unknown project's settingsGET /v1/projects/no-such-project/settings 4042.0027 B pass
Read a project's budget, none set aside yetGET /v1/projects/pr1/budget 2002.0055 B pass
Set credits aside for a projectPOST /v1/projects/pr1/budget 2003.0057 B pass
Give some of a project's budget back to the plazaPOST /v1/projects/pr1/budget 2003.0056 B pass
Refuse to move no creditsPOST /v1/projects/pr1/budget 4003.0028 B pass
Refuse to give back more than a project hasPOST /v1/projects/pr1/budget 4092.00102 B pass
Refuse to set budget aside for an archived projectPOST /v1/projects/pr2/budget 4092.0066 B pass
mcp10 requests
RequestCallStatusmsSizeResult
List the MCP servers on an empty hubGET /v1/mcp/servers 2002.002 B pass
Add an MCP serverPOST /v1/mcp/servers 2002.00505 B pass
Read the MCP server backGET /v1/mcp/servers/test-server 2001.00505 B pass
Change an MCP server's namePATCH /v1/mcp/servers/test-server 2001.00508 B pass
Answer 404 for an unknown MCP serverGET /v1/mcp/servers/no-such-server 4042.0055 B pass
Refuse an MCP server with an invalid idPOST /v1/mcp/servers 4002.00110 B pass
Delete an MCP serverDELETE /v1/mcp/servers/test-server 2042.000 B pass
Create an MCP tokenPOST /v1/hub-mcp/tokens 2012.00252 B pass
List the MCP tokensGET /v1/hub-mcp/tokens 2002.00183 B pass
Revoke an MCP tokenDELETE /v1/hub-mcp/tokens/mcp_27f17a1932f3 2042.000 B pass
metrics11 requests
RequestCallStatusmsSizeResult
Read the metric catalogGET /v1/metrics/catalog 2007.0028.4 KiB pass
Compose the overview view on an empty hubGET /v1/metrics/view?tab=overview&range=24h 20011.03.7 KiB pass
Refuse a view with an unknown rangeGET /v1/metrics/view?tab=overview&range=2w 4004.0075 B pass
Read a metric series grouped by allPOST /v1/metrics/query 2005.0013 B pass
Refuse a query with an unknown groupPOST /v1/metrics/query 4007.0088 B pass
Read the metrics settingsGET /v1/metrics/settings 2005.00292 B pass
Answer 404 for the scrape endpoint while OpenMetrics is offGET /metrics 4042.0021 B pass
Summarize usage over a valid windowGET /v1/usage/summary?from=0&to=1000 2004.00231 B pass
Refuse a usage window that ends before it startsGET /v1/usage/summary?from=2000&to=1000 4004.0042 B pass
List the model pricesGET /v1/prices 2008.00488.7 KiB pass
Answer 404 for a model with no priceGET /v1/prices/no-such-model-xyz 4048.0042 B pass
joining17 requests
RequestCallStatusmsSizeResult
List the node join codes on an empty hubGET /v1/nodes/codes 2004.002 B pass
Issue a join code for a new nodePOST /v1/nodes/codes 2018.00221 B pass
List the join codes shows the new code as activeGET /v1/nodes/codes 2001.00120 B pass
Revoke an unused node join codeDELETE /v1/nodes/codes/c1 2001.0026 B pass
List the join codes after revoking shows the code as revokedGET /v1/nodes/codes 2001.00121 B pass
Answer 404 when revoking an unknown node join codeDELETE /v1/nodes/codes/c999999 4043.0024 B pass
Answer 400 when the node join code body is not JSONPOST /v1/nodes/codes 4009.00111 B pass
Refuse a node join with a bad join codePOST /v1/nodes/join 4032.0039 B pass
List the workstation join codes on an empty hubGET /v1/stations/codes 2001.002 B pass
Answer 400 when the workstation join code body is not JSONPOST /v1/stations/codes 4002.00111 B pass
Answer 404 when revoking an unknown workstation join codeDELETE /v1/stations/codes/c999999 4042.0024 B pass
Refuse a workstation join with a bad join codePOST /v1/stations/join 4032.0095 B pass
Answer 404 when stopping an unknown nodePOST /v1/nodes/n999/stop 4042.0024 B pass
Answer 404 when resuming an unknown nodePOST /v1/nodes/n999/resume 4042.0024 B pass
Stopping the hub's own node n0 takes it out of servicePOST /v1/nodes/n0/stop 2002.00310 B pass
Resuming the hub's own node n0 puts it back in servicePOST /v1/nodes/n0/resume 2002.00310 B pass
A dry-run rebalance lists its moves and starts nonePOST /v1/nodes/rebalance 2002.0028 B pass
agents13 requests
RequestCallStatusmsSizeResult
List the agents on a hub with no nodeGET /v1/agents 2002.002 B pass
Answer 404 for an agent that does not existGET /v1/agents/999999 4043.0025 B pass
Answer 400 for an agent id that is not a numberGET /v1/agents/not-a-number 4001.0032 B pass
Answer 404 when deleting an agent that does not existDELETE /v1/agents/999999 4042.0025 B pass
List the roles before any custom role existsGET /v1/roles 2003.0052.0 KiB pass
Refuse a custom role with missing fieldsPOST /v1/roles 4003.0062 B pass
Create a custom rolePOST /v1/roles 2001.00278 B pass
Read the custom role back from the listGET /v1/roles 2001.0052.4 KiB pass
Change a custom role by saving it againPOST /v1/roles 2002.00322 B pass
Delete a custom roleDELETE /v1/roles/scout-test 2001.0034 B pass
Answer 404 when deleting a role that is already goneDELETE /v1/roles/scout-test 4041.0030 B pass
List the bench on a hub with no nodeGET /v1/agents?project=bench 2001.002 B pass
Answer 404 for an unknown project's rosterGET /v1/agents?project=no-such-project 4041.0038 B pass
governance11 requests
RequestCallStatusmsSizeResult
List the approvals on an empty hubGET /v1/approvals 2001.002 B pass
Read an agent's permission mode before any changeGET /v1/agents/7/permissions 2004.0040 B pass
Set an agent's permission mode to read_onlyPUT /v1/agents/7/permissions 20031.020 B pass
Read back the permission mode after the changeGET /v1/agents/7/permissions 2002.0037 B pass
Refuse a permission mode that is not one of the threePUT /v1/agents/7/permissions 4002.0077 B pass
Decide an approval that does not existPOST /v1/approvals/no-such-approval 4042.0028 B pass
List the sanctions on an empty hubGET /v1/sanctions 2002.0033 B pass
Lift a sanction that does not existPOST /v1/sanctions/999999/lift 4042.0030 B pass
Refuse a default decision model without a provider and modelPUT /v1/decisions/default 4003.0068 B pass
List the agent proposals on an empty hubGET /v1/agent-proposals 2003.002 B pass
Approve an agent proposal that does not existPOST /v1/agent-proposals/no-such-proposal/approve 4092.0040 B pass
foundry9 requests
RequestCallStatusmsSizeResult
List the datasets (empty on a fresh hub)GET /v1/foundry/datasets 2006.002 B pass
List the jobs (empty on a fresh hub)GET /v1/foundry/jobs 2002.002 B pass
Get a job that does not existGET /v1/foundry/jobs/no-such-job 4042.0023 B pass
List the events of a job that does not existGET /v1/foundry/jobs/no-such-job/events?after=0 4041.0023 B pass
Export a dataset from a body that is not JSONPOST /v1/foundry/datasets 4002.0058 B pass
Upload a dataset with no file namedPOST /v1/foundry/datasets/upload 4001.0041 B pass
List the IDE's workspaces (only project repos on a fresh hub)GET /v1/ide/workspaces 2005.00337 B pass
Read the checkpoints of a workspace that does not existGET /v1/ide/workspaces/repo:no-such-repo@main/checkpoints 4042.0047 B pass
Read the checkpoints of a malformed workspace idGET /v1/ide/workspaces/not-a-workspace/checkpoints 4002.0066 B pass
e2b8 requests
RequestCallStatusmsSizeResult
Create an E2B key for the readsPOST /v1/e2b/keys 20034.0131 B pass
List the running sandboxes (empty)GET /e2b/sandboxes 2003.002 B pass
List the sandboxes by state (empty)GET /e2b/v2/sandboxes?state=running,paused 2004.002 B pass
List every sandbox for the owner's console (empty)GET /v1/e2b/sandboxes 2003.0016 B pass
Get a sandbox that does not existGET /e2b/sandboxes/sb0000000000000000 4042.0087 B pass
Refuse the sandbox list without an E2B keyGET /e2b/sandboxes 40112.092 B pass
List the templates and their builds (empty)GET /v1/e2b/templates 2002.0016 B pass
Revoke the E2B keyDELETE /v1/e2b/keys/e2k-fbbdc6158a94 20037.011 B pass
conversations15 requests
RequestCallStatusmsSizeResult
List the owner's conversations on a hub with noneGET /v1/owner/conversations 2001.002 B pass
Refuse a conversation while no orchestrator is connectedPOST /v1/owner/conversations 4093.00118 B pass
Refuse a conversation with no textPOST /v1/owner/conversations 4002.0061 B pass
Refuse a conversation with an empty messagePOST /v1/owner/conversations 4003.0034 B pass
Answer 404 for an unknown conversationGET /v1/owner/conversations/conv-999 4042.0032 B pass
Answer 404 for a message to an unknown conversationPOST /v1/owner/conversations/conv-999/messages 4042.0036 B pass
Answer 404 when renaming an unknown conversationPATCH /v1/owner/conversations/conv-999 4042.0036 B pass
Refuse an empty titlePATCH /v1/owner/conversations/conv-999 4002.0037 B pass
Answer 404 for an unknown conversation's transcriptGET /v1/owner/conversations/conv-999/transcript 40415.032 B pass
List the conversations with the archived onesGET /v1/owner/conversations?archived=true 2002.002 B pass
Answer 404 for an unknown conversation's draftGET /v1/owner/conversations/conv-999/draft 4042.0032 B pass
Answer 404 when editing an unknown conversation's draftPATCH /v1/owner/conversations/conv-999/draft 4042.0032 B pass
Refuse a draft edit with a field drafts do not havePATCH /v1/owner/conversations/conv-999/draft 4002.00162 B pass
Answer 404 when starting an unknown conversation's projectPOST /v1/owner/conversations/conv-999/start 4042.0036 B pass
Refuse a start that names no revisionPOST /v1/owner/conversations/conv-999/start 4002.0065 B pass
weft7 requests
RequestCallStatusmsSizeResult
Show whether Weft is running on a fresh hubGET /v1/weft 2002.0046 B pass
List the Weft repositories on a fresh hubGET /v1/weft/repos 2004.00361 B pass
List the language packs Weft has loadedGET /v1/weft/packs 2003.00318 B pass
List the Weft keys, with the owner's on a fresh hubGET /v1/weft/keys 2003.00634 B pass
List the Weft operations log, newest firstGET /v1/weft/ops?limit=20 20010.0741 B pass
List the review recipes and the proposals waitingGET /v1/recipes 2007.00556 B pass
Show the code review recipe as its TOMLGET /v1/recipes/code 2002.006.0 KiB pass
platforms4 requests
RequestCallStatusmsSizeResult
List the git platforms on a fresh hubGET /v1/platforms 2002.00323 B pass
Start creating the GitHub AppPOST /v1/platforms/github/app 2002.00129 B pass
A callback with an unknown state does nothingGET /v1/platforms/callback?code=x&state=unknown 4004.00501 B pass
An organisation-level token must name its organisationPOST /v1/platforms/tokens 4002.0071 B pass

Timings

Every GET in the spec without path parameters, requested 20 times in a row on the CI runner, slowest p95 first. Times are milliseconds on a shared runner: compare them run to run, not to production. The last column is the p95's change against main.

RouteWhat it doesStatusp50p95maxp95Sizevs main
/v1/overviewRead the hub's overview200 6.06142142 224 B+47%
/v1/e2b/sandboxesList all sandboxes for the owner's console200 3.9733.033.0 16 B+1786%
/v1/treasury/journalList the treasury journal200 2.9225.825.8 2.3 KiB+193%
/v1/pricesList the model prices200 7.1325.325.3 488.7 KiB+200%
/v1/hub-mcp/callsList the recent MCP calls200 5.9522.622.6 12 B+434%
/v1/hub-mcp/tokensList the MCP tokens200 3.7021.821.8 192 B+649%
/v1/providersList the providers200 4.6121.521.5 4.4 KiB+219%
/v1/filesList the files agents handed in200 3.3720.520.5 2 B+210%
/v1/machinesList the machines on this plaza200 6.3320.020.0 58 B+168%
/v1/connectorsList the connectors and their settings200 2.7319.819.8 11.6 KiB+66%
/v1/acpOpen an editor's ACP socket409 3.8219.019.0 104 B+217%
/v1/recipesList the review recipes and the orchestrator's proposals200 2.8418.918.9 556 Bnew
/v1/usage/seriesShow usage over time, bucketed200 2.0817.717.7 28.0 KiB+547%
/v1/hub-mcpShow the hub's MCP server status200 5.6617.517.5 278 B+464%
/v1/rolesList the built-in and custom roles200 4.7516.416.4 52.0 KiB+87%
/v1/metrics/forecastShow the capacity forecast200 4.8814.214.2 187 B+252%
/v1/ide/auditList the IDE's audit log200 2.2214.014.0 2 B+126%
/v1/stations/codesList the join codes200 2.3112.712.7 2 B+386%
/v1/boardRead the board200 2.3212.312.3 134 B+43%
/v1/e2b/keysList the E2B API keys200 3.5910.810.8 11 B+477%
/v1/prompts/rulesList the prompt rules and templates200 2.7610.810.8 5.5 KiB+419%
/v1/metrics/slosList the service-level objectives200 2.7410.710.7 785 B+216%
/v1/plaza/stateShow whether the plaza is stopped200 1.9410.510.5 63 B+526%
/v1/metrics/settingsRead the metrics settings200 2.8910.510.5 292 B+542%
/v1/fleetList the machines and the agents on them200 3.7010.310.3 295 B+365%
/v1/provider-kindsList the provider kinds you can add200 4.1510.310.3 8.3 KiB-0%
/v1/machineRead this machine's facts502 4.5010.110.1 101 B+23%
/v1/decisions/defaultGet the default decision model200 4.2510.110.1 30 B+65%
/v1/nodesList the plaza's machines200 2.549.659.65 312 B+311%
/v1/agentsList the agents200 5.679.619.61 2 B+174%
/v1/metrics/alertsList the alerts and their state200 2.659.619.61 2.3 KiB+121%
/v1/skills/rulesList the skill rules and the template200 2.299.589.58 2.3 KiB+263%
/v1/tasksList the tasks200 2.649.429.42 985 B+93%
/v1/settingsGet the hub's settings200 2.909.409.40 1.3 KiB+65%
/v1/runsList the runs on this machine502 2.699.309.30 101 B-44%
/v1/weftShow whether Weft, the plaza's version control, is running200 2.279.289.28 46 Bnew
/v1/vault/auditRead the audit log, verifying it on request200 2.889.279.27 1.3 KiB+375%
/v1/lawsList the laws and how often each refused a call200 4.678.758.75 98.9 KiB+54%
/v1/ide/workspacesList the IDE's workspaces200 4.218.718.71 337 B+163%
/v1/metrics/exportExport a view as CSV200 4.458.568.56 24 B+64%
/v1/metricsScrape the hub's Prometheus metrics200 2.068.348.34 5.1 KiB+334%
/v1/laws/rulesList the owner's rules and overrides200 2.188.328.32 87 B+347%
/v1/templatesList the warm templates502 2.568.198.19 101 B+8%
/v1/acp/sessionsList the editor (ACP) sessions200 2.167.817.81 2 B+23%
/v1/foundry/devicesList the accelerators and the jobs holding them200 2.147.357.35 15 B+69%
/v1/hubRead the hub's status502 4.097.107.10 101 B+2%
/v1/egress/injectList the egress injection rules200 2.457.037.03 12 B+351%
/v1/promptsList the prompts200 3.186.966.96 5.3 KiB+231%
/v1/agoraShow the agora's calls200 2.856.926.92 52 B+91%
/v1/e2b/templatesList the templates and their builds200 2.446.846.84 16 B+325%
/v1/auth/checkCheck that the session is signed in200 2.546.786.78 11 B+197%
/v1/node-linkRead this machine's link to a hub200 2.886.596.59 81 B+187%
/v1/treasuryShow the treasury balances200 2.066.576.57 759 B+72%
/v1/vault/secretsList the vault's entries200 2.096.576.57 695 B+257%
/v1/toolboxList the toolbox discoveries200 1.706.526.52 2 B+157%
/v1/owner/conversationsList the owner's conversations with the orchestrator200 2.766.326.32 2 Bnew
/v1/hub/identityShow the hub's identity200 2.576.236.23 99 B+141%
/v1/societyShow the society: agents, bonds and reputations200 2.456.216.21 52 B-38%
/v1/libraryList the library's tool versions200 2.266.206.20 2 B+122%
/v1/foundry/modelsList the foundry's models200 1.406.106.10 13 B+72%
/v1/metrics/viewCompose a metrics view200 4.905.955.95 3.7 KiB-30%
/v1/foundry/datasetsList the datasets200 1.805.885.88 2 B+172%
/v1/nodes/codesList the join codes200 2.235.775.77 121 B+201%
/v1/treasury/walletsList the agent wallets200 2.555.765.76 2 B+100%
/v1/loopsList the scheduled loops200 2.375.415.41 2 B+75%
/v1/volumesList the data volumes502 2.805.405.40 101 B+9%
/v1/treasury/seriesShow the treasury over time200 2.425.385.38 9.9 KiB+26%
/v1/projectsList the projects200 2.015.235.23 1.7 KiB+43%
/v1/vault/consumersList each consumer and its resolved entry200 2.345.045.04 4.0 KiB+89%
/v1/agent-proposalsList the agent proposals200 2.474.994.99 2 B+366%
/v1/platforms/callbackTake the browser back from a platform400 2.184.944.94 501 Bnew
/v1/infractionsList the recent infractions200 2.364.934.93 2 B+71%
/v1/laws/violationsList the recorded refusals of a law200 2.394.884.88 2 B+199%
/v1/mcp/catalogList the MCP server presets200 1.434.864.86 4.2 KiB+142%
/v1/stations/recordingsList the station recordings, newest first200 1.684.784.78 2 B+335%
/v1/metrics/aroundShow what changed around a time200 3.424.614.61 202 B-18%
/v1/stations/linkOpen the workstation daemon's link socket401 1.744.544.54 61 B+236%
/v1/foundry/recipesList the recipes200 1.634.484.48 541 B-46%
/v1/connectors/proposalsList connector proposals, newest first200 1.384.434.43 2 B+137%
/v1/stations/vmsList the workstation VMs200 2.144.424.42 2 B+203%
/v1/wsOpen a socket that streams the hub's events400 2.604.314.31 79 B-32%
/v1/approvalsList the approvals, pending and decided200 1.354.294.29 2 B+152%
/v1/foundry/hf/statusShow the Hugging Face status200 2.484.284.28 116 B-12%
/v1/board/exportExport a board thread as Markdown or JSON200 2.264.264.26 69 B+49%
/v1/motionsList the motions200 2.744.174.17 214 B-31%
/v1/platformsList the git platforms the plaza is authorized on200 2.374.034.03 323 Bnew
/v1/vaultShow the vault's state200 1.613.933.93 245 B+101%
/v1/metrics/catalogRead the metric catalog200 2.543.913.91 28.4 KiB+149%
/v1/metrics/tracesList the kept traces200 2.053.873.87 2 B+136%
/v1/conversationsList the conversations200 2.193.783.78 147 B+13%
/v1/foundry/jobsList the jobs, newest first200 1.533.783.78 2 B+1%
/v1/stations/auditList the station audit, newest first200 1.373.573.57 2 B+181%
/v1/metrics/scopesList the metric scopes200 2.773.473.47 6.3 KiB-1%
/v1/skills/exportExport several skills as one zip422 1.963.323.32 24 B+20%
/v1/stations/recording-defaultsShow the recording defaults for new workstations200 1.463.223.22 74 B+198%
/v1/sanctionsList the sanctions and suspensions200 1.623.123.12 33 B+23%
/v1/robots/speciesList the robot species with counts200 1.313.063.06 1.2 KiB-40%
/v1/skillsList the skills, or the archived ones200 1.773.023.02 13 B+138%
/v1/metrics/calls/pageLoad the next page of calls200 2.583.013.01 351 B+7%
/v1/metrics/dashboardsRead the saved dashboards200 1.482.992.99 50 B+232%
/v1/stationsList the workstations200 1.332.972.97 2 B+156%
/v1/mcp/serversList the MCP servers200 1.452.952.95 2 B-4%
/v1/foundry/hf/importsList the Hugging Face imports200 1.812.932.93 14 B-15%
/v1/usage/callsList the newest model calls200 2.132.692.69 41 B-1%
/v1/metrics/callsList the agents' calls200 1.942.342.34 2 B-29%
/v1/usage/summarySummarize usage over a time window200 1.892.322.32 252 B-66%
/v1/metrics/eventsList the metric events200 1.621.891.89 2 B+17%

Fuzzing (Schemathesis)

Requests generated from docs/api/openapi.json: a 5xx answer or a connection dropped without an answer is a finding. 502 and 503 come from the scratch hub's missing node daemon and git host. Reported here; findings do not fail the pull request yet.

Server error17
OperationWhat happened
POST /v1/agent-proposals/{id}/approve
1. Test Case ID: wCS9Dk

- Server error

[502] Bad Gateway:

    `{"error":"no node 0"}`

Reproduce with:

    curl -X POST http://127.0.0.1:17777/v1/nodes/0/runs
POST /v1/owner/conversations/{id}/messages
1. Test Case ID: D0TuBm

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X POST http://127.0.0.1:17777/v1/runs/0/input
POST /v1/runs
1. Test Case ID: keEZLB

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X POST http://127.0.0.1:17777/v1/runs
POST /v1/skills
1. Test Case ID: RLJhX0

- Server error

[503] Service Unavailable:

    `{"error":"vault sealed"}`

Reproduce with:

    curl -X POST http://127.0.0.1:17777/v1/vault/secrets/0/test
POST /v1/vault/slots
1. Test Case ID: AN6T9k

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X POST http://127.0.0.1:17777/v1/volumes
POST /v1/weft/{rest}
1. Test Case ID: SW5W3q

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:2 unreachable: cannot connect to 127.0.0.1:2: Connection refused (os error 111)"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/hub
GET /v1/hub-mcp
1. Test Case ID: rQPOBX

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/machine
GET /v1/machines
1. Test Case ID: mM7n1H

- Server error

[502] Bad Gateway:

    `{"error":"no node 0"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/nodes/0/machine
GET /v1/nodes/{id}/runs
1. Test Case ID: GqQiSI

- Server error

[502] Bad Gateway:

    `{"error":"no node 0"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/nodes/0/runs
GET /v1/nodes/{id}/stats
1. Test Case ID: g3xxT3

- Server error

[502] Bad Gateway:

    `{"error":"no node 0"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/nodes/0/stats
GET /v1/overview
1. Test Case ID: v3LuNP

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/runs
GET /v1/runs/{id}
1. Test Case ID: dRdIN3

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/runs/0
GET /v1/sanctions
1. Test Case ID: VMxKsa

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/templates
GET /v1/toolbox
1. Test Case ID: t63A6q

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X GET http://127.0.0.1:17777/v1/volumes
GET /v1/weft
1. Test Case ID: xcdiRG

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X DELETE http://127.0.0.1:17777/v1/runs/0
DELETE /v1/stations/codes/{id}
1. Test Case ID: eivy3y

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X DELETE http://127.0.0.1:17777/v1/templates/0
DELETE /v1/vault/slots/{id}
1. Test Case ID: 5mT6Q4

- Server error

[502] Bad Gateway:

    `{"error":"127.0.0.1:1 unreachable: cannot connect to 127.0.0.1:1: Connection refused (os error 111)"}`

Reproduce with:

    curl -X DELETE http://127.0.0.1:17777/v1/volumes/0

Coverage by area

AreaTested
e2b7/39
stations5/38
internal0/37
agents5/34
foundry6/33
metrics5/27
skills5/23
projects17/18
nodes7/18
vault5/17
platforms4/17
ide2/15
prompts5/15
mcp5/13
tasks6/11
laws4/10
owner9/9
providers5/8
board2/7
connectors0/7
treasury0/6
hub-mcp3/6
runs0/5
motions0/5
library4/4
files0/4
weft2/4
recipes2/4
egress0/4
hub1/3
volumes0/3
decisions1/3
toolbox0/3
loops0/3
plaza0/3
roles3/3
agent-proposals2/3
prices2/3
usage1/3
node-link0/3
auth2/3
console1/3
templates0/2
acp0/2
settings2/2
conversations0/2
approvals2/2
sanctions2/2
reviews0/2
unfurl0/2
overview1/1
machines0/1
machine0/1
ws0/1
provider-kinds0/1
models0/1
agora0/1
society0/1
infractions0/1
fleet0/1
robots0/1