> ## Documentation Index
> Fetch the complete documentation index at: https://developers.leadwaycrm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Complete file upload

> Validates the uploaded file in GCS and returns the public URL. Call this endpoint after successfully uploading the file to the signed URL.

Validates the uploaded file in GCS and returns the public URL. Call this endpoint after successfully uploading the file to the signed URL.

```http theme={null}
POST https://services.leadconnectorhq.com/conversations/messages/upload/complete
```

## Autorización

<ParamField header="Authorization" type="string" required>
  Bearer token generado desde el portal Leadway. Ver [Autenticación](/authentication).
</ParamField>

<ParamField header="Version" type="string" required default="2021-07-28">
  Versión de la API.
</ParamField>

## Body

<ParamField body="uploadId" type="string" required default="a1b2c3d4-e5f6-7890-abcd-ef1234567890">
  Upload ID from request response
</ParamField>

<ParamField body="filePath" type="string" required default="account/loc123/conversations/conv456/uuid.mp4">
  File path from request response
</ParamField>

<ParamField body="locationId" type="string" required default="ve9EPM428h8vShlRW1KT">
  Account ID
</ParamField>

<ParamField body="conversationId" type="string" required default="ve9EPM428h8vShlRW1KT">
  Conversation ID
</ParamField>

<ParamField body="filename" type="string" required default="video.mp4">
  Original filename (for response mapping)
</ParamField>

## Respuestas

<Accordion title="200 - Upload completed successfully">
  <ResponseField name="uploadedFiles" type="object" required>
    Map of filename to public URL
  </ResponseField>

  <ResponseField name="metadata" type="object" required>
    File metadata
  </ResponseField>

  ```json theme={null}
  {
    "uploadedFiles": {
      "video.mp4": "https://your-domain.com/conversations-assets/account/.../video.mp4"
    },
    "metadata": {
      "size": 52428800,
      "contentType": "video/mp4"
    }
  }
  ```
</Accordion>

<Accordion title="400 - Bad Request - Invalid parameters" />

<Accordion title="401 - Unauthorized">
  ```json theme={null}
  {}
  ```
</Accordion>

<Accordion title="404 - File not found in storage - upload may have failed or URL expired" />

## Ejemplo

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST 'https://services.leadconnectorhq.com/conversations/messages/upload/complete' \
    -H 'Authorization: Bearer YOUR_TOKEN' \
    -H 'Version: 2021-07-28' \
    -H 'Content-Type: application/json' \
    -d '{
    "uploadId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "filePath": "account/loc123/conversations/conv456/uuid.mp4",
    "locationId": "ve9EPM428h8vShlRW1KT",
    "conversationId": "ve9EPM428h8vShlRW1KT",
    "filename": "video.mp4"
  }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://services.leadconnectorhq.com/conversations/messages/upload/complete', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.LEADWAY_TOKEN}`,
      Version: '2021-07-28',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({"uploadId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "filePath": "account/loc123/conversations/conv456/uuid.mp4", "locationId": "ve9EPM428h8vShlRW1KT", "conversationId": "ve9EPM428h8vShlRW1KT", "filename": "video.mp4"}),
  });
  const data = await response.json();
  ```

  ```python Python theme={null}
  import os, requests
  response = requests.request(
      'POST',
      'https://services.leadconnectorhq.com/conversations/messages/upload/complete',
      headers={
          'Authorization': f"Bearer {os.environ['LEADWAY_TOKEN']}",
          'Version': '2021-07-28',
          'Content-Type': 'application/json',
      },
      json={"uploadId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "filePath": "account/loc123/conversations/conv456/uuid.mp4", "locationId": "ve9EPM428h8vShlRW1KT", "conversationId": "ve9EPM428h8vShlRW1KT", "filename": "video.mp4"},
  )
  data = response.json()
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init('https://services.leadconnectorhq.com/conversations/messages/upload/complete');
  curl_setopt_array($ch, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_HTTPHEADER => [
          'Authorization: Bearer ' . getenv('LEADWAY_TOKEN'),
          'Version: 2021-07-28',
          'Content-Type: application/json',
      ],
      CURLOPT_POSTFIELDS => json_encode({'uploadId': 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', 'filePath': 'account/loc123/conversations/conv456/uuid.mp4', 'locationId': 've9EPM428h8vShlRW1KT', 'conversationId': 've9EPM428h8vShlRW1KT', 'filename': 'video.mp4'}),
  ]);
  $data = json_decode(curl_exec($ch), true);
  ```
</CodeGroup>
