Skip to main content

Overview

Webhooks let your application receive real-time notifications when events occur — a card charge completes, a recurring payment fails, an invoice is paid. Instead of polling the API, Dime Payments pushes event data to a URL you specify.

Setting up a webhook

  1. Log into the Dime Payments dashboard
  2. Navigate to Advanced > Webhooks
  3. Click Add Endpoint
  4. Enter your publicly accessible HTTPS URL
  5. Select the event this endpoint should receive
  6. Save
Your endpoint must return a 200 response within 3 seconds or the attempt is considered failed. Do any real work asynchronously — acknowledge the delivery first, then process it on a queue.

One endpoint per event

Dime Payments registers each webhook against a single event. Payloads do not carry an event-name field, so you cannot inspect the body to tell which event fired. Instead, register a separate endpoint URL for each event you care about and identify the event by which URL received the delivery. For example, point Credit Card Charge at https://yourapp.com/hooks/card-charge and Invoice Paid at https://yourapp.com/hooks/invoice-paid, then handle each route separately.

Event types

These are the events you can subscribe to. Each name is the exact string shown in the dashboard when you add an endpoint.

Transactions

Recurring payments

Invoices

Subscriptions

Payload format

The request body is a flat JSON object. The event data is sent at the top level — there is no envelope, and no event or type field wrapping it. A transaction webhook:
An invoice webhook:
Because payloads carry no event discriminator, always identify the event from the endpoint URL that received it (see One endpoint per event above).

Verifying webhook signatures

Dime Payments signs every webhook so you can verify it came from us. The signature is sent in the Signature header as a hex-encoded HMAC-SHA256 of the raw request body, keyed with the secret shown against that endpoint in the dashboard.
Always compare with a timing-safe function such as hash_equals, and sign against the raw body — re-encoding the parsed JSON can reorder keys and change the hash.

Retries

If your endpoint fails to return a 200, Dime Payments retries with exponential backoff. A delivery is attempted up to 3 times before it is abandoned. Because there is no delivery-history screen in the dashboard and no manual retry, treat webhooks as best-effort rather than a guaranteed ledger. Reconcile against the API for anything you cannot afford to miss.

Testing webhooks locally

Use a tool like ngrok to expose your local server to the internet during development:
Use the generated https:// URL as your webhook endpoint in the dashboard.

Next steps