It works. Thanks!
Topic summary
Main issue: Uploading a video via Shopify’s GraphQL led to Google Cloud “AccessDenied” errors and, later, “Invalid video URL” when attaching the video to a product with productCreateMedia.
What was tried:
- Used stagedUploadsCreate with resources FILE and VIDEO; different parameter sets, same failure.
- Successfully uploaded to Google Storage via cURL and created a file with fileCreate, but productCreateMedia still returned “Invalid video URL.”
- Tested multiple URLs for originalSource: stagedUploads resourceUrl, Google upload response URL, and Shopify Files link; none worked. Setting mediaContentType=IMAGE attached but failed processing, confirming the URL was reachable but type handling was wrong.
Working solution (from Shopify support test):
- Use stagedUploadsCreate with resource: VIDEO. Critically, use the returned resourceUrl of the form https://shopify-video-production-core-originals.storage.googleapis.com?external_video_id=…
- POST the video (multipart form) to the provided URL; success returns HTTP 204.
- Call productCreateMedia with originalSource set to that same resourceUrl and mediaContentType: VIDEO.
- Query product media status until READY.
Outcome: The user confirmed it works after following the above steps. Resolution achieved. Key takeaway: use the video-production-core-originals resourceUrl from stagedUploadsCreate, not the staged-uploads tmp path or Files URL.