# Masked Calling for Parcel Labels: Keep Phone Numbers Off the Box (2026)

> How to print a masked number and a per-shipment code on parcel labels so couriers can reach the recipient without the real phone number appearing on the box. Setup, label design, lifecycle and costs.

Source: https://edesy.in/blog/masked-calling-for-parcel-labels-2026

**Masked calling on parcel labels replaces the recipient's phone number with a shared masked number and a short
code for that shipment. A courier dials the number, enters the code, and reaches the recipient; neither side sees
the other's real number. When the shipment is delivered, you switch the code off, so the box in the bin exposes
nothing.**

> **Add masked numbers to your labels:** [Open the Edesy masking portal](https://masking.edesy.in/?utm_source=edesy.in&utm_medium=blog&utm_campaign=masked-calling-for-parcel-labels-2026). Switch a number to extension routing and create codes from your label-printing step.

## The problem with phone numbers on boxes

A shipping label is read by warehouse pickers, sorting hubs, line-haul drivers, last-mile couriers, building
guards and neighbours. After delivery the box goes in the bin with the label still on it. Each of those is a
chance for a phone number to be copied and misused, for spam, harassment or social-engineering calls that sound
convincing because the caller knows what was ordered.

## How it works

```
Label: "Call +91 80XX XXX XXX, code 48219357#"
Courier dials -> enters 48219357# -> recipient's phone rings, showing the masked number
```

1. When you create the shipment, your system creates an extension with the recipient's number as the target and
   the AWB or order ID as the reference.
2. The label prints the masked number and code (and optionally a QR with the `tel:` link).
3. Anyone who needs to reach the recipient dials and enters the code.
4. Edesy connects the call. Both sides see the masked number.
5. When the shipment closes, your system deactivates the code.

## Extension codes vs session masking for deliveries

| | Extension codes on the label | Session masking |
|---|---|---|
| Who can call | Anyone holding the label | Only the two paired numbers |
| Known in advance | Only the recipient | Both the agent and the recipient |
| Third-party couriers | Works; nothing to integrate | Needs the courier's agent number |
| Recipient calls back | Not through the code | Yes, both ways |
| Expiry | You deactivate the code | Built-in session expiry and max calls |
| Best for | Labels printed before dispatch, mixed couriers | Your own fleet, app-assigned riders |

Many logistics setups use both: sessions for their own riders, extension codes on labels for everything else.
See [number masking for delivery and logistics fleets](https://edesy.in/blog/number-masking-delivery-logistics-fleets-2026) for
the session side.

## Setting it up

1. **Get a number.** Buy an Indian number in the Edesy voice portal after KYC and enroll it in masking. Switch it
   to extension routing.
2. **Create an extension when the label is generated:**

```http
POST https://voice-api.edesy.in/v1/masking/extensions
{ "target_number": "9876543210", "reference": "AWB1234567890", "label": "Order 58213" }
```

3. **Print** the number and the returned `code` on the label. For a QR, use `dial_links[].tel_uri`.
4. **Close the code** when your shipment status reaches delivered, returned or cancelled, after any grace period
   you want:

```http
PATCH https://voice-api.edesy.in/v1/masking/extensions/{id}
{ "status": "inactive" }
```

Or delete it. Past call logs keep the code, so you can still audit calls on that shipment.

## Label design

| Element | Recommendation |
|---|---|
| Phone field | "Call +91 80XX XXX XXX, code XXXXXXXX#" |
| QR (optional) | `tel:` link from `dial_links`; handy for couriers' phones |
| Code length | 8 or more digits if you have many active shipments |
| Recipient name | First name or initials, if your process allows |
| Address | Unchanged; couriers still need it |

If you supply your own codes, make them random. Sequential codes (or codes derived from the AWB) are easy to guess.

## Lifecycle rules that work

- **Create** at label print, not at order time, so cancelled orders don't leave active codes.
- **Keep active** through out-for-delivery and a short window after delivery for follow-ups.
- **Deactivate** on delivered, returned to origin or cancelled.
- **Reactivate** for a re-delivery attempt by setting the status back to active.

Your event webhook receives `call.incoming`, `call.connected`, `call.missed` and `call.ended` for extension calls,
with the code and your `reference`. Use them to log delivery contact attempts against the shipment: useful
evidence when a customer says nobody called.

## What the courier and recipient hear

The courier hears a prompt to enter the code, then ringback. Wrong codes get up to three attempts. An inactive
code plays "This code is not active." The recipient sees an incoming call from the masked number. It helps to tell
customers in the order confirmation that the courier may call from that number.

## Limits

- One target per code. If the recipient doesn't answer, there is no fallback number.
- The recipient can't call the courier back through the code; they see only the masked number.
- There's no SMS or WhatsApp masking; this is for voice calls.

## Costs

| Item | Price (excl. 18% GST) |
|---|---|
| Masked call | Rs 1.50/min, 60-second pulse, 1-minute minimum |
| Billed time | Only after the recipient answers |
| Prompt, ringing, unanswered calls | Not billed |
| Number rental | Rs 499/month (mobile or 92-series), Rs 449 (landline) |

Example: a 1-minute delivery call is Rs 1.50 before GST. One number serves all your active codes; add numbers if
you need more simultaneous calls.

More on [extension code number masking](https://edesy.in/blog/extension-code-number-masking-2026), the
[extension codes feature page](https://edesy.in/number-masking/features/extension-codes), [number masking pricing](https://edesy.in/number-masking/pricing),
the [number masking hub](https://edesy.in/number-masking) and the [number masking docs](https://edesy.in/docs/number-masking).

## Frequently Asked Questions

### How does masked calling on a parcel label work?

Instead of the recipient's phone number, the label shows a shared masked number and a short code for that shipment. Whoever needs to call the recipient dials the number and enters the code, and is connected. Neither side sees the other's real number.

### Why not just print the customer's phone number?

A parcel passes through many hands: warehouse staff, sorting hubs, couriers, neighbours, and whoever finds the discarded box. Every one of them can read a printed number. A masked number and code expose nothing reusable.

### When should the code stop working?

After delivery or return, plus a short grace period for follow-up calls. Set the extension inactive or delete it via the API when your shipment status changes, and the code then plays a not-active or invalid message.

### Can the delivery agent and customer use session masking instead?

Yes, if your app knows the delivery agent when the shipment goes out. Session masking pairs the two numbers on a virtual number with an expiry. Extension codes are better when the label is printed before you know who will handle it, or when third-party couriers carry it.

### What does a masked call from a label cost?

Rs 1.50 per minute on a 60-second pulse with a 1-minute minimum, billed only on the time after the recipient answers. Unanswered calls cost nothing. Number rental is extra. Prices exclude 18% GST.

### How long should the codes be?

Codes can be 4 to 10 digits. Edesy generates 6 random digits by default. If you have many active shipments at once, longer codes (8 or more digits) make guessing a valid code much harder.
