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

# API

<video autoPlay muted loop playsInline className="w-full aspect-video rounded-xl" src="https://mintcdn.com/ksg-ea85c748/0ZS1XLTR45auAsfu/videos/vivi_apichannel.mp4?fit=max&auto=format&n=0ZS1XLTR45auAsfu&q=85&s=e92f4969e9cd0ed19057d9dc49d4e5d5" data-path="videos/vivi_apichannel.mp4" />

An **API** allows external systems to communicate directly with your agent through secure, programmatic endpoints. This channel enables integration of your VIVI agent into custom applications, backend systems, or third-party workflows using standard HTTP-based requests.

When you create a new API channel, VIVI generates a unique set of credentials and documentation including a channel ID and API key. You’ll also receive auto-generated OpenAPI/Swagger documentation that details the available endpoints, request structures, and required parameters.

***

## Endpoints

In order to test the endpoints, you will need to assign your API channel to an agent. Once assigned, head back to the API channel page and click **Test** to view the testing window. VIVI provides five endpoints:

<Tabs>
  <Tab title="Stream Messages">
    <ParamField path="POST">
      `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/stream` \
      This endpoint allows you to **stream a single message** in a conversation channel.
    </ParamField>

    <ParamField path="apiKey" type="string" required>
      The API key given to you when creating your API channel.
    </ParamField>

    <ParamField path="channelId" type="string" required>
      The Channel ID given to you when creating your API channel.
    </ParamField>

    <ParamField path="message" type="string" required>
      The test message that you'd like to send to the agent.
    </ParamField>

    <ParamField path="threadId" type="UUID" required>
      The custom thread ID to use for the conversation.
    </ParamField>

    <ParamField path="userId" type="UUID">
      The custom user ID that will be associated with this user.
    </ParamField>

    <ParamField path="attachedFiles" type="string">
      The URL you received from the `Upload Conversation Files` endpoint.
    </ParamField>

    Request

    <CodeGroup>
      ```python Python theme={null}
      import requests

      channelId = "channelId"
      apiKey = "apiKey"

      url = f"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/stream"

      headers = {
          "Content-Type": "application/json",
          "vivi-api-key": apiKey
      }

      data = {
          "message": "your sample message",
          "threadId": "conversationId",
          "userId": None, # optional
      	"attachedFiles": None # alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
      }

      response = requests.post(url, headers=headers, json=data, stream=True)

      for line in response.iter_lines():
          if line:
              print(line.decode("utf-8"))
      ```

      ```javascript Javascript theme={null}
      const channelId = "channelId";
      const apiKey = "apiKey";

      const url = `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/${channelId}/stream`;

      const options = {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'vivi-api-key': apiKey
        },
        body: JSON.stringify({
          message: "your sample message",
          threadId: "conversationId",
          userId: null, // optional
      	attachedFiles: null // alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
        })
      };

      async function main() {
        try {
          const response = await fetch(url, options);
          const reader = response.body.getReader();
          const decoder = new TextDecoder();

          while (true) {
            const { done, value } = await reader.read();
            if (done) break;
            const chunk = decoder.decode(value);
            console.log(chunk);
          }
        } catch (error) {
          console.error(error);
        }
      }

      main();
      ```

      ```c# C# theme={null}
      using System;
      using System.Net.Http;
      using System.Text;
      using System.Text.Json;
      using System.Threading.Tasks;

      class Program
      {
          static async Task Main()
          {
              string channelId = "channelId";
              string apiKey = "apiKey";
              string url = $"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/stream";
          
              using var client = new HttpClient();
              client.DefaultRequestHeaders.Add("vivi-api-key", apiKey);
          
              var requestBody = new
              {
                  message = "your sample message",
                  threadId = "conversationId",
                  userId = (string)null, // optional 
      			attachedFiles = (string)null // alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
              };
          
              var json = JsonSerializer.Serialize(requestBody);
              var content = new StringContent(json, Encoding.UTF8, "application/json");
          
              try
              {
                  var response = await client.PostAsync(url, content);
                  response.EnsureSuccessStatusCode();
              
                  using var stream = await response.Content.ReadAsStreamAsync();
                  using var reader = new System.IO.StreamReader(stream);
              
                  while (!reader.EndOfStream)
                  {
                      string line = await reader.ReadLineAsync();
                      if (!string.IsNullOrEmpty(line))
                      {
                          Console.WriteLine(line);
                      }
                  }
              }
              catch (HttpRequestException e)
              {
                  Console.WriteLine($"Request error: {e.Message}");
              }
          }
      }
      ```
    </CodeGroup>

    <Note>
      Don't forget to swap the **apiKey** and **channelId** with your credentials.
    </Note>

    Response

    <CodeGroup>
      ```python Python theme={null}
      data: {"message": "", "event": "on_chat_model_start"}
      data: {"message": "Hello", "event": "on_chat_model_stream"}
      data: {"message":"","event":"on_chat_model_end"}
      ```

      ```javascript Javascript theme={null}
      data: {"message":"","event":"on_chat_model_start"}
      data: {"message":"Hello","event":"on_chat_model_stream"}
      data: {"message":"","event":"on_chat_model_end"}
      ```

      ```C# C# theme={null}
      data: {"message":"","event":"on_chat_model_start"}
      data: {"message":"Hello","event":"on_chat_model_stream"}
      data: {"message":"","event":"on_chat_model_end"}
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Invoke Messages">
    <ParamField path="POST">
      `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/invoke` \
      This endpoint allows you to **receive the full message at one time** instead of streaming it incrementally.
    </ParamField>

    <ParamField path="apiKey" type="string" required>
      The API key given to you when creating your API channel.
    </ParamField>

    <ParamField path="channelId" type="string" required>
      The Channel ID given to you when creating your API channel.
    </ParamField>

    <ParamField path="message" type="string" required>
      The test message that you'd like to send to the agent.
    </ParamField>

    <ParamField path="threadId" type="UUID" required>
      The custom thread ID to use for the conversation.
    </ParamField>

    <ParamField path="userId" type="UUID">
      The custom user ID that will be associated with this user.
    </ParamField>

    <ParamField path="attachedFiles" type="string">
      The URL you received from the `Upload Conversation Files` endpoint.
    </ParamField>

    Request

    <CodeGroup>
      ```python Python theme={null}
      import requests

      channelId = "channelId"
      apiKey = "apiKey"

      url = f"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/invoke"

      headers = {
          "Content-Type": "application/json",
          "vivi-api-key": apiKey
      }

      data = {
          "message": "your sample message",
          "threadId": "conversationId",
          "userId": None, # optional
      	"attachedFiles": None # alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
      }

      response = requests.post(url, headers=headers, json=data)

      try:
          print(response.json())
      except Exception:
          print(response.text)
      ```

      ```javascript Javascript theme={null}
      const channelId = "channelId";
      const apiKey = "apiKey";

      const url = `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/${channelId}/invoke`;

      const options = {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'vivi-api-key': apiKey
        },
        body: JSON.stringify({
          message: "your sample message",
          threadId: "conversationId",
          userId: null, // optional
      	attachedFiles: null // alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
        })
      };

      async function main() {
        try {
          const response = await fetch(url, options);
          const reader = response.body.getReader();
          const decoder = new TextDecoder();

          while (true) {
            const { done, value } = await reader.read();
            if (done) break;
            const chunk = decoder.decode(value);
            console.log(chunk);
          }
        } catch (error) {
          console.error(error);
        }
      }

      main();
      ```

      ```c# C# theme={null}
      using System;
      using System.Net.Http;
      using System.Text;
      using System.Text.Json;
      using System.Threading.Tasks;

      class Program
      {
          static async Task Main()
          {
              string channelId = "channelId";
              string apiKey = "apiKey";
              string url = $"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/invoke";
          
              using var client = new HttpClient();
              client.DefaultRequestHeaders.Add("vivi-api-key", apiKey);
          
              var requestBody = new
              {
                  message = "your sample message",
                  threadId = "conversationId",
                  userId = (string)null, // optional
      			attachedFiles = (string)null // alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
              };
          
              var json = JsonSerializer.Serialize(requestBody);
              var content = new StringContent(json, Encoding.UTF8, "application/json");
          
              try
              {
                  var response = await client.PostAsync(url, content);
                  response.EnsureSuccessStatusCode();
                  string responseBody = await response.Content.ReadAsStringAsync();
                  Console.WriteLine(responseBody);
              }
              catch (HttpRequestException e)
              {
                  Console.WriteLine($"Request error: {e.Message}");
              }
          }
      }
      ```
    </CodeGroup>

    <Note>
      Don't forget to swap the **apiKey** and **channelId** with your credentials.
    </Note>

    Response

    <CodeGroup>
      ```python Python theme={null}
      {'message': "Hello world!",'event': None}
      ```

      ```javascript Javascript theme={null}
      {"message": "Hello world!", "event": null}
      ```

      ```c# C# theme={null}
      {"message":"Hello world!","event":null}
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Batch Messages">
    <ParamField path="POST">
      `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/batch` \
      This endpoint allows you to **send multiple messages at one time**.
    </ParamField>

    <ParamField path="apiKey" type="string" required>
      The API key given to you when creating your API channel.
    </ParamField>

    <ParamField path="channelId" type="string" required>
      The Channel ID given to you when creating your API channel.
    </ParamField>

    <ParamField path="message" type="string" required>
      The test message that you'd like to send to the agent.
    </ParamField>

    <ParamField path="threadId" type="UUID" required>
      The custom thread ID to use for the conversation.
    </ParamField>

    <ParamField path="userId" type="UUID">
      The custom user ID that will be associated with this user.
    </ParamField>

    <ParamField path="attachedFiles" type="string">
      The URL you received from the `Upload Conversation Files` endpoint.
    </ParamField>

    Request

    <CodeGroup>
      ```python Python theme={null}
      import requests

      channelId = "channelId"
      apiKey = "apiKey"

      url = f"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/batch"

      headers = {
          "Content-Type": "application/json",
          "vivi-api-key": apiKey
      }

      data = [{
          "message": "your sample message",
          "threadId": "conversationId",
          "userId": None, # optional
      	"attachedFiles": None # alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
      }]

      response = requests.post(url, headers=headers, json=data)

      for line in response.iter_lines():
          if line:
              print(line.decode("utf-8"))
      ```

      ```javascript Javascript theme={null}
      const channelId = "channelId";
      const apiKey = "apiKey";

      const url = `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/${channelId}/batch`;

      const body = [
        {
          message: "your sample message",
          threadId: "conversationId",
          userId: null, // optional
      	attachedFiles: null // alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
        }
      ];

      const options = {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'vivi-api-key': apiKey
        },
      body: JSON.stringify(body)
      };

      async function main() {
        try {
          const response = await fetch(url, options);
          const json = await response.json();
          console.log(json);
        } catch (error) {
          console.error(error);
        }
      }

      main();
      ```

      ```c# C# theme={null}
      using System;
      using System.Net.Http;
      using System.Text;
      using System.Text.Json;
      using System.Threading.Tasks;

      class Program
      {
          static async Task Main()
          {
              string channelId = "channelId";
              string apiKey = "apiKey";
              string url = $"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/batch";
          
              using var client = new HttpClient();
              client.DefaultRequestHeaders.Add("vivi-api-key", apiKey);
          
              var requestBody = new[]
              {
                  new
                  {
                      message = "your sample message",
                      threadId = "conversationId",
                      userId = (string)null, // optional
      				attachedFiles = (string)null // alternatively, if you uploaded files, insert the Uploaded Files URL here, ex: ['https://urlpath']
                  }
              };
          
              var json = JsonSerializer.Serialize(requestBody);
              var content = new StringContent(json, Encoding.UTF8, "application/json");
          
              try
              {
                  var response = await client.PostAsync(url, content);
                  response.EnsureSuccessStatusCode();
                  string responseBody = await response.Content.ReadAsStringAsync();
                  Console.WriteLine(responseBody);
              }
              catch (HttpRequestException e)
              {
                  Console.WriteLine($"Request error: {e.Message}");
              }
          }
      }
      ```
    </CodeGroup>

    <Note>
      Don't forget to swap the **apiKey** and **channelId** with your credentials.
    </Note>

    Response

    <CodeGroup>
      ```python Python theme={null}
      [{"message":"Hello world!","event":null},
      {"message":"Hello world again!","event":null}]
      ```

      ```javascript Javascript theme={null}
      [{message: 'Hello world!', event: null},
      {message: 'Hello world again!',event: null}]
      ```

      ```c# C# theme={null}
      [{"message": "Hello world!","event": null},
      {"message": "Hello world again!","event": null}]
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Files">
    ## Upload Conversation Files

    <ParamField path="POST">
      `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/files` \
      This endpoint allows you to **upload files** to use during your conversation.
    </ParamField>

    <ParamField path="apiKey" type="string" required>
      The API key given to you when creating your API channel.
    </ParamField>

    <ParamField path="channelId" type="string" required>
      The Channel ID given to you when creating your API channel.
    </ParamField>

    Request

    <CodeGroup>
      ```python Python theme={null}
      import requests

      channelId = "channelId"
      apiKey = "apiKey"

      url = f"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/files"

      headers = {
          "vivi-api-key": apiKey
      }

      # Replace 'test_document.pdf' with actual file path
      files = {'files': open('test_document.pdf', 'rb')}

      response = requests.post(url, headers=headers, files=files)
      print(f"Status Code: {response.status_code}")
      if response.status_code == 201:
          data = response.json()
          print("Uploaded Files:", data.get("uploadedFiles", []))
      else:
          print("Error:", response.text)

      files['files'].close()
      ```

      ```javascript Javascript theme={null}
      import fs from "fs";
      import FormData from "form-data";
      import fetch from "node-fetch";

      const channelId = "channelId";
      const apiKey = "apiKey";

      const url = `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/${channelId}/files`;

      const formData = new FormData();
      formData.append("files", fs.createReadStream("test_document.pdf")); // Replace "test_document.pdf" with actual file path

      const options = {
        method: "POST",
        headers: {
          "vivi-api-key": apiKey,
          ...formData.getHeaders(),
        },
        body: formData,
      };

      async function main() {
        try {
          const response = await fetch(url, options);
          console.log(`Status Code: ${response.status}`);

          if (response.status === 201) {
            const data = await response.json();
            console.log("Uploaded Files:", data.uploadedFiles || []);
          } else {
            const errorText = await response.text();
            console.error("Error:", errorText);
          }
        } catch (error) {
          console.error("Request failed:", error);
        }
      }

      main();

      ```

      ```c# C# theme={null}
      using System;
      using System.IO;
      using System.Net.Http;
      using System.Net.Http.Headers;
      using System.Threading.Tasks;

      class Program
      {
          static async Task Main()
          {
              string channelId = "channelId";
              string apiKey = "apiKey";

              string url = $"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/files";
              string filePath = "test_document.pdf"; // Replace "test_document.pdf" with actual file path

              using (var httpClient = new HttpClient())
              using (var form = new MultipartFormDataContent())
              {
                  httpClient.DefaultRequestHeaders.Add("vivi-api-key", apiKey);
                  var fileStream = File.OpenRead(filePath);
                  var fileContent = new StreamContent(fileStream);
                  fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf");
                  form.Add(fileContent, "files", Path.GetFileName(filePath));

                  Console.WriteLine("Uploading file...");

                  var response = await httpClient.PostAsync(url, form);
                  Console.WriteLine($"Status Code: {(int)response.StatusCode}");

                  if (response.IsSuccessStatusCode)
                  {
                      string json = await response.Content.ReadAsStringAsync();
                      Console.WriteLine("Uploaded Files Response:");
                      Console.WriteLine(json);
                  }
                  else
                  {
                      string error = await response.Content.ReadAsStringAsync();
                      Console.WriteLine("Error:");
                      Console.WriteLine(error);
                  }

                  fileStream.Close();
              }
          }
      }
      ```
    </CodeGroup>

    <Note>
      Don't forget to swap the **apiKey** and **channelId** with your credentials.
    </Note>

    Response

    <CodeGroup>
      ```python Python theme={null}
      Status Code: 201
      Uploaded Files: [fileURL]
      ```

      ```javascript Javascript theme={null}
      Status Code: 201
      Uploaded Files: [fileURL]
      ```

      ```c# C# theme={null}
      Uploading file...
      Status Code: 201
      Uploaded Files Response:
      {"uploadedFiles":[fileURL]}
      ```
    </CodeGroup>

    ## Get Files Extensions

    <ParamField path="GET">
      `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/files/extensions` \
      This endpoint allows you to **verify available file extensions**.
    </ParamField>

    <ParamField path="apiKey" type="string" required>
      The API key given to you when creating your API channel.
    </ParamField>

    <ParamField path="channelId" type="string" required>
      The Channel ID given to you when creating your API channel.
    </ParamField>

    Request

    <CodeGroup>
      ```python Python theme={null}
        import requests

        channelId = "channelId"
        apiKey = "apiKey"

        url = f"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/files/extensions"

        headers = {
        "vivi-api-key": apiKey
        }

      response = requests.get(url, headers=headers)
      print(f"Status Code: {response.status_code}")
      if response.status_code == 200:
        data = response.json()
        print("Supported Extensions:", data.get("supportedFileExtensions", []))
      else:
        print("Error:", response.text)
      ```

      ```Javascript Javascript theme={null}
      const channelId = "channelId";
      const apiKey = "apiKey";

      const url = `https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/${channelId}/files/extensions`;

      const options = {
        method: "GET",
        headers: {
          "vivi-api-key": apiKey
        }
      };

      async function main() {
        try {
          const response = await fetch(url, options);
          console.log(`Status Code: ${response.status}`);

          if (response.status === 200) {
            const data = await response.json();
            console.log("Supported Extensions:", data.supportedFileExtensions || []);
          } else {
          const errorText = await response.text();
          console.error("Error:", errorText);
          }
        } catch (error) {
          console.error("Request failed:", error);
        }
      }

      main();
      ```

      ```C# C# theme={null}
      using System;
      using System.Net.Http;
      using System.Threading.Tasks;

      class Program
      {
          static async Task Main()
          {
              string channelId = "channelId";
              string apiKey = "apiKey";

              string url = $"https://api-prod-d1d739d4-c24f-59dc-865b-e630d70bf11b.vivi.bot/channelsApi/{channelId}/files/extensions";

              using (var httpClient = new HttpClient())
              {
                  httpClient.DefaultRequestHeaders.Add("vivi-api-key", apiKey);

                  Console.WriteLine("Fetching supported file extensions...");

                  var response = await httpClient.GetAsync(url);
                  Console.WriteLine($"Status Code: {(int)response.StatusCode}");

                  if (response.IsSuccessStatusCode)
                  {
                      string json = await response.Content.ReadAsStringAsync();
                      Console.WriteLine("Supported Extensions:");
                      Console.WriteLine(json);
                  }
                  else
                  {
                      string error = await response.Content.ReadAsStringAsync();
                      Console.WriteLine("Error:");
                      Console.WriteLine(error);
                  }
              }
          }
      }
      ```
    </CodeGroup>

    <Note>
      Don't forget to swap the **apiKey** and **channelId** with your credentials.
    </Note>

    Response

    <CodeGroup>
      ```python Python theme={null}
      Status Code: 200
      Supported Extensions: [{'extension': '.mp3', 'maxFileSizeInMb': 20, 'mimeType': 'audio/mpeg', 'category': 'audio'}, {'extension': '.wav', 'maxFileSizeInMb': 20, 'mimeType': 'audio/x-wav', 'category': 'audio'}, {'extension': '.pdf', 'maxFileSizeInMb': 10, 'mimeType': 'application/pdf', 'category': 'formatted_docs'}, {'extension': '.xls', 'maxFileSizeInMb': 10, 'mimeType': 'application/vnd.ms-excel', 'category': 'formatted_docs'}, {'extension': '.xlsx', 'maxFileSizeInMb': 10, 'mimeType': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'category': 'formatted_docs'}, {'extension': '.docx', 'maxFileSizeInMb': 10, 'mimeType': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'category': 'formatted_docs'}, {'extension': '.pptx', 'maxFileSizeInMb': 10, 'mimeType': 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'category': 'formatted_docs'}, {'extension': '.bmp', 'maxFileSizeInMb': 20, 'mimeType': 'image/bmp', 'category': 'image'}, {'extension': '.gif', 'maxFileSizeInMb': 20, 'mimeType': 'image/gif', 'category': 'image'}, {'extension': '.jpeg', 'maxFileSizeInMb': 20, 'mimeType': 'image/jpeg', 'category': 'image'}, {'extension': '.jpg', 'maxFileSizeInMb': 20, 'mimeType': 'image/jpeg', 'category': 'image'}, {'extension': '.png', 'maxFileSizeInMb': 20, 'mimeType': 'image/png', 'category': 'image'}, {'extension': '.svg', 'maxFileSizeInMb': 20, 'mimeType': 'image/svg+xml', 'category': 'image'}, {'extension': '.tiff', 'maxFileSizeInMb': 20, 'mimeType': 'image/tiff', 'category': 'image'}, {'extension': '.webp', 'maxFileSizeInMb': 20, 'mimeType': 'image/webp', 'category': 'image'}, {'extension': '.heif', 'maxFileSizeInMb': 20, 'mimeType': 'image/heif', 'category': 'image'}, {'extension': '.txt', 'maxFileSizeInMb': 3, 'mimeType': 'text/plain', 'category': 'lightweight_text'}, {'extension': '.md', 'maxFileSizeInMb': 3, 'mimeType': 'text/markdown', 'category': 'lightweight_text'}, {'extension': '.py', 'maxFileSizeInMb': 3, 'mimeType': 'text/x-python', 'category': 'lightweight_text'}, {'extension': '.go', 'maxFileSizeInMb': 3, 'mimeType': 'text/x-go', 'category': 'lightweight_text'}, {'extension': '.csv', 'maxFileSizeInMb': 3, 'mimeType': 'text/csv', 'category': 'lightweight_text'}, {'extension': '.tsv', 'maxFileSizeInMb': 3, 'mimeType': 'text/tab-separated-values', 'category': 'lightweight_text'}, {'extension': '.html', 'maxFileSizeInMb': 3, 'mimeType': 'text/html', 'category': 'lightweight_text'}, {'extension': '.htm', 'maxFileSizeInMb': 3, 'mimeType': 'text/html', 'category': 'lightweight_text'}, {'extension': '.xml', 'maxFileSizeInMb': 3, 'mimeType': 'application/xml', 'category': 'lightweight_text'}, {'extension': '.json', 'maxFileSizeInMb': 3, 'mimeType': 'application/json', 'category': 'lightweight_text'}, {'extension': '.ndjson', 'maxFileSizeInMb': 3, 'mimeType': 'application/x-ndjson', 'category': 'lightweight_text'}, {'extension': '.yaml', 'maxFileSizeInMb': 3, 'mimeType': 'application/yaml', 'category': 'lightweight_text'}, {'extension': '.yml', 'maxFileSizeInMb': 3, 'mimeType': 'application/yaml', 'category': 'lightweight_text'}, {'extension': '.epub', 'maxFileSizeInMb': 3, 'mimeType': 'application/epub+zip', 'category': 'lightweight_text'}, {'extension': '.eml', 'maxFileSizeInMb': 3, 'mimeType': 'message/rfc822', 'category': 'lightweight_text'}, {'extension': '.p7s', 'maxFileSizeInMb': 3, 'mimeType': 'application/pkcs7-signature', 'category': 'lightweight_text'}, {'extension': '.msg', 'maxFileSizeInMb': 3, 'mimeType': 'application/vnd.ms-outlook', 'category': 'lightweight_text'}, {'extension': '.pst', 'maxFileSizeInMb': 3, 'mimeType': 'application/vnd.ms-outlook-pst', 'category': 'lightweight_text'}, {'extension': '.ipynb', 'maxFileSizeInMb': 3, 'mimeType': 'application/x-ipynb+json', 'category': 'lightweight_text'}]
      ```

      ```javascript Javascript theme={null}
      Status Code: 200
      Supported Extensions: [
      {
        extension: '.mp3',
        maxFileSizeInMb: 20,
        mimeType: 'audio/mpeg',
        category: 'audio'
      },
      {
        extension: '.wav',
        maxFileSizeInMb: 20,
        mimeType: 'audio/x-wav',
        category: 'audio'
      },
      {
        extension: '.pdf',
        maxFileSizeInMb: 10,
        mimeType: 'application/pdf',
        category: 'formatted_docs'
      },
      {
        extension: '.xls',
        maxFileSizeInMb: 10,
        mimeType: 'application/vnd.ms-excel',
        category: 'formatted_docs'
      },
      {
        extension: '.xlsx',
        maxFileSizeInMb: 10,
        mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        category: 'formatted_docs'
      },
      {
        extension: '.docx',
        maxFileSizeInMb: 10,
        mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        category: 'formatted_docs'
      },
      {
        extension: '.pptx',
        maxFileSizeInMb: 10,
        mimeType: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
        category: 'formatted_docs'
      },
      {
        extension: '.bmp',
        maxFileSizeInMb: 20,
        mimeType: 'image/bmp',
        category: 'image'
      },
      {
        extension: '.gif',
        maxFileSizeInMb: 20,
        mimeType: 'image/gif',
        category: 'image'
      },
      {
        extension: '.jpeg',
        maxFileSizeInMb: 20,
        mimeType: 'image/jpeg',
        category: 'image'
      },
      {
        extension: '.jpg',
        maxFileSizeInMb: 20,
        mimeType: 'image/jpeg',
        category: 'image'
      },
      {
        extension: '.png',
        maxFileSizeInMb: 20,
        mimeType: 'image/png',
        category: 'image'
      },
      {
        extension: '.svg',
        maxFileSizeInMb: 20,
        mimeType: 'image/svg+xml',
        category: 'image'
      },
      {
        extension: '.tiff',
        maxFileSizeInMb: 20,
        mimeType: 'image/tiff',
        category: 'image'
      },
      {
        extension: '.webp',
        maxFileSizeInMb: 20,
        mimeType: 'image/webp',
        category: 'image'
      },
      {
        extension: '.heif',
        maxFileSizeInMb: 20,
        mimeType: 'image/heif',
        category: 'image'
      },
      {
        extension: '.txt',
        maxFileSizeInMb: 3,
        mimeType: 'text/plain',
        category: 'lightweight_text'
      },
      {
        extension: '.md',
        maxFileSizeInMb: 3,
        mimeType: 'text/markdown',
        category: 'lightweight_text'
      },
      {
        extension: '.py',
        maxFileSizeInMb: 3,
        mimeType: 'text/x-python',
        category: 'lightweight_text'
      },
      {
        extension: '.go',
        maxFileSizeInMb: 3,
        mimeType: 'text/x-go',
        category: 'lightweight_text'
      },
      {
        extension: '.csv',
        maxFileSizeInMb: 3,
        mimeType: 'text/csv',
        category: 'lightweight_text'
      },
      {
        extension: '.tsv',
        maxFileSizeInMb: 3,
        mimeType: 'text/tab-separated-values',
        category: 'lightweight_text'
      },
      {
        extension: '.html',
        maxFileSizeInMb: 3,
        mimeType: 'text/html',
        category: 'lightweight_text'
      },
      {
        extension: '.htm',
        maxFileSizeInMb: 3,
        mimeType: 'text/html',
        category: 'lightweight_text'
      },
      {
        extension: '.xml',
        maxFileSizeInMb: 3,
        mimeType: 'application/xml',
        category: 'lightweight_text'
      },
      {
        extension: '.json',
        maxFileSizeInMb: 3,
        mimeType: 'application/json',
        category: 'lightweight_text'
      },
      {
        extension: '.ndjson',
        maxFileSizeInMb: 3,
        mimeType: 'application/x-ndjson',
        category: 'lightweight_text'
      },
      {
        extension: '.yaml',
        maxFileSizeInMb: 3,
        mimeType: 'application/yaml',
        category: 'lightweight_text'
      },
      {
        extension: '.yml',
        maxFileSizeInMb: 3,
        mimeType: 'application/yaml',
        category: 'lightweight_text'
      },
      {
        extension: '.epub',
        maxFileSizeInMb: 3,
        mimeType: 'application/epub+zip',
        category: 'lightweight_text'
      },
      {
        extension: '.eml',
        maxFileSizeInMb: 3,
        mimeType: 'message/rfc822',
        category: 'lightweight_text'
      },
      {
        extension: '.p7s',
        maxFileSizeInMb: 3,
        mimeType: 'application/pkcs7-signature',
        category: 'lightweight_text'
      },
      {
        extension: '.msg',
        maxFileSizeInMb: 3,
        mimeType: 'application/vnd.ms-outlook',
        category: 'lightweight_text'
      },
      {
        extension: '.pst',
        maxFileSizeInMb: 3,
        mimeType: 'application/vnd.ms-outlook-pst',
        category: 'lightweight_text'
      },
      {
        extension: '.ipynb',
        maxFileSizeInMb: 3,
        mimeType: 'application/x-ipynb+json',
        category: 'lightweight_text'
      }
      ]
      ```

      ```c# C# theme={null}
      Fetching supported file extensions...
      Status Code: 200
      Supported Extensions:
      {"supportedFileExtensions":[{"extension":".mp3","maxFileSizeInMb":20,"mimeType":"audio/mpeg","category":"audio"},{"extension":".wav","maxFileSizeInMb":20,"mimeType":"audio/x-wav","category":"audio"},{"extension":".pdf","maxFileSizeInMb":10,"mimeType":"application/pdf","category":"formatted_docs"},{"extension":".xls","maxFileSizeInMb":10,"mimeType":"application/vnd.ms-excel","category":"formatted_docs"},{"extension":".xlsx","maxFileSizeInMb":10,"mimeType":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","category":"formatted_docs"},{"extension":".docx","maxFileSizeInMb":10,"mimeType":"application/vnd.openxmlformats-officedocument.wordprocessingml.document","category":"formatted_docs"},{"extension":".pptx","maxFileSizeInMb":10,"mimeType":"application/vnd.openxmlformats-officedocument.presentationml.presentation","category":"formatted_docs"},{"extension":".bmp","maxFileSizeInMb":20,"mimeType":"image/bmp","category":"image"},{"extension":".gif","maxFileSizeInMb":20,"mimeType":"image/gif","category":"image"},{"extension":".jpeg","maxFileSizeInMb":20,"mimeType":"image/jpeg","category":"image"},{"extension":".jpg","maxFileSizeInMb":20,"mimeType":"image/jpeg","category":"image"},{"extension":".png","maxFileSizeInMb":20,"mimeType":"image/png","category":"image"},{"extension":".svg","maxFileSizeInMb":20,"mimeType":"image/svg+xml","category":"image"},{"extension":".tiff","maxFileSizeInMb":20,"mimeType":"image/tiff","category":"image"},{"extension":".webp","maxFileSizeInMb":20,"mimeType":"image/webp","category":"image"},{"extension":".heif","maxFileSizeInMb":20,"mimeType":"image/heif","category":"image"},{"extension":".txt","maxFileSizeInMb":3,"mimeType":"text/plain","category":"lightweight_text"},{"extension":".md","maxFileSizeInMb":3,"mimeType":"text/markdown","category":"lightweight_text"},{"extension":".py","maxFileSizeInMb":3,"mimeType":"text/x-python","category":"lightweight_text"},{"extension":".go","maxFileSizeInMb":3,"mimeType":"text/x-go","category":"lightweight_text"},{"extension":".csv","maxFileSizeInMb":3,"mimeType":"text/csv","category":"lightweight_text"},{"extension":".tsv","maxFileSizeInMb":3,"mimeType":"text/tab-separated-values","category":"lightweight_text"},{"extension":".html","maxFileSizeInMb":3,"mimeType":"text/html","category":"lightweight_text"},{"extension":".htm","maxFileSizeInMb":3,"mimeType":"text/html","category":"lightweight_text"},{"extension":".xml","maxFileSizeInMb":3,"mimeType":"application/xml","category":"lightweight_text"},{"extension":".json","maxFileSizeInMb":3,"mimeType":"application/json","category":"lightweight_text"},{"extension":".ndjson","maxFileSizeInMb":3,"mimeType":"application/x-ndjson","category":"lightweight_text"},{"extension":".yaml","maxFileSizeInMb":3,"mimeType":"application/yaml","category":"lightweight_text"},{"extension":".yml","maxFileSizeInMb":3,"mimeType":"application/yaml","category":"lightweight_text"},{"extension":".epub","maxFileSizeInMb":3,"mimeType":"application/epub+zip","category":"lightweight_text"},{"extension":".eml","maxFileSizeInMb":3,"mimeType":"message/rfc822","category":"lightweight_text"},{"extension":".p7s","maxFileSizeInMb":3,"mimeType":"application/pkcs7-signature","category":"lightweight_text"},{"extension":".msg","maxFileSizeInMb":3,"mimeType":"application/vnd.ms-outlook","category":"lightweight_text"},{"extension":".pst","maxFileSizeInMb":3,"mimeType":"application/vnd.ms-outlook-pst","category":"lightweight_text"},{"extension":".ipynb","maxFileSizeInMb":3,"mimeType":"application/x-ipynb+json","category":"lightweight_text"}]}
      ```
    </CodeGroup>
  </Tab>
</Tabs>

***

## Best Practices

* Keep your API key **secret** and rotate it if you suspect exposure.
* Always **test endpoints** using the provided tools before connecting production systems.
