# createUpload

> Part of the MAP Audio Music API docs. Index of every page: https://map.audio/developers/music-api/llms.txt. OpenAPI document: https://map.audio/developers/music-api/openapi.json.

`POST https://api.map.audio/v1/uploads`

Start an upload

Start a multipart upload of an audio file or a DAW project, declared by kind, name, size and SHA-256. Send the parts with PUT /v1/uploads/{id}/parts/{part}, then POST /v1/uploads/{id}/complete. Uploads are off until the decoder and project-reader fuzzers have run, so today this answers 403 uploads_disabled. Free.

Auth: `Authorization: Bearer` with an API key or a map.audio access token. Not an MCP tool: Uploads send raw bytes in parts, which a JSON tool call cannot carry; uploads are also off until the decoder fuzzers have run.

## Body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | "audio" \| "sample" \| "project" | yes | `sample` is an alias of `audio`. Preset and project-folder uploads are not served yet. |
| `name` | string | yes | At most 255 characters. |
| `bytes` | integer | yes | At least 1. |
| `sha256` | string | yes | Matches `^[0-9a-f]{64}$`. |

## Example

```sh
curl -sS "https://api.map.audio/v1/uploads" \
  -H "Authorization: Bearer $MAP_API_KEY" \
  -H "Map-Version: 2026-11-01" \
  -H "Content-Type: application/json" \
  -d '{"kind":"audio","name":"vocal-take.wav","bytes":23040044,"sha256":"3b8f1c6e2d9a4b7e0f5c1a8d6e3b9f2c4a7d0e1b5c8f3a6d9e2b4c7f0a1d3e5b"}'
```

### Request: A 24-bit WAV

```json
{
  "kind": "audio",
  "name": "vocal-take.wav",
  "bytes": 23040044,
  "sha256": "3b8f1c6e2d9a4b7e0f5c1a8d6e3b9f2c4a7d0e1b5c8f3a6d9e2b4c7f0a1d3e5b"
}
```

### 201: Two parts to send

```json
{
  "object": "upload",
  "id": "file_01M6BPRR00A11F2KEPGNR7V3Q9",
  "file": "file_01M6BPRR00A11F2KEPGNR7V3Q9",
  "kind": "audio",
  "status": "uploading",
  "partBytes": 16777216,
  "parts": 2,
  "expiresAt": "2026-11-02T14:20:00.000Z"
}
```

### 403: Uploads not open yet

```json
{
  "error": {
    "type": "entitlement",
    "code": "uploads_disabled",
    "message": "File uploads are not open yet; render from factory presets (GET /v1/presets) and pass render outputs as files meanwhile.",
    "param": null,
    "retryable": false,
    "jobId": null,
    "docUrl": "https://map.audio/developers/music-api/errors#uploads_disabled",
    "requestId": "9a3f7c2e5b1d8f40-LHR"
  }
}
```

## Responses

- `201`: The upload.
- `403`: Uploads not open yet
- `default`: Any other error: `error.code` names it, `error.param` the field at fault, and `error.docUrl` its entry in the error catalogue.

## Errors

- [`uploads_disabled`](https://map.audio/developers/music-api/errors#uploads_disabled)
- [`terms_required`](https://map.audio/developers/music-api/errors#terms_required)
- [`invalid_request`](https://map.audio/developers/music-api/errors#invalid_request)
- [`unsupported_media_type`](https://map.audio/developers/music-api/errors#unsupported_media_type)
- [`payload_too_large`](https://map.audio/developers/music-api/errors#payload_too_large)
- [`idempotency_key_unsupported`](https://map.audio/developers/music-api/errors#idempotency_key_unsupported)
