GoatLabels GoatLabels
What happens to the money when a label dies.

API label voids: EasyPost refunds vs void-to-wallet


Credited to one wallet.

A void call on GoatLabels requests the carrier void; after the carrier accepts it, the credit posts to your prepaid wallet for the next label, instead of returning through a card or invoice refund.

Four carriers, one void behaviour

USPS, UPS, FedEx, or DHL: after the carrier accepts a void, the value posts back to your balance the same way for all of them.

UPS FedEx DHL USPS DHL: international
Live quotes One all-in price each.
Rate = debit Void = credit.
Same via API Dashboard or endpoint.

Credited to a wallet, not a settlement queue

Voided value posts back to the prepaid balance after the carrier accepts the void, ready for the next label.

VisaMastercardAmerican ExpressApple PayGoogle PayBitcoinEthereumTether (USDT)
Prepaid Spent label by label.
Wallet credit After the void is accepted.
No card cycle Nothing waiting on a statement.
Side by side

How does a void differ between EasyPost and a prepaid wallet?

Every multi-carrier platform lets you void an unused label. The thing that actually differs is where the money lands after the carrier accepts the void, and how many records your automation has to reconcile to know it.

  GoatLabels EasyPost
Where the value goes Into your prepaid wallet balance as a credit, after the carrier accepts the void. Back to the EasyPost Wallet once the carrier approves the refund; on BYOCA, through your own carrier account.
When you can respend it After the carrier accepts the void, the credited balance funds the next buy call. After carrier approval, which EasyPost says takes 2 to 4 weeks.
What your code has to track One balance. Void, then buy again from it; the credit posts after the carrier accepts the void. A refund_status on each shipment: submitted, refunded, rejected, or not_applicable.
Effect on a rebuy Rebuy from the same funded balance, even mid-batch; after the carrier accepts the void, its credit lands in that balance too. The rebuy is funded normally; the refund catches up separately later.
Finance reconciliation One prepaid balance, with debits and credits in the same ledger. Charges and refunds landing on different dates, matched after the fact.
Void via API One call, with idempotency so a retried void is not a second operation. A supported API operation with a documented refund object — this part is well built.

EasyPost is a trademark of its owner and is not affiliated with GoatLabels. EasyPost's refund rules, plans, and fees are dated and linked in the source block below; they change, so re-check before you decide.

When does the credit path matter at volume?

Batch reprints stay on one balance

A misprinted run of labels means voiding and rebuying dozens in one go. Each accepted void posts back to the same prepaid balance the rebuys come from, so there is one ledger to reconcile.

One ledger instead of two timelines

Charges on one date and refunds on another is a reconciliation exercise that grows with shipment count. A prepaid wallet keeps the debit and the credit in the same ledger, so the balance is the answer rather than the starting point for a spreadsheet.

Less state in your integration

Automated flows that void (address corrections, cancelled orders, carrier switches after a rate change) still wait on the carrier to accept the void. Void-to-wallet means the accepted credit lands in the single balance your code already reads.

When EasyPost is the right choice

  • You barely void labels, so where the credit lands is a rounding error and not worth a migration.
  • You need a carrier outside USPS, UPS, FedEx, and DHL — EasyPost's network is genuinely wider.
  • Your finance process is built around carrier-level refund records and you want them at the source.
  • You are on negotiated carrier contracts and need a bring-your-own-account platform.

What EasyPost's own pages say, checked 2026-10-17

Checked on from EasyPost's own pages. Plans, fees and policies change, so confirm on the vendor's current page before you decide. EasyPost is a trademark of its owner and is not affiliated with GoatLabels.

Voids in an automated flow

Buy, void, rebuy. With one balance to read.

The loop that matters here is short: your code buys a label, something changes, your code voids it and buys another. On GoatLabels each buy is a debit against a prepaid wallet and each accepted void is a credit back to that same balance. The carrier still owns the decision and its review window; what changes is that the credit lands as a ledger line on the balance your code already reads, the one balance every carrier's labels are bought from. Idempotency keys apply to voids as well as buys, so a retried void after a timeout does not become a second operation, and signed webhooks tell your stack when the label and its credit are final.

1
Any order shape in
Store sync, API, DM, or screenshot
maya_boutique

Hey! 2x hoodies (M) 1x tee (L) 😅 Ship to: Maya R. Austin, TX 78701

