Return Labels
Updated 11 November 2026
Overview
This article explains how ReturnZen buys a return label when a shopper submits a return, which settings decide the carrier, the two addresses and the parcel, and what the shopper and your team see afterwards.
Use the menu on the left to quickly navigate this article.
Before you start
- EasyPost connected under Shipping > Shipping Services, with at least one carrier account, and switched on under Tools > Integrations.
- A return destination under Shipping > Destinations.
- A return policy with Generate return labels on, under its Labels & shipping tab.
How return labels are built
How it works
The label is bought during submit. When a shopper submits a return on a policy with Generate return labels on, ReturnZen asks EasyPost for rates on your own EasyPost account, picks one, buys the label and shows it on the confirmation page before the shopper leaves.
When EasyPost is off. While EasyPost is switched off under Tools > Integrations, or has no saved key, no label is bought and no placeholder label is made. The shopper gets the self-ship method and your return address instead, and a return you create in the admin is self-ship too. See Self-Ship Returns.
The addresses. The label ships to your return destination from the shopper's address on the order. The destination is the one chosen on the policy under Policy name & zone, in the Destination field, or your default destination when that field reads No destination (use default). The return page shows it under Destination address.
The carrier. Label rate shopping on the policy's Labels & shipping tab decides this. Best label rate (recommended) compares rates across every carrier on your EasyPost account and buys the cheapest. Specific carriers only limits the comparison to the carriers you pick, and if none of them offers a rate, no label is bought. Within a carrier, Customized carrier service types on the carrier's own page narrows which services are considered. Open that page from Shipping > Shipping Services, Manage Integration, then Edit Carrier.
The parcel. Weight is the sum of the item weights from Shopify, using Product weight default for any product with no weight in Shopify, plus Box weight default. Size comes from Package length default, Package width default and Package height default. All five are under Label defaults on Shipping > Shipping Services. The return page shows the result as Total weight.
What prints on it. The fields under Label customization on the carrier's page can print the order name, the RMA number, the return outcomes, the customer's name or email, or custom text. Some carriers do not print every field.
Important: The label is paid for on your EasyPost account the moment it is bought. An unscanned label is voided when the return is cancelled, rejected or expires.
Policy > Return Policies, a policy's Labels & shipping tab with Generate return labels on and Label rate shopping set to Best label rate
What the shopper sees
The confirmation page is headed Your label is ready to print, with a Print Return Label button, the carrier to drop the parcel off at, and the date to drop it off by. The Return confirmation email says the label and return instructions are ready at a link.
On the return page your team can send the label again with Email Shipping Label on the Return method information card. The card counts how many times it has been sent.
If a return was submitted without a label, for example because the policy had labels off at the time, the same card reads A shipping label was not created for this return, shows the parcel's Total weight, and offers Create Shipping Label. While EasyPost is switched off or has no saved key, Create Shipping Label is disabled, with a sentence saying why and a link to the EasyPost page.
The return page, Return method information card with the tracking number, Rate, Label type and the Email Shipping Label button
When a label fails
This section covers what happens when a carrier refuses to print a return label or never answers. The return is still created, the shopper is told how to send the parcel back without a label, and the return page tells you what went wrong and where to look.
How it works
Where the failure shows. In Returns > Return Processing, the returns list shows Label failed in the Shipping status column, and Label failed is a choice in the Shipping status filter. The chip's tooltip reads: A return label was bought for this return and the carrier refused it. Open the return to see why. On the return page the failure is a Label not created entry in the timeline; expand it to read the reason. The bell also carries an alert, for example: Label for return RMA 100045 could not be bought. USPS declined the address.
The reason. The first sentence is ReturnZen's, written for you. Underneath, Carrier response holds the carrier's message word for word, with its HTTP status when there was one, because support needs it. When nothing reached a carrier the entry reads: Nothing was sent to a carrier for this failure. When the carrier answered without a message it reads: The carrier sent no message with this failure.
Which address to check. A return shipment carries two addresses: your return destination under Shipping > Destinations, and the customer's own address on the order. When the carrier's reason is about an address, the entry names both and says which to check first. The carrier's name replaces "The carrier" when it is known.
- If your destination also failed address verification: The carrier refused to print this label, and the reason it gave is about an address. The return address "Main warehouse" also failed address verification and is the likely cause, so check its street number under Shipping > Destinations. This app did not ask for the customer's address on the order to be verified, so check it next if the return address looks right.
- If your destination verified: The carrier refused to print this label, and the reason it gave is about an address. Check the street number on the return address "Main warehouse" under Shipping > Destinations and on the customer's address on the order.
- If the refusal is not about an address: The carrier refused to print this label, and the reason it gave is not about an address. The carrier's own words are saved with this entry.
The return page timeline with a Label not created entry expanded, showing the reason sentence and the Carrier response block
Fixing it. Open Shipping > Destinations and look at the Verified column. A destination that reads Could not verify is the usual cause, most often a street number the carrier does not recognise. Correct the street line, save, then open the return and click Create Shipping Label on the Return method information card. If the destination reads Verified and the reason is still about an address, correct the customer's address on the Shopify order first.
Important: A refusal from the carrier is final: retrying reproduces it, and nothing was charged. A failure where the carrier did not answer is different. ReturnZen cannot tell whether a label was bought before the connection dropped, so check the shipment in EasyPost before buying another, or you pay twice.
What the shopper sees
The confirmation page is headed Return submitted and tells them to pack the items and ship them back with their preferred carrier. Below it are your self-ship return instructions and a Return address card showing the destination in full. If the policy has packing slips on, the Print Packing Slip button is there too. The shopper is never shown the error.
Once you buy a label from the return page, the status page changes to Your label is ready to print with the Print Return Label button, and the label is emailed to the customer.
Troubleshooting label errors
This section covers the short list of things that stop a return label being bought, keyed on the sentence ReturnZen writes in the return's timeline, plus the results of Test Connection on the EasyPost page and what to check when labels are bought but tracking never updates. Read the sentence on the return page first; it names the cause.
Before you start: Open the return under Returns > Return Processing and expand the Label not created entry in the timeline. For the connection as a whole, open Shipping > Shipping Services, click Manage Integration beside EasyPost, and use Test Connection.
Label not created
The carrier's name replaces "The carrier" when it is known, and your destination's name appears in quotes. The bell carries a shorter version of the same alert, for example: Label for return RMA 100045 could not be bought. USPS declined the address.
| Error | What it means | What to do |
|---|---|---|
| The carrier refused to print this label, and the reason it gave is about an address. The return address "Main warehouse" also failed address verification and is the likely cause, so check its street number under Shipping > Destinations. This app did not ask for the customer's address on the order to be verified, so check it next if the return address looks right. | The carrier rejected an address, and your destination shows Could not verify on Shipping > Destinations. Rates still come back, because a rate only needs the zip, but the buy fails. This is the commonest case. | Fix the street line under Shipping > Destinations, save, then click Create Shipping Label on the return. If it fails again, correct the customer's address on the Shopify order. |
| The carrier refused to print this label, and the reason it gave is about an address. Check the street number on the return address "Main warehouse" under Shipping > Destinations and on the customer's address on the order. | The carrier rejected an address, but your destination verified. | Check the street number on both. With the destination verified, correct the customer's address on the Shopify order; on a test order a made-up address is refused. Then Create Shipping Label. |
| The carrier refused to print this label, and the reason it gave is not about an address. The carrier's own words are saved with this entry. | A refusal about something else, for example a funding problem on your EasyPost account or a service the carrier does not offer on that route. | Read Carrier response under the sentence and fix the cause in EasyPost. Changing the return address does not help. A missing Shipping email under Shipping > Shipping Services also stops some carriers. |
| EasyPost rejected this store's API key. No label was bought and nothing was sent to the carrier. Check the key on the EasyPost settings page. | The saved key is wrong or was revoked in EasyPost. Nothing reached a carrier. | On the EasyPost page, paste a current key, click Save API Key, then Test Connection. Buy the label again from the return. |
| EasyPost returned no rates for this shipment, so no label was bought and nothing was charged. The rate filter may have excluded every carrier, or no carrier on the API key serves these addresses. Use Test Connection on the EasyPost page. | No carrier offered a rate: Specific carriers only on the policy or Customized carrier service types on a carrier excluded everything, or no carrier on the key serves this route. | Check the policy's Labels & shipping tab and the carrier's service types, then run Test Connection. In test mode, USPS only returns rates for valid US addresses at both ends. |
| EasyPost is limiting requests from this store right now. No label was bought and nothing was charged. Try again in a few minutes. | Temporary rate limiting by EasyPost. | Wait a few minutes, then click Create Shipping Label on the return. |
| The label could not be bought because the carrier did not answer. It is not known whether a label was bought before the connection failed, so check this return in EasyPost before buying another. | The connection dropped mid-purchase. ReturnZen cannot tell whether a label was bought. Usually temporary. | Check the shipment in your EasyPost dashboard first, so you do not pay twice. If no label exists there, click Create Shipping Label. |
| The label could not be bought and no reason came from the carrier. It is not known whether a label was bought, so check this return in EasyPost before buying another. | EasyPost answered without a reason. | Check EasyPost, then buy again. |
| The label could not be bought. The request was stopped before it was sent. | ReturnZen refused the request before sending it, usually because an address it needs is missing. | Check that the policy has a destination, or a default exists under Shipping > Destinations, and that the order carries a shipping address. Then Create Shipping Label. |
The return page timeline, a Label not created entry expanded with the reason sentence and the Carrier response block
Important: A refused label costs nothing. A label that was bought is charged to your EasyPost account even if you later void it, and voids are refunded on EasyPost's schedule. The shopper is never shown these errors; they see the return address and self-ship instructions until you buy a label from the return page.
Test Connection results
In the admin, go to Shipping > Shipping Services, click Manage Integration beside EasyPost, then Test Connection.
The test runs a fake shipment and checks rates only; no label is bought. While EasyPost is switched off or no key is saved, the test does not run and the result names the cause.
| Error | What it means | What to do |
|---|---|---|
| No EasyPost API key is in use | No key is saved and none is set on the server. | Paste your EZTK_ (test) or EZAK_ (live) key and click Save API Key. |
| EasyPost returned an error: ... | A 401 or 403 means the key is wrong. A 422 means EasyPost rejected the warehouse address. | Fix the key, or correct the default destination under Shipping > Destinations, and run the test again. |
| Shipment created (shipment id) but 0 rates came back. | No carrier offered a rate. | In test mode, use valid US addresses at both ends or an EasyPost test address such as 388 Townsend St, SF. In live mode, enable a carrier account under Carriers in your EasyPost dashboard. |
| Got N rate(s) but none was selected. | Rates exist, but your rate shopping filter excludes all of them. | Check Label rate shopping on the policy's Labels & shipping tab and the carrier's Customized carrier service types. |
| Rates returned. USPS Priority at $8.45 would be selected. | The connection is healthy. | Nothing. Paste the Raw response when asking support about anything else. |
Labels are bought but tracking never updates
A label's first scan reaches ReturnZen through an EasyPost webhook, and an event without a valid signature is refused, so both the address and the secret must be set. After the first scan ReturnZen also checks the carrier itself every few hours.
In the admin, go to Shipping > Shipping Services, click Manage Integration beside EasyPost, then the Webhook signing secret card.
- Click Copy Address. The address is https://api.returnzen.app/api/webhooks/easypost and is the same for every store.
- In EasyPost, open Webhooks & Events, click Add webhook, choose Production (or Test) and paste the address.
- Enter the signing secret you set when adding the webhook and click Save Webhook Secret. The secret is required.
Once events arrive, the returns list's Shipping status column moves from New through Pre transit, In transit and Delivered, and the return page shows EasyPost shipment status.
When EasyPost is switched off
With the EasyPost integration switched off under Tools > Integrations, or with no key saved, no label is bought and no placeholder label is made. Shoppers get the self-ship method and your return address, and a return you create in the admin is self-ship. On the return page, Create Shipping Label and Regenerate Label are disabled, with a sentence saying why and a link to the EasyPost page. The rate calculator reads Rates are unavailable while EasyPost is switched off. or Rates are unavailable until an EasyPost key is saved.
In those two states, and with a key the server cannot read, ReturnZen stops checking carriers for updates on its own. A scan EasyPost sends can still update a return and fire its processing event. In the policy editor, those processing event options carry the line Applies when EasyPost tracks the return: an EasyPost return label, or a tracking number the shopper entered. Instant Exchange charges due on a passed ship-by date are held, and the bell reads: Instant Exchange charges are on hold while EasyPost is switched off. Switch EasyPost on to resume them. They resume on the first night EasyPost is back.
A key the server cannot read shows Credentials cannot be read on the EasyPost tile; save the key again on the EasyPost page to clear it. Disconnecting EasyPost clears the saved key, and the dialog reads This clears your saved API key. Returns will get no shipping label until you save a new key.
Regenerating a label after an edit
This section covers what to do when your team edits a return and the items coming back change, so the label already bought describes the wrong parcel. Regenerate Label buys a fresh label for the current items and voids the old one.
Before you start: EasyPost switched on under Tools > Integrations, with a key saved. A return with a label bought through EasyPost. An edit saved on the return that changed the returning items; see Editing a return.
Regenerate Label
In the admin, go to Returns > Return Processing, open the return, then the Return method information card.
The button appears only after an edit has changed the returning contents, under the sentence The returning items changed since this label was created.
- Save your pending edits on the return.
- Click Regenerate Label. The button reads Regenerating... while EasyPost answers.
- Read the toast: New return label created with the new tracking number, then either The previous label was voided. or a sentence saying why the old label was not voided, for example that EasyPost rejected the label refund.
- Click Email Shipping Label to send the new label to the shopper. Regenerating does not email anyone on its own.
The return page, Return method information card showing The returning items changed since this label was created and the Regenerate Label button
How it works
Regenerating buys a new label from EasyPost for the current items, at today's rate, and asks EasyPost to void the previous label. The new label is a new purchase on your EasyPost account, and the void of the old one is refunded by EasyPost on its own schedule, so both charges show for a while.
The timeline records the void outcome in one of these lines: Label void requested via EasyPost (refund pending), Label voided and refunded by EasyPost, The label could not be voided because the carrier shows it as shipped., The label could not be voided. EasyPost did not accept the request., Label refund not applicable (carrier does not support refunds), or Label void skipped (not eligible).
Important: A label can only be voided while it is unscanned. Once the carrier has scanned the old label the void is refused, the timeline says so, and the shopper's parcel is already on its way under the old label.
Regenerating does not restart the return's expiry clock, which still counts from the day the return was submitted; see Expiry and Reopening a Return.
What the shopper sees
Nothing until you email the new label. The old link in their confirmation email now points at a voided label, so send the new one with Email Shipping Label. Their status page then shows the new label and tracking number under Your label is ready to print.
FAQ
Why did the app buy a label to the customer instead of to me? This was a defect in an earlier build, where the two addresses on a return shipment were sent the wrong way round, and it has been fixed. Every label now ships to the destination on the matched policy, from the shopper. A label bought before the fix carries a note in the return's timeline saying so. If you still have one, void it in EasyPost and use Regenerate Label or Create Shipping Label on the return page.
Why was no label bought for a return? Open the return and read the timeline. A Label skipped entry says which setting decided it: a rest of world policy, Generate return labels off, a workflow with the No label provided action, a keep item or Instant Resolution return, or a manual return created with Do not generate a return label. A Label not created entry means a label was attempted and failed; see When a Label Fails. No label is bought either while EasyPost is switched off or has no saved key.
Can I see what a label would cost before anyone submits a return? Yes. The Rate calculator card on Shipping > Shipping Services returns rates for a route and a parcel you type, without creating a return.
Why is my return label failing, and which address is wrong? Open the return, expand the Label not created entry in the timeline and read the first sentence: it says whether the carrier refused, whether the reason was about an address, and which of the two addresses to check first. Then open Shipping > Destinations and look at the Verified column. Correct the address, save, and buy the label again from the return page.
Why is Create Shipping Label disabled? EasyPost is switched off under Tools > Integrations or has no saved key. The card carries a sentence saying why and a link to the EasyPost page. Switch EasyPost on or save a key, then buy the label.
Does a failed label cost anything? No. A refused label is never charged. Only a label that was actually bought is charged to your EasyPost account, and an unscanned one is refunded by EasyPost when it is voided.
Why does USPS refuse the customer's address on my test orders? In test mode USPS only returns rates when both addresses are valid US addresses, so a test order with a made-up address fails on the sender side. Use a real address or an EasyPost test address such as 388 Townsend St, San Francisco. A customer address that fails validation on a real order does not stop the return label.
A return's shipping status stays on New and never moves to In transit. Is the label broken? Usually not. Either the shopper has not posted the parcel, or tracking events are not reaching ReturnZen. If your EasyPost dashboard shows scans that ReturnZen does not, set up the webhook address and signing secret as above.
Why is there no Regenerate Label button? It is only offered after a saved edit changed the items coming back. With the items unchanged, the label already bought still describes the parcel, so there is nothing to regenerate.
Why is Regenerate Label disabled? EasyPost is switched off under Tools > Integrations or has no saved key. The card carries a sentence saying why and a link to the EasyPost page. Switch EasyPost on or save a key, then regenerate.
The shopper already printed the old label. What happens? If the carrier scans the old label, the void is refused and the parcel travels under it. Process the return when it arrives.
Please reach out to support@returnzen.app with any additional questions.