Every payment updates your CRM, or you'll know exactly why.
Stripe invoices and failed payments flow to HubSpot, receipts and Slack. Retries are automatic, duplicates are blocked, failures come with the fix.
No sign-up. Your own private sandbox and a 3-minute guided tour.
Or start as Operations (fix failed runs), Developer (webhooks, signed cURL, tests), or Admin (policies, keys, audit).
Step 6 of 7: Held, not dropped: the explanation says what went wrong and names the one change that fixes it.
Held at HubSpot, not dropped
HubSpot has no company linked to this payment, and the step only looks companies up by id.
Turn on “Match company by email domain” on this step, then replay. Nothing is sent twice.
- 10:01:03 AMinvoice.paid RM-4119 · signature valid · first delivery
- 10:01:03 AMduplicate guard · stripe:evt_10001114065637 · new
- 10:01:03 AMmapped for HubSpot update company
- 10:01:03 AMHubSpot update company → 429 · Retry-After 6 s
- 10:01:10 AMretry 2 → 404 company_not_found
- 10:01:10 AMheld R-1001 · not retried: won't fix itself
Stripe in
Done
Mapped
Done
HubSpot · Update companySimulated
RM-4119
Held, not dropped: the explanation says what went wrong and names the one change that fixes it.
Held at HubSpot, not dropped
HubSpot has no company linked to this payment, and the step only looks companies up by id.
Turn on “Match company by email domain” on this step, then replay. Nothing is sent twice.
Then Email and SlackSimulated
Email the receipt, Post to #revenue
- 10:01:10 AMretry 2 → 404 company_not_found
- 10:01:10 AMheld R-1001 · not retried: won't fix itself
Step 6 of 7
Recorded from this build's engine (commit 7eda814); the apps are simulated. In your sandbox it happens live.
What happens to every payment
Received and verified
The webhook's signature is checked against the sender's secret before anything else happens. A bad signature gets a 401 and is logged.
HMAC-SHA256 per sender
Duplicate guard
Senders retry, so the same event can arrive twice. Lampline stores each event once and answers the repeat with the original run.
unique (sandbox, sender, event id)
Mapped
Fields are copied and reshaped by rules you can read: paths, fixed transforms and filters. No code runs from a mapping.
data-only mapping language
Delivered at each app's pace
Every app has its own rate limit. A call that would exceed it waits for its slot instead of failing.
GCRA slot per app
Retried or held
Temporary errors retry with backoff, honoring Retry-After. Errors that won't fix themselves hold the run with the reason and the fix.
exponential backoff with jitter
Recorded
Every attempt keeps its request, response and timing. Replays skip what already happened, so nothing is done twice.
effect ledger + idempotency keys
The engine, queue, retries, API and tests are real and running. The connected apps are simulated so you can break them safely.
Real, running now
- Signed webhook endpoints
- Duplicate guard
- Postgres queue with leases
- Retries with backoff
- Failure queue and replay
- Public API with keys
- The tests of this build
Simulated
- Shopify
- QuickBooks
- Slack
- Google Sheets
- Stripe (test mode, no real charges)
- HubSpot
- Twilio
They answer like the real services, including their failures and rate limits. Nothing leaves Lampline.
Outgrowing a no‑code automation?
Here is what a built integration gives you, each one something you can check in the demo.
Every step's request and response, for every run
Open any runReplay held runs without doing anything twice
The failure queueRate limits per app: calls wait for their slot instead of failing
Break it › Send 25 paid invoices at onceWebhooks and an API you can test with curl
The Webhooks page
What Flickode would build for you
Lampline is the working sample. Your version runs the same engine, pointed at your tools.
Connectors to your real accounts
Your keys, your rate limits, the webhooks your apps already send.
Your flows
The rules your team follows today, written down as steps you can read and change.
Alerts where your team works
Held runs and expired connections reach the channel you watch.
Deployed in your cloud
On your infrastructure, with the code and the data in your hands.
1448 tests passed in the build serving this page
The build stops on any failure, on a missing report or on fewer than 1448 tests. Commit 7eda814.
See every test in Under the hood- Passed: stores a duplicate delivery once and returns the original runsintegration/engine.test.ts
- Passed: works a sandbox until its runs finish, sleeping through Retry-Afterintegration/drain.test.ts
- Passed: fences a stale worker: after its lease expires, its completion writes nothingintegration/engine.test.ts
- Passed: replays from the failed step on the fixed version; earlier steps are not repeatedintegration/engine.test.ts
- Passed: spreads a burst with GCRA slots: 12 orders at 5 per 10 s all succeed, throttles don't count as attemptsintegration/engine.test.ts
- Passed: rejects a bad signature, logging metadata and at most 1 KB of bodyapi/api.test.ts