Shopify
Synced into To Ship
Etsy
Synced into To Ship
DM screenshot
Order
#1847
Customer
Jordan Lee
Items
1x Hoodie (L)
Address
Brooklyn, NY
Drop the screenshot or paste the DM

Connectors, REST API, DMs, and screenshots — one queue, and every path debits the same balance.

2 Billy Billy AI

The corrections that cause the void.

Billy AI
  • Reads a DM, comment thread, voice note, or screenshot
  • Fills the addresses and the package details
  • Rate-shops USPS, UPS and FedEx at the all-in price, DHL on international lanes
  • Hands the drafted label back for you to confirm
Drafted. Checked. Yours to confirm.
3
Clean label out
Bought from the wallet
Paid from your prepaid balance
Card, Apple Pay, Google Pay, ACH, or crypto
$12.47
USPS
Label purchased
USPS Priority Mail — all-in rate
$12.47

After the carrier accepts the void, the credit posts to the wallet. Signed webhooks push label and tracking events to your stack.

Why labels get voided in the first place.

Connectors for the storefronts, AI for the corrections.

Shopify, Etsy, WooCommerce, eBay and Wix sync into To Ship and push tracking back when you print. Most voids trace to something the feed got wrong or the buyer changed afterwards, an address correction, a combined order, a cancelled item. Billy drafts the replacement from the message the customer actually sent, and the void credits the same balance after the carrier accepts it.

Shopify logo Shopify
Etsy logo Etsy
WooCommerce logo WooCommerce
eBay logo eBay
Wix logo Wix
The refund path, examined properly. Then everything around it.

An accepted void should be spendable money.
Not a refund record to match.

Both platforms void labels correctly; this is not a correctness argument. It is about where the value lands: the prepaid balance your next call spends from, or a refund record your finance team matches on some later date.

One prepaid wallet,
five ways to fund it

Card, Apple Pay, Google Pay, ACH bank transfer, and crypto all top up the same balance, and every label debits it. Because accepted voids credit that same balance, the wallet is a single running number rather than a charge history you match against a refund history.

Wallet balance
$1,247.36 USD
AI

AI drafting for orders
that are not JSON

A DM, a comment thread, a voice note, a screenshot — Billy reads any of them and drafts the whole label. When a buyer sends a corrected address after you have already printed, the void and the replacement draft happen in the same place.

Billy Billy LIVE
Where's the package to Maya?
It's in transit via UPS. Expected Friday, Aug 7.
UPS
1Z8923A6B05G4123456
In transit
Austin, TX → Dallas, TX
Ask Billy anything...

No per-shipment
platform fee

There is no per-shipment platform fee, which also means a void-and-rebuy cycle does not cost you a second platform charge for the same parcel. Free covers 50 shipments a month; Pro is a flat monthly fee for unlimited shipments.

Shipment summary
UPS Ground $12.49
Insurance $0.75
Fuel surcharge $0.32
Total $13.56

USPS, UPS, FedEx, and DHL
in one account

USPS, UPS and FedEx quoted live as all-in prices (DHL on international lanes), and the void behaviour is identical across all four: an accepted void credits your GoatLabels balance, not against a per-carrier account, so a batch that spans carriers still resolves into one number.

Compare rates
UPS UPS $12.48
FedEx FedEx $13.22
DHL DHL $14.10
USPS USPS $11.79
Duties inside the quote where DDP applies

A REST API that costs
nothing per call

REST and JSON, one Bearer header, idempotency keys covering voids as well as purchases so a retried request never double-operates, and signed webhooks for label and tracking events instead of polling a refund status endpoint.

POST /v1/shipments
{
"to": { "name": "Maya" },
"from": { "name": "Alex" },
"service": "ups_ground",
"label_format": "pdf"
}
Webhook delivered
GoatLabels mobile shipments queue with all-in carrier prices
Billy drafting a label from a pasted DM on mobile

Label ready

CL-1038 · Brooklyn, NY

The void nobody automated

Half of voids start at the packing bench.

The misprint, the wrong box size, the address the buyer corrected an hour after checkout — those voids are noticed by a person, not a job. Doing them in the browser credits the same wallet after the carrier accepts the void, the same as an API void.

