Skip the address form.
The address step is where checkouts die — 60–90 seconds of typing on a mobile keyboard, full of typos. Address Auto-fill turns a verified phone number into a complete, structured delivery address in a single server-side call. No form. No typing. No abandonment at the one step that costs you the order.
The address form is where checkouts die.
For a returning shopper, the address screen asks for information they've already given someone else — and makes them re-type it on a phone keyboard at the exact moment they're ready to pay. Address Auto-fill removes the step entirely, for everyone who's in the network.
What the manual address form costs you
- 60–90 seconds of typingHouse number, street, locality, city, state, PIN — on a mobile keyboard.
- Abandonment at peak intentThe form lands right when the user is ready to pay — and many drop.
- Typos and failed deliveriesA wrong PIN or missing landmark turns into an RTO and a support ticket.
- Re-entering known informationThe same address the user has typed into a dozen other apps already.
What Address Auto-fill gives you instead
- A pre-filled address in one callName, address, city, state, and PIN returned structured and ready.
- Consent-driven by designNothing is returned until the user accepts a consent notice.
- The raw number never leavesLookups key on
mobileMd5— a hash, not the phone number. - The user stays in controlThey confirm or edit the pre-fill — and manual entry is always the fallback.
Verified number in. Pre-filled address out.
Four steps, all server-side. Authenticate the user, check coverage on a hash of the number, ask for consent, then fetch and pre-fill. The address never moves without the user's say-so.
mobileMd5 and check coverage before you show anything.addressExists is false, fall straight through to manual entry.
Three operations on one number.
Each endpoint does one thing well. Check coverage, fetch the full address with consent, or clean up a raw address string into a structured form. All three authenticate with your server-side clientId and clientSecret.
Coverage check
A lightweight server-side check that returns whether an address record exists for the mobileMd5 hash. Returns addressExists: false when the number isn't in the network — your cue to fall back to manual entry before showing any consent prompt.
Full address fetch
Returns the complete structured address — only after the user accepts consent. Pass mobileMd5, purpose, details, and tncUrl, plus optional consentDurationInDays and userIp.
Normalize a string
Takes any raw address string and returns it in a clean, structured form via Shiprocket. Useful for tidying user-supplied addresses before you store them — works on any text, no phone number required.
| Attribute | /address/exists | /address/locate | /address/standardize |
|---|---|---|---|
| Input | mobileMd5 | mobileMd5 + consent | raw address string |
| Needs consent | No | Yes | No |
| Needs phone number | Yes (hashed) | Yes (hashed) | No |
| Returns | addressExists | Full address | Structured address |
| When to call | Before consent | After consent | Anytime |
Consent-first. Hash-keyed.
Address data is personal, so the API is built so it can't move without the user's explicit agreement — and so the raw phone number never has to travel on the wire.
The number stays hashed
Every lookup keys on mobileMd5 — the MD5 hash of the 10-digit number, no country code. Computing it client-side keeps the raw phone number out of the request entirely.
Consent is enforced, not assumed
You confirm an address exists, show the user a consent notice with your tncUrl, and only then call locate. The Data Provider independently validates that consent before returning any data.
Scoped, time-bound access
Each request carries a purpose and an optional consentDurationInDays, so access is tied to a stated reason and a window — not an open-ended grant.
Built for the moment before payment.
E-commerce checkout pre-fill
Pre-fill the shipping step the instant the user authenticates. Fewer fields to complete before placing the order means fewer drop-offs at the most valuable moment in the funnel.
Quick commerce
In time-sensitive delivery flows, every removed keystroke matters. Eliminating address entry lifts order completion when the user just wants their order placed and on its way.
New-user onboarding
Populate a delivery-address profile on a user's very first visit — before they've ever typed an address into your app — so their first order is as smooth as their tenth.
Address validation
Cross-reference a user-supplied address against the one tied to their verified number to flag inconsistencies — catching errors and risk before a parcel ever ships.
Hash the number. Check, consent, locate.
A REST API with no SDK — one server-side call per checkout attempt. Compute the hash from the verified number, confirm coverage, then fetch the address after the user consents.
import crypto from 'crypto' // verified number from OTPless auth — 10 digits, no country code const mobileMd5 = crypto .createHash('md5') .update('7069914791') .digest('hex') // 1. Coverage check — no consent needed const { addressExists } = await post('/v1/address/exists', { mobileMd5 }) if (!addressExists) return showManualForm() // fallback // 2. Show consent notice → on accept, fetch the address const address = await post('/v1/address/locate', { mobileMd5, purpose: 'checkout_prefill', tncUrl: 'https://shop.example/terms', consentDurationInDays: 30 }) prefillCheckout(address) // user confirms or edits
Common questions.
What is mobileMd5 and why do I need to compute it?
Does the user need to give consent before their address is returned?
What happens if no address is found for the phone number?
Is the Address API available globally?
What does the standardize endpoint do?
Do I need the device SDK to use this?
Stop making users type an address you can already fetch.
A verified number in, a structured address out — consent-gated and India-wide. Talk to us about adding address pre-fill to your checkout.