You authenticate with an API key. Create one in the Melius app under Team
settings → Integrations. See Authentication.
Base URL
x-team-id header — it defaults to the team your key belongs to:
How generations work
A generation in Melius is a canvas node — there’s no separate “generate” path, so the API stays consistent with the app. You create a node, start a run, and poll the run until it finishes:status is finished (or failed).
Pass seed as a top-level field when starting a run. API-key requests preserve it even when the team’s custom-seed UI setting is disabled. The value must be an integer from 0 to 2147483647, inclusive. For image generation, call GET /generation/models?category=image and select a model whose chosen entry in variants has supportsSeed: true.
Post-process a node
Node tools modify a finished asset in place. Useremove-background for image nodes and file nodes that contain images, or topaz-upscale to increase an image’s resolution. remove-background runs Pixelcut. Topaz accepts provider settings through toolConfig, including upscale_factor. Both tools create and activate a new version on the same node.
topaz-upscale and its provider settings:
{ "id": "<nodeRunId>" }. Poll GET /api/v1/node-runs/<nodeRunId> until the run finishes, just like a generation run.
Get the result
When a run finishes, request a download with an empty JSON body ({}):
Rate limits and credits
- Credits. Generations consume credits from the team you act on, exactly like the app. Image model costs are shown in
GET /generation/models?category=image; usecategory=image_toolfor image tools such as Topaz. - Rate limits. There is no monthly request quota on any plan. Requests can still return
429with aRetry-Afterheader — wait the number of seconds it gives you, then retry.
429, use a bounded retry loop: wait at least Retry-After seconds, add a small random delay, and retry the rejected request. The JSON body’s retryAfterSeconds is a fallback if your client cannot read the header. Keep retries within the same concurrency limit. If requests keep returning 429, stop the burst and retry later; this is not a monthly quota error.
Only apply that retry policy to an explicit 429. A timeout or 5xx response can leave the outcome of a mutation uncertain; check the canvas or run state before resubmitting to avoid duplicate work.
If a canvas’s saved state exceeds the 48 MiB API loading limit, the operation returns 400 with code CANVAS_TOO_LARGE. Use a smaller canvas or create a new canvas. Retrying the same operation will not help.
Next steps
Quickstart
Create a key and run your first generation end to end.
Authentication
API keys, the
x-team-id header, and how keys are scoped.