hotmeteor/receiver
Receiver is a Laravel package for accepting and handling incoming webhooks. Define endpoints, verify provider signatures, and route payloads to events or jobs, making integrations with Stripe, GitHub, and similar services simple and secure.
getEvent() returning an array of event_name => eventData pairs, with a separate handler dispatched per event) unlocks providers that batch — SendGrid named explicitly. This is the difference between "we can't support this vendor without a shim" and "we can." It also means one delivery failure no longer risks silently dropping sibling events in the same payload, provided handlers are idempotent — a design constraint worth stating in the tech spec.php artisan receiver:make MyProvider --provider scaffolds a provider class and a companion ServiceProvider for package auto-discovery. That makes third-party providers publishable as standalone Composer packages. Product implication: long-tail vendor integrations become a community/partner contribution channel instead of an internal backlog item. Worth a deliberate decision — do we accept community providers as dependencies, and what's the review bar?auth HTTP Basic Auth, headers custom headers, ips against Postmark's published webhook IPs) means we can meet enterprise security questionnaires with configuration rather than custom code. Combinable strategies are the right shape: security teams rarely accept one control._ when there's no action field (push, fork), and event names are fully lowercased before class resolution so ALL_CAPS names like PayPal's PAYMENT.AUTHORIZATION.CREATED resolve correctly. These are the highest-cost class of bug we can inherit — silent, intermittent, hard to attribute.Adopt when:
ServiceProvider means the marginal cost of the next integration is low, whether written internally or pulled from the community.Look elsewhere or plan to wrap it when:
For executives: Webhook ingestion is plumbing that every integration needs and no customer ever sees, and we have been paying for it repeatedly — once per vendor, in engineering time and in production incidents. This release turns that into configuration. Five new providers land in one version (Shopify, Twilio, Mailchimp, SendGrid, Paddle Billing), which covers most of the commerce, messaging, marketing, and billing integrations on our roadmap. More strategically, the new scaffolding command lets partners and the community publish their own providers as installable packages — meaning long-tail vendor support can scale without scaling our headcount. There are no breaking changes and no upgrade cost; adoption is additive.
For engineering: Add provider entries to config/services.php per the rewritten README; no breaking changes. Three things to note in the tech spec: (1) getEvent() may now return an array of event_name => eventData pairs with a separate handler dispatched per event — every handler must be idempotent, since batched deliveries make partial-failure more likely and retries more consequential; (2) Postmark verification now supports auth, headers, and ips strategies in combination — use combinations where the vendor publishes IPs, and turn on SendGrid's ECDSA SHA-256 rather than leaving it opt-in-off; (3) provider classes and their auto-discovered ServiceProvider can now be shipped as standalone Composer packages, so we need a review bar for any community provider we accept as a dependency (pinned version, CI green, signature logic readable). Two naming fixes worth knowing about: GitHub events without an action field no longer get a trailing _ (push, fork now map correctly), and event names are fully lowercased before class resolution so ALL_CAPS names such as PayPal's PAYMENT.AUTHORIZATION.CREATED resolve to the expected handler. Tooling to adopt in our own pipeline: PHPStan level 5, Pint, and the composer run lint / lint:check / analyse scripts. CI now spans Laravel 10–13 on PHP 8.2–8.4, which is our upgrade-train answer.
How can I help you explore Laravel packages today?