Hub API report

Pull request #62 · commit 84a68de9ed · 2026-10-20 12:54 UTC · the CI run
All API tests pass
Requests
244/244
Bruno requests passing
Checks
859/859
assertions and tests
Spec coverage
158/575
operations the tests call (27%)
p95, median route
7.34 ms
114 GET routes × 20
Slowest p95
96.1 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 20011.099 B pass
Read the hub's overviewGET /v1/overview 2004.00202 B pass
Answer 404 for an unknown endpointGET /v1/no-such-endpoint 4046.0028 B pass
skills8 requests
RequestCallStatusmsSizeResult
List skills on a fresh hub (only the built-in ones)GET /v1/skills 2004.00556 B pass
Create a skillPOST /v1/skills 20138.0358 B pass
Read the skill backGET /v1/skills/pdf-forms 2002.00657 B pass
Change a skill's title and tagsPUT /v1/skills/pdf-forms 20038.0374 B pass
List skills after the changeGET /v1/skills 20037.0921 B pass
Archive a skillPOST /v1/skills/pdf-forms/archive 20028.0383 B pass
Answer 404 for an unknown skillGET /v1/skills/no-such-skill 4044.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 2004.005.3 KiB pass
Create a system promptPOST /v1/prompts 20118.0282 B pass
Read the created prompt backGET /v1/prompts/planner 2003.00525 B pass
Edit the prompt's detailsPUT /v1/prompts/planner 20015.0291 B pass
List the prompts after the editGET /v1/prompts 2001.005.5 KiB pass
Archive the promptPOST /v1/prompts/planner/archive 20027.0300 B pass
Answer 404 for an unknown prompt idGET /v1/prompts/no-such-prompt 4041.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 2002.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 2006.00334 B pass
List the rules after a renameGET /v1/laws/rules 2003.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 4041.0040 B pass
Refuse a rule whose body is not a JSON objectPOST /v1/laws/rules 4002.0042 B pass
providers8 requests
RequestCallStatusmsSizeResult
List the providersGET /v1/providers 2002.006.3 KiB pass
Add a providerPOST /v1/providers 20116.0333 B pass
Read the provider backGET /v1/providers/scratch-provider 2002.00333 B pass
Replace the provider's settingsPUT /v1/providers/scratch-provider 20016.0333 B pass
List the providers againGET /v1/providers 2002.006.6 KiB pass
Delete the providerDELETE /v1/providers/scratch-provider 20012.030 B pass
Answer 404 for an unknown providerGET /v1/providers/no-such-provider 4041.0042 B pass
Refuse a provider body that does not parsePOST /v1/providers 4001.0085 B pass
vault8 requests
RequestCallStatusmsSizeResult
Show the vault's stateGET /v1/vault 2001.00245 B pass
List the vault's entries before any secret of the owner'sGET /v1/vault/secrets 2002.00695 B pass
Create a secretPOST /v1/vault/secrets 20037.0333 B pass
Change a secret's labelPATCH /v1/vault/secrets/sec_5dq37pc55d7u 20017.0342 B pass
Read the secret's metadata back from the listGET /v1/vault/secrets 2001.001.0 KiB pass
Delete a secretDELETE /v1/vault/secrets/sec_5dq37pc55d7u 20444.00 B pass
Answer 404 for an unknown secret idDELETE /v1/vault/secrets/sec_doesnotexist 4042.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 2002.001.3 KiB pass
Save a valid change to the settingsPUT /v1/settings 2002.001.3 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 2002.001.3 KiB pass
Check the session is signed inGET /v1/auth/check 2001.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 2001.0012 B pass
Open a project for the tasksPOST /v1/projects 20124.0674 B pass
Create a taskPOST /v1/tasks 2012.00346 B pass
Read the task backGET /v1/tasks/t1 2007.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 4041.0035 B pass
Refuse a task with no goalPOST /v1/tasks 4001.0075 B pass
Read the boardGET /v1/board 2001.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 4001.0037 B pass
Create a task others will run afterPOST /v1/tasks 2011.00301 B pass
Create a task that runs after anotherPOST /v1/tasks 2012.00320 B pass
List only the tasks that can be claimed nowGET /v1/tasks?ready=true 2001.00313 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 2003.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 4042.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 4091.0027 B pass
Answer 400 when a review has no approve fieldPOST /v1/library/no-such-tool/1/review 4001.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 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 4091.0044 B pass
Answer 404 for an unknown project's task graphGET /v1/projects/no-such-project/graph 4041.0027 B pass
List a project's agents, none yetGET /v1/projects/pr1/members 2001.002 B pass
Answer 404 for an unknown project's agentsGET /v1/projects/no-such-project/members 4041.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 4041.0025 B pass
Answer 404 when benching an agent not on the projectDELETE /v1/projects/pr1/members/4242 4041.0044 B pass
Pause a projectPOST /v1/projects/pr1/pause 2002.001010 B pass
Resume a paused projectPOST /v1/projects/pr1/resume 2001.001.1 KiB pass
Refuse a project with no titlePOST /v1/projects 4007.0045 B pass
Open a project to archivePOST /v1/projects 20124.0634 B pass
Archive a projectPOST /v1/projects/pr2/archive 2001.00709 B pass
Refuse a task for an archived projectPOST /v1/tasks 4091.0058 B pass
Refuse to resume an archived projectPOST /v1/projects/pr2/resume 4091.0035 B pass
Answer 404 when pausing an unknown projectPOST /v1/projects/no-such-project/pause 4041.0027 B pass
Answer 404 when moving an unknown task into a projectPOST /v1/tasks/t999/move 4041.0032 B pass
Refuse to move a task out of its projectPOST /v1/tasks/t1/move 4091.0070 B pass
Refuse a move that names no projectPOST /v1/tasks/t1/move 4001.0046 B pass
Suggest no agents for a project nobody worked onGET /v1/projects/pr1/suggested-members 2001.002 B pass
Answer 404 for an unknown project's suggested agentsGET /v1/projects/no-such-project/suggested-members 4041.0027 B pass
Read a project's settings, none set yetGET /v1/projects/pr1/settings 2001.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 4001.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 2001.00562 B pass
Set a project's effort back to the plaza'sPATCH /v1/projects/pr1/settings 2002.0020 B pass
Answer 404 for an unknown project's settingsGET /v1/projects/no-such-project/settings 4041.0027 B pass
Read a project's budget, none set aside yetGET /v1/projects/pr1/budget 2001.0055 B pass
Set credits aside for a projectPOST /v1/projects/pr1/budget 2001.0057 B pass
Give some of a project's budget back to the plazaPOST /v1/projects/pr1/budget 2001.0056 B pass
Refuse to move no creditsPOST /v1/projects/pr1/budget 4002.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 4091.0066 B pass
mcp10 requests
RequestCallStatusmsSizeResult
List the MCP servers on an empty hubGET /v1/mcp/servers 2001.002 B pass
Add an MCP serverPOST /v1/mcp/servers 2001.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 4001.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_664aaa09824a 2042.000 B pass
metrics11 requests
RequestCallStatusmsSizeResult
Read the metric catalogGET /v1/metrics/catalog 2003.0028.4 KiB pass
Compose the overview view on an empty hubGET /v1/metrics/view?tab=overview&range=24h 2003.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 2003.0013 B pass
Refuse a query with an unknown groupPOST /v1/metrics/query 4003.0088 B pass
Read the metrics settingsGET /v1/metrics/settings 2009.00292 B pass
Answer 404 for the scrape endpoint while OpenMetrics is offGET /metrics 4043.0021 B pass
Summarize usage over a valid windowGET /v1/usage/summary?from=0&to=1000 2007.00231 B pass
Refuse a usage window that ends before it startsGET /v1/usage/summary?from=2000&to=1000 4005.0042 B pass
List the model pricesGET /v1/prices 2009.00488.7 KiB pass
Answer 404 for a model with no priceGET /v1/prices/no-such-model-xyz 4042.0042 B pass
joining17 requests
RequestCallStatusmsSizeResult
List the node join codes on an empty hubGET /v1/nodes/codes 20017.02 B pass
Issue a join code for a new nodePOST /v1/nodes/codes 2012.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 2004.00121 B pass
Answer 404 when revoking an unknown node join codeDELETE /v1/nodes/codes/c999999 4044.0024 B pass
Answer 400 when the node join code body is not JSONPOST /v1/nodes/codes 4003.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 2003.002 B pass
Answer 400 when the workstation join code body is not JSONPOST /v1/stations/codes 4003.00111 B pass
Answer 404 when revoking an unknown workstation join codeDELETE /v1/stations/codes/c999999 4043.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 4042.0024 B pass
Answer 404 when resuming an unknown nodePOST /v1/nodes/n999/resume 4044.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 2003.00310 B pass
A dry-run rebalance lists its moves and starts nonePOST /v1/nodes/rebalance 2007.0028 B pass
agents13 requests
RequestCallStatusmsSizeResult
List the agents on a hub with no nodeGET /v1/agents 2004.002 B pass
Answer 404 for an agent that does not existGET /v1/agents/999999 4042.0025 B pass
Answer 400 for an agent id that is not a numberGET /v1/agents/not-a-number 4003.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 2003.0052.4 KiB pass
Change a custom role by saving it againPOST /v1/roles 2003.00322 B pass
Delete a custom roleDELETE /v1/roles/scout-test 2006.0034 B pass
Answer 404 when deleting a role that is already goneDELETE /v1/roles/scout-test 4044.0030 B pass
List the bench on a hub with no nodeGET /v1/agents?project=bench 2004.002 B pass
Answer 404 for an unknown project's rosterGET /v1/agents?project=no-such-project 4042.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 2001.0040 B pass
Set an agent's permission mode to read_onlyPUT /v1/agents/7/permissions 20034.020 B pass
Read back the permission mode after the changeGET /v1/agents/7/permissions 20011.037 B pass
Refuse a permission mode that is not one of the threePUT /v1/agents/7/permissions 40011.077 B pass
Decide an approval that does not existPOST /v1/approvals/no-such-approval 4046.0028 B pass
List the sanctions on an empty hubGET /v1/sanctions 2003.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 2002.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 2005.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 4045.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 4003.0041 B pass
List the IDE's workspaces (only project repos on a fresh hub)GET /v1/ide/workspaces 2004.00337 B pass
Read the checkpoints of a workspace that does not existGET /v1/ide/workspaces/repo:no-such-repo@main/checkpoints 4044.0047 B pass
Read the checkpoints of a malformed workspace idGET /v1/ide/workspaces/not-a-workspace/checkpoints 4003.0066 B pass
e2b8 requests
RequestCallStatusmsSizeResult
Create an E2B key for the readsPOST /v1/e2b/keys 20025.0131 B pass
List the running sandboxes (empty)GET /e2b/sandboxes 2005.002 B pass
List the sandboxes by state (empty)GET /e2b/v2/sandboxes?state=running,paused 2008.002 B pass
List every sandbox for the owner's console (empty)GET /v1/e2b/sandboxes 2002.0016 B pass
Get a sandbox that does not existGET /e2b/sandboxes/sb0000000000000000 4041.0087 B pass
Refuse the sandbox list without an E2B keyGET /e2b/sandboxes 4012.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-e2eb073fb4d2 20034.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 4092.00118 B pass
Refuse a conversation with no textPOST /v1/owner/conversations 4002.0034 B pass
Refuse a conversation with an empty messagePOST /v1/owner/conversations 4001.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 4041.0036 B pass
Answer 404 when renaming an unknown conversationPATCH /v1/owner/conversations/conv-999 40412.036 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 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 4043.0032 B pass
Answer 404 when editing an unknown conversation's draftPATCH /v1/owner/conversations/conv-999/draft 4043.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 2006.00361 B pass
List the language packs Weft has loadedGET /v1/weft/packs 2006.00318 B pass
List the Weft keys, with the owner's on a fresh hubGET /v1/weft/keys 2006.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 2001.00556 B pass
Show the code review recipe as its TOMLGET /v1/recipes/code 2004.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 4002.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 20138.01.4 KiB pass
Put the project back in buildPOST /v1/projects/pr3/mode 2008.00988 B pass
Answer 400 for a mode that does not existPOST /v1/projects/pr3/mode 4003.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 2013.00183 B pass
Make the project's ingest addressPOST /v1/projects/pr3/maintenance/ingest 2013.00139 B pass
Send a signal to the ingest address without a tokenPOST /v1/ingest/apzi_fa9cc819ec2a5986d3d31d05bb02fcdcbf8dbd50d998edd0 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 4042.0028 B pass
List the project's environmentsGET /v1/projects/pr3/environments 2003.00247 B pass
Put a staging environment that tracks mainPUT /v1/projects/pr3/environments/staging 2003.00239 B pass
Deploy a named version to stagingPOST /v1/projects/pr3/environments/staging/deploy 20014.096 B pass
Put a secret for the staging environmentPUT /v1/projects/pr3/environments/staging/secrets/STAGING_DEPLOY_TOKEN 20048.063 B pass
Upload a file's bytes into the projectPUT /v1/projects/pr3/uploads 20135.085 B pass
Land the uploaded file on main as one changePOST /v1/projects/pr3/files 20063.0109 B pass
looks13 requests
RequestCallStatusmsSizeResult
Read the appearance (the default look)GET /v1/appearance 2002.00112 B pass
Save a chosen built-in lookPUT /v1/appearance 2002.00115 B pass
Refuse a look that names no known themePUT /v1/appearance 4002.0043 B pass
Save a valid custom themePUT /v1/appearance/themes/my-theme 2003.00250 B pass
Refuse a custom theme that takes a built-in idPUT /v1/appearance/themes/loom-clay 4002.0068 B pass
Refuse a theme whose body id differs from the URLPUT /v1/appearance/themes/other 4003.0056 B pass
Delete the custom themeDELETE /v1/appearance/themes/my-theme 2007.00115 B pass
Put the default look backPUT /v1/appearance 2003.00112 B pass
List the artifactsGET /v1/artifacts 2003.002 B pass
Read an artifact that does not existGET /v1/artifacts/aunknownid00 4043.0039 B pass
List the share linksGET /v1/shares 2003.002 B pass
Refuse a share link for an artifact that does not existPOST /v1/shares 4042.0036 B pass
Read the data of an artifact that does not existGET /artifact/0123456789abcdef0123456789abcdef/data 4042.0019 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.0796.196.1 224 B-1%
/v1/pricesList the model prices200 13.753.953.9 488.7 KiB+540%
/v1/laws/rulesList the owner's rules and overrides200 5.7350.250.2 87 B+2598%
/v1/foundry/jobsList the jobs, newest first200 3.1828.428.4 2 B+660%
/v1/stations/recording-defaultsShow the recording defaults for new workstations200 5.4125.825.8 74 B+2286%
/v1/metrics/alertsList the alerts and their state200 4.3625.725.7 2.3 KiB+491%
/v1/stationsList the workstations200 3.6723.323.3 2 B+1905%
/v1/machineRead this machine's facts502 3.9221.521.5 101 B+162%
/v1/machinesList the machines on this plaza200 4.6020.620.6 58 B+177%
/v1/acpOpen an editor's ACP socket409 2.9119.619.6 104 B+227%
/v1/loopsList the scheduled loops200 2.1218.618.6 2 B+502%
/v1/runsList the runs on this machine502 4.0318.518.5 101 B+12%
/v1/hubRead the hub's status502 2.8317.817.8 101 B+157%
/v1/ide/auditList the IDE's audit log200 3.9517.617.6 2 B+184%
/v1/mcp/catalogList the MCP server presets200 3.9317.417.4 4.2 KiB+765%
/v1/toolboxList the toolbox discoveries200 4.2816.316.3 2 B+540%
/v1/usage/callsList the newest model calls200 1.8715.415.4 41 B+467%
/v1/promptsList the prompts200 5.9315.015.0 5.3 KiB+615%
/v1/vaultShow the vault's state200 3.9414.514.5 245 B+639%
/v1/providersList the providers200 6.7714.114.1 7.0 KiB+108%
/v1/decisions/defaultGet the default decision model200 3.2113.413.4 30 B+120%
/v1/metrics/forecastShow the capacity forecast200 6.6112.912.9 187 B+221%
/v1/skills/rulesList the skill rules and the template200 5.1912.612.6 2.3 KiB+378%
/v1/ide/workspacesList the IDE's workspaces200 6.1011.911.9 511 B+260%
/v1/stations/auditList the station audit, newest first200 2.9311.811.8 2 B+828%
/v1/metrics/viewCompose a metrics view200 7.4111.511.5 3.7 KiB+35%
/v1/hub-mcp/tokensList the MCP tokens200 2.2111.011.0 192 B+279%
/v1/prompts/rulesList the prompt rules and templates200 3.3811.011.0 5.5 KiB+427%
/v1/motionsList the motions200 1.9811.011.0 214 B+81%
/v1/metrics/slosList the service-level objectives200 6.2610.710.7 785 B+219%
/v1/lawsList the laws and how often each refused a call200 6.5410.610.6 104.2 KiB+87%
/v1/metrics/exportExport a view as CSV200 6.9910.610.6 24 B+103%
/v1/agentsList the agents200 3.199.909.90 2 B+182%
/v1/treasury/seriesShow the treasury over time200 2.349.679.67 9.9 KiB+126%
/v1/connectors/proposalsList connector proposals, newest first200 2.429.539.53 2 B+410%
/v1/tasksList the tasks200 3.899.369.36 985 B+92%
/v1/volumesList the data volumes502 5.149.229.22 101 B+86%
/v1/sanctionsList the sanctions and suspensions200 2.659.189.18 33 B+263%
/v1/skills/exportExport several skills as one zip422 5.478.938.93 24 B+224%
/v1/foundry/hf/statusShow the Hugging Face status200 3.948.698.69 115 B+78%
/v1/templatesList the warm templates502 2.878.628.62 101 B+14%
/v1/hub/identityShow the hub's identity200 2.698.598.59 99 B+232%
/v1/foundry/recipesList the recipes200 3.038.588.58 541 B+3%
/v1/agoraShow the agora's calls200 2.288.428.42 52 B+132%
/v1/rolesList the built-in and custom roles200 3.828.378.37 52.0 KiB-5%
/v1/societyShow the society: agents, bonds and reputations200 2.708.348.34 52 B-17%
/v1/treasury/journalList the treasury journal200 2.418.158.15 2.3 KiB-7%
/v1/appearanceRead the owner's appearance and saved themes200 2.118.078.07 112 Bnew
/v1/projectsList the projects200 2.857.837.83 2.7 KiB+114%
/v1/laws/violationsList the recorded refusals of a law200 4.277.817.81 2 B+379%
/v1/filesList the files agents handed in200 2.347.627.62 2 B+15%
/v1/metrics/aroundShow what changed around a time200 4.427.607.60 202 B+36%
/v1/treasuryShow the treasury balances200 3.107.487.48 759 B+96%
/v1/usage-providersList the usage providers (CLIProxyAPI hubs) and their last readings200 2.697.397.39 2 Bnew
/v1/agent-proposalsList the agent proposals200 2.457.387.38 2 B+590%
/v1/skillsList the skills, or the archived ones200 2.947.387.38 556 B+481%
/v1/robots/speciesList the robot species with counts200 4.507.347.34 1.2 KiB+43%
/v1/board/exportExport a board thread as Markdown or JSON200 2.697.207.20 69 B+153%
/v1/libraryList the library's tool versions200 2.597.107.10 2 B+154%
/v1/platformsList the git platforms the plaza is authorized on200 2.647.107.10 323 Bnew
/v1/vault/auditRead the audit log, verifying it on request200 4.756.886.88 1.6 KiB+253%
/v1/conversationsList the conversations200 2.206.796.79 147 B+103%
/v1/foundry/hf/importsList the Hugging Face imports200 2.786.566.56 14 B+90%
/v1/stations/recordingsList the station recordings, newest first200 2.956.506.50 2 B+491%
/v1/auth/checkCheck that the session is signed in200 3.696.496.49 11 B+185%
/v1/hub-mcp/callsList the recent MCP calls200 2.356.276.27 12 B+48%
/v1/mcp/serversList the MCP servers200 2.916.216.21 2 B+103%
/v1/vault/consumersList each consumer and its resolved entry200 3.296.216.21 4.0 KiB+133%
/v1/sharesList the share links, all of them or those of one target200 2.216.086.08 2 Bnew
/v1/foundry/datasetsList the datasets200 3.576.026.02 2 B+179%
/v1/fleetList the machines and the agents on them200 3.165.975.97 295 B+169%
/v1/platforms/callbackTake the browser back from a platform400 3.065.945.94 501 Bnew
/v1/connectorsList the connectors and their settings200 2.855.925.92 11.6 KiB-50%
/v1/project-modesList the modes a project can be in200 2.105.895.89 371 Bnew
/v1/vault/secretsList the vault's entries200 2.635.835.83 1.1 KiB+217%
/v1/owner/conversationsList the owner's conversations with the orchestrator200 2.205.705.70 2 Bnew
/v1/hub-mcpShow the hub's MCP server status200 3.405.615.61 278 B+80%
/v1/foundry/devicesList the accelerators and the jobs holding them200 3.605.605.60 15 B+28%
/v1/infractionsList the recent infractions200 2.295.595.59 2 B+94%
/v1/enginesList the coding engines: the built-in ones and the instances the owner added200 2.605.295.29 4.2 KiBnew
/v1/egress/injectList the egress injection rules200 2.195.225.22 12 B+235%
/v1/metrics/tracesList the kept traces200 2.355.215.21 2 B+218%
/v1/foundry/modelsList the foundry's models200 3.235.125.12 13 B+45%
/v1/metrics/eventsList the metric events200 2.735.105.10 2 B+217%
/v1/node-linkRead this machine's link to a hub200 2.285.025.02 81 B+118%
/v1/weftShow whether Weft, the plaza's version control, is running200 3.094.994.99 46 Bnew
/v1/metrics/calls/pageLoad the next page of calls200 2.544.974.97 351 B+76%
/v1/nodesList the plaza's machines200 2.624.954.95 312 B+111%
/v1/usage/seriesShow usage over time, bucketed200 2.654.864.86 28.0 KiB+78%
/v1/provider-catalogWhat the Add provider dialog offers: the API kinds and the coding engines200 3.214.804.80 9.6 KiBnew
/v1/nodes/codesList the join codes200 1.984.784.78 121 B+149%
/v1/usage/summarySummarize usage over a time window200 2.474.774.77 252 B-31%
/v1/settingsGet the hub's settings200 2.494.664.66 1.3 KiB-18%
/v1/metrics/dashboardsRead the saved dashboards200 2.364.594.59 50 B+410%
/v1/metrics/catalogRead the metric catalog200 2.034.534.53 28.4 KiB+189%
/v1/recipesList the review recipes and the orchestrator's proposals200 3.114.524.52 556 Bnew
/v1/metricsScrape the hub's Prometheus metrics200 2.024.394.39 5.1 KiB+129%
/v1/e2b/sandboxesList all sandboxes for the owner's console200 2.824.374.37 16 B+150%
/v1/e2b/templatesList the templates and their builds200 2.034.314.31 16 B+168%
/v1/metrics/settingsRead the metrics settings200 2.444.284.28 292 B+163%
/v1/artifactsList the artifacts, newest first (?project=, ?q=)200 1.934.184.18 2 Bnew
/v1/stations/linkOpen the workstation daemon's link socket401 1.704.104.10 61 B+204%
/v1/metrics/callsList the agents' calls200 2.373.793.79 2 B+16%
/v1/approvalsList the approvals, pending and decided200 2.423.783.78 2 B+122%
/v1/metrics/scopesList the metric scopes200 2.483.633.63 6.3 KiB+4%
/v1/acp/sessionsList the editor (ACP) sessions200 2.373.303.30 2 B-48%
/v1/e2b/keysList the E2B API keys200 2.443.293.29 11 B+75%
/v1/treasury/walletsList the agent wallets200 2.353.283.28 2 B+14%
/v1/stations/vmsList the workstation VMs200 2.033.243.24 2 B+122%
/v1/stations/codesList the join codes200 2.433.083.08 2 B+18%
/v1/plaza/stateShow whether the plaza is stopped200 2.113.023.02 63 B+80%
/v1/wsOpen a socket that streams the hub's events400 2.262.842.84 79 B-55%
/v1/provider-kindsList the provider kinds you can add200 2.062.592.59 8.3 KiB-75%
/v1/boardRead the board200 1.952.372.37 134 B-72%

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

