Google Slides createImage with a Sume URL: use PNG or JPEG
CreateImageRequest takes PNG, JPEG or GIF, up to 50 MB and 25 megapixels, from a public URL of 2 KB or less. Ask Sume for output_format png or jpeg, not WebP.

Request output_format png or jpeg from Sume and pass the data[0].url to a createImage request. The Slides API's request reference says a CreateImageRequest accepts PNG, JPEG or GIF, under 50 MB and at most 25 megapixels, with a URL up to 2 KB that must be publicly accessible. WebP is not on that list, and WebP is a value Sume's image API can return, so pin the format yourself.
The same page says the image is fetched once, at insertion. That fits a hosted URL: Slides retrieves the file when your batchUpdate runs, so the URL has to work at that moment.
Do Sume images fit the limits?
| Slides limit | Value | Sume side |
|---|---|---|
| File types | PNG, JPEG, GIF | Request output_format png or jpeg |
| File size | Under 50 MB | Ordinary generated stills are far below it |
| Pixel count | At most 25 megapixels | A 4K GPT custom size is 8,294,400 px at most |
| URL length | Up to 2 KB | Sume returns a short hosted data[].url |
| Access | Publicly accessible | The URL is hosted, not a signed upload |
The batchUpdate body
Send this to POST https://slides.googleapis.com/v1/presentations/{presentationId}:batchUpdate with an OAuth token that has Slides access. Replace the page id and the URL with the values from your deck and from the Sume response.
{
"requests": [
{
"createImage": {
"url": "https://media.sume.com/img/EXAMPLE/0.png",
"elementProperties": {
"pageObjectId": "p1",
"size": {
"width": { "magnitude": 4000000, "unit": "EMU" },
"height": { "magnitude": 4000000, "unit": "EMU" }
}
}
}
}
]
}Where do the two APIs meet badly?
The Sume call waits at most 30 seconds, so a Slides script that generates and inserts in one run should check the status first. A 200 has the URL; a 202 does not, and the image comes later from the job result. The jobs guide says to poll status_url and never to resubmit.
Keep the deck's quota in mind as well: each slide you fill is one generation billed to your Sume workspace. Use quality: "low" while you lay the deck out, then regenerate the few slides that matter. The usage.cost on every 200 response gives the USD amount for that call.
Last, remember that an inserted image is a snapshot: the page says Slides fetches the URL once, so regenerating an image in Sume later does not update a slide that already holds the old one. To swap a picture, send a new createImage and delete the old element in the same batchUpdate.
Sources
Related posts
More in Integrations
- GPT-6.1 Sol function calling to start a Sume Agent Completion safely
Expose one function that starts an Agent Completion. Let GPT-6.1 Sol fill instruction and input, and keep the spend cap and idempotency key out of its args.
- Read-only MCP session lists avatars; create gives insufficient_scope
A hosted MCP connection with read scope can list and search avatars, but paid avatar and video tools return insufficient_scope until you grant write.
- jobs_wait defaults to 50 seconds: how many calls for a long render
Remote MCP jobs_wait waits 50 seconds by default and 55 at most. A render that takes N minutes needs about N x 60 / 50 calls on the same ids. Never resubmit.
- kling-motion-control_create: motion_video_url, 1 to 30 s, no model
kling-motion-control_create needs a public HTTPS motion_video_url and duration_seconds of 1 to 30, and refuses a model field with provider_fields_not_accepted.
Written by Sume