Integration

The image API, on one page

Nine image models behind one asynchronous API: open an upload ticket, put the bytes, submit the task, poll it, fetch the signed result. This page is what an integrator reads; the gateway is what it calls. Both — and the JSON below — are rendered from one catalog file, so they cannot disagree. Every number here is a measurement with its date.

Two entry points

  • Read — this page, /api-catalog.json for every model, and /api-catalog/<model>.json for one. No key required.
  • Call — https://dashboard.alphanetplus.com: sign in, copy the project API key, then GET /v1/models with it to list the model ids that key may use.
FactValue
Calls go tohttps://dashboard.alphanetplus.com
AuthenticationAuthorization: Bearer <project API key>
Price$0.01 per call
Upload ceiling10 MiB per reference image
Result URLssigned, and they expire 900 s after the task finishes
Catalog version2026-09-26.1 (updated 2026-09-26)

The four steps

  1. 1. Open an upload ticket — POST /v1/flux/uploads
    One ticket per reference image. The response carries the URL to PUT the bytes to, the file id you submit, and the byte ceiling.
  2. 2. Upload the bytes — PUT {upload_url}
    Send the file itself to the signed URL, with the headers from the ticket. Nothing else goes through our API: the bytes go straight to storage.
  3. 3. Submit the task — POST /v1/tasks/alphanet-flux
    The model id and the file ids in order. Always send an Idempotency-Key: the same key and body return the same task, a different body under the same key is refused with 409.
  4. 4. Poll, then fetch the result — GET /v1/tasks/{task_id}
    Poll until the status is terminal, then read /v1/tasks/{task_id}/result for the signed URLs and the sha256 of each artifact.

The nine models

ModelWhat you getReferencesMeasured
flux-kleinGenerative edit, upscale and restore1–4~16 s end to end for a 1152 × 1536 render, 6.4 s of it inference (measured 2026-09-26); the rest is queueing and the result upload
pixrestore-sDetail restore1~3.5 s for a 3131 × 1549 frame (measured 2026-09-17, end to end)
cutout-fastBackground removal1~5 s end to end, 0.8 s of it inference (measured 2026-09-26)
erase-qualityGenerative erase1~54 s end to end, 50 s of it inference (measured 2026-09-22)
vectorize-fastImage to SVG1~7 s end to end, 0.4 s of it tracing (measured 2026-09-22)
tryon-qualityVirtual try-on2~69 s end to end, 59 s of it inference (measured 2026-09-26)
interior-qualityInterior render1–2~59 s of inference (measured 2026-09-25)
retouch-qualityPortrait retouch1~79 s end to end, 61 s of it inference (measured 2026-09-25)
makeup-qualityVirtual makeup1–2~62 s of inference (measured 2026-09-25)

Model by model

flux-klein — Generative edit, upscale and restore

The general-purpose editor: your prompt decides what happens, and the output is the size you ask for.

Capability generative_repaint · verified 2026-09-26 (public gateway) · JSON for this model

References

  1. image_ids[0] — the image to edit

Returns: PNG or WebP at the width and height you sent; 1–4 references may be combined.

Measured: ~16 s end to end for a 1152 × 1536 render, 6.4 s of it inference (measured 2026-09-26); the rest is queueing and the result upload

Parameters

FieldTypeValuesDefaultNotes
prompt (required)string——What should change. The only model here that reads your own words.
widthinteger—1024Output width: a multiple of 16, at most 1536 px.
heightinteger—1024Output height, under the same rules.
num_inference_stepsinteger—4Four steps unless you ask for more; more steps refine detail and take longer.
seedinteger——Same seed and body reproduces the same render.
max_sequence_lengthinteger——
output_formatstringpng | webp—
output_qualityinteger——

Where it stops

  • It is a generative re-render: faces and small text can shift. Review the result at 100% before publishing.
  • It cannot add detail that was never captured with certainty — an upscale reconstructs plausible texture, not the original pixels.
