// documentation
Webhooks
Прообраз событий, доставки уведомлений и проверки подписи webhook-запросов.
API Preview: публичный контракт ещё не опубликован
Событийная модель
Webhooks позволят получать изменения без постоянного опроса API. Предварительно рассматриваются события товаров, задач, контактов и статусов обработки данных.
Имена событий, payload и правила подписки ещё не утверждены.
Проверка подписи
Получатель должен проверять подпись запроса до обработки содержимого. Секрет webhook нельзя хранить в клиентском приложении.
Доставка и повторы
Обработчик должен быстро подтверждать получение, выполнять тяжёлую работу асинхронно и быть готовым к повторной доставке одного события.
Идемпотентность
Сохраняйте идентификатор события и не применяйте одно изменение дважды. Порядок доставки разных событий не следует считать гарантированным без отдельного указания в контракте.
POST
https://example.com/webhooks/markethouseimport { createHmac, timingSafeEqual } from 'node:crypto';
export async function POST(request) {
const body = await request.text();
const signature = request.headers.get('x-markethouse-signature') ?? '';
const expected = createHmac(
'sha256',
process.env.MARKETHOUSE_WEBHOOK_SECRET,
)
.update(body)
.digest('hex');
const signatureIsValid =
signature.length === expected.length &&
timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!signatureIsValid) {
return new Response('Invalid signature', { status: 401 });
}
const event = JSON.parse(body);
await processEventOnce(event.id, event);
return Response.json({ received: true });
}200 OKПример ответа
{
"received": true
}