summer-api is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Summer API game assets: models, estimate, one job or a batch, download the files.
When your agent uses it
- Generating asset files (3D models, images, sounds, voice, music, video) from a script, a pipeline or a coding agent outside Summer Engine
- Making a set of assets in one go (a level’s props, every UI icon, a sound pack) as one batch
- Choosing a generation model, pricing a job before it runs, or reading a job’s state and files
- A generation job answered no_credits, over_limit, not_signed_in or queued
Install
summer setup installs every skill for your agent. To add only this one:
claude-code for your agent, such as codex or cursor. See Skills for every option.
The skill
The Summer API makes game assets from curated models tested for games: 3D models (GLB), images, video, voice lines, dialogue, sound effects and music. Each finished file is saved to the person’s Summer library and downloads into their project. Every model runs at the provider’s list price, with no markup on assets. Use this skill when the person asks for the Summer API, or wants asset files for any engine, app or pipeline from a script, a batch or a coding agent. Inside a running Summer Engine project, the asset skills (prop-model, character-model, sound-effect, …) import the asset into the scene for you; use them there.
Two ways in, with the same calls and the same answers:
Your own code calls the same API over HTTP. The HTTP guide, the OpenAPI document and copy-paste code are on docs.summerengine.com/api (quickstart, jobs, errors).
1. Sign in once
summer tokenprints a one-hour access token from the same sign-in, for the person’s own HTTP code. Keep tokens out of game code, builds and commits.- Listing models and estimating need no sign-in. Running a job does.
- The person sees and changes each app’s spend limit, or revokes it, in Settings > Connected apps on summerengine.com.
2. Pick a model
summer_api_models({ capability: "3d" }), summer_api_models({ model: "3d/default" }).
- Capabilities:
image,3d,video,voice,dialogue,sound,music. <capability>/default(such as3d/default) runs the model Summer tests first for that job. A job answer names the model that ran inmodel, so you can run the same model again.- Each model lists its
inputSchema(the exact fields),outputFormats, typical time andprice. Read prices from this list every time, never from memory. - Voice and dialogue models list
voices(voiceIdandname). Use one of those ids.
3. Price it, then ask
summer_api_estimate({ model: "3d/default", input: { kind: "text-to-3d", prompt: "a stylized treasure chest, game prop" } }).
The answer has price (US dollars as a decimal string), atMost (true: the most it can cost, the charge can be lower), a breakdown, and a quoteId that holds the price for 15 minutes. Estimates are free.
Before you spend: tell the person what you will make, how many, and the total. Wait for a yes. Jobs spend their paid Summer credits (plan credits and top-ups).
4. Run one job
summer_api_run({ model: "3d/default", input: { kind: "text-to-3d", prompt: "a stylized treasure chest, game prop" }, quoteId: "<quoteId>", out: "assets/props" }).
--download <dir>(MCPout) follows the job to the end and saves every file as<assetId>.<ext>.--wait(MCPwait: true) follows it without saving.--quote(MCPquoteId): Summer refuses to charge more than the quote. If the price went up, the job does not start and nothing is charged (conflict): estimate again.- Images, voice and sound usually finish inside the call. 3D and video take minutes: one MCP call follows a job for about a minute, then answers
next. Callsummer_api_job({ jobId, wait: true })until the job finishes. The CLI follows it to the end by itself. - In Windows PowerShell or cmd, write the input to a file and pass
--input "@input.json": those shells break quotes inside'{...}'. - Each run sends its own idempotency key, so a retried request never runs twice. To retry the same run by hand, pass the same
--idempotency-key(MCPidempotencyKey).
5. Run many: a batch
For a set of assets (props for a level, every UI icon, a sound pack), send one batch instead of many runs. One batch takes up to 500 jobs, all or none.summer_api_batch({ jobs: [{ model: "3d/default", input: { kind: "text-to-3d", prompt: "a wooden barrel with iron bands, game prop" } }], out: "assets" }). Read it again with summer_api_batch({ batchId: "<id>", wait: true, out: "assets" }).
- Every job is priced when the batch arrives. When the paid credits and the app’s limit cover all of them, all are accepted at once and run in order; each holds its price (
estimatedPriceon the job, the total on the batch). When they do not, nothing runs: the error’sdetailssay how many fit (fits) and how much more is needed (shortUsd). - The batch answers its jobs in the order you sent them. Give each job a
titlewhere the model takes one (3D and image models do): it names the asset in the person’s library. - A batch takes no
quoteId. Estimate each distinct request first (same model and input, same price), add them up, and give the person the total for the whole batch. - Each line may carry its own
idempotencyKey; the batch has one too (--idempotency-key). To pick up a batch after the terminal closed, run the same command with the same--idempotency-key: it answers the batch it already made and follows it. MCP:summer_api_batch({ batchId, wait: true }).
6. Follow and read
summer_api_job({ jobId: "<jobId>", out: "assets" }).
A Summer API job runs to the end once it is accepted, queued or running: it cannot be cancelled. A job that fails costs nothing. So confirm the list with the person before you send it.
A finished job has
result.assets: one entry per file, each with assetId, fileUrl and thumbnailUrl. The file type is the extension of fileUrl (the model’s outputFormats lists them). Job ids may hold a colon (gen:..., q:...); send them as they are.
With --json, or when its output is piped, every command prints the API’s own answer: {"job": {...}} for a run or a job (plus "files" with --download), {"batch": {...}} for a batch, the estimate’s fields at the top level, and {"ok": false, "error": {"code", "message", "details"}} on an error. In a terminal it prints a short summary.
Limits: money only
- No rate limits on paid usage. Send as much work as the person agrees to pay for.
- Running slots. Each account runs 10 jobs at once at the start, and up to 40 as it buys more credits. Jobs past the slots answer
queued(their id starts withq:) and start in order as slots free up. Queued work is not an error; do not resend it. - Two money limits, both checked before any work starts: the person’s paid balance and this app’s own spend limit. Queued and running jobs hold their price against both until they are charged.
- A failed job costs nothing. A retry with the same idempotency key never charges twice.
Errors
Every error has a stablecode and a message written for the person. Branch on the code; show the message.
no_credits and over_limit are answers about money, not failures: stop, show the person the message and its link, and continue when they say so.
Prompts that work, per asset type
Write prompts as plain descriptions of the thing itself. Put the style in every prompt of a set, word for word, so the assets match.
A picture input (
imageUrl, referenceImageUrl) is a public URL, such as the fileUrl of an earlier job. For a file on the person’s computer, the docs’ jobs page shows the upload (/v1/files).
Without Summer Engine
This whole skill runs without Summer Engine: the CLI, the MCP tools and the HTTP API need only the Summer sign-in. The files work in any engine or app. Stop at the files; skip any step that imports into a Summer project.Use the files
- Save files inside the project (
--download assets/...), and keep eachassetId: in Summer Engine, an asset imports by its id. - GLB files are Y up and not at real-world size. Scale them in the engine (a door about 2 m, a person about 1.7 m).
- Assets made through the API are private to the person’s Summer library. A
fileUrldownloads without a sign-in, so share it only where the file may be seen.
Pitfalls
Done means
- Every job you started is
done, or you told the person which failed and why. - The files are in the folder the person asked for, and you told them the paths and formats.
- You told the person what it cost (
priceon each job, or the batch’sestimatedPrice).
Related skills
summer-assets: Game assets for any engine, no Summer Engine: find, generate and download them.summer-cli: Summer as shell commands, no MCP: sign in, find and run operations, follow jobs, save files, drive the engine.asset-strategy: Route any ‘I need a [thing]’ asset request to the right skill: 2D, 3D, audio, video, VFX or animation.summer-router: AI characters for games on Summer Games: Summer Router replies, tools, speech, images.
Source:
library/skills/summer-api/SKILL.md, rendered from summer-engine@4.8.0 on npm.
