Webhooks

Receive real-time notifications when events happen in your marketplace. Connect to external systems like Zapier, Make, or your own backend.

Business Plan Feature

Custom webhooks are available on the Business plan ($249/month). Upgrade to integrate your marketplace with external systems.

What are Webhooks?

Webhooks are automated messages sent from your marketplace to external systems when specific events occur. Think of them as real-time notifications that let other applications know something happened.

Event Occurs
New order placed
Webhook Fires
HTTP POST request
Your System
Processes data

Common Use Cases

Inventory Management

Sync orders to your inventory system when purchases are made.

Custom Notifications

Send alerts to Slack, Discord, or email when events occur.

Automation Platforms

Trigger workflows in Zapier, Make (Integromat), or n8n.

CRM Updates

Update your CRM when new sellers register or orders complete.

Analytics Dashboards

Build custom analytics by streaming events to your data warehouse.

Fulfillment Systems

Automatically trigger shipping and fulfillment workflows.

Available Events

Subscribe to any combination of these events when creating a webhook endpoint:

EventTriggered When
order.createdA new order is placed and payment is confirmed
seller.registeredA new seller signs up for your marketplace
booking.createdA buyer submits a new booking (rental or service)
booking.payment_succeededA booking is paid successfully
booking.cancelledA booking is cancelled by the buyer, seller, or marketplace owner
booking.declinedA seller declines a booking request

More events (order.shipped, listing.created, review.posted, etc.) are on the roadmap. You'll be able to subscribe to new events as they become available.

Booking lifecycle: when does each event fire?

Use this timeline to decide which events to subscribe to. A single booking can fire multiple events over its lifetime.

booking.createdstatus: pending or awaiting_payment

A buyer submits a booking. Fires before payment for request-based flows, or together with booking.payment_succeeded on auto-approve free bookings.

booking.payment_succeededstatus: confirmed

The buyer completed payment through Stripe. This is the most reliable event for "a real booking just landed."

booking.declinedstatus: declined

Fires instead of payment_succeeded when a seller rejects a pending request. Useful for ops recovery workflows.

booking.cancelledstatus: cancelled

Fires when any party (buyer, seller, or marketplace owner) cancels. Check data.cancellation.cancelledBy and data.cancellation.refundIssued.

What the panel looks like

A simplified view of an endpoint's configuration: pick which events fire, copy the signing secret to verify requests on your end, and watch deliveries succeed or retry.

Webhooks
Add endpoint
POSThttps://hooks.acme.com/orders Active
Events to subscribe
order.createdbooking.payment_succeededseller.registeredbooking.createdbooking.cancelledbooking.declined
Signing secret
•••••••••••••••••••• Show Copy
Recent deliveries
200order.created2s ago
200booking.payment_succeeded1m ago
504order.created Retrying5m ago

Simplified illustration. The real panel sits inside Store Settings → Webhooks. You can add multiple endpoints, each with its own event subscriptions, signing secret, and delivery history.

Creating a Webhook Endpoint

Follow these steps to set up a webhook endpoint:

1

Go to Store Settings → Webhooks

2

Click "Add Endpoint"

3

Enter your endpoint URL (must be HTTPS)

https://your-server.com/webhook/prometora
4

Select the events you want to receive

5

Click "Create Endpoint" to save

6

Copy the signing secret for verification

Webhook Security

Each webhook endpoint receives a unique signing secret. Use this to verify that incoming requests are genuinely from Prometora and haven't been tampered with.

Signing Secret

whsec_abc123def456...

Store this secret securely. Never expose it in client-side code.

Security Best Practice

Always verify the webhook signature in your endpoint before processing the data. This prevents attackers from sending fake events to your system.

Webhook Payload

Webhook requests are sent as HTTP POST with a JSON body. Every event uses the same envelope —id, type,createdAt, storeId, and a data block whose shape depends on the event type.

Example: booking.created

{
  "id": "evt_8a3f7c2d9e1b4a6f8c2d9e1b4a6f1234",
  "type": "booking.created",
  "createdAt": "2026-04-23T14:22:11.823Z",
  "storeId": "66f1a2b3c4d5e6f7a8b9c0d1",
  "data": {
    "bookingId": "66f4e5d6c7b8a9f0e1d2c3b4",
    "bookingNumber": "CON-1745418131-A3KZ7Q",
    "status": "pending",
    "bookingType": "service",
    "livemode": true,
    "listing": {
      "id": "66f2c3d4e5f6a7b8c9d0e1f2",
      "title": "Deep Clean — 3 Bedroom"
    },
    "buyer": {
      "id": "66f3b4c5d6e7f8a9b0c1d2e3",
      "email": "[email protected]",
      "firstName": "Marie",
      "lastName": "Tremblay",
      "name": "Marie Tremblay"
    },
    "pricing": {
      "currency": "cad",
      "total": 18000,
      "originalTotal": 20000,
      "discount": 2000,
      "couponCode": "SPRING10"
    },
    "schedule": {
      "serviceDate": "2026-05-01",
      "serviceTimeSlot": "09:00 - 12:00",
      "serviceDuration": 180,
      "serviceAddress": "123 Rue Sainte-Catherine, Montréal, QC"
    },
    "message": "Please focus on the kitchen",
    "payment": {},
    "createdAt": "2026-04-23T14:22:11.823Z",
    "updatedAt": "2026-04-23T14:22:11.823Z"
  }
}

All prices are sent in cents of the store's currency (so 18000 means CA$180.00). The livemode flag is true for real customer bookings andfalse when Stripe test keys were used — add a filter in your automation so test bookings don't leak into production flows.

