---
title: "Start an upload: get a signed URL"
method: POST
path: "/v1/blueprints/upload/init"
tags: ["Blueprints / Actions"]
---

# Start an upload: get a signed URL

`POST /v1/blueprints/upload/init`

## Request

- Base URL: `https://api.kamai.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kamai.io/v1/blueprints/upload/init`
- Auth: HTTP bearer

Step 1 of the two-step upload: request a pre-signed URL for a blueprint.

Upload the file with an HTTP PUT to the returned `signed_url`, sending exactly
the headers in `required_headers`, then call `/upload/complete` with the
returned `file_uuid`. Recommended for large files.

## Request body

- InitUploadRequest
  - `project_id` string, nullable: Target project ID. When omitted, the user's Default Project is used or created.
  - `filename` string, nullable: Desired filename. When omitted, a UTC-timestamped default is used. Sanitized server-side.
  - `mime_type` string, nullable: File MIME type. Defaults to application/pdf; only application/pdf is allowed for now.

## Response `200`

Successful Response

- InitUploadResponse
  - `file_uuid` string, required: Identifier for this pending upload; pass it to /upload/complete.
  - `user_id` string, required: Authenticated user ID.
  - `project_id` string, required: Resolved project ID.
  - `signed_url` string, required: Pre-signed URL. Upload the file here with an HTTP PUT.
  - `method` string: HTTP method to use against signed_url.
  - `expires_in` integer, required: Seconds until the signed URL expires.
  - `required_headers` object, required: Exact headers the client MUST send on the PUT (the signature enforces them).

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/kamai/apis/kamai-api.md) · [All operations](https://skmtc.dev/kamai/apis/kamai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kamai/apis/kamai-api/revisions/78f938546270?raw)
