Skip to main content
POST
Creates an upload ticket for a question’s stimulus asset. Files never go through this endpoint: when mime_type is sent the response carries upload_url, a signed URL that accepts one PUT of the raw file within two hours. Upload the file, call Complete asset upload while its status is pending (stop at ready; rejected and expired are final, so create a new ticket), then reference the ticket as asset.upload_id when you create or update a question. Returns 201.
MCP sessions get the same ticket through the create_asset_upload tool, plus a hosted page for uploading in the browser. Organization API keys use the direct upload only.
string
Original file name with extension, for example concept-a.png. Shown on the hosted upload page; the stored object’s extension comes from mime_type (the file name’s extension is used only when the type is unknown).
string
One of image/jpeg, image/png, image/gif, image/webp, image/bmp, image/x-ms-bmp, video/mp4, video/webm, video/quicktime, application/pdf. Both BMP media types accept .bmp images. Excel spreadsheets (.xls, .xlsx) are not supported.
integer
Size of the file when known. Anything above 50 MB is refused before a ticket is created.

Response

string
The ticket id.
string
pending on creation.
string
Signed URL for one PUT of the raw file, only present when mime_type was sent. Send the Content-Type header from headers. The URL is a credential: do not log or share it.
string
PUT.
object
Headers to send with the upload (Content-Type).
string
When the ticket and the signed URL stop working (two hours).
integer
The size limit, 52428800.
string[]
The accepted media types.

Limits

  • At most 30 tickets per API key per hour.
  • 50 MB per file. The bucket also enforces the type list on the upload itself.
  • Tickets that never receive a file expire after two hours.