POST /v1/tasks/alphanet-flux — the body for flux-klein
{
  "model": "flux-klein",
  "image_ids": [
    "<file_id>"
  ],
  "prompt": "Restore realistic detail, texture and sharpness at 2x the size while keeping the composition identical. Do not add objects and do not change the framing.",
  "width": 1152,
  "height": 1536,
  "num_inference_steps": 8,
  "seed": 42,
  "output_format": "png"
}

Open the enhancer in the studio

pixrestore-s — Detail restore

Renders a sharper, cleaner version of an image at its own size. No prompt, no knobs beyond steps.

Capability detail_restore · verified 2026-09-17 (public gateway, 8/8 with the idempotency pair) · JSON for this model

References

  1. image_ids[0] — the image

Returns: PNG at the input size.

Measured: ~3.5 s for a 3131 × 1549 frame (measured 2026-09-17, end to end)

Parameters

FieldTypeValuesDefaultNotes
num_inference_stepsinteger1–41One pass is the service default, and on this model one pass measured better than four on 2026-09-17 — more steps is not more detail here.
seedinteger——

Refused, not ignored: width, height, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • The result is "clearer", not "faithful": detail is generated, so fine text and small patterns can change. It is not a lossless enlarger.
  • It does not resize: send the size you want to keep, or upscale separately.
POST /v1/tasks/alphanet-flux — the body for pixrestore-s
{
  "model": "pixrestore-s",
  "image_ids": [
    "<file_id>"
  ],
  "num_inference_steps": 1,
  "seed": 42
}

cutout-fast — Background removal

Cuts the subject out and answers a PNG with an alpha channel at the input size.

Capability tool_cutout · verified 2026-09-26 (public gateway) · JSON for this model

References

  1. image_ids[0] — the photo

Returns: PNG with transparency, at the input size — 768 × 1024 in, 768 × 1024 out.

Measured: ~5 s end to end, 0.8 s of it inference (measured 2026-09-26)

Parameters

FieldTypeValuesDefaultNotes
bg_colorstring——Fill the removed background with a colour instead of leaving it transparent.
bg_modelstring——Which matting model the service picks (isnet, birefnet or u2net family).
alpha_mattingstring——Softer edges on hair and fur, at a little more time.

Refused, not ignored: width, height, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • Fine hair, glass and motion blur keep some background; a see-through subject cannot be cut cleanly.
  • The cut is the whole frame. There is no per-object selection: one subject per call.
POST /v1/tasks/alphanet-flux — the body for cutout-fast
{
  "model": "cutout-fast",
  "image_ids": [
    "<file_id>"
  ]
}

Remove a background in the studio

erase-quality — Generative erase

Names what should go; the model removes it and rebuilds the surface underneath.

Capability tool_erase · verified 2026-09-22 (public gateway, 8/8) · JSON for this model

References

  1. image_ids[0] — the photo

Returns: PNG at a fixed 1024 × 1024, whatever the input size was.

Measured: ~54 s end to end, 50 s of it inference (measured 2026-09-22)

Parameters

FieldTypeValuesDefaultNotes
prompt (required)string——The object or mark to remove.
num_inference_stepsinteger4–208
seedinteger——

Refused, not ignored: width, height, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • The whole frame is re-rendered at 1024², so a larger original comes back at that size and fine text elsewhere can drift.
  • It removes what you name; it does not understand "remove the person but keep the shadow".
POST /v1/tasks/alphanet-flux — the body for erase-quality
{
  "model": "erase-quality",
  "image_ids": [
    "<file_id>"
  ],
  "prompt": "Remove the spoon from the table and rebuild the wooden surface behind it; keep the mug, the napkin and the lighting exactly as they are.",
  "num_inference_steps": 8,
  "seed": 42
}

Erase an object in the studio

vectorize-fast — Image to SVG

Traces a bitmap into real vector paths and answers an SVG — so it scales to any size without blurring.

Capability tool_vectorize · verified 2026-09-22 (public gateway, 8/8) · JSON for this model

References

  1. image_ids[0] — the bitmap

