# Resumable file uploads use the same volume upload-session primitives.
# 1. Create the session (kind file, source restartable_file).
curl -X POST "${NULLSPACE_API_URL}/v1/volumes/vol_123/uploads" \
-H "Authorization: Bearer ${NULLSPACE_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"kind": "file", "source_kind": "restartable_file", "target_path": "/models/large.bin", "content_length": 1048576, "conflict": "merge", "checksum_algorithm": "sha256"}'
# 2. Upload each part; parts may be replayed and sent out of order.
curl -X PUT "${NULLSPACE_API_URL}/v1/volumes/vol_123/uploads/upload_123/parts/0" \
-H "Authorization: Bearer ${NULLSPACE_API_KEY}" \
-H "Content-Type: application/octet-stream" \
--data-binary @./large.bin
# 3. Poll status to resume after an interruption, then complete.
curl -X GET "${NULLSPACE_API_URL}/v1/volumes/vol_123/uploads/upload_123" \
-H "Authorization: Bearer ${NULLSPACE_API_KEY}"
curl -X POST "${NULLSPACE_API_URL}/v1/volumes/vol_123/uploads/upload_123/complete" \
-H "Authorization: Bearer ${NULLSPACE_API_KEY}"