- 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}/results
1. Test Case ID: WfGQJY

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

- 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/skills
1. Test Case ID: kOst0l

- Server error

[503] Service Unavailable:

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

Reproduce with:

    curl -X POST -H 'Authorization: [Filtered]' http://127.0.0.1:17777/v1/vault/recovery
POST /v1/vault/seal
1. Test Case ID: j3rOke

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

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

- 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/servers
1. Test Case ID: XfuSdX

- 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
1. Test Case ID: t51xDF

- 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}/runs
1. Test Case ID: YGfqVP

- 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/owner/conversations
1. Test Case ID: sREvjD

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

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

- 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/treasury/journal
1. Test Case ID: Raunbk

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

- 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/shares/{id}
1. Test Case ID: BYCWfD

- 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/toolbox/{id}
1. Test Case ID: 0MDTvh

- 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
internal0/42
e2b7/39
projects29/38
stations5/38
agents5/35
foundry6/33
metrics5/27
skills5/23
nodes7/18
vault5/17
platforms4/17
ide2/15
prompts5/15
mcp5/13
tasks6/11
providers5/10
owner9/10
laws4/10
artifact1/9
artifacts2/8
engines0/7
board2/7
connectors0/7
treasury0/6
hub-mcp3/6
runs0/5
motions0/5
files0/5
shares2/5
usage-providers0/4
library4/4
appearance4/4
weft2/4
recipes2/4
egress0/4
hub1/3
volumes0/3
acp0/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
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
provider-catalog0/1
agora0/1
society0/1
project-modes1/1
ingest1/1
infractions0/1
fleet0/1
robots0/1