> This page is for version v8.3.0 (default).
> For other versions, use one of these documentation indexes:
> - v8.3.0 (default): https://docs.workflows.com/v-8-3-0/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.workflows.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.workflows.com/_mcp/server.

# upload_file_to_signed_url

UPLOAD

# upload_file_to_signed_url

Uploads a local transcript file to Mind Reasoner's secure cloud storage using a signed URL. The file is uploaded directly from your system to storage.

> **Info**
>
> No data passes through the AI assistant—files go straight from your system to secure cloud storage.

## Parameters

### signedUrl

<table>
  <tr>
    <td>
      **Type**
    </td>

    <td>
      string
    </td>
  </tr>

  <tr>
    <td>
      **Required**
    </td>

    <td>
      Yes
    </td>
  </tr>

  <tr>
    <td>
      **Description**
    </td>

    <td>
      The signed URL from the 

      `get_signed_upload_url`

       response
    </td>
  </tr>
</table>

### filePath

<table>
  <tr>
    <td>
      **Type**
    </td>

    <td>
      string
    </td>
  </tr>

  <tr>
    <td>
      **Required**
    </td>

    <td>
      Yes
    </td>
  </tr>

  <tr>
    <td>
      **Description**
    </td>

    <td>
      Absolute path to your transcript file
    </td>
  </tr>

  <tr>
    <td>
      **Example**
    </td>

    <td>
      `/Users/name/Documents/transcript.vtt`
    </td>
  </tr>
</table>

### contentType

<table>
  <tr>
    <td>
      **Type**
    </td>

    <td>
      string
    </td>
  </tr>

  <tr>
    <td>
      **Required**
    </td>

    <td>
      Yes
    </td>
  </tr>

  <tr>
    <td>
      **Description**
    </td>

    <td>
      MIME type matching your file format
    </td>
  </tr>

  <tr>
    <td>
      **Valid values**
    </td>

    <td>
      `text/vtt`, `application/pdf`, or\

      `application/vnd.openxmlformats-officedocument.wordprocessingml.document`
    </td>
  </tr>
</table>

## Request

```json
{
  "signedUrl": "https://storage.googleapis.com/mind-reasoner/uploads/...",
  "filePath": "/Users/yourname/Documents/transcript.vtt",
  "contentType": "text/vtt"
}
```

## Response

```json
{
  "success": true,
  "message": "File uploaded successfully",
  "uploadedBytes": 1048576,
  "fileName": "transcript.vtt"
}
```

### Response Properties

| Property        | Type    | Description                         |
| --------------- | ------- | ----------------------------------- |
| `success`       | boolean | Upload status (true if successful)  |
| `message`       | string  | Human-readable confirmation message |
| `uploadedBytes` | number  | Size of uploaded file in bytes      |
| `fileName`      | string  | Name of the uploaded file           |

> **Success**
>
> Once you receive a success response, your file is securely stored and ready for processing.

## File Path Requirements

> **Warning**
>
> **Use absolute paths:** `/Users/name/Documents/file.vtt`
>
> **Don't use relative paths:** `./file.vtt` or `../Documents/file.vtt`

Before uploading:

* Verify the file exists at the specified path
* Ensure file permissions allow reading
* Confirm the file isn't corrupted or empty
* Match `contentType` to the actual file extension

## Common Issues

| Issue                 | Cause                        | Solution                                          |
| --------------------- | ---------------------------- | ------------------------------------------------- |
| File not found        | Incorrect path or file moved | Use absolute path; verify file exists             |
| Permission denied     | File is not readable         | Check file permissions; use `chmod 644` if needed |
| Content type mismatch | Wrong MIME type specified    | Ensure content type matches file extension        |
| URL expired           | Signed URL older than 1 hour | Request new URL with `get_signed_upload_url`      |
| File too large        | File exceeds 100MB limit     | Compress or split the file                        |

## Error Responses

#### File Not Found

```json
{
  "error": "File Not Found",
  "message": "No file exists at path '/Users/name/transcript.vtt'"
}
```

**Solution:** Verify the path is correct and use absolute paths, not relative paths. Ensure the file wasn't moved or deleted.

#### Permission Denied

```json
{
  "error": "Permission Denied",
  "message": "Cannot read file at path '/Users/name/transcript.vtt'"
}
```

**Solution:** Check file permissions with `ls -l` and make the file readable with `chmod 644` if needed.

#### Upload Failed

```json
{
  "error": "Upload Failed",
  "message": "Failed to upload file to storage",
  "details": "URL expired or invalid"
}
```

**Solution:** Check if the signed URL expired (1-hour limit) and request a new signed URL if needed.

## Next Steps

#### Create Snapshot

[create_snapshot](/mcp-tool-create-snapshot) - Process the uploaded file into a trained AI model

## See Also

#### [get_signed_upload_url](/mcp-tool-get-signed-upload-url)

Get the signed URL before uploading

#### [create_snapshot](/mcp-tool-create-snapshot)

Next step: Train your AI model