Start Free
ImageImage EditingUnlimited$0 per request

PicassoIA Image Editor Pro

Edits or combines one to four images following a prompt: change an outfit or a colour, add or remove objects, or put elements of one image into another.

Try the modelView docs
curl -s -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-image-editor-pro/predictions \  -H "Authorization: Bearer $PICASSOIA_API_KEY" \  -H "Content-Type: application/json" \  -d '{"input":{"prompt":"put the cat from image 1 on the sofa from image 2","images":["https://example.com/cat.png","https://example.com/sofa.jpg"]}}'

How to call it

One run takes three requests: create the prediction, poll it until it finishes and read the result. The code and the answers below are for this model and the mode you chose.

Before you start

Create an API key and keep it on your server in the PICASSOIA_API_KEY environment variable. Every request sends it in the Authorization header.

Get your API key
  1. Create the prediction

    Send the input in a POST. The API answers 201 at once, without waiting for the result: the prediction is in the starting state, with an estimate in eta and the address to poll in urls.get.

    Request
    curl -s -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-image-editor-pro/predictions \
      -H "Authorization: Bearer $PICASSOIA_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"input":{"prompt":"put the cat from image 1 on the sofa from image 2","images":["https://example.com/cat.png","https://example.com/sofa.jpg"]}}'
    Response · 201 Createdstarting
    {
      "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
      "model": "picassoia/picassoia-image-editor-pro",
      "input": {
        "prompt": "put the cat from image 1 on the sofa from image 2",
        "images": [
          "https://example.com/cat.png",
          "https://example.com/sofa.jpg"
        ],
        "aspect_ratio": "match_input_image",
        "num_outputs": 1,
        "output_format": "webp",
        "output_quality": 95
      },
      "output": null,
      "error": null,
      "status": "starting",
      "created_at": "2026-10-01T09:30:00.000Z",
      "started_at": null,
      "completed_at": null,
      "metrics": {
        "predict_time": null
      },
      "urls": {
        "get": "https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
        "cancel": "https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60/cancel"
      },
      "eta": {
        "seconds": 12,
        "next_poll_in_seconds": 6
      }
    }
  2. Poll it until it finishes

    Ask urls.get again after eta.next_poll_in_seconds: at half the estimate, when the estimate is reached, then every 2 seconds. Polling faster gets you nothing sooner.

    Statuses:startingprocessingsucceeded·failed·canceled

    Request
    # Repeat after eta.next_poll_in_seconds until status is
    # succeeded, failed or canceled.
    curl -s https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60 \
      -H "Authorization: Bearer $PICASSOIA_API_KEY"
    Response · 200 OK · in progressprocessing
    {
      "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
      "status": "processing",
      "output": null,
      "eta": {
        "seconds": 6,
        "next_poll_in_seconds": 6
      }
    }

    Only the fields that change are shown; the rest are as in step 1.

  3. Read the result

    When status is succeeded, output is a list of image URLs. Download the files you want to keep.

    If status is failed, error says why; canceled means it was canceled before it finished. These three statuses are final: the prediction never changes again.

    Request
    # The last poll holds the result: "output" when "status" is succeeded,
    # "error" when it is failed. With jq, just those three fields:
    curl -s https://api.picassoia.com/v1/predictions/api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60 \
      -H "Authorization: Bearer $PICASSOIA_API_KEY" | jq '.status, .output, .error'
    Response · 200 OK · finishedsucceeded
    {
      "id": "api_3f9c2b7e8d1a4c6f9e0b1a2c3d4e5f60",
      "status": "succeeded",
      "output": [
        "https://…/output-1.webp"
      ],
      "error": null,
      "completed_at": "2026-10-01T09:30:08.000Z",
      "metrics": {
        "predict_time": 6.4
      },
      "eta": null
    }

    Only the fields that change are shown; the rest are as in step 1.

The ids, times and URLs in these answers are examples: yours come in each answer.

This model in the API

Create a prediction with a POST, then poll it until it finishes. These are the model's inputs:

Endpoint

POST https://api.picassoia.com/v1/models/picassoia/picassoia-image-editor-pro/predictions

picassoia/picassoia-image-editor-pro

FieldTypeDefaultNotes
promptstring, 1–4000 charactersrequiredThe edit to make. Refer to the images as "image 1", "image 2"…
imageslist of 1–4 images (https or data URLs)requiredThe first one is the main image.
aspect_ratiomatch_input_image, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3match_input_imagematch_input_image keeps the first image's proportions.
num_outputsinteger, 1–21
output_formatwebp, jpg, pngwebp
output_qualityinteger, 0–10095JPG and WebP only.
seedintegerrandom

Output: a list of 1 or 2 image URLs.

Open the full API reference

Compare with other providers

See how our prices compare with what other providers charge for the model of the same name.

ModelPicasso IAOther providers
PicassoIA Image Editor Pro · Image EditingUnlimited$0 per request$0.03/MP

Comparison based on other providers' public prices as of October 1, 2026. On Picasso IA, API predictions are free with the Infinite plan, with up to 5 in progress at once.