Create a multipart upload target for a legacy bundle
Validates the requested upload and returns the storage handles an operator needs to upload a legacy bundle archive in parts. Platform admins only, over a Clerk session with a verified email; an upload request that fails validation is rejected before any storage object is created.
Authorization
apiKey Workspace API key created in Workspace settings → API keys. Scopes on the key bound what it can read and write.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/admin/legacy-imports/uploads" \ -H "Content-Type: application/json" \ -d '{ "fileName": "string", "size": 0, "sha256": "string" }'{ "data": { "uploadId": "string", "objectKey": "string", "partSize": 0, "parts": [ { "partNumber": 0, "url": "string", "expiresAt": "string" } ], "completionUrl": "string", "expiresAt": "string" }}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}Submit a response to a published form
Creates one record in the form's backing database from `values`, writing only the fields the form exposes publicly; keys that are not accepted visible fields are rejected. No authentication; the workspace slug and form slug in the path are the only credential. Submissions are rate limited per caller per minute and again per caller and form, so bursts are refused with a rate-limit error carrying a retry delay.
Register a legacy import run for an uploaded bundle
Creates an import run in dry-run or apply mode from an already uploaded bundle and its manifest, seeding one workspace row per source workspace in the manifest. Platform admins only. The bundle checksum must be a lowercase SHA-256, the object key must be well formed, and the manifest workspace list must be non-empty, free of duplicates, and consistent with its counts; creating a second apply run for a bundle that already has a live apply run, or referencing a bundle that retention cleanup has already reclaimed, is reported as a conflict.