Profit per SKU across channels: add AI media cost from Sume
Amazon lists cross-channel profitability as upcoming. Add what your product images and clips cost per SKU by reading Sume's usage ledger by job id.

To put the cost of AI product images and clips into a per-SKU profit number, tag every Sume job with your SKU in its metadata, then read the usage ledger by job_id and use the debited_usd_micros figure from the summary. That is the amount the wallet actually deducted, so it can sit in the same spreadsheet as fees and ad spend.
Amazon's multichannel page lists cross-channel profitability analytics, plus ad spend and traffic data, as upcoming features for Seller Central (read 2026-10-04). Media generation will not be in that number, because Amazon does not know what you spent elsewhere.
What does Amazon's profitability view cover?
Only what the page states. Treat anything else as your own bookkeeping.
| Feature | Status on the page |
|---|---|
| Connect eBay, Shopify, TikTok and Walmart accounts | Available now |
| Import and link off-Amazon listings | Available now |
| Cross-channel profitability analytics | Upcoming |
| Real-time ad spend and traffic data | Upcoming |
| Cost to sellers | No additional cost |
How do you tie a Sume job to a SKU?
Generation requests accept a metadata object that Sume stores on the job; it is not sent to the provider. Put your SKU in it. Send an Idempotency-Key derived from the SKU and the asset name too, so a retry returns the same job instead of making a second charge.
Keep your own table of SKU, job id and idempotency key. The ledger is keyed by job id, so that table is the join.
How do you read the cost of one job?
GET /v1/usage accepts a job_id, run_id or thread_id and adds a summary over every ledger row that scope caused. debited_usd_micros is what the wallet deducted. held_usd_micros are open holds, not spend yet, and refunded_usd_micros are holds given back after a failure. final becomes true once no hold is open, so wait for it before booking the number. The docs say never to sum rows yourself, because a refunded row keeps its hold amount.
import os, requests
H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
jobs = {"SKU-1001": "JOB_ID_FROM_YOUR_TABLE"}
for sku, job_id in jobs.items():
r = requests.get(
"https://api.sume.com/v1/usage",
headers=H,
params={"job_id": job_id, "limit": 50},
timeout=30,
)
r.raise_for_status()
s = r.json()["summary"]
print(sku, s["debited_usd_micros"] / 1_000_000, "final:", s["final"])
What should you do with the number?
Divide by the channels the media serves. One master image reused on four channels costs the same once, so allocate it across them rather than charging each. Add it next to the per-channel fees and ad spend you already track. Amazon's page says the profitability view is upcoming, so for now this column is yours.
For an account-level check, GET /v1/balance returns the USD-denominated available balance. Use it before a large holiday batch, so a run is not cut short by an empty wallet.
Sources
Related posts
More in Developers
- Animate a still by API: first-frame jobs on Sume
fal lists FLUX 3 as animating one still into video. On Sume you send the still as a first frame to a video model; this Python script submits and polls.
- Ask for the aspect ratio first: an MCP input_required round trip
MCP multi round-trip requests let a tool answer input_required to ask for an aspect ratio or spend approval before a render, with state in requestState.
- Attach a terminal to a run: ant sessions connect vs Sume jobs
The ant CLI can attach to a Managed Agents session. For Sume generation jobs, use sume jobs watch and MCP jobs_wait instead, and never resubmit a paid job.
- Audit logs without file names: what to log for Sume jobs
Claude's Compliance API Activity Feed stopped returning file names. For Sume jobs, log request ids and job ids, never media URLs or transcripts.
Written by Sume