Circle V2 API Docs
    Preparing search index...
    createUploadTarget: MutationProcedure<
        {
            input: { fileName: string; sizeBytes: number };
            meta: object;
            output: { bucket: string; config: StorageCredentials; key: string };
        },
    > = ...

    Mints where a template upload goes. The identity in the path is ctx.user (impersonation-swapped), the same entity create later validates against — deriving it in the browser from the REAL user orphaned an impersonating superadmin's uploads. A mutation, not a query: every call must return a fresh key.