Void a label from the phone and see the credit post to the balance after the carrier accepts it.
Paste the corrected address from the DM — Billy drafts the replacement label.
USPS, UPS and FedEx come back as all-in prices on one screen, DHL on international lanes.
Buy from the prepaid balance and one-tap print to a share sheet or a thermal printer over Wi-Fi.
Voids done in the browser and voids done by your code hit the same ledger.
Asking where the money went

Talk to Billy, not to a refund status endpoint.

In a flow with real void volume, the common question is not how to void — it is what happened to a specific parcel and its money. Hold the mic, ask, and Billy reads back the shipment, its tracking history, and its current state against your prepaid balance. This is the real product, not a render.

goatlabels.io/dashboard/shipments — Billy
Billy reading back a parcel's tracking history over the purchased labels list

Listening

"Where's Maya's package?"

Out for delivery

CL-1039 · Austin, TX · by 6 PM

Plain English in — names, addresses, weights, carriers, services · nothing to import and nothing to map · reads the all-in rate back before a cent leaves the wallet · phone, browser, or Telegram on Pro.

All-in quotes

The quote is the debit, the void becomes a credit.

Three carriers on the same parcel, each an all-in number that is the exact amount leaving your prepaid balance. Void that shipment and, after the carrier accepts the void, the identical amount posts back to the balance: one ledger, two entries.

CA → NY 2.6 lbs 12×8×4 in
USPS

USPS

Ground Advantage

2 to 5 days

$11.40

all-in · no surprises

Cheapest
UPS

UPS

Ground

1 to 5 days

$9.85

all-in · no surprises

FedEx

FedEx

Ground

1 to 5 days

$11.20

all-in · no surprises

No carrier invoice the day after Accepted void → credit back to the wallet you funded Multi-currency display
Public API v1

Void as a first-class API operation.

REST, JSON, one Bearer header. The void endpoint is idempotent, so a retry after a network timeout cannot turn into a second operation, and the credit is reflected in your balance after the carrier accepts the void, on the same ledger your rebuy reads.

Create, rate-shop, and buy — the same three calls you already write
Signed webhooks for tracking and label events instead of polling
Real idempotency keys — a retried request never buys two labels
OpenAPI 3.1 spec, no SDK lock-in, unlimited calls on every plan
Read the API docs Get an API key $0 on every plan
curl https://api.goatlabels.io/api/v1/shipments
POST /api/v1/shipments
Authorization: Bearer sk_live_…
Idempotency-Key: ord_8421

{
  "to": { "name": "Joyce", "city": "Berlin", "country": "DE" },
  "parcel": { "weight": 2.6, "weight_unit": "lb" },
  "service": "fedex_intl_priority"
}
A void does not cost you twice

No plan to clear first.

Free covers 50 shipments a month with the public API, the store connectors, and Billy all unlimited underneath it — the quoted label price is what you pay from a prepaid wallet. Pro is a flat monthly fee for unlimited shipments and Billy on Telegram. Because nothing is metered per shipment, voiding and rebuying the same parcel does not add a platform charge on top.

Pro

Most popular
$40 / month
Unlimited shipments — no monthly cap
Unlimited address validation
Billy AI on Telegram Telegram logo — draft a label without opening the dashboard
API access still free and unlimited

Rate by plan

illustrative
Free Pro

Pro: one flat monthly plan, unlimited shipments

Free

$0 / forever

Enough to test the void-and-rebuy loop with real labels.

50 shipments a month, no per-shipment platform fee
Voids credited to the prepaid wallet after the carrier accepts them, from the API or the UI
The full REST API with unlimited calls and signed webhooks
Billy AI in the web app, unlimited — paste, screenshot, or speak
Store connectors included: Shopify, Etsy, WooCommerce, eBay and Wix

Billy is not a paid tier

The assistant that reads a DM, a screenshot, or a voice note into a drafted label runs unlimited in the web app on Free. Pro adds Billy on Telegram.

Web, every plan Telegram logo Telegram, Pro

API free on every plan

GET /api/v1/shipments

200 OK · plan: free

Unlimited calls on Free — still unlimited on Pro.

Bring the invoice you pay today

High-volume shippers can ask about custom pricing, which we review account by account. Compare it against what you pay on

ShippoPirate ShipShipStation
No contracts No per-shipment platform fee Free to sign up
USPS UPS FedEx DHL

Label prices are quoted live from USPS, UPS and FedEx on domestic parcels and DHL on international lanes, shown as one all-in number, the same number that leaves your wallet and the same number that posts back after the carrier accepts a void. EasyPost's refund rules are in the dated source block on this page, linked to EasyPost's own support articles. Full pricing details

