/** * ``POST /v3/files`` result. The presigned ``url`` *is* the file handle: * pass it as ``{"source": "url", "url": }`` in any media input the * model's schema advertises (``image`` / ``end_image`` / ``images`` / * ``audio`` / ``video``) on submit. */ export interface FileUploadResponse { /** Presigned GET URL for the stored bytes — the handle itself. Pass it back verbatim, query string included: a modified URL is not recognised as your handle and is rejected as an external URL. */ url: string; /** MIME type sniffed from the uploaded bytes; the request's own Content-Type and filename are never trusted. Decides which media inputs will accept this handle. */ content_type: string; /** ISO-8601 instant `url` stops being accepted — one hour after upload. Submitting with a lapsed handle is a 400 with `reason: "expired"`, not a fetch failure; upload the file again for a fresh handle. The stored object is deleted separately by a bucket lifecycle policy about a day after upload, so treat re-uploading, not re-presigning, as the remedy. */ expires_at: string; }