Загружает файл в хранилище Gratio и возвращает ссылку на него. Удобно, когда один файл уходит многим: загрузите его один раз и отправляйте ссылкой через sendFileByUrl — Gratio возьмёт файл из своего хранилища, без повторной загрузки.
| Запрос | POST /waInstance{idInstance}/uploadFile/{apiTokenInstance} |
| Тело | сам файл, до 100 МБ |
| Каналы | MAX, Telegram, WhatsApp, почта |
Метод ничего не отправляет в мессенджер: он работает, даже когда канал не на связи или на паузе.
Параметры
Параметры — в заголовках запроса:
| Заголовок | Обязательный | Описание |
|---|---|---|
Content-Type |
да | тип файла: image/jpeg, application/pdf, audio/ogg. Не application/json и не multipart/form-data — такое тело Gratio разбирает как JSON или форму |
GA-Filename |
нет | имя файла латиницей; без него — file. Можно и X-Filename |
Пример запроса
Загрузить афишу:
curl
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/uploadFile/$GRATIO_TOKEN" \
-H 'Content-Type: image/jpeg' -H 'GA-Filename: poster.jpg' \
--data-binary @poster.jpg
Python
import os
import requests
BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]
url = f"{BASE}/uploadFile/{TOKEN}"
headers = {"Content-Type": "image/jpeg", "GA-Filename": "poster.jpg"}
with open("poster.jpg", "rb") as f:
response = requests.post(url, data=f, headers=headers, timeout=120)
print(response.status_code, response.json())
Node.js
import { readFile } from "node:fs/promises";
const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;
const url = `${base}/uploadFile/${GRATIO_TOKEN}`;
const response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "image/jpeg", "GA-Filename": "poster.jpg" },
body: await readFile("poster.jpg"),
});
console.log(response.status, await response.json());
PHP
<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/uploadFile/' . getenv('GRATIO_TOKEN');
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: image/jpeg', 'GA-Filename: poster.jpg'],
CURLOPT_POSTFIELDS => file_get_contents('poster.jpg'),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);
Пример ответа
Ответ 200 OK:
{"urlFile": "https://api.gratio.net/upload/7100000001/5f2c8e1a9b3d4c7e6a0f1b2c/…/poster.jpg"}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
urlFile |
string | ссылка на файл в хранилище Gratio. Подписанная, без токена: по ней файл можно и скачать |
Ещё примеры
Отправить загруженный файл
Передайте urlFile из ответа в sendFileByUrl — каждому получателю своим запросом:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/sendFileByUrl/$GRATIO_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"chatId": "79991234567@c.us",
"urlFile": "https://api.gratio.net/upload/7100000001/5f2c8e1a9b3d4c7e6a0f1b2c/…/poster.jpg",
"caption": "Открытый урок в субботу, 11:00"
}'
Та же ссылка подходит:
- во вложения письма
files— sendEmail; - для звука в звонке —
urlFileв playAudio,playUrlв answerCall и makeCall; - для истории Telegram —
urlFileв sendStory.
Документ загружается так же, меняются тип и имя:
curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/uploadFile/$GRATIO_TOKEN" \
-H 'Content-Type: application/pdf' -H 'GA-Filename: schedule.pdf' \
--data-binary @schedule.pdf
Ошибки
| Код | code |
Когда | Что делать |
|---|---|---|---|
400 |
file_empty |
тело пустое или пришло формой multipart/form-data |
передать сам файл с его Content-Type |
413 |
— | файл больше 100 МБ | уменьшить файл |
Что дальше
- sendFileByUrl — отправить загруженный файл.
- Напоминания и рассылки без блокировок — один файл многим получателям.
- Файлы и ссылки на них — типы, размеры и ссылки.
