storageEntryId exists only after the session reaches FINALIZED.
Choose an upload mode
writeMode is a separate setting for structured CSV/XLSX row materialization. It does not choose how raw bytes are transferred. See Structured files.
Direct frontend upload
Create the session in trusted backend or low-code logic, return only the temporary upload contract to the frontend, and keep the session ID for status checks.finalizeUploadSession() for the managed direct path. Storage owns finalization after it confirms the completed transfer.
- successful
fetch()means the temporary target accepted the transfer; FINALIZEDmeans Storage published the governed file entry;- only the finalized entry should trigger later reads, Events, or Jobs.
computeStats: 'sync', finalization also validates CSV syntax and source field counts. STORAGE_CSV_INVALID prevents publication; successful byte transfer alone does not prove that the CSV is valid. Set csv.onError: 'skipRow' explicitly to skip source field-count mismatches with diagnostics. Syntax and record-size errors still abort, and readers need the same explicit policy. A failed session can retain temporary bytes, so inspect its state and explicitly abort it when abandoning the upload. Native generated row parts retain row and physical-line counts during encoding, so finalization can reuse those counts. See CSV validation.
Investigate an upload
Keep the upload session ID and finalized Storage entry ID to find the recorded journey in Observability. The session retains the creating execution across later direct-upload finalization. Its lifecycle duration covers reservation through the terminal state, including waiting for the producer and finalization; it is not a network-transfer benchmark. A replacement records a new origin for the current file version.Incremental generated upload
Choose incremental mode for one producer that appends data in order. OmitpartNumber during normal writes; Storage assigns it.
rows or sheets instead of manually serializing delimiters. One part must contain exactly one of data, rows, or sheets.
Chunked and repairable upload
Use chunked mode when part numbers belong to the caller:Platform API lifecycle
The default Explorer routes are:
Writable workspaces expose their own create-session route. After creation, use the returned session ID with the normal lifecycle operations. The main response shapes are:
Use the generated Platform API reference for exact routes and request schemas. These Storage operations currently expose no machine-readable success-response schema in OpenAPI; use the response shapes above and the low-code Storage reference when handling their results.
Lease, retention, and recovery
Session expiry is an upload lease, not file retention:- every accepted part renews the lease;
- use
extendUploadSession()only for an intentional idle gap; retention.ttlSecondsbegins when the file is finalized;retention: nullmeans the finalized file does not expire;- an expired, failed, or aborted session cannot be resumed.
FINALIZED— use the target entry; do not upload again;RESERVEDorUPLOADING— inspect the manifest and continue deliberately;FINALIZING— wait and read again;FAILED,ABORTED, orEXPIRED— create a new session.
Next steps
- Structured files — declare CSV/TSV/XLSX columns and choose schema policy.
- Storage overview — workspaces, access, retention, and readers.
- SDK storage and batching — apply the same lifecycle from Node.js.
- Storage low-code reference — inspect exact
storage.*signatures.

