Sora Videos API jobs complete, but MP4 download fails with 403 Files are not accessible.

Hi everyone,

I’m running into a persistent Sora Videos API download issue and wanted to check if this is an entitlement/file-access problem or a current issue with the Sora content endpoint.

The render job itself succeeds, and I can retrieve/list the completed video object, but downloading the completed MP4 fails with:

{
"error": {
"message": "Files [file_...] are not accessible",
"type": "invalid_request_error",
"param": null,
"code": null
}
}

Endpoint failing:

curl -L "https://api.openai.com/v1/videos/VIDEO_ID/content?variant=video" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
--output video.mp4

I also tried:

curl -L "https://api.openai.com/v1/videos/VIDEO_ID/content" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
--output video.mp4

What works:

  • POST /v1/videos creates the Sora job successfully

  • GET /v1/videos/{video_id} returns the completed job successfully

  • GET /v1/videos?limit=5&order=desc lists the completed video successfully

  • The job reaches status: completed, progress: 100, and has a future expires_at

What fails:

  • GET /v1/videos/{video_id}/content?variant=video

  • GET /v1/videos/{video_id}/content

I tested this with a minimal 4-second Sora job:

  • model: sora-2-pro

  • size: 720x1280

  • seconds: 4

  • prompt: simple voice-led canary, no references/assets

  • I also tested the hidden file ID from the error against the Files API:

    curl "https://api.openai.com/v1/files/file_0000000056507285b63c977fa5a51906" \
    -H "Authorization: Bearer $OPENAI_API_KEY"

    That returns 404 No such File object, while the video content endpoint returns 403 Files […] are not accessible.

    To rule out local request issues, I tested with:

    • Node fetch

    • direct curl

    • /content

    • /content?variant=video

    • explicit OpenAI-Project header

    • Accept: video/mp4

    All fail the same way.

    I also tested a separate OpenAI project/API key under the same org and a separate key under a different org; both completed rendering but failed on content download with the same Files […] are not accessible error. So this does not look like a single API key, single project, prompt, duration, or resolution issue.

    Can you confirm whether completed Sora video content downloads are currently available for this project/org, or whether there is a known issue with the /v1/videos/{video_id}/content file resolver?

    Any help appreciated.

I have success in retrieving a completed video.

I added a poller that would tolerate a downloadable file not being immediately available, but it seems unneeded:

# =============================================================================
# Task 3: Retrieve video content with 2-second polling
# =============================================================================
[2026-04-29T21:34:22-07:00] Will poll GET /videos/video_69f2da8c6b048198bcd6a916adf385be043d419c57ac19db/content?variant=video every 2s for up to 60s while errors are returned.
[2026-04-29T21:34:22-07:00] Final output path: .\sora2_cute_playing_kitten_video_69f2da8c6b048198bcd6a916adf385be043d419c57ac19db.mp4
[2026-04-29T21:34:22-07:00] Content attempt 1 (elapsed=0.0s): GET /videos/video_69f2da8c6b048198bcd6a916adf385be043d419c57ac19db/content?variant=video
[2026-04-29T21:34:23-07:00] Content endpoint is available: HTTP 200, content-type=video/mp4, content-length=2611501
[2026-04-29T21:34:23-07:00] Download complete: 2,611,501 bytes written to .\sora2_cute_playing_kitten_video_69f2da8c6b048198bcd6a916adf385be043d419c57ac19db.mp4

# =============================================================================
# Success
# =============================================================================
[2026-04-29T21:34:23-07:00] Video downloaded successfully.
[2026-04-29T21:34:23-07:00] Saved file: .\sora2_cute_playing_kitten_video_69f2da8c6b048198bcd6a916adf385be043d419c57ac19db.mp4

I also experienced a 60s timeout on one “job get” polling, which the code tolerates.

I think _j’s test is useful because it shows the content endpoint can work for at least some accounts/jobs.

I also tested this and was able to retrieve/download completed video content successfully.

So this may not be a general Videos API outage. It could be specific to your account/org/project, the generated file attached to that job or a backend file-access issue affecting some outputs.

Since you already tested several request variants and even different org/key combinations. I’d probably send this to the Help Center if it keeps happening, with the job IDs, timestamps, request/error bodies and mention that other users were able to retrieve completed video content successfully.