Bria Fibo 2.0 Text To Image API Documentation

Bria Fibo 2.0 Text To Image API Documentation

Playground

Try it on WaveSpeedAI!

Bria FIBO 2.0 Text-to-Image creates images from text prompts, with an optional reference image, flexible aspect ratios, and advanced structured prompting for product visuals, marketing assets, creative content, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Bria FIBO 2.0 Text-to-Image generates images from text descriptions with optional reference-image guidance and structured prompting. Choose from a wide range of aspect ratios, generate at 1k or 2k, and control the final framing for creative, commercial, and design workflows.


Why Choose This?

  • Text-to-image generation — Create images from detailed descriptions of the subject, setting, style, and composition.
  • Reference-guided generation — Use one image to guide the visual direction.
  • Structured prompting — Reuse structured generation instructions from previous results.
  • Flexible aspect ratios — Choose from 21 supported framing options.
  • 1K and 2K output — Select the resolution tier that fits your workflow.
  • PNG and JPEG output — Choose the preferred image format.

Parameters

ParameterRequiredDescription
promptConditionalText description of the image to generate. Provide at least one of prompt, images, or structured_prompt.
structured_promptNoStructured generation instructions as a JSON string from a previous generation. Cannot be used together with images.
imagesNoUp to 1 reference image. Supports JPEG, JPG, PNG, and WEBP.
aspect_ratioNoOutput aspect ratio. Supports 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 16:10, 10:16, 2:1, 1:2, 21:9, 9:21, 3:1, 1:3, 4:1, 1:4, 5:1, and 1:5. Default: 1:1.
resolutionNoOutput resolution tier: 1k or 2k. Default: 1k. Actual dimensions depend on the selected aspect ratio.
output_formatNoOutput format: png or jpeg. Default: png.
seedNoOptional seed. Omit for random generation.

How to Use

  1. Describe the image — Write a prompt describing the subject, composition, lighting, and visual style.
  2. Add guidance optional — Supply one reference image or reuse a structured_prompt.
  3. Choose framing — Select an aspect ratio and resolution.
  4. Choose output format optional — Select png or jpeg.
  5. Set a seed optional — Use a fixed seed when reproducibility is useful.
  6. Submit — Generate and retrieve the finished image.

Pricing

$0.04 per request.


Best Use Cases

  • Advertising creatives — Generate campaign and promotional visuals.
  • Product concepts — Explore product presentation and commercial imagery.
  • Editorial content — Create images for publishing, social media, and marketing.
  • Reference-guided creation — Use an existing image to influence the visual direction.
  • Structured workflows — Reuse structured generation instructions across iterations.
  • Custom-format graphics — Generate images across a wide range of aspect ratios.

Pro Tips

  • Describe the subject, environment, lighting, composition, and style clearly.
  • Use a reference image when visual consistency is important.
  • Use structured_prompt when continuing or refining a previous structured generation.
  • Choose a standard aspect ratio when using 2k.
  • Use a fixed seed when comparing prompt or parameter changes.

Notes

  • Provide at least one of prompt, images, or structured_prompt.
  • images and structured_prompt cannot be used together.
  • Standard aspect ratios are 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, and 16:9.
  • 2k uses a different generation pipeline, not FIBO 2, and supports only the standard aspect ratios.
  • Extended aspect ratios require 1k with either a text prompt (optionally accompanied by one reference image) or structured_prompt alone.
  • Reference-only requests and requests combining prompt with structured_prompt support only the standard aspect ratios.
  • Resolution tiers are square-equivalent, not fixed output dimensions. Actual width and height vary with the selected aspect ratio.
  • For structured prompting, reuse the complete structured JSON from a previous generation.

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'
{
  "aspect_ratio": "1:1",
  "resolution": "1k",
  "output_format": "png",
  "images": [
    "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
  ]
}
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/bria/fibo-2.0/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
done

Retry temporary errors only while polling, never the submit request. Errors, retries and timeouts

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringNo1 ~ unlimited characters · pattern: \SDescribe the image to generate. Supply a prompt, a reference image, or structured_prompt.
structured_promptstringNo-1 ~ unlimited characters · pattern: \SAdvanced option. Advanced generation instructions as a JSON string from a previous generation. Do not combine with images. Combining with prompt supports only the nine standard aspect ratios.
imagesarray<string>No-0 ~ 1 items · each item: 1 ~ unlimited charactersOptional reference image, up to one. Supported formats: JPEG, JPG, PNG, WEBP.
aspect_ratiostringNo1:11:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 16:10, 10:16, 2:1, 1:2, 21:9, 9:21, 3:1, 1:3, 4:1, 1:4, 5:1, 1:5Output image aspect ratio. Extended ratios require 1k and either a text prompt (with an optional reference image) or structured_prompt alone. See Notes for supported combinations.
resolutionstringNo1k1k, 2kSquare-equivalent resolution tier: 1k or 2k. Actual dimensions vary with aspect ratio. 2k supports only the nine standard aspect ratios.
output_formatstringNopngpng, jpegOutput image format.
seedintegerNo--Random seed. Leave empty for a random result.

Conditional constraints

  • Not allowed: images has at most 0 items or omitted and prompt has at most 0 characters or omitted and structured_prompt has at most 0 characters or omitted.
  • Not allowed: images has at least 1 items and structured_prompt is provided.
  • Not allowed: aspect_ratio is one of 16:10, 10:16, 2:1, 1:2, 21:9, 9:21, 3:1, 1:3, 4:1, 1:4, 5:1, 1:5 and resolution is one of 2k.
  • Not allowed: aspect_ratio is one of 16:10, 10:16, 2:1, 1:2, 21:9, 9:21, 3:1, 1:3, 4:1, 1:4, 5:1, 1:5 and prompt is provided and structured_prompt is provided.
  • Not allowed: aspect_ratio is one of 16:10, 10:16, 2:1, 1:2, 21:9, 9:21, 3:1, 1:3, 4:1, 1:4, 5:1, 1:5 and images has at least 1 items and prompt has at most 0 characters or omitted.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<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.urlsobjectObject containing related API endpoints
data.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.