Ideogram AI Ideogram Character API Documentation
Playground
Try it on WaveSpeedAI!Ideogram Character creates consistent characters from one reference image, in many styles, and supports inpainting to place the character into existing images. Ready-to-use REST API, no coldstarts, affordable pricing.
Features
Edit a single character image with text instructions. Ideogram Character is designed for changing outfits, appearance details, and visual styles based on the uploaded source image while keeping the character recognizable.
Why It Looks Great
-
Character-focused editing
Modify a character directly from a single source image while retaining key visual traits. -
Style modes
Choose from Auto, Fiction, or Realistic styles to match your creative direction. -
Rendering speed options
Balance speed and quality with Turbo, Default, or Quality modes. -
Flexible aspect ratios
Choose from five output formats for different layouts.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text instruction describing the edit you want to make. |
| image | Yes | Single source image to edit. Upload an image or provide a public URL. |
| style | No | Output style: Auto, Fiction, or Realistic. Default: Auto. |
| rendering_speed | No | Processing mode: Turbo, Default, or Quality. Default: Default. |
| aspect_ratio | No | Output format: 1:1, 16:9, 9:16, 4:3, or 3:4. Default: 1:1. |
How to Use
- Write your edit instruction — Describe the changes you want, such as outfit, appearance, or style.
- Use Prompt Enhancer optional — Refine your instruction for clearer editing direction.
- Upload one source image — Provide the character image you want to edit.
- Choose style — Select Auto, Fiction, or Realistic based on the desired look.
- Select rendering speed — Choose Turbo for speed, Quality for final detail, or Default for balance.
- Set aspect ratio — Pick the output format that fits your use case.
- Run — Generate the edited character image.
- Download — Preview and save your result.
Pricing
Pricing varies by rendering speed.
| Rendering Speed | Cost | Best For |
|---|---|---|
| Turbo | $0.10 | Quick previews, rapid iteration, testing concepts |
| Default | $0.15 | General use, balanced quality and speed |
| Quality | $0.20 | Final deliverables, maximum detail and refinement |
Examples
| Rendering Speed | 5 Images | 10 Images | 50 Images |
|---|---|---|---|
| Turbo | $0.50 | $1.00 | $5.00 |
| Default | $0.75 | $1.50 | $7.50 |
| Quality | $1.00 | $2.00 | $10.00 |
Best Use Cases
- Fashion and outfit changes — Swap clothing, change colors, or modify accessories.
- Character design — Create variations of a character with different looks.
- Portrait editing — Adjust appearance details based on the uploaded source image.
- Style exploration — Transform a character between realistic and fictional aesthetics.
- Content creation — Generate outfit, look, or character variations for creative projects.
Example Prompts
- “Change her outfit to a red dress while keeping the lighting natural.”
- “Change the shirt to a blue business suit.”
- “Add sunglasses and a leather jacket.”
- “Transform the character into a fantasy warrior with armor.”
- “Change the hair color to blonde and keep everything else the same.”
- “Dress the character in a casual summer outfit with a white t-shirt and jeans.”
Style Guide
| Style | Description | Best For |
|---|---|---|
| Auto | Automatically determines the best style | General use |
| Fiction | Stylized, artistic, or illustrative look | Fantasy, anime-inspired, and creative content |
| Realistic | Photorealistic and natural appearance | Fashion, portraits, and professional use |
Pro Tips for Best Results
- Be specific about what to change and what to preserve.
- Use Realistic style for fashion and portrait edits.
- Use Fiction style for fantasy, stylized, or creative character looks.
- Start with Turbo mode to test the prompt, then switch to Quality for final output.
- Describe outfit changes clearly, including color, style, material, and accessories.
- For better consistency, use a clear source image and keep the requested changes focused.
- Match aspect ratio to your intended platform:
1:1for profiles,9:16for stories, and16:9for banners.
Notes
- This endpoint uses a single source image for character editing. Separate character-reference and target-image inputs are not supported.
- If using a URL for the image, ensure it is publicly accessible.
enable_base64_outputis only available through the API.- Processing time varies by rendering speed selection.
- Enable Safety Checker for content that will be publicly shared.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic ocean wave at sunrise, highly detailed",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"style": "Auto",
"rendering_speed": "Default",
"aspect_ratio": "1:1"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/ideogram-ai/ideogram-character" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | The positive prompt for the generation. | |
| image | string | Yes | - | An image to use as a character reference. | |
| style | string | No | Auto | Auto, Fiction, Realistic | The character style type. Auto, Fiction, or Realistic. |
| rendering_speed | string | No | Default | Default, Turbo, Quality | Rendering speed. Turbo for faster and cheaper generation, quality for higher quality and more expensive generation, default for balanced. |
| aspect_ratio | string | No | 1:1 | 1:1, 16:9, 9:16, 4:3, 3:4 | The aspect ratio of the generated media. |
| enable_base64_output | boolean | No | false | - | If set to `true`, the prediction's `output` strings are returned as **naked base64** (no `data:<mime>;base64,` prefix). When `false` (default), outputs are returned as URLs pointing to our CDN. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |