Skip to main content
Return a freshly-signed download URL for an existing artifact. Use this when a previously-obtained presigned URL has expired.
string
required
The session ID the artifact belongs to
string
required
The artifact ID (the artifact_id returned by Upload Artifact)

Response

200 OK:
For an artifact backed by an external reference (for example a file sourced from a connected provider rather than uploaded bytes), url may instead be a relative path to the download proxy, e.g. /api/v1/sessions/{session_id}/artifacts/{artifact_id}/download/. Treat the returned value as opaque and use it as-is.

URL expiry and the refresh pattern

Presigned URLs default to a 4-hour validity window. A URL captured at upload time (or stored from an earlier execute call) can expire if a session is long-running or resumed later. Two ways to handle this:
1

Carry the artifact_id, not just the URL

When you build a file content block for /execute, include both source.url and source.artifact_id. The backend uses artifact_id to mint a fresh URL on its own if the one you sent has expired, so you don’t always need to call this endpoint manually.
2

Refresh explicitly when needed

For image content blocks (which carry no artifact_id field), or whenever you want a verified-fresh URL ahead of time, call this endpoint with the same artifact_id and substitute the returned url into your next request.
This endpoint is read-only and never changes artifact state — you can call it as often as you like to re-check or refresh delivery URLs.