Returns: image/svg+xml. The SVG declares its own width and height, so the JSON result reports width/height as null.

Measured: ~7 s end to end, 0.4 s of it tracing (measured 2026-09-22)

Parameters

FieldTypeValuesDefaultNotes
presetstringlogo | illustration | photologoA fixed parameter set on the service, not free text.
max_edgeinteger256–20481024Long edge the trace runs at; larger input is downscaled to it.
colorsinteger2–64—
filter_speckleinteger0–32—Drops specks smaller than this many pixels.

Refused, not ignored: width, height, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • A photograph comes back posterised: the photo preset limits the palette to 16 colours before tracing.
  • The output is paths, not an embedded bitmap — expect a small file for a logo and a large one for a picture.
POST /v1/tasks/alphanet-flux — the body for vectorize-fast
{
  "model": "vectorize-fast",
  "image_ids": [
    "<file_id>"
  ],
  "preset": "logo"
}

Convert an image in the studio

tryon-quality — Virtual try-on

Puts the garment from one photo onto the person in another. Two references, in order, and no prompt.

Capability tool_tryon · verified 2026-09-26 (public gateway, re-measured); the 10/10 pass including the idempotency pair was 2026-09-25 · JSON for this model

References

  1. image_ids[0] — person
  2. image_ids[1] — garment

Returns: PNG shaped like the person photo (3:4 → 768 × 1024). Face, hair, pose, other clothing and background are asked to stay identical.

Measured: ~69 s end to end, 59 s of it inference (measured 2026-09-26)

Parameters

FieldTypeValuesDefaultNotes
garment_typestringtop | bottom | dress | outfittopWhich part of the outfit the reference replaces. Omitted, the reference is read as a top.
aspectstring1:1 | 3:4 | 4:3 | 2:3 | 3:2 | 16:9 | 9:16—Optional. Omitted, the output follows the person photo’s shape — a 3:4 portrait comes back 768 × 1024.
seedinteger——

Refused, not ignored: prompt, width, height, num_inference_steps, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • One garment per call: the reference is read as a single piece, so a top and a bottom need two calls.
  • The order of image_ids is the meaning — person first, garment second. Swapping them changes the result, not the error.
  • Layered outfits, heavy shadows across the garment and unusual poses are the hard cases.
POST /v1/tasks/alphanet-flux — the body for tryon-quality
{
  "model": "tryon-quality",
  "image_ids": [
    "<person_file_id>",
    "<garment_file_id>"
  ],
  "garment_type": "top"
}

Try it on in the studio

interior-quality — Interior render

Turns an empty or unfinished room into a furnished render in a named style, keeping the architecture where it is.

Capability tool_interior · verified 2026-09-25 (public gateway, 8/8) · JSON for this model

References

  1. image_ids[0] — room
  2. image_ids[1] — style reference (optional)

Returns: PNG shaped like the room photo (3:2 → 1152 × 768), with walls, windows, doors, ceiling line and camera angle held.

Measured: ~59 s of inference (measured 2026-09-25)

Parameters

FieldTypeValuesDefaultNotes
stylestringnordic | cream | japandi | chinese | industrial | frenchnordicEach style is a fixed recipe of materials, furniture and lighting.
room_typestringliving_room | bedroom | dining_room | study | kitchen | bathroom | kids_room | balconyliving_room
extrastring——Up to 120 characters of extra brief, folded into the fixed instruction. Longer is refused: it would start to override the parts that hold the room in place.
aspectstring1:1 | 3:4 | 4:3 | 2:3 | 3:2 | 16:9 | 9:16—Optional. Omitted, the output follows the room photo’s shape — 3:2 comes back 1152 × 768.
seedinteger——

Refused, not ignored: prompt, width, height, num_inference_steps, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • Start from the emptiest frame you have: a room that is already furnished comes back redesigned rather than built on.
  • The second reference steers palette and materials only — it cannot add a wall or move a window.
  • It is a visualisation, not a measured plan: sockets, floor coverings and furniture proportions can differ from the building.
