Science desks pay for figures long before a reader sees the chart. A soil-test graphic and a port diagram rarely come from the same vendor, yet both have to be paid, stored, and explained when a number looks wrong. The invoice from one model is the visible line. The hidden lines are extra logins, extra error shapes, and a retry that quietly creates a second job. An AI API with one published request shape does not make the figure correct. It can make that pile of logins easier to count.
Several vendor contracts feel cheap until someone adds up the hours spent matching them. SeeAPI is a published example of that kind of contract: one request shape, one credit balance, and a written rule for jobs that return nothing usable. The ledger is the claim worth reading. A nicer chart is not what the contract promises.
The Sticker Price Is The Small Line
A group with separate vendor accounts keeps three keys, three invoices, and three ways of saying the job failed. The person who draws the figure is rarely the person who holds the keys. When a chart is rejected, the argument starts with “which account was that” rather than “which number is off.” That delay is a cost, even when each vendor’s unit price looks modest on its own page, and it is the kind of hidden overhead that makes AI API costs across multiple models hard to control.
The check worth doing is dull. List every login that can create a figure this month. Next to each one, write who can rotate the key, where a failed job is visible, and whether a retry can mint a duplicate. If that list takes more than a page, the sticker prices are not the budget. The budget is the time spent reconciling the page. Teams waste an afternoon on that reconciliation and still cannot say which file was the one that shipped. A soil chart and a port diagram make the gap obvious, because they look like one design job, and they are often two contracts. The reader sees one figure. The desk sees two error formats, two places to download the file, and no shared task id when the number in the chart is challenged a month later. That missing id is the expensive part. The model unit price is the cheap part, and it is the only part that shows up on a slide.
One Request Replaces A Stack of Logins
A unified call, where it is actually unified, uses the same path for an image and for other media. The documented path is POST /v1/generations. The body carries a model id, an endpoint id, and an input object that follows that endpoint. Provider is optional. Leave it out, and the endpoint default is used. Put a public provider id in only when you mean that route and you have read its input rules. Those rules are not shared across providers, so a copied body can be valid on one route and rejected on the next.
Copy The Model And The Endpoint

A model names what runs. An endpoint names the task, such as text-to-image. The ids have to be copied from the model page you intend, not from memory and not from a neighboring model. A 404 on a bad id is not an authentication failure. Fix the id before you retry. The AI Image API catalog is where image models are grouped for a browser look. The request still needs the id from that model’s own endpoint page, because a display name and a model id are not the same string.
Save The Full Task Identifier Intact
HTTP 202 means the task was accepted. It does not mean the figure exists. The response includes a full generation id. Store that id unchanged. A shortened id will not fetch the file later, and a support note without it cannot point at the job. New tasks start as processing. You learn the real credit use after the task reaches a terminal state, not from the estimate printed at accept time.
Credits Are The Ledger, Not The Slogan
Credits are the billing unit, and they do not expire. They stack into one balance whether they came from a subscription or a one-time pack, and the same balance is drawn by the website generator and by API calls. That is the part that changes a multi-vendor mess, if it is true in the account you are looking at. It does not, by itself, tell you whether the figure is fit to print.
Published yearly pools on the pricing selector are Starter at $199 for 24,000 credits, Pro at $799 for 150,000 credits, and Studio at $1,199 for 320,000 credits. The same selector lists monthly estimates of Basic at $29 for 3,200 credits, Pro at $99 for 12,000 credits, and Studio at $199 for 25,000 credits. A dollar figure shown beside a model is an estimate from the plan you selected. On the docs, that estimate is described as about $0.0037 per credit, and the line says it is an estimated equivalent, not an additional charge. Read the credit count first. The dollar is a translation.
| Published pool | Price on the selector | Credits in that pool |
| Starter, yearly | $199 | 24,000 |
| Pro, yearly | $799 | 150,000 |
| Studio, yearly | $1,199 | 320,000 |
Monthly and one-time packs exist beside those yearly rows. Yearly is described as the lower per-credit cycle. A one-time pack is described as the fit for a short burst. Neither sentence tells a science desk which model to call. It tells the desk which number to put on the same sheet as the figure budget. A free starting point is also listed at $0, with 10 trial credits. That floor is for a look, not for a production chart.
A Failed Job Should Return The Credits
The published rule is that a failed job which does not return a usable result should not consume credits. That is the line to test in the ledger, not in a slogan. If a task shows failed and the balance dropped anyway, the books and the rule disagree, and the disagreement is the issue to raise with the task id in hand. An insufficient balance is a different event. It returns HTTP 402, and the fix is credits, not a new prompt.
Retries have their own failure. The Idempotency-Key may be at most 255 characters. Reuse it only with the identical body. A new task normally returns HTTP 202. An exact replay returns HTTP 200 and marks the replay. The same key with a different body returns HTTP 409. A desk that mints a fresh key after every timeout will pay twice for one figure and then argue about which file is canonical. The time lost is the argument, and the credit lost is the duplicate.
Poll Until The Task Reaches A Stop
Poll GET /v1/generations/ with the full id, backing off while the status is processing. Stop when the status is succeeded, failed, canceled, refunded, or expired. On success, read the files from the result assets. While the task is still processing, consumed credits are an estimate. After a terminal state, that field is the usage to record. A callback address can be set on the request for a terminal notice. Keep polling as the backup, and keep the webhook secret separate from the API key. The secret is not a Bearer token.
The Web Screen and the API Can Differ
Do not assume the price you see in the browser generator is the price the API will charge. The getting-started note says charges depend on the model, the provider, and the request settings, and it says not to assume the two surfaces match. A figure budget that copies a web tile into an API forecast can be wrong by enough to blow a small grant line. Check GET /v1/credits before a real run, and check the model page for the provider you will actually name.
Routing is part of that difference. The account can keep a default provider, reorder priority, and switch when a route fails, then return a normalized status. That is useful when one route is down. It is also a way to spend a different rate than the one you thought you locked. If the grant requires a named provider, set the provider field. If you leave it empty, you accepted the default, including a later switch. Write the provider id from the finished task onto the figure log so the rate can be audited.
A SeeAPI key can carry a daily credit cap, counted on a UTC day. The setup example uses 50,000 credits. Leaving the cap blank removes that key-level ceiling. It does not add credits, and it does not bypass the account balance. The cap is edited in the key settings, not inside the generation body. A shared key without a cap lets one overnight script drain the pool the figure editor needed in the morning. That is an operations failure, and it looks like “the model got expensive” if nobody reads the key.
Where A Unified Gateway Still Needs A Person
One balance does not review the science. The full key is shown once, and a lost key is replaced rather than displayed again. Task logs last 60 days, so an older dispute cannot be rebuilt from the log alone. Files currently have no automatic expiry, and that storage is not a substitute for the group’s own copy. A figure that is wrong, unreadable, or off the data still does not belong in the piece.

Who Should Keep A Single Vendor Key
A group that calls one model through one contract it already understands gains little from another login. The extra key is another secret to lose, and the figure will not improve because the invoice got shorter. A group that already splits image work across several vendors can put the yearly pools, the failed-job rule, and the 202-versus-409 retry rule on one sheet. SeeAPI is one place those rules are written down. The sheet is the point. A signup is not.
Keep the direct vendor key when the work is a single model, a single security review, and a person who already knows that vendor’s errors. Move the ledger question to one balance when the desk cannot say, this week, which account produced the figure. Either way, someone who understands the data still has to look at the chart. A gateway that cannot show its task id, its credit, and its failure rule leaves the desk with another logo on the same pile of accounts.
