From c4c94667e178ea68dc883fc876d04e28b413775f Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:20:07 +0530 Subject: [PATCH 01/12] docs: document POST /api/sandboxes/staged-files Pairs with api PR adding the Vercel Blob client-upload handshake endpoint. Adds OpenAPI entry to content.json, MDX page, and sandboxes nav entry. Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 48 ++++++++++++++++++++++++ api-reference/sandboxes/staged-files.mdx | 4 ++ docs.json | 1 + 3 files changed, 53 insertions(+) create mode 100644 api-reference/sandboxes/staged-files.mdx diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 09c2a710..5ff5aa6e 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -358,6 +358,54 @@ } } }, + "/api/sandboxes/staged-files": { + "post": { + "description": "Issue a presigned client-upload token for the Vercel Blob handshake used by the sandbox file-staging flow. Browsers POST a `HandleUploadBody` here, upload directly to Vercel Blob with the returned token, then pass the resulting blob URLs to `POST /api/sandboxes/files` which commits them to the account's sandbox GitHub repository and cleans up the blobs. Maximum file size is 100MB and uploaded blobs are given a random suffix. Authentication: pass the caller's access token via `clientPayload` as `JSON.stringify({ token })` — `@vercel/blob/client.upload()` does not allow setting an `Authorization` header on the handshake POST, so token transport rides on `clientPayload`. The browser performs an OPTIONS preflight before the POST; both are CORS-enabled.", + "requestBody": { + "description": "`HandleUploadBody` envelope from `@vercel/blob/client`. Either a token-generation request or an upload-completed callback. The same route handles both because Vercel Blob calls back to the original handshake URL after the direct upload finishes.", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "description": "Opaque payload as defined by `@vercel/blob/client`. Callers should use `upload()` from that library rather than constructing this body by hand." + } + } + } + }, + "responses": { + "200": { + "description": "Either a generated client token (token-generation phase) or an upload-completed acknowledgement (callback phase). Shape is defined by `@vercel/blob/client` and should be returned to the library verbatim by the caller.", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + }, + "400": { + "description": "Bad request — invalid `HandleUploadBody`, missing or invalid `clientPayload.token`, or downstream Vercel Blob handshake failure.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "error": { + "type": "string", + "description": "Human-readable error message." + } + }, + "required": ["error"] + } + } + } + } + } + } + }, "/api/sandboxes/files": { "post": { "description": "Upload one or more files to the authenticated account's sandbox GitHub repository. Accepts an array of file URLs and commits each file to the specified directory path within the repository. Supports submodule resolution — if the target path falls within a git submodule, the file is committed to the submodule's repository. Authentication is handled via the x-api-key header or Authorization Bearer token.", diff --git a/api-reference/sandboxes/staged-files.mdx b/api-reference/sandboxes/staged-files.mdx new file mode 100644 index 00000000..fb58fd24 --- /dev/null +++ b/api-reference/sandboxes/staged-files.mdx @@ -0,0 +1,4 @@ +--- +title: 'Stage Files' +openapi: "/api-reference/openapi/content.json POST /api/sandboxes/staged-files" +--- diff --git a/docs.json b/docs.json index 997ebc58..95c6a8d9 100644 --- a/docs.json +++ b/docs.json @@ -268,6 +268,7 @@ "api-reference/sandboxes/delete", "api-reference/sandboxes/setup", "api-reference/sandboxes/file", + "api-reference/sandboxes/staged-files", "api-reference/sandboxes/upload" ] }, From f2d7428bae7bc60ae4213d330216b88d6c4a28c1 Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:34:00 +0530 Subject: [PATCH 02/12] docs: rename sandboxes/upload to sandboxes/commit-files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Page documents POST /api/sandboxes/files (the GitHub-commit half of the sandbox upload flow). With the new staged-files page covering the Vercel Blob handshake half, "Upload Files" was ambiguous — "Commit Files" matches what the endpoint actually does. Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/sandboxes/{upload.mdx => commit-files.mdx} | 2 +- docs.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename api-reference/sandboxes/{upload.mdx => commit-files.mdx} (78%) diff --git a/api-reference/sandboxes/upload.mdx b/api-reference/sandboxes/commit-files.mdx similarity index 78% rename from api-reference/sandboxes/upload.mdx rename to api-reference/sandboxes/commit-files.mdx index e176f66f..307b2284 100644 --- a/api-reference/sandboxes/upload.mdx +++ b/api-reference/sandboxes/commit-files.mdx @@ -1,4 +1,4 @@ --- -title: 'Upload Files' +title: 'Commit Files' openapi: "/api-reference/openapi/content.json POST /api/sandboxes/files" --- diff --git a/docs.json b/docs.json index 95c6a8d9..5156cb23 100644 --- a/docs.json +++ b/docs.json @@ -269,7 +269,7 @@ "api-reference/sandboxes/setup", "api-reference/sandboxes/file", "api-reference/sandboxes/staged-files", - "api-reference/sandboxes/upload" + "api-reference/sandboxes/commit-files" ] }, { From 2cc43f798018b52952d20c197707206643bf1527 Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:44:43 +0530 Subject: [PATCH 03/12] docs: tighten /api/sandboxes/staged-files description Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 5ff5aa6e..82a1f97d 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -360,23 +360,22 @@ }, "/api/sandboxes/staged-files": { "post": { - "description": "Issue a presigned client-upload token for the Vercel Blob handshake used by the sandbox file-staging flow. Browsers POST a `HandleUploadBody` here, upload directly to Vercel Blob with the returned token, then pass the resulting blob URLs to `POST /api/sandboxes/files` which commits them to the account's sandbox GitHub repository and cleans up the blobs. Maximum file size is 100MB and uploaded blobs are given a random suffix. Authentication: pass the caller's access token via `clientPayload` as `JSON.stringify({ token })` — `@vercel/blob/client.upload()` does not allow setting an `Authorization` header on the handshake POST, so token transport rides on `clientPayload`. The browser performs an OPTIONS preflight before the POST; both are CORS-enabled.", + "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication: pass the caller's access token via `clientPayload` as `JSON.stringify({ token })`.", "requestBody": { - "description": "`HandleUploadBody` envelope from `@vercel/blob/client`. Either a token-generation request or an upload-completed callback. The same route handles both because Vercel Blob calls back to the original handshake URL after the direct upload finishes.", + "description": "`HandleUploadBody` envelope from `@vercel/blob/client`.", "required": true, "content": { "application/json": { "schema": { "type": "object", - "additionalProperties": true, - "description": "Opaque payload as defined by `@vercel/blob/client`. Callers should use `upload()` from that library rather than constructing this body by hand." + "additionalProperties": true } } } }, "responses": { "200": { - "description": "Either a generated client token (token-generation phase) or an upload-completed acknowledgement (callback phase). Shape is defined by `@vercel/blob/client` and should be returned to the library verbatim by the caller.", + "description": "Handshake response from `@vercel/blob/client` — return verbatim to the library.", "content": { "application/json": { "schema": { @@ -387,7 +386,7 @@ } }, "400": { - "description": "Bad request — invalid `HandleUploadBody`, missing or invalid `clientPayload.token`, or downstream Vercel Blob handshake failure.", + "description": "Invalid body, missing `clientPayload.token`, or upstream Vercel Blob failure.", "content": { "application/json": { "schema": { From fd4b737f162031cddd2d87354e0eb97f827f4e81 Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:46:49 +0530 Subject: [PATCH 04/12] =?UTF-8?q?docs:=20rename=20staged-files=E2=86=92sta?= =?UTF-8?q?ge-files=20and=20file=E2=86=92get-file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stage as a verb (matches Commit Files) reads more naturally than the adjective form, and Get File matches the GET method. Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 2 +- api-reference/sandboxes/{file.mdx => get-file.mdx} | 0 api-reference/sandboxes/{staged-files.mdx => stage-files.mdx} | 2 +- docs.json | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) rename api-reference/sandboxes/{file.mdx => get-file.mdx} (100%) rename api-reference/sandboxes/{staged-files.mdx => stage-files.mdx} (85%) diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 82a1f97d..3d207ce4 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -358,7 +358,7 @@ } } }, - "/api/sandboxes/staged-files": { + "/api/sandboxes/stage-files": { "post": { "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication: pass the caller's access token via `clientPayload` as `JSON.stringify({ token })`.", "requestBody": { diff --git a/api-reference/sandboxes/file.mdx b/api-reference/sandboxes/get-file.mdx similarity index 100% rename from api-reference/sandboxes/file.mdx rename to api-reference/sandboxes/get-file.mdx diff --git a/api-reference/sandboxes/staged-files.mdx b/api-reference/sandboxes/stage-files.mdx similarity index 85% rename from api-reference/sandboxes/staged-files.mdx rename to api-reference/sandboxes/stage-files.mdx index fb58fd24..9d92b7d5 100644 --- a/api-reference/sandboxes/staged-files.mdx +++ b/api-reference/sandboxes/stage-files.mdx @@ -1,4 +1,4 @@ --- title: 'Stage Files' -openapi: "/api-reference/openapi/content.json POST /api/sandboxes/staged-files" +openapi: "/api-reference/openapi/content.json POST /api/sandboxes/stage-files" --- diff --git a/docs.json b/docs.json index 5156cb23..c8af8bd2 100644 --- a/docs.json +++ b/docs.json @@ -267,8 +267,8 @@ "api-reference/sandboxes/snapshot", "api-reference/sandboxes/delete", "api-reference/sandboxes/setup", - "api-reference/sandboxes/file", - "api-reference/sandboxes/staged-files", + "api-reference/sandboxes/get-file", + "api-reference/sandboxes/stage-files", "api-reference/sandboxes/commit-files" ] }, From 5c785c64db2b554a6e4fe2e994e69210039e99ef Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:50:39 +0530 Subject: [PATCH 05/12] =?UTF-8?q?docs:=20rename=20stage-files=E2=86=92stag?= =?UTF-8?q?ed-file=20(noun-shaped=20resource)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Matches the existing /api/sandboxes/file noun pattern. Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 2 +- api-reference/sandboxes/{stage-files.mdx => staged-file.mdx} | 4 ++-- docs.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename api-reference/sandboxes/{stage-files.mdx => staged-file.mdx} (66%) diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 3d207ce4..9759d7d1 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -358,7 +358,7 @@ } } }, - "/api/sandboxes/stage-files": { + "/api/sandboxes/staged-file": { "post": { "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication: pass the caller's access token via `clientPayload` as `JSON.stringify({ token })`.", "requestBody": { diff --git a/api-reference/sandboxes/stage-files.mdx b/api-reference/sandboxes/staged-file.mdx similarity index 66% rename from api-reference/sandboxes/stage-files.mdx rename to api-reference/sandboxes/staged-file.mdx index 9d92b7d5..00ff9f34 100644 --- a/api-reference/sandboxes/stage-files.mdx +++ b/api-reference/sandboxes/staged-file.mdx @@ -1,4 +1,4 @@ --- -title: 'Stage Files' -openapi: "/api-reference/openapi/content.json POST /api/sandboxes/stage-files" +title: 'Stage File' +openapi: "/api-reference/openapi/content.json POST /api/sandboxes/staged-file" --- diff --git a/docs.json b/docs.json index c8af8bd2..bbe7c45b 100644 --- a/docs.json +++ b/docs.json @@ -268,7 +268,7 @@ "api-reference/sandboxes/delete", "api-reference/sandboxes/setup", "api-reference/sandboxes/get-file", - "api-reference/sandboxes/stage-files", + "api-reference/sandboxes/staged-file", "api-reference/sandboxes/commit-files" ] }, From 06efdfd14246e4292783c69b9239986bf6328d3b Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:52:16 +0530 Subject: [PATCH 06/12] docs: rename page to stage-file (verb-form filename) Endpoint stays /api/sandboxes/staged-file (noun); docs filenames are verb-shaped because the HTTP method is not in the path (parallel: commit-files.mdx for POST /api/sandboxes/files). Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/sandboxes/{staged-file.mdx => stage-file.mdx} | 0 docs.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename api-reference/sandboxes/{staged-file.mdx => stage-file.mdx} (100%) diff --git a/api-reference/sandboxes/staged-file.mdx b/api-reference/sandboxes/stage-file.mdx similarity index 100% rename from api-reference/sandboxes/staged-file.mdx rename to api-reference/sandboxes/stage-file.mdx diff --git a/docs.json b/docs.json index bbe7c45b..195f5fe2 100644 --- a/docs.json +++ b/docs.json @@ -268,7 +268,7 @@ "api-reference/sandboxes/delete", "api-reference/sandboxes/setup", "api-reference/sandboxes/get-file", - "api-reference/sandboxes/staged-file", + "api-reference/sandboxes/stage-file", "api-reference/sandboxes/commit-files" ] }, From d993c2adb3b340dde7f77805280907710788c528 Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:59:40 +0530 Subject: [PATCH 07/12] docs: revert commit-files rename back to upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The /api/sandboxes/files endpoint accepts any URL but its cleanup step assumes Vercel Blob — the two endpoints are coupled in a way that doesn't justify locking in commit/stage semantics in the docs yet. Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/sandboxes/{commit-files.mdx => upload.mdx} | 2 +- docs.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename api-reference/sandboxes/{commit-files.mdx => upload.mdx} (78%) diff --git a/api-reference/sandboxes/commit-files.mdx b/api-reference/sandboxes/upload.mdx similarity index 78% rename from api-reference/sandboxes/commit-files.mdx rename to api-reference/sandboxes/upload.mdx index 307b2284..e176f66f 100644 --- a/api-reference/sandboxes/commit-files.mdx +++ b/api-reference/sandboxes/upload.mdx @@ -1,4 +1,4 @@ --- -title: 'Commit Files' +title: 'Upload Files' openapi: "/api-reference/openapi/content.json POST /api/sandboxes/files" --- diff --git a/docs.json b/docs.json index 195f5fe2..98dd9338 100644 --- a/docs.json +++ b/docs.json @@ -269,7 +269,7 @@ "api-reference/sandboxes/setup", "api-reference/sandboxes/get-file", "api-reference/sandboxes/stage-file", - "api-reference/sandboxes/commit-files" + "api-reference/sandboxes/upload" ] }, { From 3201b61b08ebf137de6d53aa83c306a21ae557ad Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 22:59:59 +0530 Subject: [PATCH 08/12] docs: rename upload page to upload-files Verb-noun shape parallels stage-file and get-file. Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/sandboxes/{upload.mdx => upload-files.mdx} | 0 docs.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename api-reference/sandboxes/{upload.mdx => upload-files.mdx} (100%) diff --git a/api-reference/sandboxes/upload.mdx b/api-reference/sandboxes/upload-files.mdx similarity index 100% rename from api-reference/sandboxes/upload.mdx rename to api-reference/sandboxes/upload-files.mdx diff --git a/docs.json b/docs.json index 98dd9338..458ada9e 100644 --- a/docs.json +++ b/docs.json @@ -269,7 +269,7 @@ "api-reference/sandboxes/setup", "api-reference/sandboxes/get-file", "api-reference/sandboxes/stage-file", - "api-reference/sandboxes/upload" + "api-reference/sandboxes/upload-files" ] }, { From d01b4c53ac91032d4f0703f98f5fa2665ef1669d Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 23:05:02 +0530 Subject: [PATCH 09/12] docs: update staged-file auth to Authorization header + add 401 Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 9759d7d1..17a695c0 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -360,7 +360,7 @@ }, "/api/sandboxes/staged-file": { "post": { - "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication: pass the caller's access token via `clientPayload` as `JSON.stringify({ token })`.", + "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication: x-api-key header or Authorization Bearer token (passed via `upload()`'s `headers` option). The Vercel Blob upload-completed callback to this same route does not carry the user's auth header — its signature is verified internally.", "requestBody": { "description": "`HandleUploadBody` envelope from `@vercel/blob/client`.", "required": true, @@ -386,7 +386,7 @@ } }, "400": { - "description": "Invalid body, missing `clientPayload.token`, or upstream Vercel Blob failure.", + "description": "Invalid body or upstream Vercel Blob failure.", "content": { "application/json": { "schema": { @@ -401,6 +401,16 @@ } } } + }, + "401": { + "description": "Missing or invalid auth on the handshake POST.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboxErrorResponse" + } + } + } } } } From 82cc9f66ee5e694c8d9c220a85cd0b7686af1224 Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 23:06:25 +0530 Subject: [PATCH 10/12] docs: match sandbox endpoint convention for staged-file auth blurb Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 17a695c0..4997d21b 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -360,7 +360,7 @@ }, "/api/sandboxes/staged-file": { "post": { - "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication: x-api-key header or Authorization Bearer token (passed via `upload()`'s `headers` option). The Vercel Blob upload-completed callback to this same route does not carry the user's auth header — its signature is verified internally.", + "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication is handled via the x-api-key header or Authorization Bearer token.", "requestBody": { "description": "`HandleUploadBody` envelope from `@vercel/blob/client`.", "required": true, From f65f4537b4c1262969d58c9a03a1da4e2ab87285 Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 23:08:31 +0530 Subject: [PATCH 11/12] docs: drop auth sentence from staged-file description Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 4997d21b..3485d080 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -360,7 +360,7 @@ }, "/api/sandboxes/staged-file": { "post": { - "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB. Authentication is handled via the x-api-key header or Authorization Bearer token.", + "description": "Issue a presigned upload token so the browser can upload a file directly to Vercel Blob, then call `POST /api/sandboxes/files` with the resulting blob URL to commit it to the sandbox repo. Use `upload()` from `@vercel/blob/client` rather than calling this route by hand. Max file size 100MB.", "requestBody": { "description": "`HandleUploadBody` envelope from `@vercel/blob/client`.", "required": true, From 9d798526e7c4e75da2f2652668dba0a17f2e804d Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Sat, 9 May 2026 23:17:15 +0530 Subject: [PATCH 12/12] docs: switch staged-file error response from 400 to 500 Pairs with the api-side change to hide raw exception details and return a generic 500. Co-Authored-By: Claude Opus 4.7 (1M context) --- api-reference/openapi/content.json | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/api-reference/openapi/content.json b/api-reference/openapi/content.json index 3485d080..cf7dd9b9 100644 --- a/api-reference/openapi/content.json +++ b/api-reference/openapi/content.json @@ -385,25 +385,18 @@ } } }, - "400": { - "description": "Invalid body or upstream Vercel Blob failure.", + "401": { + "description": "Missing or invalid auth on the handshake POST.", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "error": { - "type": "string", - "description": "Human-readable error message." - } - }, - "required": ["error"] + "$ref": "#/components/schemas/SandboxErrorResponse" } } } }, - "401": { - "description": "Missing or invalid auth on the handshake POST.", + "500": { + "description": "Invalid body or upstream Vercel Blob failure.", "content": { "application/json": { "schema": {