GPT Image 2.5 is live — OpenAI's newest image model, targeted edits that leave the rest of the frame alone
rreAPI Docs

muse-image

Muse Image on reAPI — Meta's image model. A prompt plus up to 9 reference images in seven aspect ratios, one WebP image per request, one flat price per image.

Muse Image, the image model from Meta Superintelligence Labs, live on reAPI. One model id, muse-image, makes one picture from a prompt, or from a prompt plus up to 9 reference images, in one of seven aspect ratios. Every request costs the same flat price per image. See current pricing on the model page.

Quick example

curl https://reapi.ai/api/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "muse-image",
    "prompt": "A travel poster for a seaside town called Porto Azul: pastel houses stacked on a cliff above a turquoise bay, the headline PORTO AZUL in bold serif letters at the top, flat retro illustration style.",
    "aspect_ratio": "3:4"
  }'
import requests

response = requests.post(
    "https://reapi.ai/api/v1/images/generations",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "model": "muse-image",
        "prompt": "A travel poster for a seaside town called Porto Azul: pastel houses stacked on a cliff above a turquoise bay, the headline PORTO AZUL in bold serif letters at the top, flat retro illustration style.",
        "aspect_ratio": "3:4",
    },
    timeout=60,
)
response.raise_for_status()
task_id = response.json()["id"]
const response = await fetch('https://reapi.ai/api/v1/images/generations', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'muse-image',
    prompt:
      'A travel poster for a seaside town called Porto Azul: pastel houses stacked on a cliff above a turquoise bay, the headline PORTO AZUL in bold serif letters at the top, flat retro illustration style.',
    aspect_ratio: '3:4',
  }),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const { id: taskId } = await response.json();
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "strings"
    "time"
)

func main() {
    body := strings.NewReader(`{
      "model": "muse-image",
      "prompt": "A travel poster for a seaside town called Porto Azul: pastel houses stacked on a cliff above a turquoise bay, the headline PORTO AZUL in bold serif letters at the top, flat retro illustration style.",
      "aspect_ratio": "3:4"
    }`)
    req, err := http.NewRequest("POST", "https://reapi.ai/api/v1/images/generations", body)
    if err != nil { panic(err) }
    req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")
    client := &http.Client{Timeout: 60 * time.Second}
    res, err := client.Do(req)
    if err != nil { panic(err) }
    defer res.Body.Close()
    var task struct { ID string `json:"id"` }
    if err := json.NewDecoder(res.Body).Decode(&task); err != nil { panic(err) }
    fmt.Println(task.ID)
}

Authentication

Every call needs a Bearer token. Generate keys at reapi.ai/settings/apikeys.

Authorization: Bearer YOUR_API_KEY

Endpoint

POST /api/v1/images/generations
GET  /api/v1/tasks/{id}

Submission is async. The POST returns a task id right away; poll the task endpoint until status is completed or failed. Polling does not consume credits.

Request body

FieldTypeDefaultNotes
modelstring—muse-image. Required.
promptstring—Required, also with references. Must not be empty after trimming. Name the subject, setting, light and framing; with references, say what to keep and what to change.
image_urlsstring[]—0–9 public HTTP(S) image URLs used as references for a new picture. PNG, JPEG or WebP, 11 MB in total. Leave it out for text to image.
aspect_ratiostringauto1:1 / 16:9 / 9:16 / 4:3 / 3:4 / 3:2 / 2:3. Leave it out for auto: 1:1 for text only, the references' shape otherwise. Do not send "auto".
sizestring—Alias of aspect_ratio: one of the ratios above, or auto. Pixel sizes such as 1024x1024 are refused. aspect_ratio wins when both are sent.
ninteger1Only 1. Each request returns one image.

There is no resolution, seed, negative prompt, mask or output format field. Fields outside this table are not refused: they are passed through to the model, which currently ignores them.

Checked by reAPI before anything is charged:

  • prompt is present and not blank
  • image_urls holds at most 9 public HTTP(S) URLs — base64 and data: URIs are rejected
  • aspect_ratio, size and n hold one of their listed values

The reference files' format and total size are checked when the task starts. A request that breaks one ends as a failed task with the exact reason, and is refunded in full.

Modes

ModeHow to select it
Text to imageNo image_urls. Without aspect_ratio the image is square.
With references1–9 images in image_urls. Without aspect_ratio the image follows their shape.

With references

{
  "model": "muse-image",
  "prompt": "Keep this exact jacket; show it folded in a flat lay of hiking gear on pine boards, soft morning light.",
  "image_urls": ["https://example.com/jacket.png"],
  "aspect_ratio": "9:16"
}

Muse Image returns a new picture built from the references. There is no mask or inpainting field.

Troubleshooting

FailureWhat it meansWhat to do
Synchronous 400 (code 20002)No promptAdd a prompt. Nothing was charged
Synchronous 400 (codes 20003 / 20005)A blank prompt, more than 9 references, a non-URL reference, or a value outside a field's listThe message names the field. Nothing was charged
Task fails with code 80007The model refused the input, for example references over 11 MB in totalFully refunded. Fix the input and send it again
Task fails with code 80006The prompt or an image was rejected by content reviewFully refunded. Revise the prompt or images
402 on submitNot enough credits for the reserveTop up
Task stays processingGeneration usually takes one to a few minutesKeep polling; a task that can never finish is failed and refunded automatically

No data: URIs. reAPI rejects base64 inputs platform-wide — every URL field must be a public HTTP(S) URL. Upload to your own object storage and pass the URL.

Response envelope

{
  "id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
  "model": "muse-image",
  "status": "completed",
  "created_at": 1789689600,
  "output": {
    "image_urls": ["https://cdn.reapi.ai/media/tasks/018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e/0.webp"]
  },
  "error": null
}

Poll GET /api/v1/tasks/{id} (see the Tasks reference) until status === "completed", then read output.image_urls. The image is WebP, the model's own format; the model chooses the pixel size. A failed task carries error.code and error.message; see the errors catalog.

Pricing

Muse Image bills one flat price per image:

credits = ceil(per_image_rate × 1 × 1000)     1 credit = $0.001

Text-only and reference requests, and every aspect ratio, cost the same. The amount reserved when the task is accepted is the amount charged, and failed tasks are refunded in full.

The live per-image rate is on the model page.

Tips

  • Name the subject, setting, light and framing; Muse Image follows a specific brief closely.
  • With references, say exactly what must stay the same, such as the product's color or shape.
  • Leave aspect_ratio out to match a reference's shape; set it to crop for a channel.
  • Add No text, no logos. to keep invented marks out of the picture.
  • Need a clip instead? Pass the finished image to Muse Video as a reference.

Table of Contents