Marketing API v24.0 ends Oct 6, 2026: pin the version in your uploader
Meta lists Marketing API v24.0 as available until October 6, 2026 and v25.0 as latest. Make the version a setting, and keep Sume render jobs separate.

Meta's Marketing API changelog lists v24.0 as available until October 6, 2026, and v25.0 as the latest version. If your video ad uploader hard-codes v24.0 in a URL, change it to a setting before that date, so a version bump is a config change and not a code release.
Sume is not affected by Meta's version number: a Sume render is a durable job on api.sume.com, and only the step that hands the finished video to Meta carries a Graph or Marketing API version. Meta also states that the Marketing API has its own versioning scheme, with version numbers and schedules different from the Graph API's.
Which Marketing API versions are listed?
The changelog table gives these entries.
| Version | Introduced | Available until |
|---|---|---|
| v25.0 | February 18, 2026 | Latest version |
| v24.0 | October 8, 2025 | October 6, 2026 |
| v23.0 | May 29, 2025 | Not captured in this read |
Where should the version string live?
Keep one setting for the upstream version and read it everywhere the uploader builds a URL. Keep the Sume side unchanged: submit the render with an Idempotency-Key, store the returned job id, and upload to Meta only after the job is completed. A retry with the same key returns the original job, so an upload-side failure never pays for a second render (Jobs and results).
Set the version in the environment and refuse to start without it. The sample builds URLs from a base and a version that you supply.
import os
def api_url(path: str) -> str:
base = os.environ["META_GRAPH_BASE"].rstrip("/")
version = os.environ.get("META_API_VERSION", "")
if not version.startswith("v"):
raise RuntimeError("Set META_API_VERSION, for example v25.0")
return f"{base}/{version}/{path.lstrip('/')}"
if __name__ == "__main__":
os.environ.setdefault("META_GRAPH_BASE", "https://graph.example.test")
os.environ.setdefault("META_API_VERSION", "v25.0")
print(api_url("me"))What to check this week
The checklist is short because the render layer does not move.
- Search the codebase for the literal
v24.0and replace each hit with the setting. - Re-run one end-to-end upload on v25.0 with a short Sume clip before the cutover.
- Keep stored Sume job ids: finished renders do not need to be regenerated when the upload step changes.
- Read the Marketing API changelog again before each quarter; the dates above are Meta's, not Sume's.
Sources
Related posts
More in Developers
- Marketing API v24 expiry runbook: replay the upload, not the render
When Meta's v24.0 window closes on October 6, 2026, fix uploads by replaying stored Sume job results. The same Idempotency-Key never bills a render twice.
- Match STT results to file ids: the job echoes your Idempotency-Key
Sending 300 recordings to Sume STT? Set Idempotency-Key to your own file id. The job record returns it, so results map back after a crash or a retry.
- Match white balance across two AI product photos with Pillow
Two image models gave your product photos different color casts. Fix both with a gray-world gain in Pillow, check the channel means, and know when it fails.
- max_spend_usd is optional on Sume MCP: send it on every paid call
Sume enforces max_spend_usd only when you send it. Make your coding agent send it with dry_run and an idempotency_key. Wallet admission is the real gate.
Written by Sume