Skip to main content
Artifacts expire with your plan’s retention window, so files you need for longer belong in a volume.

Save one

Save this as report.py. The task writes a CSV and returns a download URL:
Open the returned URL to download sales.csv. Anyone with that URL can read the file until it expires. LazyCloud attaches the task ID for you. save() uploads the file and returns a SavedArtifact with artifact_id, task_id, and filename. If the path is a directory, save() zips it first. Other ways to construct one:
artifact.zip_dir(dir_path) zips a directory so a folder can be saved as one artifact.

Retrieve one

artifact.public_url(expires=3600) returns a URL that serves the file without authentication until it expires, so a browser or a webhook can use it. artifact.exists() and artifact.stat() check and describe the saved file. Deleting the task that produced an artifact leaves the artifact in place. Saving from outside the producing container needs an explicit task_id=.... The dashboard lists, previews, and downloads them.

Retention

Artifacts expire on the same plan retention window as logs. Free keeps them for one day, Team for 30 days, and Business for 90 days. Complimentary accounts get the Business window. The plan at upload time sets the window, and it counts from the upload. saved.expires_at and the dashboard show the expiry date. Public URLs do not outlive the artifact, and artifact.delete() removes one sooner. Artifacts bill as volume storage. See Plans and limits. uv run lazycloud artifact list, usage, and delete manage artifacts from a terminal. See storage commands.