Who voids the most

Not every EasyPost account voids enough to care.

If you void a handful of labels a month, where the credit lands is noise. These are the operations where voids are routine and one balance is easier to run than refunds on separate records.

High-volume batch printers

TikTok logo TikTok Shop & live commerce

Prepaid

A bad batch means dozens of voids in one go. Each accepted void credits the same balance, so finance sees one ledger for every carrier's labels.

4 carriers, one wallet no per-shipment fee bulk print
goatlabels.io/dashboard/shipments
GoatLabels shipments queue with purchased labels

Shops with frequent address edits

Etsy logo Etsy & independent creators

Buyers correct addresses after checkout constantly. Void, redraft, rebuy, all against one balance, with each credit on the ledger after the carrier accepts the void.

One queue, connector or not

Order #1024 · pasted from a comment thread

Instagram logo

Sellers fixing orders in the DMs

Messenger logo The orders that never became JSON

got the dress! can you ship to Austin?
Label drafted · CL-1024

Devs automating void-and-rebuy

Shopify logoWooCommerce logo REST and the UI, one balance

1

wallet behind the API and the dashboard

Real sellers, real words

Sellers who keep their shipping money in one place.

A video took off and I had 80 TikTok Shop orders by morning. I printed every label from my phone on the bus to the post office.
E

Early customer · TikTok

TikTok Shop seller

TikTok logo TikTok Shop
I run my Etsy shop from the kitchen. The AI reads the order, picks the carrier, the label prints. That's the whole workflow now.
E

Early customer · Etsy

Etsy maker

Etsy logo Etsy
The API is what every shipping API pretends to be. Idempotency that actually works.
S

Sasha R.

Staff engineer, marketplace

API user

Voiding labels via API — FAQ

What happens when I void a label on GoatLabels?
Void an unused label and, after the carrier accepts the void, the credit posts back to your prepaid wallet as spendable balance, not a card refund. It then funds the next label like any other balance, and the balance your integration already reads is the whole picture.
How is that different from a carrier refund?
A carrier refund waits on the carrier's own approval, on its timetable rather than yours. On EasyPost, a refund on a Wallet-carrier label returns to the EasyPost Wallet once the carrier approves it, which EasyPost says takes 2 to 4 weeks, and only labels that have not started moving qualify. That is a perfectly normal model. GoatLabels waits on the carrier too; the difference is that an accepted void credits the one prepaid balance every carrier's labels are bought from.
Does this matter at low volume?
Honestly, not much. If you void a few labels a month, the difference is a reconciliation detail. It becomes real in automated flows with routine voids (batch reprints, address corrections, cancelled orders), where one balance is easier to reason about than refunds on separate records.
Is the void endpoint idempotent?
Yes. Idempotency keys apply to voids as well as purchases, so a retried void after a network timeout cannot become a second operation. That matters most in exactly the automated flows this page is about, where retries are automatic.
Can non-developers void labels too?
Yes. A support agent or warehouse lead can void a shipment in the dashboard, and after the carrier accepts the void, the credit lands in the same wallet on the same terms as an API void. Both paths write to the same ledger, so there is nothing to reconcile between them.
Do voids work the same across all four carriers?
Yes. After the carrier accepts the void, USPS, UPS, FedEx, and DHL labels all credit back to your GoatLabels wallet balance rather than to per-carrier accounts. A mixed-carrier batch resolves into a single number rather than four separate credits arriving at different times.
Does voiding and rebuying cost extra?
There is no per-shipment platform fee, so a void-and-rebuy cycle does not add a second platform charge for the same parcel. You pay the carrier rate on the label you actually keep.

Still comparing? GoatLabels vs EasyPost covers who owns the carrier account, EasyPost pricing explained walks the fee math, and migrating an integration off EasyPost maps the endpoints one by one. For the void flow itself, see how to void a shipping label; for the rest of the EasyPost comparison, read an EasyPost alternative with a dashboard and EasyPost vs a free shipping API.

Void one real label and watch the balance before you decide.

Cancel a label, keep the money.
Spendable on the next one.

Fund a wallet with card, Apple Pay, Google Pay, ACH, or crypto, buy a label through the API, void it, and see the credit post to the balance after the carrier accepts the void.

No card required. No contract. No per-shipment platform fee.

Updated