Skip to main content

Digital EmpireWebhooks › Event catalog

Webhook events catalog

Every event you can subscribe to. Every delivery uses the same envelope shape:

{
  "id": "evt_<ulid>",
  "event": "<event.type>",
  "product": "pixelproof" | "tariffwatch" | "entryproof" | "all",
  "occurred_at": "<ISO 8601>",
  "data": { /* per-event payload -- see below */ }
}

Ready to try one live? Head to the webhook tester — paste any URL and fire a real signed delivery in one click. Or read the webhooks overview for signature verification code samples.

Quick index (16 events)

PixelProof (5)

Chrome extension + backend that scans Shopify + Meta pixel wiring. Events fire on each scan and each individual issue transition.

pixelproof.scan.completeproduct: pixelproof

Fires when a Chrome-extension scan finishes and its snapshot is written to the store record.

Use case

Post the aggregated issue count into an ecommerce-ops Slack channel, or open a Linear ticket per severity=critical scan.

Payload schema (data.*)

store_domain -- string -- Shopify store the scan targeted (e.g. "acme.myshopify.com").
scan_id -- string -- Stable ID of this scan snapshot.
scan_type -- "pixel" | "consent" | "checkout" -- which scan surface ran.
error_count -- integer -- number of severity=error findings.
warn_count -- integer -- number of severity=warn findings.
info_count -- integer -- number of severity=info findings.
score -- integer 0..100 -- aggregate PixelProof score for this scan.
report_url -- string -- authenticated deep link into the customer dashboard.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "pixelproof.scan.complete",
  "product": "pixelproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "store_domain": "acme-cosmetics.myshopify.com",
    "scan_id": "scn_01HXZ8P9E5R4S3T2V1W0X9Y8Z7",
    "scan_type": "pixel",
    "error_count": 2,
    "warn_count": 1,
    "info_count": 4,
    "score": 74,
    "report_url": "https://digital-empire-app.vercel.app/pixelproof/report/scn_01HXZ8P9E5R4S3T2V1W0X9Y8Z7"
  }
}

Try this event in the tester →

pixelproof.scan.failedproduct: pixelproof

Fires when a scan begins but errors before producing a snapshot (network, storefront timeout, unhandled exception).

Use case

Alert your on-call rotation for repeated scan failures against a single store (indicates upstream regression).

Payload schema (data.*)

store_domain -- string -- Shopify store the scan targeted.
scan_id -- string -- Stable ID of the attempted scan.
scan_type -- "pixel" | "consent" | "checkout" -- which scan surface was attempted.
error_code -- string -- machine-readable failure reason (storefront_timeout | dns_error | ssrf_blocked | internal_error).
error_message -- string -- human-readable failure detail (truncated to 500 chars).
attempted_at -- ISO 8601 string -- when the scan began.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "pixelproof.scan.failed",
  "product": "pixelproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "store_domain": "acme-cosmetics.myshopify.com",
    "scan_id": "scn_01HXZ8Q7B2H4J6K8M0N1P3Q5R7",
    "scan_type": "checkout",
    "error_code": "storefront_timeout",
    "error_message": "Storefront did not respond within 30s (final attempt of 3).",
    "attempted_at": "2026-08-28T12:34:56.000Z"
  }
}

Try this event in the tester →

pixelproof.issue.detectedproduct: pixelproofseverity-tagged

Fires the first time a specific issue is observed in a scan (severity-tagged). Deduped by (store, issue_code) -- will not re-fire until the issue transitions to resolved.

Use case

Automatically open a Linear / Jira ticket per critical issue with the fix-suggestion pre-filled from remediation_url.

Payload schema (data.*)

