saveapi.org

Скачивание видео из соцсетей в n8n через HTTP Request

Узел HTTP Request в n8n — это вся интеграция: один GET с credential Header Auth, и API возвращает JSON с прямыми URL медиа. Остальной workflow — решить, что с ними делать. Это руководство — пять узлов по порядку и две настройки, которые все пропускают: передать ссылку как query-параметр и ветвиться по success до того, как трогать medias[].

Обновлено

Сохраните ключ как credential Header Auth

В n8n: Credentials → New → Header Auth. Name: Authorization. Value: Bearer и ваш ключ. Credential хранится зашифрованным и никогда не попадает в JSON workflow — это важно в момент, когда вы экспортируете или делитесь workflow.

Узел HTTP Request

Method GET, URL https://api.saveapi.org/v1/download, Authentication → Generic Credential Type → Header Auth, выберите credential. Включите Send Query Parameters и добавьте один параметр url с выражением, указывающим на входящую ссылку. Узел сам кодирует значение — не собирайте query-строку вручную.

JavaScript
// HTTP Request node
{
  "method": "GET",
  "url": "https://api.saveapi.org/v1/download",
  "authentication": "genericCredentialType",
  "genericAuthType": "httpHeaderAuth",      // Header Auth credential from step 1
  "sendQuery": true,
  "queryParameters": {
    "parameters": [{ "name": "url", "value": "={{ $json.link }}" }]
  }
}

Ветвитесь по success до того, как трогать medias[]

API отвечает 200 с success: true и medias[], либо статусом ошибки с success: false и стабильным error.code. Узел Code превращает это в элементы n8n: по одному на медиа при успехе, один элемент ошибки иначе. Узлы ниже видят плоский список с type и url — форма, которую хочет любой другой узел.

JavaScript
// Code node — one item per media, or one error item
const data = $input.first().json;

if (!data.success) {
  return [{ json: { failed: true, code: data.error.code, message: data.error.message } }];
}

return data.medias.map((media, index) => ({
  json: {
    index,
    type: media.type,          // "video" | "image" | "audio"
    url: media.url,
    title: data.meta?.title ?? "",
  },
}));

Отправьте файл туда, куда нужно

Для Telegram узел Telegram с Send Video (или Send Photo, если type — image) берёт url напрямую — Telegram сам скачает. Для Drive, S3 или базы добавьте второй HTTP Request с url медиа, в Options поставьте Response Format = File и передайте binary дальше. API никогда не проксирует файл, так что этот запрос идёт прямо на CDN платформы.

Повторы и лимиты — в настройках узла

Откройте Settings узла HTTP Request и включите Retry On Fail с паузой в несколько секунд — но только для кодов, которые повтор исправляет. UPSTREAM_TIMEOUT и UPSTREAM_ERROR стоят второй попытки и ничего не стоят; PRIVATE_CONTENT и MEDIA_NOT_FOUND финальны и стоят 0.1 кредита каждый раз. Поставьте узел IF на код ошибки перед любым циклом и держите скорость workflow ниже поминутного лимита ключа.

Вопросы перед началом

Можно запускать это узлом Webhook?
Да — узел Webhook, принимающий ссылку, обычный триггер. HTTP Request читает её как $json.link (или как называется поле в теле вашего webhook).
Нужно ли n8n скачивать файл?
Только если вы хотите сохранить его туда, куда n8n пишет. Для Telegram и большинства чатов достаточно передать url медиа, и файл не проходит через ваш инстанс n8n.
Сколько стоит один запуск workflow?
Одно успешное разрешение — 1.5 кредита (история Instagram — 5). Закрытая или удалённая ссылка — 0.1; таймаут — ничего. Узел Code из шага 3 отдаёт код ошибки, так что их можно считать.

Платформы, использованные здесь

Другие руководства

Запустите это руководство со своим ключом

Ключ за минуту. 1 000 бесплатных кредитов, без карты и без срока.

Получить ключ и попробоватьПолный справочник API