Moss Image Text To Image API Documentation
Playground
Try it on WaveSpeedAI!MOSS Image Text-to-Image generates images from long text prompts, with sharp Chinese and English text rendering, 1K or 2K output and flexible aspect ratios. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
MOSS Image Text-to-Image generates images from detailed text prompts with strong support for Chinese and English text rendering. Describe the subject, composition, environment, lighting, and any text you want to appear, then choose the resolution and aspect ratio for the final image.
Why Choose This?
- Detailed prompt understanding — Use rich scene descriptions to control composition, subject, background, lighting, and visual style.
- Chinese and English text rendering — Create posters, signs, packaging, infographics, and other text-heavy visuals.
- 1K and 2K output — Choose
1kor2kdepending on your quality requirements. - 15 aspect ratios — Generate images for a wide range of layouts and placements.
- Multiple output formats — Export as
jpeg,png, orwebp.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text description of the image to generate. Detailed prompts are recommended. |
| resolution | No | Output resolution: 1k or 2k. Default: 1k. |
| aspect_ratio | No | Output aspect ratio. Default: 1:1. |
| output_format | No | Output format: jpeg, png, or webp. Default: jpeg. |
| seed | No | Random seed. Use -1 for automatic random selection. |
How to Use
- Write a prompt — Describe the subject, composition, background, lighting, and visual style. Put any text you want rendered in quotation marks.
- Choose a resolution — Select
1kor2k. - Choose an aspect ratio optional — Select the framing that fits your target layout.
- Choose an output format optional — Use
jpeg,png, orwebp. - Set a seed optional — Use a fixed seed for repeatable results or
-1for random generation. - Submit — Generate and retrieve the finished image.
Pricing
| Resolution | Price per Image |
|---|---|
| 1K | $0.020 |
| 2K | $0.080 |
Aspect ratio, output format, and seed do not add separate charges.
Best Use Cases
- Posters and promotional graphics — Generate visuals with Chinese or English text.
- Packaging concepts — Create product packaging and label designs.
- Infographics — Combine visual elements with readable text.
- Advertising creatives — Produce campaign and marketing concepts.
- Editorial imagery — Generate detailed compositions for publishing and social content.
- Creative image generation — Explore illustrations, photography, and stylized concepts from long-form prompts.
Pro Tips
- Describe the subject, composition, environment, lighting, and style clearly.
- Put text that should appear in the image inside quotation marks.
- Use detailed prompts when precise scene structure matters.
- Choose
2kwhen higher output detail is needed. - Use a fixed seed when comparing prompt or parameter changes.
Notes
promptis required.resolutiondefaults to1k.aspect_ratiodefaults to1:1.output_formatdefaults tojpeg.- Use
seed=-1for random seed selection. - Both Chinese and English text can be included in prompts and rendered in generated images.
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",
"aspect_ratio": "1:1",
"resolution": "1k",
"output_format": "jpeg"
}
JSON
)
# 1. Submit the prediction once. Never retry this request automatically:
# a retry after an unclear failure can create a second, billed task.
CHECK='The task may already exist. Check History or the predictions list before submitting again.'
if ! SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--connect-timeout 10 --max-time 60 \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/moss-image/text-to-image" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}"); then
printf 'Submit failed. %s\n' "${CHECK}" >&2
exit 1
fi
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. %s\n' "${CHECK}" >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction reaches a final status.
BODY_FILE=$(mktemp)
trap 'rm -f "${BODY_FILE}"' EXIT
while true; do
# Transient errors (429, 5xx) are retried, honoring Retry-After.
HTTP_CODE=$(curl --silent --show-error --fail-with-body \
--connect-timeout 10 --max-time 60 --retry 5 --retry-delay 2 \
--output "${BODY_FILE}" --write-out '%{http_code}' \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" || true)
case "${HTTP_CODE}" in
2??) ;;
000|429|5??) # dropped connection or temporary error: keep polling
printf 'Task %s: HTTP %s, polling again in 10s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
sleep 10; continue ;;
*) printf 'Task %s: HTTP %s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
cat "${BODY_FILE}" >&2; exit 1 ;;
esac
RESULT=$(jq 'if type == "object" and has("data") then .data else . end' "${BODY_FILE}")
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted)
printf 'Task %s ended with status %s\n' "${PREDICTION_ID}" "${STATUS}" >&2
printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneRetry temporary errors only while polling, never the submit request. Errors, retries and timeouts
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | The positive prompt for the generation. Supports long, detailed prompts and Chinese and English text rendering inside the image. | |
| aspect_ratio | string | No | 1:1 | 1:1, 1:2, 2:1, 1:3, 3:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 9:21, 21:9 | The aspect ratio of the generated image. |
| resolution | string | No | 1k | 1k, 2k | Total output resolution tier: 1k (~1 megapixel) or 2k (~4 megapixels). |
| output_format | string | No | jpeg | jpeg, png, webp | The format of the output image. |
| seed | integer | No | - | - | The random seed to use for the generation. -1 means a random seed will be used. |
| enable_sync_mode | boolean | No | false | - | If set to `true`, the request attempts to wait for the generated result and return outputs in the same response. If the result is not ready within the sync wait window, the API can return a timeout body while the task continues processing. This option is only available via the API and is supported only by some models. |
| 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 |