store_domain -- string -- Shopify store where the issue appeared.
scan_id -- string -- Scan snapshot in which the issue was first observed.
issue_id -- string -- Stable ID for this occurrence.
issue_code -- string -- Machine-readable identifier (e.g. "meta_pixel_missing_purchase_event").
severity -- "critical" | "error" | "warn" | "info" -- classification.
title -- string -- Short human title.
first_seen_at -- ISO 8601 string -- when this issue was first observed.
remediation_url -- string -- deep link to fix instructions.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "pixelproof.issue.detected",
  "product": "pixelproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "store_domain": "acme-cosmetics.myshopify.com",
    "scan_id": "scn_01HXZ8P9E5R4S3T2V1W0X9Y8Z7",
    "issue_id": "iss_01HXZ8P9F2G4H6J8K0L1M3N5P7",
    "issue_code": "meta_pixel_missing_purchase_event",
    "severity": "critical",
    "title": "Meta Pixel is not firing Purchase events on the thank-you page",
    "first_seen_at": "2026-08-28T12:34:56.000Z",
    "remediation_url": "https://digital-empire-app.vercel.app/pixelproof/fixes/meta_pixel_missing_purchase_event"
  }
}

Try this event in the tester →

pixelproof.issue.resolvedproduct: pixelproofseverity-tagged

Fires when an issue previously reported via pixelproof.issue.detected is no longer present in the latest scan.

Use case

Auto-close the Linear ticket you opened on detected, and post a checkmark into Slack.

Payload schema (data.*)

store_domain -- string -- Shopify store.
scan_id -- string -- The scan that first observed the issue as resolved.
issue_id -- string -- Stable ID matching the earlier detected event.
issue_code -- string -- Machine-readable identifier.
severity -- string -- Severity at detection time.
first_seen_at -- ISO 8601 string -- when the issue was originally detected.
resolved_at -- ISO 8601 string -- when the issue was first observed as fixed.
time_to_resolve_seconds -- integer -- convenience delta.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "pixelproof.issue.resolved",
  "product": "pixelproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "store_domain": "acme-cosmetics.myshopify.com",
    "scan_id": "scn_01HXZ9A2B4C6D8E0F1G3H5J7K9",
    "issue_id": "iss_01HXZ8P9F2G4H6J8K0L1M3N5P7",
    "issue_code": "meta_pixel_missing_purchase_event",
    "severity": "critical",
    "first_seen_at": "2026-08-28T12:34:56.000Z",
    "resolved_at": "2026-08-29T09:12:03.000Z",
    "time_to_resolve_seconds": 74827
  }
}

Try this event in the tester →

pixelproof.subscription.updatedproduct: pixelproof

Fires when the customer PixelProof subscription changes state (trial started / activated / cancelled / past_due / resumed).

Use case

Sync subscription state into your billing analytics warehouse without polling Stripe.

Payload schema (data.*)

stripe_customer_id -- string -- Stripe customer ID (cus_...).
stripe_subscription_id -- string -- Stripe subscription ID (sub_...).
status -- string -- Stripe subscription status (trialing | active | past_due | canceled | unpaid).
plan -- string -- Plan slug (starter | pro | agency).
trial_end -- ISO 8601 string | null -- trial expiry if trialing.
cancel_at_period_end -- boolean -- flagged for non-renewal at end of period.
current_period_end -- ISO 8601 string -- next renewal boundary.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "pixelproof.subscription.updated",
  "product": "pixelproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "stripe_customer_id": "cus_QpX8ZzExample1234",
    "stripe_subscription_id": "sub_1PabcdEfGhIjKlMnOpQrStUv",
    "status": "active",
    "plan": "pro",
    "trial_end": null,
    "cancel_at_period_end": false,
    "current_period_end": "2026-09-28T00:00:00.000Z"
  }
}

Try this event in the tester →

TariffWatch (4)

BIS / Federal Register HTS monitoring. Events fire when a watched code matches a new notice, when a digest is delivered, or when a comment is filed.

tariffwatch.hts.matchedproduct: tariffwatch

Fires when a new BIS Federal Register notice matches one of the customer's watched HTS codes.

Use case

Notify your customs / compliance team the moment BIS publishes a notice that could reclassify your imports.

Payload schema (data.*)

