Skip to main content
POST
/
api
/
message
/
files
Enviar Archivos en Mensaje
curl --request POST \
  --url https://api.plazbot.com/api/message/files \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \
  --header 'x-workspace-id: <x-workspace-id>' \
  --form contentFile='@example-file'
import requests

url = "https://api.plazbot.com/api/message/files"

files = { "contentFile": ("example-file", open("example-file", "rb")) }
headers = {
"x-workspace-id": "<x-workspace-id>",
"Authorization": "Bearer <token>"
}

response = requests.post(url, files=files, headers=headers)

print(response.text)
const form = new FormData();
form.append('contentFile', '<string>');

const options = {
method: 'POST',
headers: {'x-workspace-id': '<x-workspace-id>', Authorization: 'Bearer <token>'}
};

options.body = form;

fetch('https://api.plazbot.com/api/message/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.plazbot.com/api/message/files",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contentFile\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data",
"x-workspace-id: <x-workspace-id>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.plazbot.com/api/message/files"

payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contentFile\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("x-workspace-id", "<x-workspace-id>")
req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.plazbot.com/api/message/files")
.header("x-workspace-id", "<x-workspace-id>")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contentFile\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.plazbot.com/api/message/files")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-workspace-id"] = '<x-workspace-id>'
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contentFile\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--"

response = http.request(request)
puts response.read_body
{
  "success": true,
  "code": 123,
  "errorCode": "<string>",
  "message": "<string>",
  "data": {}
}
{
"success": true,
"code": 123,
"message": "<string>",
"errorCode": "<string>"
}
{
"success": true,
"code": 123,
"message": "<string>",
"errorCode": "<string>"
}
{
"success": true,
"code": 123,
"message": "<string>",
"errorCode": "<string>"
}
{
"success": true,
"code": 123,
"message": "<string>",
"errorCode": "<string>"
}

Descripcion

Envia un archivo multimedia (imagen, audio, video o documento) a un contacto por WhatsApp. El archivo puede enviarse de dos formas:
  1. Por URL (contentUrl): Proporciona una URL publica del archivo. El servidor descarga el archivo, lo sube a almacenamiento y lo envia al contacto.
  2. Por archivo (contentFile): Sube directamente el archivo como multipart/form-data.
Si usas Workers, puedes enviar archivos multimedia usando plz.whatsapp.sendMedia() que internamente utiliza este endpoint con contentUrl.

Parametros

ParametroTipoRequeridoDescripcion
workspaceIdstringSiID del workspace
recipientPhonestringSiNumero de telefono del destinatario (con codigo de pais)
contactIdstringSiID del contacto en la plataforma
contentUrlstringCondicionalURL publica del archivo a enviar. Requerido si no se envia contentFile
contentFilefileCondicionalArchivo binario. Requerido si no se envia contentUrl
contentstringNoCaption o texto que acompana al archivo
externalReferenceIdstringNoIdentificador externo opcional para rastreo

Tipos de archivo soportados

Imagenes

  • image/jpeg, image/png

Audio

  • audio/aac, audio/amr, audio/mpeg, audio/mp4, audio/ogg, audio/webm, audio/x-m4a
  • Los audios se convierten automaticamente a MP3

Video

  • video/mp4, video/3gpp

Documentos

  • application/pdf, application/msword, application/vnd.openxmlformats-officedocument.*
  • Y cualquier otro tipo de archivo se envia como documento

Ejemplo con URL

curl -X POST https://api.plazbot.com/api/message/files \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-workspace-id: YOUR_WORKSPACE_ID" \
  -F "workspaceId=YOUR_WORKSPACE_ID" \
  -F "recipientPhone=5491123456789" \
  -F "contactId=CONTACT_ID" \
  -F "contentUrl=https://example.com/factura.pdf" \
  -F "content=Aqui tienes tu factura"

Ejemplo con archivo

curl -X POST https://api.plazbot.com/api/message/files \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-workspace-id: YOUR_WORKSPACE_ID" \
  -F "workspaceId=YOUR_WORKSPACE_ID" \
  -F "recipientPhone=5491123456789" \
  -F "contactId=CONTACT_ID" \
  -F "contentFile=@/path/to/image.png" \
  -F "content=Mira esta imagen"

Uso desde Workers

// Enviar imagen desde URL
await plz.whatsapp.sendMedia({
  to: '5491123456789',
  url: 'https://example.com/producto.jpg',
  caption: 'Foto del producto'
})

// Enviar PDF
await plz.whatsapp.sendMedia({
  to: '5491123456789',
  url: 'https://example.com/factura.pdf',
  filename: 'factura-001.pdf',
  caption: 'Tu factura esta lista'
})
El servidor detecta automaticamente el tipo de archivo basandose en la extension de la URL. Si el archivo es un audio, se convierte automaticamente a formato MP3 para compatibilidad con WhatsApp.

Authorizations

Authorization
string
header
required

Token de autenticacion Bearer. Obtenga el token usando el endpoint /api/user/login

Headers

x-workspace-id
string
required

Identificador del workspace

Query Parameters

contactId
string

ID del contacto

workspaceId
string

Identificador del workspace

recipientPhone
string

Numero de WhatsApp del destinatario

Body

multipart/form-data
contentFile
file
required

Archivo a enviar

Response

Archivo enviado exitosamente

success
boolean
required

Indica si la operacion fue exitosa

code
integer
required

Codigo HTTP de la respuesta

errorCode
string | null
required

Codigo de error, null si no hay error

message
string
required

Mensaje descriptivo del resultado

data
object | null
required

Datos de la respuesta