POST /v1/tasks/alphanet-flux — the body for interior-quality
{
  "model": "interior-quality",
  "image_ids": [
    "<room_file_id>"
  ],
  "style": "nordic",
  "room_type": "living_room",
  "extra": "light oak flooring, a linen sofa, a round wooden coffee table, a woven rug, a floor lamp and green plants"
}

Render a room in the studio

retouch-quality — Portrait retouch

Cleans up a portrait — skin, under-eyes, eyes, stray hairs — without changing the face.

Capability tool_retouch · verified 2026-09-25 (public gateway, 8/8) · JSON for this model

References

  1. image_ids[0] — portrait

Returns: PNG shaped like the portrait, with skin grain kept.

Measured: ~79 s end to end, 61 s of it inference (measured 2026-09-25)

Parameters

FieldTypeValuesDefaultNotes
levelstringlight | natural | strongnatural
aspectstring1:1 | 3:4 | 4:3 | 2:3 | 3:2 | 16:9 | 9:16—Optional. Omitted, the output follows the portrait’s shape (fallback 1:1).
seedinteger——

Refused, not ignored: prompt, width, height, num_inference_steps, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • It will not slim a face, widen the eyes or change a hairstyle: that is the instruction, not a setting.
  • It does not add makeup — that is the separate virtual-makeup model.
  • A heavy filter look is refused on purpose; the result keeps visible texture.
POST /v1/tasks/alphanet-flux — the body for retouch-quality
{
  "model": "retouch-quality",
  "image_ids": [
    "<portrait_file_id>"
  ],
  "level": "natural"
}

Retouch a portrait in the studio

makeup-quality — Virtual makeup

Applies a named makeup look to a face, optionally matched from a reference photo.

Capability tool_makeup · verified 2026-09-25 (public gateway, 8/8) · JSON for this model

References

  1. image_ids[0] — portrait
  2. image_ids[1] — makeup reference (optional)

Returns: PNG shaped like the portrait. Identity, expression, hair, clothing, framing and lighting are asked to stay as they are.

Measured: ~62 s of inference (measured 2026-09-25)

Parameters

FieldTypeValuesDefaultNotes
lookstringdaily | korean | glam | bridal | latte | retrodailyA fixed recipe of base, contour, brows, eyeshadow, liner, lashes and lip.
intensitystringlight | medium | strongmedium
aspectstring1:1 | 3:4 | 4:3 | 2:3 | 3:2 | 16:9 | 9:16—Optional. Omitted, the output follows the portrait’s shape (fallback 1:1).
seedinteger——

Refused, not ignored: prompt, width, height, num_inference_steps, max_sequence_length, output_format, output_quality — sending one fails the call instead of being dropped.

Where it stops

  • A look is a recipe, not a brand shade: use it to compare directions, not to promise an exact product.
  • The palette is matched to this person’s undertone and the original lighting, so the same reference gives a different result on another photo.
POST /v1/tasks/alphanet-flux — the body for makeup-quality
{
  "model": "makeup-quality",
  "image_ids": [
    "<portrait_file_id>"
  ],
  "look": "korean",
  "intensity": "medium"
}

Try a look in the studio

A worked request for cutout-fast: { "model": "cutout-fast", "image_ids": [ "<file_id>" ] } submitted to POST /v1/tasks/alphanet-flux, polled at GET /v1/tasks/{task_id}, results read at GET /v1/tasks/{task_id}/result.

Output shapes for the four productised models

Omitted, aspect follows the first reference image instead of forcing a square: 1:1 = 1024 × 1024 · 3:4 = 768 × 1024 · 4:3 = 1024 × 768 · 2:3 = 768 × 1152 · 3:2 = 1152 × 768 · 16:9 = 1344 × 768 · 9:16 = 768 × 1344.

For a machine

The whole catalog is at /api-catalog.json, one model per file at /api-catalog/<model>.json. Model names are frozen: they are billing-visible, so renaming one is a breaking change.