OC Maker
Two-stage generation in a single request: an LLM turns your prompt into a structured character sheet, then that result is rendered into an image.
You supply the full LLM prompt. No style presets or prompt templates are applied server-side — compose whatever prompt you need.
Required output contract: your prompt MUST instruct the model to return a JSON object containing an oc_prompt field. That field becomes the image prompt. If the model does not return parseable JSON with oc_prompt, the job fails.
Optionally include oc_ratio in that JSON to let the model pick the aspect ratio; the ratio request field overrides it.
Pricing: 1 token per request (= $0.02). Covers both the text and image stages.
Returns an img_uuid; poll GET /api/v1/jobs/detail (or use custom_callback_url) to get the result. The result contains two entries: the full LLM JSON (type: "json") and the rendered image (type: "image", image_type: "main_view").
Prompt contract
This endpoint runs two stages: a language model turns your prompt into a structured character sheet, then that sheet is rendered into an image. Your prompt must instruct the model to return a JSON object containing anoc_prompt field —
that field becomes the image prompt. If the model returns anything that cannot be parsed as JSON,
or the JSON has no oc_prompt, the job fails.
role_name, personality, character_backstory, …) are passed
through to the result untouched, so you can shape the character sheet however you like.
oc_ratio is optional — it lets the model choose the aspect ratio. The ratio request field
overrides it, and 3:4 is used when neither is present.
Result
Unlike the other image endpoints, the result array contains two entries: the full JSON from the text stage, then the rendered image. PollGET /api/v1/jobs/detail or use custom_callback_url.
value of the type: "json" entry is an object, not a URL string — the only endpoint
where this happens. Read the image from the entry with type: "image" rather than assuming
json[0] is the image.link_expired_atapplies to the image link. It is also present on the JSON entry, where it has no meaning — ignore it there.durationmeasures the image stage only, not the text stage, so it under-reports total latency.- Both stages share one
img_uuidand are billed once. A failure in either stage fails the whole job and refunds the tokens.
Headers
Body
Full prompt for the text stage. Must instruct the model to return a JSON object containing an oc_prompt field.
1 - 8000Rendering backend used for the image stage.
seedream, gpt-image-2 Optional system prompt for the text stage. Defaults to a generic assistant prompt.
4000Optional LLM model id for the text stage. Defaults to gemini-3-pro-preview.
100Optional. Aspect ratio of the generated image. Overrides oc_ratio from the LLM output; defaults to 3:4.
1:1, 2:3, 3:2, 4:3, 3:4, 16:9, 9:16 Optional. A publicly accessible HTTPS URL. When the task status changes (processing / success / failed), GoEnhance sends a POST request to this URL. The request body is identical to the response of GET /api/v1/jobs/detail. If your server does not respond with HTTP 200, the notification is retried up to 3 times, with a 3-second timeout per attempt.
"https://your-server.com/goenhance/callback"
