{
  "schema_version": 1,
  "public_model_id": "openai/gpt-image-2.5-sunburst",
  "canonical_page": "https://www.maxapi.dev/models/openai/gpt-image-2.5-sunburst",
  "reviewed_at": "2026-09-10",
  "generated_at": "2026-09-11T02:12:59.274Z",
  "scope": "Checked against MaxAPI's public catalogue, gateway implementation and local regression cases. Shared gateway checks are not separate end-to-end tests of every listed model. This is an integration reference, not a live upstream availability or performance report.",
  "summary": "GPT Image 2.5 Sunburst is available in MaxAPI's image API under openai/gpt-image-2.5-sunburst, for generation and reference-image editing. This catalogue entry allows up to 16 references. Published routes are mix, x, a; file acceptance, permissions and output options must be checked for the route you actually use.",
  "model_profile": {
    "family_id": "openai/gpt-image-2.5-sunburst",
    "reviewed_at": "2026-09-10",
    "title": "Precision edits before broad exploration",
    "provider_positioning": "OpenAI explicitly positions Sunburst for editing precision. It accepts text and image inputs and offers additional xhigh and max quality settings alongside the standard choices. This is positioning, not a measured MaxAPI accuracy score.",
    "selection_advice": "Compare it first when an approved composition needs a small controlled revision: packaging, material, a short label or one localized element. Flare is the alternative to test for broad concept exploration.",
    "limitations": "Precision is not a pixel lock. Explicitly state what must remain unchanged and check those regions. MaxAPI's published quality list and route behavior, not every option on OpenAI's direct API, govern your request.",
    "suggested_use_cases": [
      {
        "title": "Approved packaging revisions",
        "body": "Change one visual attribute, then compare untouched edges and lettering at full size. Keep an explicit acceptance checklist."
      },
      {
        "title": "Material alternatives",
        "body": "Keep camera and geometry fixed while exploring glass, ceramic or metal. Judge reflections separately from silhouette."
      },
      {
        "title": "Localized creative revisions",
        "body": "Provide the approved translated heading and ask for one replacement. Manually check every character and the unchanged brand elements."
      }
    ],
    "example_prompt": {
      "title": "Change the cap, preserve the package",
      "text": "Edit reference 1. Change only the bottle cap from glossy black to brushed silver. Preserve the bottle, label lettering, logo placement, liquid color, background, shadow direction and camera position. Match the new cap's reflections to the existing light. Do not redesign the product or retouch unrelated areas.",
      "review": "Inspect the cap boundary and compare all supposedly unchanged areas against the source."
    },
    "scope": "Provider capabilities describe the model, not the complete MaxAPI feature set. Use the parameters, input types and routes documented for this MaxAPI entry. Vendor speed or quality descriptions are not service-level guarantees.",
    "variant_note": null,
    "sources": [
      {
        "label": "OpenAI · gpt-image-2.5-sunburst",
        "url": "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst"
      }
    ]
  },
  "illustration": {
    "url": "https://www.maxapi.dev/model-guides/individual-20260910/gpt-image-2-5-sunburst.webp",
    "alt": "Perfume bottle with a brushed-silver cap in controlled macro lighting",
    "caption": "Material-edit brief: define the small area to change and the surrounding details to preserve.",
    "provenance": "ai_generated_editorial_concept",
    "is_output_from_named_model": false,
    "is_benchmark": false
  },
  "illustrations": [
    {
      "section": "usecases",
      "url": "https://www.maxapi.dev/model-guides/individual-20260910/gpt-image-2-5-sunburst.webp",
      "alt": "Perfume bottle with a brushed-silver cap in controlled macro lighting",
      "caption": "Material-edit brief: define the small area to change and the surrounding details to preserve.",
      "width": 1536,
      "height": 1024,
      "provenance": "ai_generated_editorial_concept",
      "is_output_from_named_model": false,
      "is_benchmark": false
    },
    {
      "section": "features",
      "url": "https://www.maxapi.dev/model-guides/expanded-20260911/gpt-image-2-5-sunburst-practice.webp",
      "alt": "Perfume bottle with brushed-metal and matte-black caps",
      "caption": "Describe the finish, reflections and surface texture as separate material choices.",
      "width": 1536,
      "height": 1024,
      "provenance": "ai_generated_editorial_concept",
      "is_output_from_named_model": false,
      "is_benchmark": false
    },
    {
      "section": "prompts",
      "url": "https://www.maxapi.dev/model-guides/expanded-20260911/gpt-image-2-5-sunburst-prompt.webp",
      "alt": "Brushed silver cap on a transparent cobalt perfume bottle.",
      "caption": "Material-detail concept focusing on one bottle cap.",
      "width": 1536,
      "height": 1024,
      "provenance": "ai_generated_editorial_concept",
      "is_output_from_named_model": false,
      "is_benchmark": false
    },
    {
      "section": "workflow",
      "url": "https://www.maxapi.dev/model-guides/expanded-20260911/gpt-image-2-5-sunburst-workflow.webp",
      "alt": "Perfume photograph inspected with a magnifying glass beside the bottle.",
      "caption": "Check edges and reflections against the physical product.",
      "width": 1536,
      "height": 1024,
      "provenance": "ai_generated_editorial_concept",
      "is_output_from_named_model": false,
      "is_benchmark": false
    }
  ],
  "configured_facts": [
    {
      "label": "Request model ID",
      "value": "openai/gpt-image-2.5-sunburst",
      "code": true
    },
    {
      "label": "Output type",
      "value": "Image"
    },
    {
      "label": "Base URL",
      "value": "https://api.maxapi.dev",
      "code": true
    },
    {
      "label": "Generation workflow",
      "value": "Synchronous or asynchronous"
    },
    {
      "label": "Reference images · MaxAPI limit",
      "value": "16"
    },
    {
      "label": "Quality values",
      "value": "high / auto / medium / low / xhigh / max",
      "code": true
    },
    {
      "label": "Resolution & dimensions",
      "value": "Use size as WIDTHxHEIGHT. For 4K landscape, use 3840x2160; 4K does not mean 4096x4096."
    }
  ],
  "pricing_scope": "1 credit = US$1. These are catalogue base rates, not a live account quote. Account multipliers and the active billing configuration determine the final charge. Token rates are not a fixed price per image.",
  "pricing_index": "https://www.maxapi.dev/pricing.json",
  "routing_rules": [
    {
      "title": "Which route wins?",
      "body": "Routing priority is: the API key's configured route_modes list → an explicitly requested route → the model's default route. A non-empty key list takes precedence over route_mode in the request. To test a specific route, check the key configuration first; changing the request alone may not change the route used."
    },
    {
      "title": "A key cannot grant account permissions",
      "body": "The a, x and pro routes require the corresponding account permission. Listing one on an API key does not grant that permission. An unauthorized gated-route selection returns 403 rather than silently switching to a different pricing tier."
    },
    {
      "title": "RPM is shared at account level",
      "body": "An account's positive RPM limit covers its API keys together. A key can impose a stricter limit, but a higher key limit does not override the user limit. For example, a user limit of 200 RPM is not 200 RPM for each key. Service-level RPM and concurrency controls also apply; adding keys is not a way to bypass them."
    }
  ],
  "troubleshooting": [
    {
      "code": "400",
      "title": "Missing or invalid request fields",
      "meaning": "Check the response's error code, not only 400. For image edits, an empty prompt produces prompt_required. A parameter validation error is different from an upstream generation failure.",
      "action": "Check model, prompt, field types and documented size/quality values. Correct the request before retrying. For Gemini-native responses, inspect the numeric error.code and error.status fields."
    },
    {
      "code": "Invalid image file",
      "title": "A reference cannot be decoded or accepted",
      "meaning": "A filename ending in .png does not prove that the bytes are a valid PNG. The URL may return an error page, an incomplete download or a format the selected channel cannot use. An upstream 400 may be reported as a generic generation failure, so status alone does not identify the bad file.",
      "action": "Download and decode every reference locally. Check MIME type and pixel dimensions, then export a fresh supported image if needed. Submit one reference first and add the others in order to locate the problematic input; do not repeatedly resend an unchanged invalid file."
    },
    {
      "code": "403",
      "title": "a_route_not_enabled / x_route_not_enabled / pro_route_not_enabled",
      "meaning": "The selected restricted route is not enabled for the account. It is an access issue, not evidence that the model is offline.",
      "action": "Check both the account permission and the API key's route list. Select a route you are entitled to use or request access; do not solve a 403 by increasing retries."
    },
    {
      "code": "429",
      "title": "rate_limit_exceeded / capacity_exhausted",
      "meaning": "429 can represent account/key RPM, service-wide capacity or generation capacity. Use Retry-After and available X-RateLimit-* / X-Global-* headers to distinguish them; one status code does not identify one unique cause.",
      "action": "Respect Retry-After when present, reduce request rate or active concurrency as appropriate, and use bounded backoff. Do not treat the site's total capacity as your account's personal quota."
    },
    {
      "code": "451",
      "title": "content_policy_violation",
      "meaning": "On the image generation failure path, a recognized upstream content refusal is mapped to 451. This is not the same as a network outage. MaxAPI's local moderation and an upstream refusal are different stages, even when both prevent a result.",
      "action": "Review the stated policy issue and use compliant inputs, or contact support if you believe the classification is mistaken. Do not retry unchanged blocked content or rotate routes to evade moderation."
    },
    {
      "code": "502 / 503 / 504",
      "title": "Generation failure, unavailable service or timeout",
      "meaning": "These responses do not all mean the same thing. MaxAPI distinguishes generation_failed, generation_unavailable and generation_timeout on compatible image endpoints. A client-side timeout can also happen before the server has finished a task.",
      "action": "If you have a task ID, poll before creating another task. Without an ID, keep the request ID and timestamp and investigate before blindly resubmitting. Retry transient failures with a limit, not an unbounded loop."
    }
  ],
  "verification": {
    "environment": "local_mock_requests_and_test_storage",
    "coverage": "shared_gateway_components_not_each_model_end_to_end",
    "paid_upstream_calls": 0,
    "reviewed_at": "2026-09-10",
    "cases": [
      {
        "key": "shared-user-rpm",
        "title": "Multiple keys share the user limit",
        "input": "Use two keys owned by the same account against an in-memory limiter with a small user quota.",
        "result": "Requests across the keys consume the same user quota; subsequent requests are limited. A larger key quota does not override the user quota, and a smaller key quota remains effective."
      },
      {
        "key": "empty-edit-prompt",
        "title": "An edit with no prompt is rejected early",
        "input": "Send an image-edit request with an empty prompt and a reference URL to a local test handler.",
        "result": "HTTP 400 with error.code=prompt_required, before route dispatch. A reference image does not replace the edit instruction."
      },
      {
        "key": "image-url-input",
        "title": "JSON reference URLs are normalized for editing",
        "input": "Pass an image_url plus prompt through the local JSON-to-multipart converter; separately test image_url=not-a-url.",
        "result": "The converter retains the model and reference fields; invalid URL syntax is rejected. This is a request-format check, not a download or model-generation success test."
      },
      {
        "key": "failure-mapping",
        "title": "Content refusal and capacity failure stay distinct",
        "input": "Feed mocked upstream content-refusal and 429/503/504 responses into the generation-error mapper.",
        "result": "Content refusal maps to 451; capacity, unavailable service and timeout retain distinct public codes. The compatible 429/503 responses include Retry-After: 2 in these tests."
      },
      {
        "key": "image-reservation",
        "title": "Image reservations settle or release on completion",
        "input": "Exercise successful and failed synchronous image reservations with a local test database.",
        "result": "Success consumes the hold with a usage record. Failure releases the reservation without a generation charge. This verifies the tested code path, not a live account's current balance."
      },
      {
        "key": "gpt25-pixel-budget",
        "title": "A 4K label does not bypass the pixel budget",
        "input": "Validate 3840x2160, then submit 3840x2560 in local Sunburst and Flare generation/edit handlers.",
        "result": "3840x2160 passes size validation; 3840x2560 exceeds 8,294,400 pixels and returns 400 before routing. This does not establish upstream support for every accepted size."
      },
      {
        "key": "gpt25-actual-quality",
        "title": "Requested quality is not substituted for returned quality",
        "input": "Request high and supply a mocked response containing quality=medium, size=3520x2336 and usage.source=estimated.",
        "result": "The response finalizer preserves those returned values and does not fabricate missing usage. Review the returned metadata and actual file instead of assuming the requested tier was delivered."
      }
    ],
    "limitations": "Local tests use simulated requests, responses and test storage; they do not call paid model channels. They verify request handling, not model image quality, live success rates, latency or end-to-end support for the maximum reference count. The concept illustrations elsewhere on this page are not these test outputs."
  },
  "sources": {
    "maxapi_documentation": "https://www.maxapi.dev/docs",
    "catalogue": "https://www.maxapi.dev/models.json",
    "provider_documentation": "https://developers.openai.com/api/docs/models/gpt-image-2.5-sunburst"
  }
}
