Pass That Payload
Открыть Console

Self-hosted · Лицензия MIT

Передайте payload. Об остальном позаботимся мы.

Лёгкая альтернатива хостовым QStash-подобным сервисам. Мульти-тенантная очередь, HTTP-доставка с ретраями, cron-расписания и строго упорядоченные message groups — всё на вашем Postgres.

Построено для продакшен-очередей

Шесть примитивов. Один Postgres. Ноль хостовых зависимостей.

Мульти-тенантные проекты

Проекты на пользователя с Postgres Row-Level Security. Создавайте API-токены под конкретный проект — утечки никогда не пересекают границы тенанта.

API-токены на проект

Bearer pk_xxx:sk_yyy, хранится в виде bcrypt-хеша. Показывается один раз при создании, мгновенно отзывается из дашборда.

Одиночные сообщения

POST одного HTTP-задания: origin, path, method, headers, body, ретраи, опционально runAt или delaySeconds, опционально idempotencyKey.

Message groups

Один origin + множество paths, выполняются строго по порядку. Postgres гарантирует порядок при захвате задания — переживёт рестарты и несколько воркеров.

Cron-расписания

Cron-выражение + timezone на строку. Один центральный dispatch-тик ставит в очередь сработавшие расписания; schedule_runs дедуплицирует пересечения воркеров.

Ретраи и backoff

Неудачные попытки переходят в pending_retry с backoff. После max_retries — dead. Каждая попытка пишется в delivery_attempts.

Три строки HTTP

Работает с curl, SDK или любым HTTP-клиентом.

curl -X POST https://api.passthatpayload.com/api/v1/messages \
  -H "Authorization: Bearer pk_xxx:sk_yyy" \
  -H "Content-Type: application/json" \
  -d '{
    "origin": "https://api.example.com",
    "path": "/hooks/order-created",
    "body": { "orderId": 42 },
    "maxRetries": 5
  }'

Сценарии использования

То, что иначе пришлось бы писать самим.

01

Webhook fan-out

Возьмите один входящий event и разошлите его на множество downstream-URL, каждый со своей политикой ретраев. Не теряйте ни одной доставки из-за нестабильного стороннего API.

02

Cron-управляемые воркфлоу

Указывайте cron-выражения на строку. Один центральный dispatch-тик запускает сработавшие — без OS-cron на каждое расписание и без Vercel-cron на каждый job.

03

Строго упорядоченные HTTP-пайплайны

Нужно, чтобы шаг 2 ждал шага 1? Message groups гарантируют порядок на уровне базы данных — даже между несколькими диспатчерами.

Self-host или хостовая редакция

Один и тот же движок, два способа запустить.

ВозможностьХостингSelf-host
ИнфраструктураРаботает на api.passthatpayload.com — никаких ops с вашей стороны.Один контейнер + Postgres на вашем сервере. Hetzner-runbook в README.
Владение даннымиХранится в нашем общем Postgres, изолировано по проектам через RLS.Ваша база, ваши бэкапы, ваш срок хранения.
КвотыЩедрый бесплатный тариф на время беты.Без квот — только ограничения Postgres и канала.
ПоддержкаСообщество + best-effort.Сообщество + GitHub issues.

Цены

Бесплатно на время беты. Self-host бесплатен навсегда.

Free

$0/месяц

Для всех, кто использует хостовую редакцию во время беты.

  • Неограниченное число проектов
  • Все API-эндпойнты
  • Поддержка сообщества
Получить токен

Self-host

$0навсегда

Запустите Pass That Payload на своём сервере.

  • Полный исходный код (MIT)
  • Hetzner-runbook включён
  • Без лимитов использования
Смотреть на GitHub

Pro

скоро

Более высокие квоты, SLA, приоритетная поддержка.

  • Более высокие квоты
  • SLA + приоритетная поддержка
  • Экспорт audit-логов
Сообщить мне

Частые вопросы

Чем это отличается от QStash?
QStash отличный, но только хостовый. Pass That Payload даёт те же примитивы — HTTP-enqueue, ретраи, расписания — но self-hosted на одном Postgres + Node-контейнере, с мульти-тенантными проектами и RLS из коробки.
Работает ли с localhost / приватными URL?
Да, когда диспатчер работает в Node (worker или nodejs route runtime). Диспатчер сам делает fetch к целевому URL, так что всё, что доступно из его сети, работает.
Что происходит, когда ретраи кончились?
Сообщение переходит в статус "dead" после max_retries неудач. Внутри message group следующий sibling всё равно выполняется — один сбой не отменяет всю цепочку.
Как порядок гарантируется между несколькими воркерами?
Порядок обеспечивается в Postgres при захвате задания: следующая строка группы не берётся, пока предыдущие siblings не покинут pending, pending_retry или processing. Все диспатчеры следуют одному правилу.
Какие регионы доступны?
Хостовая редакция работает в Hetzner Falkenstein (Германия, ЕС). Self-host — где угодно, где можно запустить Node + Postgres 16.
Это open source?
Да — лицензия MIT на GitHub. В репозитории Console — исходный код, SDK-пакет и operator-runbook.