# Create a presigned upload URL

> Creates a short-lived, single-use presigned upload URL — the local-storage equivalent of an S3 presigned URL. The client then uploads the file content directly to the returned `upload_url` via `POST /api/v1/files/upload/{token}`, bypassing MCP payload size limits. When the server is configured with `SOAT_BASE_URL`, `upload_url` is a fully-qualified absolute URL so MCP agents and other clients can POST to it without knowing the server base URL in advance.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Create a presigned upload URL"}
>
</Heading>

<MethodEndpoint
  method={"post"}
  path={"/api/v1/files/presigned-url"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Creates a short-lived, single-use presigned upload URL — the local-storage equivalent of an S3 presigned URL. The client then uploads the file content directly to the returned `upload_url` via `POST /api/v1/files/upload/{token}`, bypassing MCP payload size limits. When the server is configured with `SOAT_BASE_URL`, `upload_url` is a fully-qualified absolute URL so MCP agents and other clients can POST to it without knowing the server base URL in advance.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails>
  
</ParamsDetails>

<RequestSchema
  {...require("./create-presigned-url.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./create-presigned-url.StatusCodes.json")}
>
  
</StatusCodes>
