Skip to main content
Uploading images to Prompt Bank gives you a stable, CDN-hosted URL that you can attach to prompts as a reference image or pass directly into a generation job as an imageInput. Whether you’re providing a style reference, a base image for image-to-image generation, or a visual for your prompt’s imageUrl field, the upload flow is the same: request a signed upload URL, push the bytes directly to storage, then use the returned permanent URL in your API calls.

Supported formats and limits

Upload an image

1

Request a signed upload URL

Send a POST /api/v1/uploads/images request with the contentType and size (in bytes) of the file you want to upload. This endpoint requires the prompts:write scope. The API returns a short-lived signed URL, a token, and the permanent URL your file will live at once uploaded:
The uploadUrl expires 7,200 seconds (2 hours) after it is issued. Complete the file upload before the expiry time. If the URL expires before you upload, request a new signed URL by calling POST /api/v1/uploads/images again.
2

Upload the file bytes

Send the raw file bytes to the uploadUrl using a PUT request. Set the Content-Type header to match the contentType you declared in the previous step:
A 200 OK response confirms the bytes were written successfully. No Prompt Bank Authorization header is needed for this step — the signed URL carries the required authorization.
3

Use the permanent URL in your prompts and generations

After the upload succeeds, use the url value (not the uploadUrl) wherever Prompt Bank expects an image URL. The url is permanent and does not expire.
Always use the url field from the upload response — not the uploadUrl. The uploadUrl is a temporary signed URL used only to write your file to storage; it stops working after the 2-hour expiry window. The url is the CDN-hosted address where your file lives permanently.
Attach to a prompt as imageUrl:
Use as a reference in referenceMediaUrls:
Pass as imageInput in a generation:

Next steps