Policies & help › Developers

Webhooks

Effective 8 October 2026 · Version 1.0

Indo Mail has no webhooks yet. This page describes the planned design (events, payload, HMAC-SHA256 signatures, retries and idempotency) and what developers can use today instead.

1. Status

Webhooks are planned and are not live. You cannot register a webhook address with Indo Mail today, and no calls are made to any address you own. This page sets out how webhooks are intended to work so that developers can plan, and so that the design can be criticised before it is built. Details may change before release.

A webhook is a message that Indo Mail sends to a web address you control when something happens in an account that has allowed it. It saves you from asking the API again and again whether anything is new.

2. Planned design principles

3. Planned events

EventSent whenNeeds scope
mail.receivedA message arrives in the inboxmail.readonly
mail.sentA message has been handed over for deliverymail.readonly
mail.bouncedA message to an outside address could not be deliveredmail.readonly
mail.labelledA label is added to or removed from a conversationmail.readonly
mail.spam_reportedThe user reports a message as spam or as scammail.readonly
drive.file_createdA file or folder is created in Drivedrive.readonly
drive.file_sharedA share link is created or removeddrive.readonly
wallet.request_paidThe user marks a UPI payment request as paidwallet.request
ads.lead_receivedA Local Services Ads enquiry arrives for an advertiserads.read
ads.creative_reviewedAn ad was approved or rejectedads.read
domain.verifiedA business domain passed its DNS checkadmin
domain.check_failedA DNS check found that a required record is missingadmin
user.signed_in_new_deviceA sign-in from a device not seen beforeadmin

The wallet event reports only what the user has recorded. Indo Mail does not hold money and cannot confirm a UPI payment itself.

4. Planned payload

Every call will be an HTTP POST with a JSON body in this shape:

Headers will include Content-Type: application/json, User-Agent: IndoMail-Webhooks/1, Indo-Event-Id, Indo-Timestamp and Indo-Signature.

5. Planned signatures (HMAC-SHA256)

Anyone can send a web request to your address, so you must check that a call really came from Indo Mail. Each webhook will have its own signing secret, shown once when you create it. For each call we will compute an HMAC-SHA256 of the text timestamp + "." + raw request body, using that secret as the key, and send it as Indo-Signature: v1=<hex digest>.

To verify a call: read the raw body (before any JSON parsing), take the Indo-Timestamp header, compute the same HMAC with your secret, compare the result to the header using a constant-time comparison, and reject the call if the timestamp is more than five minutes old. This stops attackers from replaying an old call.

You will be able to rotate a secret at any time. During rotation both the old and the new secret are valid for 24 hours, and calls carry two signatures.

6. Planned delivery and retries

RulePlanned behaviour
SuccessYour server replies with any 2xx status within 10 seconds.
FailureAny other status, a timeout or a connection error counts as a failure.
RetriesWe retry with growing gaps (about 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 12 hours) until 24 hours after the first attempt.
Giving upAfter 24 hours without success, the event is dropped and recorded as failed in the webhook log.
DisablingIf a webhook keeps failing for 3 days in a row, we disable it and email the account owner and the developer.
OrderingOrder is not guaranteed. Use the created time to sort.
RedirectsRedirects are not followed.

Reply quickly and do the heavy work later. Put the event in a queue, answer with 200, and process it in the background.

7. Planned idempotency

Because of retries, your server may receive the same event more than once. Each event has a fixed id, and the Indo-Event-Id header carries the same value. Store the IDs that you have handled for at least 7 days. If an ID arrives a second time, reply with 200 and do nothing. This makes your handler idempotent, which means that doing it twice has the same effect as doing it once.

The same idea applies to calls that you make to us. The versioned API is planned to accept an Idempotency-Key header on actions such as sending a message, so that a retry after a network failure does not send the message twice.

8. What you can use today

Until webhooks are available, these live features give you near real-time information without polling in a tight loop.

OptionHow it worksGood for
Web PushBrowsers can subscribe at POST /api/push/subscribe and receive an encrypted notification for each new inbox message. The public key is at GET /api/push/key. Delivery goes through the browser's push service (Google, Mozilla, Apple or Microsoft), which sees only encrypted data.Notifying a person on a phone or laptop.
Live streamCall POST /api/mail/events-ticket for a ticket that lasts 60 seconds, then open GET /api/mail/events with it. The server pushes an event whenever mail arrives or changes.A running app or dashboard that is signed in.
Android device pollingThe Android app registers a device and checks for new mail in the background about every 15 minutes.Our own Android app.
Regular API checkCall GET /api/mail/counts or GET /api/mail/messages on a schedule of no more than once a minute, with a token.Simple scripts and cron jobs.

All of these work only for your own signed-in account. None of them lets a third party watch another person's mail.

9. Security promise

When webhooks launch, we will publish the full specification, a test tool that sends sample events, and a changelog. We will give at least 12 months' notice before removing any event or field. We will never sell webhook data, never send it to advertisers, and never use it to train AI models.

10. Contact

To tell us which events you need, or to join the early-access list: contact@indoemail.in with the subject "Developer access".

INDO CHATS PRIVATE LIMITED, 168, GT Rd, near Aloka Cinema, Shibpur, Howrah, West Bengal 711102, India.