When To Use Each Endpoint
Always send
model. Image endpoints intentionally do not rely on a historical implicit default model for production traffic.
Pick A Model
Start with model discovery, then inspect the selected model’s TokenLab model details:GET /v1/models. Model detail pages may expose the fuller GET /v1/models/{model}. Use those fields to confirm:
- The supported operation, such as
text-to-image,image-to-image, orimage-edit. - The request endpoint expected by the model.
- Which shape to use for references, such as
image_url,image_urls,reference_image_urls, multipartimage, or JSONimages[]. - Whether the model accepts
size,aspect_ratio,resolution,quality,background,output_format, orresponse_format.
Request Shape Rules
gpt-image-2style requests use OpenAI-likesize,quality, and edit fields. For generation and edits,backgroundacceptsautooropaque;transparentis not supported. Leave optional fields out when you want the model or TokenLab to use automatic defaults.- Gemini and Nano Banana image families usually use
aspect_ratio; only sendresolutionwhen the model details expose it. - Nano Banana image-to-image belongs on
/v1/images/generationswithoperation: "image-to-image"and reference image URLs. /v1/images/generationsdoes not accept top-levelimages[]orfile_id; those are edit-flow shapes.- Remote image references must be public
httporhttpsURLs. Do not send private network URLs, embedded credentials, URL fragments, or signed URLs that may expire before processing starts.
Text-To-Image Example
Reference-Image Example
Handling Results
Image responses can be synchronous or asynchronous:- Synchronous responses return final
data[]withurlorb64_json. - Async responses return
id,task_id,status, and usuallypoll_url. - Prefer
poll_urlwhen it is present. If you need a fixed route, pollGET /v1/tasks/{id}. - Use synchronous requests when you specifically need
b64_json; async image results are URL-oriented.
Production Checklist
- Validate user inputs before calling TokenLab: prompt length, image count, URL reachability, and file type.
- Set HTTP timeouts high enough for synchronous high-resolution requests. Use async mode where available for long work.
- Store
request_id,task_id,poll_url, model, endpoint, and sanitized request shape for support. - On client timeout, check whether a task was created before retrying the create request.
- Reconcile cost with usage records and
billing_transaction_idwhen present, not with provider task IDs.