Create a file (presigned upload)
Create a file record and get a presigned URL to upload the bytes directly to storage.
Flow:
- Compute the file’s SHA-256 hash and base64-encode it.
- Call this endpoint with the filename, MIME type, size, and checksum. You receive the file object and a presigned
uploadUrl. PUTthe raw bytes touploadUrlwith headersContent-Type: <mimeType>andx-amz-checksum-sha256: <checksum>. S3 verifies the checksum on write.- (Recommended) Call
POST /api/v1/files/:id/confirmto verify the upload and flip the record toCONFIRMEDimmediately. Otherwise it is confirmed automatically the first time it is fetched viaGET /api/v1/files/:id.
Why: the bytes go straight to storage, so there is no API-server size limit.
Authorizations
Personal API key, e.g. Authorization: Bearer sajn_sk_.... Not scope-limited — acts as the issuing user.
Headers
API version for this request. Without it, the request uses the organization's default version; an organization without a default is pinned to the latest version by its first request.
2026-09, 2026-10 ID of the workspace this request acts in, from GET /api/v1/workspaces. Without it, an API key acts in its default workspace. The token's user must be a member of the workspace; an OAuth token only accepts the workspace it was granted for. A workspace that doesn't exist or can't be reached returns 403 WORKSPACE_ACCESS_DENIED.
Makes retries safe. A retry with the same key and the same request replays the stored response for 24 hours (header Idempotent-Replayed: true); the same key with a different request returns 400.
255Body
Body
Request a presigned upload URL and create a pending file record
Original filename including its extension
1 - 255MIME type of the file
application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation, video/mp4, video/quicktime, video/x-msvideo, video/webm, image/jpeg, image/png, image/gif, image/webp, image/svg+xml File size in bytes (max 25 MB)
x <= 26214400Base64-encoded SHA-256 checksum of the file. S3 enforces it on upload, so a mismatch rejects the bytes.
1File visibility (default PRIVATE)
PRIVATE, PUBLIC Response
The created file and the URL to upload its bytes to
The created file and the URL to upload its bytes to
Unique file identifier
Original filename
MIME type of the file
File size in bytes
File visibility
PRIVATE, PUBLIC URL to access the file (signed URL for private, direct URL for public)
Date and time when file was uploaded
Date and time when file was last updated
The user who uploaded the file
The storage key of the file. Set it as a PDF field's fieldMeta.value to render the file.
Presigned PUT URL (valid 15 minutes). Upload the bytes here with headers Content-Type: and x-amz-checksum-sha256: .