hts_code -- string -- 10-digit HTS code that matched.
hts_description -- string -- description of the matched code.
notice_id -- string -- Federal Register document ID.
notice_title -- string -- title of the notice.
notice_url -- string -- link to federalregister.gov document.
notice_published_at -- ISO 8601 string -- publication date.
match_score -- number 0..1 -- confidence of the match (>=0.7 fires this event).
comment_deadline -- ISO 8601 string | null -- public-comment cutoff if applicable.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "tariffwatch.hts.matched",
  "product": "tariffwatch",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "hts_code": "7208.10.00",
    "hts_description": "Flat-rolled products of iron or non-alloy steel, hot-rolled, in coils",
    "notice_id": "2026-15961",
    "notice_title": "Section 232 derivative products expansion",
    "notice_url": "https://www.federalregister.gov/documents/2026/08/28/2026-15961",
    "notice_published_at": "2026-08-28T09:00:00.000Z",
    "match_score": 0.92,
    "comment_deadline": "2026-09-27T23:59:59.000Z"
  }
}

Try this event in the tester →

tariffwatch.watchlist.digest.sentproduct: tariffwatch

Fires each time a weekly / daily watchlist digest email is delivered to the customer.

Use case

Log the digest into your internal knowledge base for audit trail; reconcile expected cadence.

Payload schema (data.*)

digest_id -- string -- stable ID for this digest.
cadence -- "daily" | "weekly" -- delivery frequency.
watched_hts_count -- integer -- number of HTS codes on the watchlist.
match_count -- integer -- number of matches in this digest window.
notice_ids -- string[] -- Federal Register IDs included.
delivered_to -- string -- masked email (a***@example.com).
delivered_at -- ISO 8601 string -- when the digest was sent.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "tariffwatch.watchlist.digest.sent",
  "product": "tariffwatch",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "digest_id": "dig_01HXZ8Q2K4M6N8P0R2T4V6X8Z0",
    "cadence": "weekly",
    "watched_hts_count": 12,
    "match_count": 3,
    "notice_ids": [
      "2026-15961",
      "2026-15987",
      "2026-16012"
    ],
    "delivered_to": "c***@buyer.com",
    "delivered_at": "2026-08-28T13:00:00.000Z"
  }
}

Try this event in the tester →

tariffwatch.comment.filedproduct: tariffwatch

Fires when TariffWatch files a public comment or rebuttal on behalf of the customer against a BIS proceeding.

Use case

Attach the filing receipt to your legal-hold system automatically; notify counsel via Slack.

Payload schema (data.*)

comment_id -- string -- stable TariffWatch comment ID.
notice_id -- string -- Federal Register document commented on.
docket_id -- string -- regulations.gov docket ID.
regulations_gov_url -- string -- public URL of the filed comment.
filed_at -- ISO 8601 string -- filing timestamp.
kind -- "comment" | "rebuttal" -- filing type.
attachment_count -- integer -- number of PDFs attached.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "tariffwatch.comment.filed",
  "product": "tariffwatch",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "comment_id": "cmt_01HXZ8R3M5N7P9Q1S3U5W7Y9A1",
    "notice_id": "2026-15961",
    "docket_id": "BIS-2026-0031",
    "regulations_gov_url": "https://www.regulations.gov/comment/BIS-2026-0031-0142",
    "filed_at": "2026-08-28T15:22:44.000Z",
    "kind": "rebuttal",
    "attachment_count": 2
  }
}

Try this event in the tester →

tariffwatch.subscription.updatedproduct: tariffwatch

Fires when the TariffWatch subscription changes state.

Use case

Sync TariffWatch entitlement into your seat-management or SSO provisioning without polling Stripe.

Payload schema (data.*)

stripe_customer_id -- string -- Stripe customer ID.
stripe_subscription_id -- string -- Stripe subscription ID.
status -- string -- Stripe subscription status.
plan -- string -- TariffWatch plan slug (watchlist | pro | enterprise).
seat_count -- integer -- provisioned seats.
current_period_end -- ISO 8601 string -- next renewal boundary.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "tariffwatch.subscription.updated",
  "product": "tariffwatch",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "stripe_customer_id": "cus_QpX8ZzExample1234",
    "stripe_subscription_id": "sub_1PabcdEfGhIjKlMnOpQrStUv",
    "status": "active",
    "plan": "pro",
    "seat_count": 5,
    "current_period_end": "2026-09-28T00:00:00.000Z"
  }
}

