Content API for Shopping 410 Gone: send product video via Merchant API
Content API for Shopping now returns HTTP 410 Gone without an extension. Move your feed to Merchant API productInputs and add videoLinks, with a Sume clip URL.

If your Content API for Shopping calls now fail with HTTP 410 Gone, that is Google's planned degradation, not an outage. The API reached its sunset on August 18, 2026; since September 1, 2026, requests from clients without an active extension intermittently fail with 410, and in early 2027 every endpoint is turned down. The fix is to move the integration to the Merchant API, where a product's videos go in a videoLinks list inside productAttributes.
Dates and error behaviour are from Google's Deprecation and sunset page and the Latest updates log; the insert call is from Add and manage products; the videoLinks field is from the Products V1 client reference; all read on 2026-10-03. The Sume half is from its video generation and jobs and results docs.
What exactly changes on the 410 timeline?
Google's page gives three dates and one escape hatch. The 410 body carries your Google Cloud project ID, project number and a link to the migration guide, and Google says these artificial errors do not count against your project's API quota, so a spike of 410s will not also burn quota you need for the new API.
An extension is the only thing that holds the 410s back, and it does not outlive the final shutdown. Treat it as time to finish a migration, not a reason to start one late.
| Date | What happens |
|---|---|
| August 18, 2026 | Sunset date; Google says migrate as soon as feasible |
| September 1, 2026 | Clients without an active extension intermittently get HTTP 410 Gone |
| Early 2027 | Full decommissioning; all endpoints turned down and all requests fail |
| Extension | Approved extensions block the scheduled errors for their window, never past decommissioning |
Where does a product video go in the Merchant API?
Products are written with productInputs.insert at POST https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/productInputs:insert, with the dataSource as a query parameter and offerId, contentLanguage and feedLabel in the body. Google's page notes a delay of a few minutes between an insert or update and the final Product being readable, so do not read back in the same second.
The Products V1 client reference lists videoLinks on ProductAttributes as an optional list of strings, described as a list of video URLs for the item, with the same wording Merchant Center's help page uses for the video_link attribute. That attribute has its own limits: up to 10 videos per product, 6 to 240 seconds, 500 MB, 9:16, 16:9 or 1:1, at least 720p, and a raw video file URL that Googlebot can fetch without a login. The snippet below sends one.
import os
import requests
account = os.environ["MERCHANT_ACCOUNT_ID"]
source = os.environ["MERCHANT_DATA_SOURCE_ID"]
url = (
f"https://merchantapi.googleapis.com/products/v1/accounts/{account}"
f"/productInputs:insert?dataSource=accounts/{account}/dataSources/{source}"
)
body = {
"offerId": "SKU12345",
"contentLanguage": "en",
"feedLabel": "US",
"productAttributes": {
"title": "Classic Cotton T-Shirt",
"link": "https://www.example.com/p/SKU12345",
"imageLink": "https://www.example.com/img/SKU12345.jpg",
"availability": "IN_STOCK",
"price": {"amountMicros": "15990000", "currencyCode": "USD"},
"condition": "NEW",
"videoLinks": [os.environ["CLIP_URL"]],
},
}
headers = {"Authorization": "Bearer " + os.environ["GOOGLE_ACCESS_TOKEN"]}
resp = requests.post(url, json=body, headers=headers, timeout=60)
print(resp.status_code, resp.text[:300])How do I produce the clip URL with Sume?
Generate the clip first, then pass its result URL as CLIP_URL. Sume video generation is asynchronous: you submit, then read the job's result, which carries the finished video_url. Model limits differ and are listed at GET /v1/videos/models, so read the catalog instead of assuming one envelope.
Merchant's 6-second floor decides which model and duration you can use. seedance-2.5 accepts 4 to 30 seconds at 480p, 720p or 1080p, so ask for 8 or 12 seconds, not 4 or 5. gemini-omni-flash-1.1 accepts 3 to 10 seconds at 360p up to 4K in 16:9 or 9:16, so a 3-to-5-second request would fail Merchant's length check even though Sume accepts it. Pick 720p or 1080p to clear the 720p minimum. Whether the finished file's address passes Google's fetch is a separate question, answered in the not-processed post.
- Request 8 seconds or more so the clip clears Merchant's 6-second minimum.
- Request 9:16, 16:9 or 1:1 at 720p or above.
- Put the final URL in
videoLinks; add up to 10 per product. - Test the integration before production, as Google's sunset page advises.
Sources
- Deprecation and sunset - Content API for Shopping (read 2026-10-03)
- Add and manage products - Merchant API (read 2026-10-03)
- ProductAttributes, Products V1 client reference (read 2026-10-03)
- Latest updates - Merchant API (read 2026-10-03)
- [Video link [video_link] (read 2026-10-03)](https://support.google.com/merchants/answer/15216925?hl=en)
- Video generation
- Jobs and results
Related posts
More in Integrations
- Copilot CLI sandbox network bypass prompt: allow Sume hosts
Copilot CLI 1.0.92-3 offers a network bypass prompt when the sandbox proxy blocks a destination. Which Sume hosts to expect and when to approve.
- Dev Container devcontainer.json MCP: add Sume's hosted server
Declare Sume's hosted MCP server in devcontainer.json under customizations.vscode.mcp. Where the entry lands, what to keep out, and how to verify it.
- Devin Local server-level MCP permission: what it means for Sume
Devin Desktop 3.5.17 added two server-level options to the MCP tool permission prompt. Before approving a whole server for Sume, know which tools it exposes.
- Devin Desktop "Needs auth" and the Authenticate button for Sume
Devin Desktop shows an Authenticate button on MCP servers marked Needs auth, and it clears stored OAuth credentials. What to expect when you do it for Sume.
Written by Sume