Quickstart

Three steps of setup, then one request. Nothing here needs a sales call or a subscription.

View as Markdown

Set up

  1. Create an account and add credit on the credit page. Credit is spent per request.
  2. Create an API key under API keys. The secret is shown once and never again.
  3. Pick a model id from the live catalog, which shows prices and how many providers are online right now.

Make a request

POST /v1/workflowsWORKFLOWS · mayhem_comfy_workflows +

Working request

curl https://api.openmayhem.ai/v1/workflows \
  -H "Authorization: Bearer $OPENMAYHEM_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "model": "image.edit.le2mp",
  "workflow": {},
  "input_files": [
    {
      "filename": "refs/input.png",
      "kind": "image",
      "content_type": "image/png",
      "encoding": "base64",
      "data": "<BASE64_IMAGE>"
    }
  ],
  "response_format": "artifact",
  "timeout_ms": 120000
}'

Parameters

ParameterRequiredTypeDefaultAllowed valuesLimits and shape
input_filesRequiredarray——min items 1; max items 2 [{"filename":"refs/input.png","kind":"image","content_type":"image/png","encoding":"base64","data":"<BASE64_IMAGE>"}]
modelRequiredstring———
workflowRequiredobject——{"node-id":{"class_type":"AllowedNode","inputs":{}}}
outcome_classOptionalstring——min length 1; max length 128
response_formatOptionalstringartifactartifact, json{"type":"json_object"}
runtime_idOptionalstring——min length 1; max length 128
timeout_msOptionalinteger120000—min 1000; max 3600000
userOptionalstring——min length 1; max length 512
Input shapes

input_files

{
  "model": "image.edit.le2mp",
  "input_files": [
  {
    "filename": "refs/input.png",
    "kind": "image",
    "content_type": "image/png",
    "encoding": "base64",
    "data": "<BASE64_IMAGE>"
  }
]
}
Jobs are asynchronous. The submit call returns a job. Poll GET /v1/jobs/{job_id}; when it succeeds, download each artifact from its artifact URL.

Workflow surface

Use the complete starter. Node roles, classes, inputs, presets and add-ons below are the values admitted for this workflow.

Workflow nodes

Node ID / roleClassInputs
clipCLIPLoaderclip_name: part; required; part qwen3vl_4b_fp8_scaled.safetensors device: string; required; fixed default type: string; required; fixed krea2
decodeVAEDecodesamples: link; required; from sampler[0] vae: link; required; from vae[0]
denoiserUNETLoaderunet_name: part; required; part krea2_turbo_fp8_scaled.safetensors weight_dtype: string; required; fixed default
edit_patchKrea2EditModelPatchfit_mode: string; required; values fit model: link; required; from system_lora[0] ref_boost: number; required; min 1; max 4 ref_boost_a: number; required; min 1; max 4 source_image: link; required; from reference_a[0] or scene_scale[0] source_image_b: link; optional; from reference_b[0] source_latent: link; required; from encode_a[0] source_latent_b: link; optional; from encode_b[0] target_latent: link; required; from latent[0] vae: link; required; from vae[0]
encode_aVAEEncodepixels: link; required; from reference_a[0] or scene_scale[0] vae: link; required; from vae[0]
encode_bVAEEncodepixels: link; required; from reference_b[0] vae: link; required; from vae[0]
latentEmptySD3LatentImagebatch_size: integer; required; min 1; max 1 height: integer; required; min 256; max 1920; multiple of 64 width: integer; required; min 256; max 1920; multiple of 64
negativeKrea2EditGroundedEncodeclip: link; required; from clip[0] grounding_px: integer; required; values 768 image: link; required; from reference_a[0] or scene_scale[0] image_b: link; optional; from reference_b[0] prompt: string; required system_prompt: string; required; fixed
outputSaveImagefilename_prefix: string; required images: link; required; from decode[0]
positiveKrea2EditGroundedEncodeclip: link; required; from clip[0] grounding_px: integer; required; values 768 image: link; required; from reference_a[0] or scene_scale[0] image_b: link; optional; from reference_b[0] prompt: string; required system_prompt: string; required; fixed
reference_aLoadImageimage: string; required
reference_bLoadImageimage: string; required
samplerKSamplercfg: number; required; min 1; max 4 denoise: number; required; fixed 1 latent_image: link; required; from latent[0] model: link; required; from edit_patch[0] negative: link; required; from negative[0] positive: link; required; from positive[0] sampler_name: string; required; values euler scheduler: string; required; values simple seed: integer; required; min 0; max 9007199254740991 steps: integer; required; min 1; max 10
scene_scaleImageScalecrop: string; required; fixed disabled height: integer; required; fixed 1024 image: link; required; from reference_a[0] upscale_method: string; required; fixed lanczos width: integer; required; fixed 1024
system_loraLoraLoaderModelOnlylora_name: part; required; part Krea2/krea2_identity_edit_v1_2.safetensors model: link; required; from denoiser[0] strength_model: number; required; fixed 1
vaeVAELoadervae_name: part; required; part qwen_image_vae.safetensors

Presets

PresetApplied values
turbo
Turbo
sampler.steps=10; sampler.cfg=1; sampler.sampler_name=euler; sampler.scheduler=simple; edit_patch.ref_boost=4; edit_patch.ref_boost_a=1; positive.grounding_px=768

Agent drop-ins

This is a media endpoint, so it cannot replace the text model that drives a coding agent. Call the request above from the agent’s HTTP or tool layer.

Routing and trust: Catalog filters, provider constraints, attestation and retail cost limits.