Event-specific fields:

  • booking.payment_succeeded — adds a populated payment block (stripePaymentIntentId, stripeSessionId, paidAt) and status becomes "confirmed".
  • booking.cancelled — adds cancellation: { cancelledBy, refundIssued }. cancelledBy is one of "buyer", "seller", or "owner".
  • booking.declined — adds decline: { reason } from the seller's decline message.

Delivery Logs

Every webhook delivery is logged so you can see exactly what happened. Expand the "Recent Deliveries" section on any webhook to view:

  • Status: Success (green) or failure (red) badge with HTTP status code
  • Event type: Which event triggered the delivery
  • Response time: How long your endpoint took to respond (in milliseconds)
  • Retry indicator: Shows "Retry #1" or "Retry #2" for retried deliveries
  • Timestamp: When the delivery was attempted

Delivery logs are kept for 7 days. The 10 most recent deliveries are shown per endpoint.

Automatic Retries

If a delivery fails (your endpoint returns a non-2xx status code or times out), Prometora will automatically retry the delivery up to 2 more times with increasing delays:

AttemptDelayDescription
1st (original)ImmediateSent right when the event occurs
2nd (retry #1)~1 minuteFirst retry after initial failure
3rd (retry #2)~10 minutesFinal retry attempt

The exact same payload is resent on each retry, so your endpoint will receive identical data. Each retry attempt appears as a separate entry in the delivery logs.

Auto-Disable Protection

To protect both your system and ours, webhooks are automatically disabled after 10 consecutive failures. This prevents repeated delivery attempts to endpoints that are consistently unreachable.

Webhook Disabled?

If your webhook was auto-disabled, fix the issue with your endpoint and then re-enable it from the webhook settings. The consecutive failure counter resets when a delivery succeeds.

Managing Webhooks

Enable/Disable

Toggle webhooks on or off without deleting them. Disabled webhooks won't receive any events.

View Activity

Each webhook shows when it was last triggered and how many consecutive failures have occurred. Expand "Recent Deliveries" to see detailed delivery history.

Delete

Remove webhook endpoints you no longer need. This action cannot be undone.

Integration Examples

Prometora webhooks are a standard HTTP POST with a JSON body, so they work with any automation platform. Below are step-by-step recipes for the most common setups.

Make.com (recommended)

  1. In Make, create a new scenario and add the Webhooks → Custom webhook trigger.
  2. Click Add, give the webhook a name, and Make will generate a URL like https://hook.eu2.make.com/xxxxxxxx.
  3. Copy that URL and paste it as the Endpoint URL when creating a webhook in Prometora.
  4. Select the events you want (e.g. booking.created, booking.payment_succeeded) and save.
  5. Back in Make, click Redetermine data structure and trigger a test booking in Prometora — Make will auto-map every field.
  6. Add a Filter step with condition data.livemode = true so test bookings don't flow to production.
  7. Add downstream modules (Gmail, Google Sheets, HubSpot, SMS, etc.) and map fields from the webhook output.

Zapier

  1. Create a new Zap and add Webhooks by Zapier → Catch Hook as the trigger.
  2. Zapier gives you a URL like https://hooks.zapier.com/hooks/catch/.... Copy it.
  3. In Prometora, create a webhook with that URL and subscribe to the events you want.
  4. Trigger a test booking, then click Test trigger in Zapier to load the sample payload.
  5. Add a Filter by Zapier step: only continue when Data Livemode is true.
  6. Add your action step (Gmail, Slack, HubSpot, Notion, Airtable, etc.). Zapier has 6,000+ connectors.

n8n (self-hosted)

  1. Create a new workflow and add a Webhook node as the starting trigger.
  2. Set HTTP Method to POST and copy the Production URL.
  3. Paste the URL into Prometora's webhook form and pick your events.
  4. Activate the workflow, fire a test event, and n8n captures the payload. Use {{$json["data"]["buyer"]["email"]}}-style expressions to reference fields downstream.
  5. For HMAC verification, add a Function node that recomputes HMAC-SHA256(rawBody, secret) and compares against the X-Prometora-Signature header.

Top Automation Recipes

1. SMS reminder 24h before a service booking

Trigger on booking.payment_succeeded → in Make, use the Sleep until module set todata.schedule.serviceDate minus 24h → send SMS via Twilio with the service address and time.

2. Sync every paid booking to a Google Sheet

Trigger on booking.payment_succeededGoogle Sheets → Add Row. Map bookingNumber, buyer.email, pricing.total / 100 (for dollars), schedule.serviceDate, listing.title. Great for tax/accounting exports.

3. Slack alert when a seller declines a booking

Trigger on booking.declinedSlack → Send Message to #operations with"{{data.listing.title}} declined for {{data.buyer.name}} — reason: {{data.decline.reason}}". Lets ops manually rescue the customer.

4. Auto-refund follow-up email

Trigger on booking.cancelled with a filterdata.cancellation.refundIssued = true → send a branded confirmation email via Gmail/SendGrid with the refund amount and a discount code to win the customer back.

5. Push new sellers into your CRM

Trigger on seller.registeredHubSpot / Pipedrive → Create Contact. Automate onboarding email sequences and assign to an account manager based on tag.

Pro Tips

  • Start with a test endpoint (like webhook.site) to see the payload structure
  • Your endpoint should respond with a 2xx status within 10 seconds to count as successful
  • Process webhooks asynchronously to avoid timeouts
  • Implement idempotency using the event ID to handle retries and duplicate deliveries gracefully
  • Check the delivery logs regularly to ensure your endpoint is responding correctly
Webhooks | Prometora Docs