Don't call us. We'll call you.
Polling is asking "are we there yet?" every five seconds. Webhooks are the platform tapping you on the shoulder the moment something happens: a call ended, a booking was made, a message arrived, a payment cleared. Your server exposes an HTTPS endpoint; esimgomobile POSTs a signed JSON event to it in near real time; you react.
This guide covers webhooks as an engineering discipline — receiving, verifying, retrying, and going idempotent — plus the esimgomobile event catalog. The receiver patterns are universal and production-ready today; the esimgomobile-specific event names are marked clearly as launching.
The event catalog
Events follow a consistent envelope: a unique id, a type, a created_at timestamp, and a data object with the full resource. Design your handlers around the envelope, not individual fields — new event types should flow through the same pipeline without code changes.
# illustrative envelope — final field names publish at launch { "id": "evt_9f2k41", "type": "call.completed", "created_at": "2026-09-20T19:02:11Z", "data": { "call_id": "call_abc", "duration_s": 127, "summary": "Booked: crown consult, Thu 10:30…", "transcript_url": "https://…" } }
Planned types: call.completed (transcript, summary, recording URL), booking.created / booking.cancelled (slot, caller, policy outcome), message.received (inbound SMS), esim.activated (line went live), payment.succeeded (checkout completed). Subscribe per endpoint — each URL gets only the types it needs.
Verify every signature, trust nothing else
Your webhook endpoint is a public URL that triggers actions in your system — creating bookings, sending messages, updating records. Anyone who can POST to it can impersonate the platform. Signature verification is the entire security model: every event carries an HMAC signature computed with your endpoint's secret; you recompute it over the raw body and compare in constant time.
# Python (Flask) — verify before you do anything else import hmac, hashlib, os from flask import Flask, request, abort app = Flask(__name__) SECRET = os.environ["ESIM_WEBHOOK_SECRET"].encode() @app.post("/webhooks/esimgomobile") def webhook(): raw = request.get_data() sig = request.headers.get("X-Esim-Signature", "") # header name illustrative — final name publishes at launch expected = hmac.new(SECRET, raw, hashlib.sha256).hexdigest() if not hmac.compare_digest(expected, sig): abort(401) event = request.get_json() handle(event) # your logic return {"ok": True}, 200
Three rules: verify on the raw body bytes (re-serialized JSON won't match), use constant-time comparison (hmac.compare_digest, never ==), and keep one secret per endpoint so rotation doesn't take everything down. Reject mismatches with 4xx — never process first and verify later.
Retries, backoff, and the 200 contract
The delivery contract is simple: we POST the event; if your endpoint doesn't answer 200 within seconds, we retry at increasing intervals — minutes, then longer, then hours — before flagging the event as dead-lettered for your inspection. Design your endpoint for this contract:
Reply 200 fast, work later. Acknowledge receipt immediately and process asynchronously (queue, background job). A handler that does slow work inline — CRM calls, email sends — will time out, and every timeout is a duplicate delivery later.
Expect duplicates. "At least once" delivery means the same event can arrive twice: a retry after your 200 got lost on the wire, a timeout you actually survived. Duplicates aren't bugs; unhandled duplicates are. Which brings us to:
# Node.js (Express) — idempotent handler skeleton const seen = new Set(); // use Redis / DB in production app.post("/webhooks/esimgomobile", express.raw({ type: "application/json" }), (req, res) => { if (!verify(req)) return res.sendStatus(401); // Chapter 3 const event = JSON.parse(req.body.toString()); if (seen.has(event.id)) return res.sendStatus(200); // duplicate — skip seen.add(event.id); queue.add(() => handle(event)); // async work res.sendStatus(200); });
Test webhooks on your laptop
Webhook development needs your localhost reachable from the internet. Use a secure tunnel (your team's standard tooling), register the tunnel URL as a test endpoint, and trigger real events — place a test call, make a test booking — watching payloads land in your logs. Log the full raw body and headers first; parse second. When the handler is boring — verify, dedupe, queue, 200 — it's ready for production.
In production: HTTPS only, one endpoint per concern (don't route six event types through one giant switch if they have different owners), monitor delivery (alert on dead-letters, track handler latency), and version your endpoints (/webhooks/esimgomobile/v1) so future shape changes don't break you.
Before you ask.
Webhooks vs polling — when should I use each?
What happens if my endpoint is down?
How do I know an event really came from esimgomobile?
Can the same event arrive twice?
Are webhooks available now?
Get connected today.
Monthly plans from $8/mo, travel packs from $3.65. Real checkout, no waiting.
See it live
From the article to your phone.
Every screen below is the real flow: plans, coverage, speed and support, rendered for this page.

- 1A real support transcript: the question, then the specific answer.
- 2This is what 'AI support' actually looks like in practice.
- 1Signal widget: network generation and destination, always visible.
- 2Five bars, zero ambiguity about what you're connected to.
- 1Mockups illustrate the product flow — captions describe what's real.
- 2Figures labeled as examples show sample data, never live telemetry.

- 1Checkout shows the full price before you pay. Nothing hidden.
- 2Amazon Pay handles payment securely; taxes are calculated for you.
- 1Checkout shows the full price before you pay. Nothing hidden.
- 2Amazon Pay handles payment securely; taxes are calculated for you.
- 1Coverage pins show where partner networks are live.
- 2The map answers the only question that matters: will it work there?
- 1Live usage ring: see remaining data at a glance, no mental math.
- 2Top-up button sits right where you need it when data runs low.
- 1Illustrative speed readout: sample carrier, city and latency figures.
- 2The meter demonstrates the readout — figures are examples, not live measurements.
- 1The plan card shows exactly what you're buying — data, days, destination.
- 2One tap starts the two-minute QR install.
- 1Coverage status at a glance: data live, number available, 5G ready.
- 2Green means go — no guessing about what's supported.

- 1Coverage status at a glance: data live, number available, 5G ready.
- 2Green means go — no guessing about what's supported.
- 1Live usage ring: see remaining data at a glance, no mental math.
- 2Top-up button sits right where you need it when data runs low.
- 1Live usage ring: see remaining data at a glance, no mental math.
- 2Top-up button sits right where you need it when data runs low.
- 1Checkout shows the full price before you pay. Nothing hidden.
- 2Amazon Pay handles payment securely; taxes are calculated for you.
- 1Coverage pins show where partner networks are live.
- 2The map answers the only question that matters: will it work there?
- 1The plan chip: name, allowance and destination in one line.
- 2Everything you need to confirm you're on the right plan.
- 1Signal widget: network generation and destination, always visible.
- 2Five bars, zero ambiguity about what you're connected to.
- 1The plan chip: name, allowance and destination in one line.
- 2Everything you need to confirm you're on the right plan.
curl https://api.esimgomobile.com/v1/esims \
-H "Authorization: Bearer $KEY" \
-d '{"country":"WE"}'- 1Three plans side by side so the trade-off is obvious.
- 2Pick by trip length, not by decoding fine print.
- 1The roaming math, made visible: one price versus per-day carrier fees.
- 2This is the comparison most travelers never see until the bill.




















Explainer
Key takeaways
- Match the plan to the trip length and your heaviest single use-case, then stop thinking about it.
- When something goes wrong abroad, the fix is almost always: toggle airplane mode, check the eSIM line is enabled, then ask the Tele Agent.
- Setup beats improvisation — every tip in this article works best arranged before departure.
- The core idea: Webhooks Integration Guide matters because connectivity shapes the whole trip, not just the phone bill.
- Data-first eSIMs keep your number and your apps; the only thing that changes is the price.
Explainer
Putting it into practice
Then run through the travel tips checklist above. Ten minutes of preparation saves hours of airport problem-solving.
Reading about Webhooks Integration Guide is step zero. Step one is a two-minute action: check your phone is unlocked and eSIM-capable, then pick a plan sized to your next trip.
Install the eSIM now — it costs nothing to have it sitting on your phone waiting. Activation happens when you say so.
Go deeper
And the Tele Agent will walk through any of this conversationally if you'd rather talk than read.
The tools index turns article advice into instant answers — coverage checks, plan pickers and compatibility checks that take seconds.
Explainer
Common mistakes to avoid
- Forgetting two-factor: banks text your home number — keep that SIM active.
- Disabling the wrong line: label your eSIM clearly in phone settings.
- Ignoring the 80% alert: top up early; data never gets cheaper mid-trip.
- Assuming hotel Wi-Fi will do: it won't, at the exact moment you need it most.
- Buying data at the airport: the most expensive megabyte is the panicked one.
The data room
Webhooks Integration Guide, visualized.
Webhooks Integration Guide — data dashboard
The numbers behind the story, switchable by dataset.
Hover any bar or point for its exact value. Tabs switch datasets — everything on this panel is computed from live product data unless labeled illustrative.
Your plan is two minutes away
Prepaid, no contracts, no roaming surprises. The whole setup takes about two minutes.