Try this event in the tester →

EntryProof (5)

Turn-key GCC / Section 232 filing service. Events fire on each order-lifecycle transition (received / processing / shipped / completed / refunded).

entryproof.order.receivedproduct: entryproof

Fires when an EntryProof order is submitted and payment is authorised.

Use case

Kick off your internal customs-broker intake workflow; assign an order owner.

Payload schema (data.*)

order_id -- string -- EntryProof order ID (ord_ep_...).
packet_type -- "gcc" | "section_232" | "coo" -- filing packet type.
stripe_payment_intent_id -- string -- Stripe PaymentIntent.
amount_cents -- integer -- total charged in USD cents.
reference -- string | null -- customer-supplied reference (e.g. PO number).
received_at -- ISO 8601 string -- when the order landed.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "entryproof.order.received",
  "product": "entryproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "order_id": "ord_ep_01HXZ8S4N6P8Q0R2T4V6X8Z0A2",
    "packet_type": "gcc",
    "stripe_payment_intent_id": "pi_3PabcdEfGhIjKlMn0123456789",
    "amount_cents": 49900,
    "reference": "PO-2026-0812",
    "received_at": "2026-08-28T14:02:11.000Z"
  }
}

Try this event in the tester →

entryproof.order.processingproduct: entryproof

Fires when the order enters active preparation (broker assigned, packet being assembled).

Use case

Update your customer-facing order status page from "received" to "in-progress".

Payload schema (data.*)

order_id -- string -- EntryProof order ID.
packet_type -- string -- filing packet type.
assigned_broker -- string -- broker code (internal identifier).
estimated_ship_at -- ISO 8601 string -- ETA for filing.
processing_started_at -- ISO 8601 string -- when work began.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "entryproof.order.processing",
  "product": "entryproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "order_id": "ord_ep_01HXZ8S4N6P8Q0R2T4V6X8Z0A2",
    "packet_type": "gcc",
    "assigned_broker": "BRK-042",
    "estimated_ship_at": "2026-08-30T18:00:00.000Z",
    "processing_started_at": "2026-08-28T14:35:00.000Z"
  }
}

Try this event in the tester →

entryproof.order.shippedproduct: entryproof

Fires when the packet has been filed (transmitted to CBP / posted to portal / released to customer).

Use case

Trigger an internal notification to your import team; refresh your compliance dashboard.

Payload schema (data.*)

order_id -- string -- EntryProof order ID.
packet_type -- string -- filing packet type.
filing_receipt_id -- string -- receipt / confirmation ID.
filing_receipt_url -- string -- authenticated link to the receipt.
shipped_at -- ISO 8601 string -- when the packet was filed.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "entryproof.order.shipped",
  "product": "entryproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "order_id": "ord_ep_01HXZ8S4N6P8Q0R2T4V6X8Z0A2",
    "packet_type": "gcc",
    "filing_receipt_id": "CBP-2026-08-28-000142",
    "filing_receipt_url": "https://digital-empire-app.vercel.app/entryproof/receipts/CBP-2026-08-28-000142",
    "shipped_at": "2026-08-29T17:12:33.000Z"
  }
}

Try this event in the tester →

entryproof.order.completedproduct: entryproof

Fires when the order is fully closed out (receipt acknowledged, no further action required).

Use case

Archive the order in your ERP; roll up the completion event into monthly reporting.

Payload schema (data.*)

order_id -- string -- EntryProof order ID.
packet_type -- string -- filing packet type.
completed_at -- ISO 8601 string -- when the order was closed.
total_processing_seconds -- integer -- received -> completed elapsed.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "entryproof.order.completed",
  "product": "entryproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "order_id": "ord_ep_01HXZ8S4N6P8Q0R2T4V6X8Z0A2",
    "packet_type": "gcc",
    "completed_at": "2026-08-30T09:15:00.000Z",
    "total_processing_seconds": 155329
  }
}

