Skip to main content
.com domains from $2.99 — free WHOIS privacy on every name

Engineering Glossary · Integrations

Webhooks: Your Endpoint Has a Response-Time Budget

The same event arriving three times is almost never a provider bug; it is your endpoint taking too long to say it got the first one.

The short answer

A webhook is an HTTP POST pointed at you rather than by you — and the service sending it is timing your reply, which makes your endpoint's response time part of the contract rather than an implementation detail.

Providers allow a handful of seconds, then treat the delivery as failed and retry it on a backoff schedule. So the shape that works is always the same: verify the signature, write the payload to a row or a queue, return 200 immediately, and do the real processing on the next cron tick. Anything that talks to a database, resizes an image or calls a third party inside the request is how you end up with duplicate orders.

By the HostingFast team · Reviewed 12 August 2026

0

Jargon left undefined

100+

Entries, all cross-linked

Real

Working examples

Free

To read, always

You register a URL with the service and it posts event data there as things happen: a payment cleared, a form arrived, a branch was pushed. Reacting to an event beats asking over and over whether one occurred, and it removes the polling interval from your latency budget entirely.

The receiving end needs manners. Your endpoint should verify the signature on every delivery, because anyone who learns the URL can post to it, and it should answer promptly. A delivery that failed is normally retried by the service that sent it, which means your handler has to tolerate seeing the same event twice.

The budget nobody prints in bold

Read any provider's delivery documentation and you will find a timeout measured in single-digit seconds, followed by a retry schedule. Your handler is being graded against that clock on every event. Exceed it and the provider records a failure, queues a retry, and eventually starts backing off — so a handler that is merely slow looks identical, from the outside, to a handler that is down.

The observable symptom is duplicates. When the same order confirmation fires twice on a busy afternoon and once on a quiet one, the variable is not the provider. It is how long your endpoint took while the server was under load.

Acknowledge first, work afterwards

Split the handler in two. The synchronous half checks the signature, writes the raw payload and the provider's event ID into a table, and returns 200 with an empty body. That should complete in tens of milliseconds. The asynchronous half runs from cron, picks up unprocessed rows, and does the slow work where nothing is waiting on it.

Store the event ID and check it before processing. That single unique constraint is what makes retries harmless: the second delivery of the same event finds the row already handled and does nothing, which is exactly the behaviour you want at three in the morning.

Proving the endpoint is quick, not assuming it

Time it the way the provider does: curl -X POST -o /dev/null -s -w '%{time_total}' against the endpoint with a representative payload. Then check the raw access log in cPanel — the response time column tells you what real deliveries cost, including the ones that arrived while a backup was running.

One trap is specific to cached hosting. If your webhook path sits behind a full-page cache, the first delivery may be served from cache on the next one and your handler never runs. Exclude the endpoint path from LiteSpeed caching explicitly, then confirm the response carries no cache hit header before you trust it.

Where this lands on HostingFast

Cron is available from the control panel and over SSH, so the deferred half of the handler has somewhere to run without an external scheduler. Every plan ships with a free SSL certificate that renews itself ahead of expiry, which matters because virtually every provider refuses to deliver to a plain HTTP URL.

Follow-on entries: API, Cron Job, Git and WooCommerce — the four terms that usually turn up in the same stack trace as this one.

A developer working against a hosted server over SSH

Definitions written for people who deploy

Every entry here started life as a support ticket. Rather than explain the same term for the two hundredth time, we wrote it down properly — with the command that measures it and the number that counts as good.

Mailboxes on your own domain come as part of the plan — email is included, never sold back to you at checkout.

  • 100+ entries, each with the mechanism spelled out
  • Commands you can paste, numbers you can compare against
  • Neighbouring terms wired together at the foot of every page
  • Written by the engineers who answer the tickets

Why HostingFast

Standard on every plan

The retry story told properly

Every integration entry covers what happens on the second delivery, because that is the one that corrupts data.

