---
title: "Send video"
description: "Send video messages with an optional caption."
---

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

# Send video

Send short clips or demos with an optional caption — product walkthroughs, tutorials, or status updates with video.

## At a glance

| Item | Detail |
| --- | --- |
| `type` | `video` |
| Supported formats | MP4, 3GP |
| Maximum file size | 16 MB |
| Media field | `content.media_url` (aliases: `media`, `url`) |
| Caption | Optional `content.caption` |
| Channel support | Official and unofficial |

:::warning
Use a direct HTTPS URL to the video file. Hosting pages that require redirects or authentication often fail delivery.
:::

## Request body

| Field | Required | Description |
| --- | --- | --- |
| `channel_id` | Yes | Sender channel ID |
| `to` | Yes | Recipient phone number |
| `type` | Yes | `video` |
| `content.media_url` | Yes | HTTPS URL to the video file |
| `content.caption` | No | Optional caption text |

## Example

### cURL

```bash
curl -X POST "https://api.wazapin.com/v1/messages" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
"channel_id": "wzp_abc123",
"to": "6281234567890",
"type": "video",
"content": {
  "media_url": "https://cdn.example.com/videos/product-demo.mp4",
  "caption": "Ini video cara pakainya"
}
  }'
```
### TypeScript

```typescript
import { WazapinClient, videoMessage } from "@wazapin/sdk";

const wazapin = new WazapinClient({ apiKey: process.env.WAZAPIN_API_KEY! });

await wazapin.messages.send(
  videoMessage({
channel_id: "wzp_abc123",
to: "6281234567890",
media_url: "https://cdn.example.com/videos/product-demo.mp4",
caption: "Ini video cara pakainya",
  }),
);
```
### Python

```python
import requests

requests.post(
"https://api.wazapin.com/v1/messages",
headers={"X-Api-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json={
    "channel_id": "wzp_abc123",
    "to": "6281234567890",
    "type": "video",
    "content": {
        "media_url": "https://cdn.example.com/videos/product-demo.mp4",
        "caption": "Ini video cara pakainya",
    },
},
timeout=30,
).raise_for_status()
```
### Go

```go
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	body := []byte(`{
  "channel_id": "wzp_abc123",
  "to": "6281234567890",
  "type": "video",
  "content": {
"media_url": "https://cdn.example.com/videos/product-demo.mp4",
"caption": "Ini video cara pakainya"
  }
}`)

	req, err := http.NewRequest(http.MethodPost, "https://api.wazapin.com/v1/messages", bytes.NewReader(body))
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-Api-Key", os.Getenv("WAZAPIN_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
	out, _ := io.ReadAll(resp.Body)
	fmt.Println(resp.StatusCode, string(out))
}
```

### PHP

```php
<?php

$payload = '{
  "channel_id": "wzp_abc123",
  "to": "6281234567890",
  "type": "video",
  "content": {
"media_url": "https://cdn.example.com/videos/product-demo.mp4",
"caption": "Ini video cara pakainya"
  }
}';

$ch = curl_init("https://api.wazapin.com/v1/messages");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"X-Api-Key: " . getenv("WAZAPIN_API_KEY"),
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
echo $httpCode . "\n" . $response . "\n";
```

### Java

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class SendMessage {
public static void main(String[] args) throws Exception {
    String body = """
            {"channel_id": "wzp_abc123", "to": "6281234567890", "type": "video", "content": {"media_url": "https://cdn.example.com/videos/product-demo.mp4", "caption": "Ini video cara pakainya"}}
            """;

    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.wazapin.com/v1/messages"))
            .header("X-Api-Key", System.getenv("WAZAPIN_API_KEY"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build();

    HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());

    // 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
    System.out.println(response.statusCode());
    System.out.println(response.body());
}
}
```

### Ruby

```ruby
require "net/http"
require "uri"

uri = URI("https://api.wazapin.com/v1/messages")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["X-Api-Key"] = ENV["WAZAPIN_API_KEY"]
request.body = '{"channel_id": "wzp_abc123", "to": "6281234567890", "type": "video", "content": {"media_url": "https://cdn.example.com/videos/product-demo.mp4", "caption": "Ini video cara pakainya"}}'

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

# 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
puts response.code
puts response.body
```

### C#

```csharp
using System.Net.Http;
using System.Text;

var body = "{\"channel_id\": \"wzp_abc123\", \"to\": \"6281234567890\", \"type\": \"video\", \"content\": {\"media_url\": \"https://cdn.example.com/videos/product-demo.mp4\", \"caption\": \"Ini video cara pakainya\"}}";

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Api-Key", Environment.GetEnvironmentVariable("WAZAPIN_API_KEY"));

var response = await client.PostAsync(
"https://api.wazapin.com/v1/messages",
new StringContent(body, Encoding.UTF8, "application/json"));

// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
```

Source: https://docs.wzpn.net/getting-started/send-video/index.mdx
