Download one run-produced file by ID. Downloads record an audit event. Expired runs are permanently deleted. Retention is 30 days from run start on Free, unlimited on Pro and Team, and configured per organization on Enterprise with workspace overrides. HEAD checks access with the same authorization as GET but skips side effects, returning an empty 200 without payload headers on success. HEAD omits Content-Length; use file metadata to size downloads.
OAuth scope: api:read.
/api/v2/workflows/{workflowId}/runs/{runId}/files/{fileId}Your Sim API key, personal or workspace-scoped. Generate one under Settings, then API Keys. Operations that reject workspace keys say so in their own description.
In: header
Path Parameters
Unique workflow identifier.
1 <= lengthUnique workflow run identifier.
^[A-Za-z0-9._:-]+$1 <= length <= 128Identifier of a file the run produced, as reported by the run resource.
1 <= length <= 256Response Body
application/octet-stream
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://www.sim.ai/api/v2/workflows/string/runs/run_8f14e45f-ceea-467f-a/files/string" \ -H "X-API-Key: YOUR_API_KEY""string"{
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient workspace permissions",
"details": {
"code": "INSUFFICIENT_WORKSPACE_ROLE"
}
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Not found"
}
}{
"error": {
"code": "CONFLICT",
"message": "Webhook path already in use"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "API rate limit exceeded",
"details": {
"retryAfter": "2026-01-01T00:00:30.000Z"
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service temporarily unavailable"
}
}