Mechanism, not vocabulary

How the thing works underneath, since you cannot tune what you only recognise by name.

Numbers rather than adjectives

Response-time budgets, timeouts and thresholds are named, not left as 'should be fast'.

Cache interactions flagged

Where a full-page cache silently changes behaviour, the entry says so and says which path to exclude.

Wired to its neighbours

Webhook runs into API, Cron Job and Git — the terms that share a stack trace with it.

This term, landed

Webhook defined, budgeted, secured and located in your own account — enough to build against tonight.

Quick Start

From order to online

  1. 1

    Verify the signature before anything else

    Compute the HMAC over the raw body, compare it in constant time, and reject on mismatch. Do this before parsing, because a forged payload should never reach your parser.

  2. 2

    Write the payload and return 200

    Insert the raw body and the provider's event ID, then answer immediately. Target tens of milliseconds; anything past a couple of hundred is worth investigating.

  3. 3

    Process on cron, keyed by event ID

    Pick up unprocessed rows on the next tick and mark them done. The unique constraint on the event ID is what turns a duplicate delivery into a no-op.

Built In

Loaded onto every plan

  • LiteSpeed caching built into the server rather than bolted on by plugin
  • NVMe SSD storage on every tier, not only the expensive ones
  • Free SSL on every plan, renewed automatically before it can lapse
  • cPanel, so the cron editor and the raw access logs are where you expect them
  • Per-site PHP version switching from the control panel
  • WordPress and 400+ other applications installed in one click
  • Browser webmail plus IMAP, POP and SMTP for any mail client
  • Upgrades applied in place — changing plan is not a migration
  • A renewal price identical to the one you signed up at
  • DDoS filtering absorbed out at the network edge

Frequently Asked

What people ask us most often

How long does a handler have before the provider gives up?

Assume single-digit seconds and design for far less. The safe pattern is to verify, persist and return 200 in tens of milliseconds, then process on cron. Providers vary, and rather than memorise each one's limit it is easier to build a handler quick enough that none of them matter.

Why did the same event arrive twice?

Because the first acknowledgement did not reach the provider in time, so it retried. That is normal behaviour, not a fault. Store the provider's event ID with a unique constraint and check it before you act, and the second delivery becomes a no-op instead of a second order.

Should the endpoint be excluded from the page cache?

Yes, explicitly. A full-page cache in front of a POST endpoint can serve a stored response and skip your handler entirely, which produces the worst kind of bug: deliveries the provider records as successful that did nothing. Add the path to the cache exclusions, then confirm the response comes back without a cache hit header.

Is the included SSL certificate sufficient for a webhook endpoint?

Completely, on every plan. The certificate issues as soon as your domain points at us and renews itself long before expiry, and cryptographically it matches any paid DV certificate. The paid options exist for wildcard coverage or organisation validation, neither of which a webhook endpoint has any use for.

Keep reading

  • API (Application Programming Interface)

    The outbound half of the same conversation, and the one that sits inside your own response time.

  • Git

    Version control as a deployment mechanism — the thing most deploy webhooks are actually triggering.

  • Best LiteSpeed Hosting

    What LiteSpeed changes about caching, and which paths you have to keep it away from.

  • Web Hosting

    Fast cPanel hosting on NVMe drives — SSL, migration and a year-one domain all included.

  • Laravel Hosting

    Laravel with Composer, SSH and Git-driven deploys, where queue workers have somewhere to run.

Changing hosts? Run through our checklist first.

A straightforward sequence for a switch your visitors never feel: which files move first, how to shift email across without losing a single message, the right moment to repoint DNS, and the two mistakes behind almost all the downtime we get asked to rescue.

You'll get the checklist email, then occasional pointers on keeping a site running fast. Unsubscribe the moment you want out — the privacy policy covers the rest.

Give the endpoint faster ground.

NVMe storage, LiteSpeed in the server and cron you control — with support that reads a log rather than a script.

View Web Hosting plans