See when your job outputs expire
Job responses now include a retentionExpiresAt timestamp, so you know the exact date an output will be deleted. Free keeps outputs 7 days, Pro 30.
Every job kept its output for a set window after it finished, but there was no way to see when that window ended. Job responses now carry retentionExpiresAt, the exact time the stored files get deleted. Free plans keep outputs for 7 days, Pro for 30.
The same date everywhere
The date reads the same everywhere. GET /jobs/:id returns it as a Unix millisecond timestamp, the MCP get_job tool returns it as an ISO string, and the dashboard shows “Files available until” on the job detail. It is frozen when the job completes, so it always matches the moment the file is actually removed.
What gets removed
When that window ends, the output and everything stored with it (logs, metrics, and the preview thumbnail) are removed together. Download links are separate and short lived: they refresh every time you fetch the job, so a stale link is never a sign your file is gone. Check retentionExpiresAt for that.
const job = await client.jobs.get("job_...");// Unix milliseconds, or null while the job has not completed.console.log(job.retentionExpiresAt);The MCP get_job tool exposes the same moment as outputExpiresAt in ISO form, so an agent and a backend reading the same job agree on when the file goes.
Per-plan retention windows are listed under plan limits. The field sits on the standard job shape in job lifecycle.
