Send reports anywhere
with a signed webhook

Point BugCapturer at any endpoint you own and every report arrives as a signed, versioned JSON payload β€” ideal for custom services, queues and internal tooling.

A stable, versioned schema

The shape below is guaranteed for version 1. New fields are added, never silently renamed.

FieldTypeDescription
eventstringEvent name β€” share.created for a report, test for the check button
schema_versionnumberSchema version, currently 1 β€” check this before parsing
share.report_urlstringPublic link to the full report
report.console_errorsarrayConsole error messages with their source, up to 30 entries
report.network_errorsarrayFailed requests with method, url and status, up to 30 entries
report.*_errors_countnumberError counts β€” same length as the two arrays above
reporterobjectThe identity your site passed in (name / email / uid); empty strings when anonymous

Verify before you trust

Every request is signed with a secret you control, so your endpoint can reject anything forged.

Signature headerx-bugcapturer-signature
AlgorithmHMAC-SHA256 over the raw request body
SecretShown once when the integration is created
ComparisonUse a constant-time comparison
verify.js
const crypto = require('crypto');

const expected = crypto
  .createHmac('sha256', process.env.BC_WEBHOOK_SECRET)
  .update(rawBody)
  .digest('hex');

const received = req.headers['x-bugcapturer-signature'];
crypto.timingSafeEqual(
  Buffer.from(expected),
  Buffer.from(received)
);

Retries and a delivery log

Webhooks fail for boring reasons β€” a deploy, a restart, a bad network. BugCapturer assumes that.

πŸ”

Automatic retries

Failed deliveries are retried with backoff before being recorded as failed.

⏸️

Auto pause

An endpoint that keeps failing is paused automatically and you are emailed.

🧾

Delivery log

Each attempt and its response is recorded so you can debug without guessing.

🧯

Manual replay

Re-send a failed delivery by hand once your endpoint is healthy again.