Update a workspace
const url = 'https://api.hyperresearch.ai/v1/workspaces/example';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"name":"example","settings":{"fetch":{"rung_max":"L0","max_html_bytes":1,"max_pdf_bytes":1,"allow_domains":["example"],"deny_domains":["example"]},"robots":"strict","clarify_default":"ask","provider_exclusions":["example"],"retention":{"raw_days":1,"assets_days":1},"reuse":{"default":"all","max_age_days":1}}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.hyperresearch.ai/v1/workspaces/example \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "example", "settings": { "fetch": { "rung_max": "L0", "max_html_bytes": 1, "max_pdf_bytes": 1, "allow_domains": [ "example" ], "deny_domains": [ "example" ] }, "robots": "strict", "clarify_default": "ask", "provider_exclusions": [ "example" ], "retention": { "raw_days": 1, "assets_days": 1 }, "reuse": { "default": "all", "max_age_days": 1 } } }'Rename a workspace or change its settings. settings is merged into the stored settings, not replaced; keys you do not send keep their values. Owner/admin only.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
object
object
What every run in this workspace does about an ambiguous question, unless the request says otherwise: ask interviews the customer before anything is reserved, auto proceeds immediately on the stated assumptions and names them in the report, off skips the assessment entirely. Unset, the channel decides — ask from the console, auto from an API key, the CLI or MCP.
object
Responses
Section titled “ Responses ”Updated
object
What to show a customer where the workspace is named. The workspace name, or “Untitled workspace” when it has none — never the id.
The id as a screen shows it: the prefix, an ellipsis and the last characters, the same treatment #/keys gives a key id. Support quotes an id by copying id, never by reading it off the page.
object
object
What every run in this workspace does about an ambiguous question, unless the request says otherwise: ask interviews the customer before anything is reserved, auto proceeds immediately on the stated assumptions and names them in the report, off skips the assessment entirely. Unset, the channel decides — ask from the console, auto from an API key, the CLI or MCP.
object
The workspace robots handling as a sentence, beside the wire value (E2E6-12). #/settings rendered the bare enum — strict / standard / permissive — as the options of a select whose neighbour reads “Basic — the page as served”. The value is unchanged and is still what PATCH takes; this is what to show. The full option list is GET /v1/workspaces/robots-modes.
object
Example
{ "id": "ws_01J9ZQ7V6H0000000000000000", "display_id": "ws…GSB5GJ7", "settings": { "fetch": { "rung_max": "L0" }, "robots": "strict", "clarify_default": "ask", "reuse": { "default": "all" } }, "display_robots": { "value": "strict" }, "status": "active"}Headers
Section titled “Headers”Example
"reads";q=60;w=60The quota policy this request was counted against (draft-ietf-httpapi-ratelimit-headers): "<bucket>";q=<requests>;w=<window seconds>, e.g. "reads";q=60;w=60. Buckets: reads 60/min, status 600/min, creates 10/min, writes 20/min per credential; public 300/min per network on keyless routes.
Example
"reads";r=57;t=41Remaining quota in the current window: "<bucket>";r=<remaining>;t=<seconds until reset>, e.g. "reads";r=57;t=41.
Requests allowed per window in this bucket (legacy form of RateLimit-Policy).
Requests left in this window (legacy form of RateLimit).
Unix time (seconds) when the window resets.
Which bucket counted the request: reads, status, creates, writes or public.
Invalid request
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Authentication failed
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Insufficient scope or plan
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Not found
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Rate limited or over quota
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Headers
Section titled “Headers”Seconds to wait before retrying. Always present on a 429.
Example
"reads";q=60;w=60The quota policy this request was counted against (draft-ietf-httpapi-ratelimit-headers): "<bucket>";q=<requests>;w=<window seconds>, e.g. "reads";q=60;w=60. Buckets: reads 60/min, status 600/min, creates 10/min, writes 20/min per credential; public 300/min per network on keyless routes.
Example
"reads";r=57;t=41Remaining quota in the current window: "<bucket>";r=<remaining>;t=<seconds until reset>, e.g. "reads";r=57;t=41.
Requests allowed per window in this bucket (legacy form of RateLimit-Policy).
Requests left in this window (legacy form of RateLimit).
Unix time (seconds) when the window resets.
Which bucket counted the request: reads, status, creates, writes or public.
Internal error
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}