Try this event in the tester →

entryproof.order.refundedproduct: entryproof

Fires when an EntryProof order is refunded (full or partial).

Use case

Reverse the internal accounting entry; open a post-mortem ticket on full refunds.

Payload schema (data.*)

order_id -- string -- EntryProof order ID.
stripe_refund_id -- string -- Stripe refund ID.
amount_refunded_cents -- integer -- refunded amount in USD cents.
is_full_refund -- boolean -- whether the full order value was refunded.
reason -- string | null -- refund reason.
refunded_at -- ISO 8601 string -- when the refund posted.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "entryproof.order.refunded",
  "product": "entryproof",
  "occurred_at": "2026-09-03T18:33:43.780Z",
  "data": {
    "order_id": "ord_ep_01HXZ8S4N6P8Q0R2T4V6X8Z0A2",
    "stripe_refund_id": "re_3PabcdEfGhIjKlMn9876543210",
    "amount_refunded_cents": 49900,
    "is_full_refund": true,
    "reason": "requested_by_customer",
    "refunded_at": "2026-08-28T16:44:22.000Z"
  }
}

Try this event in the tester →

Founding Trio (2)

Five-seat lifetime founding cohort across the portfolio. Events fire when a slot is claimed and when the customer completes onboarding.

founding_trio.claimedproduct: all

Fires when a Founding Trio slot is claimed (Stripe checkout completed successfully).

Use case

Trigger a personal welcome DM from the founder; post the cohort tally into the launch channel.

Payload schema (data.*)

cohort_slot -- integer 1..5 -- 1-indexed slot in the 5-seat cohort.
cohort_cap -- integer -- total seats in the cohort (fixed at 5).
customer_email -- string -- claimant email.
primary_product -- "pixelproof" | "tariffwatch" | "entryproof" -- product they lean on.
stripe_customer_id -- string -- Stripe customer ID.
stripe_payment_intent_id -- string -- Stripe PaymentIntent.
claimed_at -- ISO 8601 string -- checkout completion timestamp.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "founding_trio.claimed",
  "product": "all",
  "occurred_at": "2026-09-03T18:33:43.781Z",
  "data": {
    "cohort_slot": 3,
    "cohort_cap": 5,
    "customer_email": "buyer@example.com",
    "primary_product": "pixelproof",
    "stripe_customer_id": "cus_QpX8ZzExample1234",
    "stripe_payment_intent_id": "pi_3PabcdEfGhIjKlMn0123456789",
    "claimed_at": "2026-08-28T14:00:00.000Z"
  }
}

Try this event in the tester →

founding_trio.onboardedproduct: all

Fires when a Founding Trio customer completes the onboarding checklist (product installed + first successful scan / watchlist / order).

Use case

Fire a tagged event into your CDP for lifecycle scoring; close the onboarding task in your CRM.

Payload schema (data.*)

cohort_slot -- integer 1..5 -- slot in the cohort.
customer_email -- string -- customer email.
primary_product -- string -- product the customer completed onboarding on.
checklist_completed -- string[] -- list of completed checklist items.
time_to_onboard_seconds -- integer -- claimed -> onboarded delta.
onboarded_at -- ISO 8601 string -- completion timestamp.

Example delivery envelope

{
  "id": "evt_test_01HXZ0A1B2C3D4E5F6G7H8J9K0",
  "event": "founding_trio.onboarded",
  "product": "all",
  "occurred_at": "2026-09-03T18:33:43.781Z",
  "data": {
    "cohort_slot": 3,
    "customer_email": "buyer@example.com",
    "primary_product": "pixelproof",
    "checklist_completed": [
      "extension_installed",
      "first_scan_ok",
      "slack_connected"
    ],
    "time_to_onboard_seconds": 3612,
    "onboarded_at": "2026-08-28T15:00:12.000Z"
  }
}

Try this event in the tester →

Envelope fields

Related