Hub API report

Pull request #61 · commit 0a899497df · 2026-10-19 23:11 UTC · the CI run
All API tests pass
Requests
231/231
Bruno requests passing
Checks
829/829
assertions and tests
Spec coverage
149/527
operations the tests call (28%)
p95, median route
6.29 ms
108 GET routes × 20
Slowest p95
70.2 ms
/v1/overview
Fuzzing findings
16
16 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 20025.099 B pass
Read the hub's overviewGET /v1/overview 2006.00202 B pass
Answer 404 for an unknown endpointGET /v1/no-such-endpoint 4046.0028 B pass
skills8 requests
RequestCallStatusmsSizeResult
List skills on an empty hubGET /v1/skills 20010.013 B pass
Create a skillPOST /v1/skills 20170.0358 B pass
Read the skill backGET /v1/skills/pdf-forms 2003.00657 B pass
Change a skill's title and tagsPUT /v1/skills/pdf-forms 20036.0374 B pass
List skills after the changeGET /v1/skills 2004.00377 B pass
Archive a skillPOST /v1/skills/pdf-forms/archive 20073.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 2003.005.3 KiB pass
Create a system promptPOST /v1/prompts 20140.0282 B pass
Read the created prompt backGET /v1/prompts/planner 2002.00525 B pass
Edit the prompt's detailsPUT /v1/prompts/planner 20039.0291 B pass
List the prompts after the editGET /v1/prompts 2003.005.5 KiB pass
Archive the promptPOST /v1/prompts/planner/archive 20090.0300 B pass
Answer 404 for an unknown prompt idGET /v1/prompts/no-such-prompt 4042.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 2014.00325 B pass
List the rules after adding oneGET /v1/laws/rules 2002.00412 B pass
Rename a rulePUT /v1/laws/rules/R-001 2004.00334 B pass
List the rules after a renameGET /v1/laws/rules 2002.00421 B pass
Delete a ruleDELETE /v1/laws/rules/R-001 2004.0019 B pass
Answer 404 for an unknown ruleDELETE /v1/laws/rules/no-such-rule 4043.0040 B pass
Refuse a rule whose body is not a JSON objectPOST /v1/laws/rules 4004.0042 B pass
providers8 requests
RequestCallStatusmsSizeResult
List the providersGET /v1/providers 2003.004.4 KiB pass
Add a providerPOST /v1/providers 201136204 B pass
Read the provider backGET /v1/providers/scratch-provider 2001.00204 B pass
Replace the provider's settingsPUT /v1/providers/scratch-provider 200116204 B pass
List the providers againGET /v1/providers 2003.004.6 KiB pass
Delete the providerDELETE /v1/providers/scratch-provider 20013.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 4004.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 20096.0333 B pass
Change a secret's labelPATCH /v1/vault/secrets/sec_mbh2drm3vhse 20037.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_mbh2drm3vhse 20437.00 B pass
Answer 404 for an unknown secret idDELETE /v1/vault/secrets/sec_doesnotexist 4043.0026 B pass
Refuse a secret body without a valuePOST /v1/vault/secrets 4002.0053 B pass
settings7 requests
RequestCallStatusmsSizeResult
Read the hub's settingsGET /v1/settings 2003.001.3 KiB pass
Save a valid change to the settingsPUT /v1/settings 2003.001.2 KiB pass
Refuse a settings value out of rangePUT /v1/settings 4002.0044 B pass
Refuse a settings body that is not valid JSON for the typePUT /v1/settings 4002.0094 B pass
Read the saved change backGET /v1/settings 2001.001.3 KiB pass
Check the session is signed inGET /v1/auth/check 2003.0011 B pass
Refuse a sign-in with a wrong owner tokenPOST /v1/auth/session 4012.0039 B pass
plaza20 requests
RequestCallStatusmsSizeResult
List the tasks on an empty hubGET /v1/tasks 2003.0012 B pass
Open a project for the tasksPOST /v1/projects 20142.0674 B pass
Create a taskPOST /v1/tasks 2014.00346 B pass
Read the task backGET /v1/tasks/t1 2001.00346 B pass
List the tasks after a createGET /v1/tasks 2002.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 4042.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 2013.00301 B pass
Create a task that runs after anotherPOST /v1/tasks 2014.00320 B pass
List only the tasks that can be claimed nowGET /v1/tasks?ready=true 2006.00313 B pass
Refuse a ready filter that is not true or falseGET /v1/tasks?ready=maybe 4004.0054 B pass
Refuse links that would close a cyclePATCH /v1/tasks/t2 4001.0080 B pass
Relink an open taskPATCH /v1/tasks/t3 2004.00311 B pass
Answer 404 for relinking an unknown taskPATCH /v1/tasks/t999999 4042.0035 B pass
Refuse a task outside a projectPOST /v1/tasks 4002.0093 B pass
Refuse a task for an unknown projectPOST /v1/tasks 4042.0038 B pass
library40 requests
RequestCallStatusmsSizeResult
List the library's tool versionsGET /v1/library 2002.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 4003.0054 B pass
Answer 404 when deleting an unknown tool versionDELETE /v1/library/no-such-tool/1 4042.0027 B pass
List the projectsGET /v1/projects 2001.00939 B pass
Answer 404 for an unknown projectGET /v1/projects/no-such-project 4041.0027 B pass
Answer 409 when approving an unknown projectPOST /v1/projects/no-such-project/approve 4093.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 2005.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 4003.0060 B pass
Answer 404 when adding an unknown agentPOST /v1/projects/pr1/members 4044.0025 B pass
Answer 404 when benching an agent not on the projectDELETE /v1/projects/pr1/members/4242 4044.0044 B pass
Pause a projectPOST /v1/projects/pr1/pause 2004.001010 B pass
Resume a paused projectPOST /v1/projects/pr1/resume 2002.001.1 KiB pass
Refuse a project with no titlePOST /v1/projects 4005.0045 B pass
Open a project to archivePOST /v1/projects 20127.0634 B pass
Archive a projectPOST /v1/projects/pr2/archive 2002.00709 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 4093.0035 B pass
Answer 404 when pausing an unknown projectPOST /v1/projects/no-such-project/pause 4042.0027 B pass
Answer 404 when moving an unknown task into a projectPOST /v1/tasks/t999/move 4042.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 4042.0027 B pass
Read a project's settings, none set yetGET /v1/projects/pr1/settings 2003.002 B pass
Override a project's effort and task budgetPATCH /v1/projects/pr1/settings 2003.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 4005.00209 B pass
Show where each of a project's settings comes fromGET /v1/projects/pr1/settings/effective 2003.00562 B pass
Set a project's effort back to the plaza'sPATCH /v1/projects/pr1/settings 20022.020 B pass
Answer 404 for an unknown project's settingsGET /v1/projects/no-such-project/settings 4043.0027 B pass
Read a project's budget, none set aside yetGET /v1/projects/pr1/budget 2003.0055 B pass
Set credits aside for a projectPOST /v1/projects/pr1/budget 2005.0057 B pass
Give some of a project's budget back to the plazaPOST /v1/projects/pr1/budget 2004.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 4095.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 2003.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 2008.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 2041.000 B pass
Create an MCP tokenPOST /v1/hub-mcp/tokens 2012.00252 B pass
List the MCP tokensGET /v1/hub-mcp/tokens 2001.00183 B pass
Revoke an MCP tokenDELETE /v1/hub-mcp/tokens/mcp_e369cad9fc2f 2041.000 B pass
metrics11 requests
RequestCallStatusmsSizeResult
Read the metric catalogGET /v1/metrics/catalog 2001.0028.4 KiB pass
Compose the overview view on an empty hubGET /v1/metrics/view?tab=overview&range=24h 2004.003.7 KiB pass
Refuse a view with an unknown rangeGET /v1/metrics/view?tab=overview&range=2w 4002.0075 B pass
Read a metric series grouped by allPOST /v1/metrics/query 2002.0013 B pass
Refuse a query with an unknown groupPOST /v1/metrics/query 4002.0088 B pass
Read the metrics settingsGET /v1/metrics/settings 2002.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 2003.00231 B pass
Refuse a usage window that ends before it startsGET /v1/usage/summary?from=2000&to=1000 4003.0042 B pass
List the model pricesGET /v1/prices 2006.00488.7 KiB pass
Answer 404 for a model with no priceGET /v1/prices/no-such-model-xyz 4045.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 2015.00221 B pass
List the join codes shows the new code as activeGET /v1/nodes/codes 2002.00120 B pass
Revoke an unused node join codeDELETE /v1/nodes/codes/c1 2003.0026 B pass
List the join codes after revoking shows the code as revokedGET /v1/nodes/codes 2003.00121 B pass
Answer 404 when revoking an unknown node join codeDELETE /v1/nodes/codes/c999999 4041.0024 B pass
Answer 400 when the node join code body is not JSONPOST /v1/nodes/codes 4002.00111 B pass
Refuse a node join with a bad join codePOST /v1/nodes/join 4033.0039 B pass
List the workstation join codes on an empty hubGET /v1/stations/codes 2002.002 B pass
Answer 400 when the workstation join code body is not JSONPOST /v1/stations/codes 4004.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 4033.0095 B pass
Answer 404 when stopping an unknown nodePOST /v1/nodes/n999/stop 4045.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 2003.00310 B pass
Resuming the hub's own node n0 puts it back in servicePOST /v1/nodes/n0/resume 2004.00310 B pass
A dry-run rebalance lists its moves and starts nonePOST /v1/nodes/rebalance 2003.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 4044.0025 B pass
Answer 400 for an agent id that is not a numberGET /v1/agents/not-a-number 4004.0032 B pass
Answer 404 when deleting an agent that does not existDELETE /v1/agents/999999 4043.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 4004.0062 B pass
Create a custom rolePOST /v1/roles 2003.00278 B pass
Read the custom role back from the listGET /v1/roles 20014.052.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 2003.0034 B pass
Answer 404 when deleting a role that is already goneDELETE /v1/roles/scout-test 4043.0030 B pass
List the bench on a hub with no nodeGET /v1/agents?project=bench 2003.002 B pass
Answer 404 for an unknown project's rosterGET /v1/agents?project=no-such-project 4043.0038 B pass
governance11 requests
RequestCallStatusmsSizeResult
List the approvals on an empty hubGET /v1/approvals 2002.002 B pass
Read an agent's permission mode before any changeGET /v1/agents/7/permissions 2002.0040 B pass
Set an agent's permission mode to read_onlyPUT /v1/agents/7/permissions 20044.020 B pass
Read back the permission mode after the changeGET /v1/agents/7/permissions 2004.0037 B pass
Refuse a permission mode that is not one of the threePUT /v1/agents/7/permissions 4004.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 4041.0030 B pass
Refuse a default decision model without a provider and modelPUT /v1/decisions/default 4001.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 2001.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 4044.0023 B pass
Export a dataset from a body that is not JSONPOST /v1/foundry/datasets 4003.0058 B pass
Upload a dataset with no file namedPOST /v1/foundry/datasets/upload 4003.0041 B pass
List the IDE's workspaces (only project repos on a fresh hub)GET /v1/ide/workspaces 2003.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 20023.0131 B pass
List the running sandboxes (empty)GET /e2b/sandboxes 2001.002 B pass
List the sandboxes by state (empty)GET /e2b/v2/sandboxes?state=running,paused 2002.002 B pass
List every sandbox for the owner's console (empty)GET /v1/e2b/sandboxes 2001.0016 B pass
Get a sandbox that does not existGET /e2b/sandboxes/sb0000000000000000 4043.0087 B pass
Refuse the sandbox list without an E2B keyGET /e2b/sandboxes 4013.0092 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-7a63f0a8686e 20023.011 B pass
conversations15 requests
RequestCallStatusmsSizeResult
List the owner's conversations on a hub with noneGET /v1/owner/conversations 2002.002 B pass
Refuse a conversation while no orchestrator is connectedPOST /v1/owner/conversations 4091.00118 B pass
Refuse a conversation with no textPOST /v1/owner/conversations 4001.0034 B pass
Refuse a conversation with an empty messagePOST /v1/owner/conversations 4002.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 4041.0036 B pass
Refuse an empty titlePATCH /v1/owner/conversations/conv-999 4001.0037 B pass
Answer 404 for an unknown conversation's transcriptGET /v1/owner/conversations/conv-999/transcript 4042.0032 B pass
List the conversations with the archived onesGET /v1/owner/conversations?archived=true 2001.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 4005.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 2003.0046 B pass
List the Weft repositories on a fresh hubGET /v1/weft/repos 2003.00361 B pass
List the language packs Weft has loadedGET /v1/weft/packs 2002.00318 B pass
List the Weft keys, with the owner's on a fresh hubGET /v1/weft/keys 2005.00634 B pass
List the Weft operations log, newest firstGET /v1/weft/ops?limit=20 2002.00741 B pass
List the review recipes and the proposals waitingGET /v1/recipes 2005.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 2004.00323 B pass
Start creating the GitHub AppPOST /v1/platforms/github/app 2001.00129 B pass
A callback with an unknown state does nothingGET /v1/platforms/callback?code=x&state=unknown 4001.00501 B pass
An organisation-level token must name its organisationPOST /v1/platforms/tokens 4002.0071 B pass
projects-life16 requests
RequestCallStatusmsSizeResult
List the project modesGET /v1/project-modes 2002.00371 B pass
Bring in a finished project from a git addressPOST /v1/projects/adopt 20140.01.4 KiB pass
Put the project back in buildPOST /v1/projects/pr3/mode 2003.00988 B pass
Answer 400 for a mode that does not existPOST /v1/projects/pr3/mode 4001.0035 B pass
Get the maintenance view of a fresh projectGET /v1/projects/pr3/maintenance 2002.00357 B pass
Add a signal to the project's inboxPOST /v1/projects/pr3/maintenance/signals 2012.00183 B pass
Make the project's ingest addressPOST /v1/projects/pr3/maintenance/ingest 2012.00139 B pass
Send a signal to the ingest address without a tokenPOST /v1/ingest/apzi_99dd5ec804ae9f44ae45c6d033b669f3cc29d6f6f2903694 2022.0011 B pass
Answer 404 for an ingest address that does not existPOST /v1/ingest/apzi_not-a-real-address 4041.0034 B pass
Answer 404 when approving a proposal that does not existPOST /v1/projects/pr3/maintenance/proposals/mp999/approve 4041.0028 B pass
List the project's environmentsGET /v1/projects/pr3/environments 2001.00247 B pass
Put a staging environment that tracks mainPUT /v1/projects/pr3/environments/staging 2006.00239 B pass
Deploy a named version to stagingPOST /v1/projects/pr3/environments/staging/deploy 2003.0096 B pass
Put a secret for the staging environmentPUT /v1/projects/pr3/environments/staging/secrets/STAGING_DEPLOY_TOKEN 20062.063 B pass
Upload a file's bytes into the projectPUT /v1/projects/pr3/uploads 20123.085 B pass
Land the uploaded file on main as one changePOST /v1/projects/pr3/files 20063.0109 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 5.4570.270.2 224 B-28%
/v1/e2b/keysList the E2B API keys200 2.5128.728.7 11 B+1424%
/v1/connectorsList the connectors and their settings200 2.9925.025.0 11.6 KiB+109%
/v1/pricesList the model prices200 8.2523.123.1 488.7 KiB+174%
/v1/metrics/catalogRead the metric catalog200 3.0718.318.3 28.4 KiB+1063%
/v1/acpOpen an editor's ACP socket409 2.5517.917.9 104 B+199%
/v1/platforms/callbackTake the browser back from a platform400 4.6017.917.9 501 Bnew
/v1/foundry/modelsList the foundry's models200 2.1116.116.1 13 B+355%
/v1/metrics/viewCompose a metrics view200 6.9415.115.1 3.7 KiB+78%
/v1/ide/workspacesList the IDE's workspaces200 6.1714.214.2 511 B+330%
/v1/treasury/seriesShow the treasury over time200 4.3214.214.2 9.9 KiB+232%
/v1/societyShow the society: agents, bonds and reputations200 3.0414.214.2 52 B+41%
/v1/providersList the providers200 3.4814.014.0 4.4 KiB+108%
/v1/treasury/journalList the treasury journal200 3.8713.913.9 2.3 KiB+58%
/v1/nodes/codesList the join codes200 3.2013.713.7 121 B+615%
/v1/approvalsList the approvals, pending and decided200 3.3913.013.0 2 B+665%
/v1/filesList the files agents handed in200 2.3912.612.6 2 B+90%
/v1/mcp/catalogList the MCP server presets200 2.8911.511.5 4.2 KiB+472%
/v1/sanctionsList the sanctions and suspensions200 4.8210.810.8 33 B+327%
/v1/metrics/exportExport a view as CSV200 4.9710.110.1 24 B+95%
/v1/promptsList the prompts200 3.3610.110.1 5.3 KiB+380%
/v1/prompts/rulesList the prompt rules and templates200 3.2510.110.1 5.5 KiB+381%
/v1/decisions/defaultGet the default decision model200 2.699.769.76 30 B+60%
/v1/metrics/forecastShow the capacity forecast200 5.269.579.57 187 B+138%
/v1/hub/identityShow the hub's identity200 3.779.269.26 99 B+258%
/v1/metrics/aroundShow what changed around a time200 3.889.039.03 202 B+61%
/v1/node-linkRead this machine's link to a hub200 3.599.039.03 81 B+293%
/v1/weftShow whether Weft, the plaza's version control, is running200 4.778.958.95 46 Bnew
/v1/vaultShow the vault's state200 2.608.828.82 245 B+350%
/v1/agoraShow the agora's calls200 3.238.478.47 52 B+133%
/v1/lawsList the laws and how often each refused a call200 4.218.448.44 102.5 KiB+48%
/v1/metrics/scopesList the metric scopes200 3.898.438.43 6.3 KiB+142%
/v1/machinesList the machines on this plaza200 4.138.318.31 58 B+12%
/v1/boardRead the board200 2.868.228.22 134 B-4%
/v1/templatesList the warm templates502 3.317.977.97 101 B+5%
/v1/volumesList the data volumes502 3.627.947.94 101 B+60%
/v1/egress/injectList the egress injection rules200 2.597.887.88 12 B+405%
/v1/skills/exportExport several skills as one zip422 2.847.877.87 24 B+185%
/v1/owner/conversationsList the owner's conversations with the orchestrator200 3.297.817.81 2 Bnew
/v1/tasksList the tasks200 3.997.647.64 985 B+57%
/v1/vault/secretsList the vault's entries200 4.007.557.55 1.1 KiB+310%
/v1/fleetList the machines and the agents on them200 3.077.547.54 295 B+240%
/v1/usage/callsList the newest model calls200 2.277.407.40 41 B+172%
/v1/vault/consumersList each consumer and its resolved entry200 3.647.397.39 4.0 KiB+177%
/v1/machineRead this machine's facts502 2.917.087.08 101 B-14%
/v1/loopsList the scheduled loops200 2.966.836.83 2 B+121%
/v1/mcp/serversList the MCP servers200 2.666.686.68 2 B+118%
/v1/connectors/proposalsList connector proposals, newest first200 3.046.666.66 2 B+256%
/v1/metrics/eventsList the metric events200 2.456.666.66 2 B+314%
/v1/nodesList the plaza's machines200 2.436.646.64 312 B+183%
/v1/foundry/jobsList the jobs, newest first200 2.886.626.62 2 B+77%
/v1/stations/recording-defaultsShow the recording defaults for new workstations200 1.906.526.52 74 B+504%
/v1/platformsList the git platforms the plaza is authorized on200 3.836.396.39 323 Bnew
/v1/laws/violationsList the recorded refusals of a law200 2.096.296.29 2 B+286%
/v1/projectsList the projects200 2.226.266.26 2.7 KiB+71%
/v1/runsList the runs on this machine502 3.156.236.23 101 B-62%
/v1/foundry/recipesList the recipes200 3.736.236.23 541 B-26%
/v1/hubRead the hub's status502 2.406.166.16 101 B-11%
/v1/rolesList the built-in and custom roles200 2.926.096.09 52.0 KiB-31%
/v1/metrics/alertsList the alerts and their state200 3.106.006.00 2.3 KiB+38%
/v1/foundry/datasetsList the datasets200 3.135.975.97 2 B+176%
/v1/auth/checkCheck that the session is signed in200 2.255.905.90 11 B+159%
/v1/stations/codesList the join codes200 2.435.815.81 2 B+123%
/v1/conversationsList the conversations200 3.085.675.67 147 B+70%
/v1/project-modesList the modes a project can be in200 3.335.645.64 371 Bnew
/v1/hub-mcp/callsList the recent MCP calls200 1.895.635.63 12 B+33%
/v1/metrics/slosList the service-level objectives200 3.355.575.57 785 B+65%
/v1/stations/linkOpen the workstation daemon's link socket401 2.295.525.52 61 B+309%
/v1/skills/rulesList the skill rules and the template200 3.325.375.37 2.3 KiB+103%
/v1/recipesList the review recipes and the orchestrator's proposals200 2.565.365.36 556 Bnew
/v1/toolboxList the toolbox discoveries200 2.675.265.26 2 B+107%
/v1/stations/recordingsList the station recordings, newest first200 1.674.954.95 2 B+350%
/v1/treasuryShow the treasury balances200 3.144.824.82 759 B+26%
/v1/hub-mcp/tokensList the MCP tokens200 1.904.754.75 192 B+63%
/v1/stations/vmsList the workstation VMs200 2.904.724.72 2 B+223%
/v1/e2b/sandboxesList all sandboxes for the owner's console200 2.114.694.69 16 B+168%
/v1/metrics/settingsRead the metrics settings200 1.664.444.44 292 B+172%
/v1/metrics/dashboardsRead the saved dashboards200 1.744.394.39 50 B+388%
/v1/settingsGet the hub's settings200 2.144.374.37 1.3 KiB-23%
/v1/skillsList the skills, or the archived ones200 2.914.374.37 13 B+244%
/v1/infractionsList the recent infractions200 2.404.324.32 2 B+50%
/v1/motionsList the motions200 3.324.304.30 214 B-29%
/v1/agentsList the agents200 1.964.294.29 2 B+22%
/v1/foundry/devicesList the accelerators and the jobs holding them200 2.114.234.23 15 B-3%
/v1/acp/sessionsList the editor (ACP) sessions200 2.534.154.15 2 B-34%
/v1/robots/speciesList the robot species with counts200 2.244.104.10 1.2 KiB-20%
/v1/foundry/hf/importsList the Hugging Face imports200 2.824.074.07 14 B+18%
/v1/stations/auditList the station audit, newest first200 1.404.034.03 2 B+217%
/v1/libraryList the library's tool versions200 1.843.943.94 2 B+41%
/v1/plaza/stateShow whether the plaza is stopped200 1.913.893.89 63 B+132%
/v1/metrics/calls/pageLoad the next page of calls200 2.143.553.55 351 B+26%
/v1/treasury/walletsList the agent wallets200 2.193.543.54 2 B+23%
/v1/agent-proposalsList the agent proposals200 1.783.483.48 2 B+225%
/v1/metrics/callsList the agents' calls200 2.223.443.44 2 B+5%
/v1/board/exportExport a board thread as Markdown or JSON200 2.743.353.35 69 B+18%
/v1/usage/summarySummarize usage over a time window200 1.343.353.35 252 B-51%
/v1/wsOpen a socket that streams the hub's events400 2.423.243.24 79 B-49%
/v1/foundry/hf/statusShow the Hugging Face status200 2.573.223.22 116 B-34%
/v1/stationsList the workstations200 1.853.193.19 2 B+175%
/v1/e2b/templatesList the templates and their builds200 1.753.013.01 16 B+87%
/v1/metricsScrape the hub's Prometheus metrics200 1.972.992.99 5.1 KiB+56%
/v1/provider-kindsList the provider kinds you can add200 1.942.792.79 8.3 KiB-73%
/v1/ide/auditList the IDE's audit log200 2.002.752.75 2 B-56%
/v1/vault/auditRead the audit log, verifying it on request200 2.052.722.72 1.6 KiB+39%
/v1/usage/seriesShow usage over time, bucketed200 1.902.542.54 28.0 KiB-7%
/v1/hub-mcpShow the hub's MCP server status200 1.412.222.22 278 B-29%
/v1/laws/rulesList the owner's rules and overrides200 1.942.222.22 87 B+19%
/v1/metrics/tracesList the kept traces200 1.532.082.08 2 B+27%

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 error16
OperationWhat happened
POST /v1/agent-proposals/{id}/reject
1. Test Case ID: Kd37iZ

- 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/nodes/{id}/stop
1. Test Case ID: iXH1PT

- 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/runs/{id}/input
1. Test Case ID: nTcMJC

- 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/sanctions/{id}/lift
1. Test Case ID: ybL1f4

- 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
PUT /v1/decisions/default
1. Test Case ID: j2D64f

- 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/calls
1. Test Case ID: 2N6WAE

- 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/mcp/catalog
1. Test Case ID: JCSrz4

- 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: w7NPYF

- 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: GUFtYz

- 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/nodes/{id}/commands
1. Test Case ID: vKST0y

- 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: MlnHKh

- 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: 36UIdy

- 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: fKqijl

- 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
PATCH /v1/mcp/servers/{id}
1. Test Case ID: 8CDrwi

- 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: rqsPxZ

- 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/stations/{id}/files/{path}
1. Test Case ID: h1wKGT

- 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
projects29/38
stations5/38
internal0/37
agents5/34
foundry6/33
metrics5/27
skills5/23
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
files0/5
library4/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
project-modes1/1
ingest1/1
infractions0/1
fleet0/1
robots0/1