DMALL — External API
Клиенты настраивают и оплачивают рассылку на этом сайте. Ваш сервис забирает оплаченные задания через этот API, сам выполняет рассылку в Discord и отправляет статус обратно. Ниже — всё, что нужно разработчику.
https://api.vemoni.info— (только для владельца)Authorization: Bearer <API key> (или X-Api-Key: <key>). Server-to-server, ключ держать в секрете.Жизненный цикл задания
paid → (вы claim) claimed → (progress) running → (complete) done / failed. Задание оплачено клиентом в момент создания.
Рабочий цикл сервиса
- Опрашивайте
GET /dmall/v1/jobs?status=paid(например, раз в 10–30 c). - На каждое задание —
POST /dmall/v1/jobs/:id/claim(чтобы два воркера не отправили дважды). 409 = уже занято/не в статусе paid. - Рассылайте. Периодически шлите
POST /dmall/v1/jobs/:id/progressсsent/failed. - По завершении —
POST /dmall/v1/jobs/:id/completeсо статусомdoneилиfailed.
Endpoints
/dmall/v1/pingпроверка ключа/связи → { ok:true }/dmall/v1/jobs?status=paid&limit=100список заданий (по статусу) → { jobs:[…] }/dmall/v1/jobs/:idодно задание → { job }/dmall/v1/jobs/:id/claimтело { worker } → 200 { job } · 409 если не paid/dmall/v1/jobs/:id/progressтело { sent, failed, note, running } → { job }/dmall/v1/jobs/:id/completeтело { status:"done"|"failed", sent, failed, note } → { job }Схема задания (Job)
{
"id": "dm_lz9…", // идентификатор задания
"status": "paid", // paid|claimed|running|done|failed|cancelled
"createdAt": 1750000000000, // ms
"buyerId": "8334…", // Discord ID клиента
"price": 5.00, // списано с баланса клиента (USD)
"messageCount": 5000, // сколько сообщений оплачено (сколько отправить)
"target": {
"guildId": "1392…", // СЕРВЕР, участникам которого рассылать
"guildName": "My Server"
},
"message": {
"content": "Текст… {{LINK}}",// плейсхолдер {{LINK}} и т.п. подставляет ваш сервис
"username": "Sender" | null, // webhook-имя (если задан setName), иначе null
"avatarUrl": "https://…" | null,
"status": "custom status" | null,
"embeds": [ { "title":"", "desc":"", "color":"#5865f2", "image":"",
"btnlabel":"", "btnurl":"", "…":"" } ]
},
"filters": {
"excludeIds": ["…"], // не отправлять этим member/role ID
"cooldown": { "enabled": true, "days": 7, "hours": 0 },
"priority": "normal"
},
"progress": { "claimedBy":null, "claimedAt":null, "startedAt":null,
"finishedAt":null, "sent":0, "failed":0, "note":"" },
"raw": { "fields": { … }, "embeds": [ … ] } // исходный конфиг «как есть», на случай доп. полей
}
Пример
# забрать оплаченные задания
curl -H "Authorization: Bearer $KEY" \
"https://api.vemoni.info/dmall/v1/jobs?status=paid"
# занять задание
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"worker":"node-1"}' \
"https://api.vemoni.info/dmall/v1/jobs/dm_lz9.../claim"
# прогресс и завершение
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"sent":1200,"failed":15}' ".../dmall/v1/jobs/dm_lz9.../progress"
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"status":"done","sent":4980,"failed":20}' ".../dmall/v1/jobs/dm_lz9.../complete"
Ошибки: 401 неверный ключ · 404 нет задания/маршрута · 409 конфликт статуса · 503 API не сконфигурирован (не задан DMALL_API_KEY).
Новый заказ
Приведём живых участников на ваш сервер — реклама показывается в сети крупных сообществ, оплата только за подтверждённые заходы.
Бота на сервере может не быть — тогда заказ выполнится рекламой без проверки на заход (оплата по конверсии). Если наш бот на сервере есть — идёт обычная проверка захода.
Заходы не проверяются, оплата за клик по конверсии. Без бота заказ и так идёт без проверки — этот флажок нужен, только чтобы форсировать режим на сервере с ботом.
Мои кампании
Менеджеры по продажам
Cabinet
Your DMALL stats, order history and earnings.
Payout details
Crypto address and network, e.g.: LTC (address). Withdrawal is not possible without details.
Order history
Earnings journal
Tickets
Ask a question or report a problem — support will reply here.
Pick a server to broadcast to, or add your own.
New template
Bot profile
Name, avatar and custom status are applied on the bot's first connection to a broadcast (once per run). Discord — no more than ~1 name change per hour.
Embeds
Preview
Repeats & cooldowns
The destination link is needed for templates with [[LINK]] and for per-server filters. Cooldowns can be combined: days and hours add up (max 365 days).
