Fill in the details below to generate a shipping label
Fixing failed row from batch. Generating this label will remove it from the failed list.
Label Configuration
Package Details
From Address
To Address
Manage Dealers
Username
Balance
Labels
Status
Last Login
Actions
Loading...
Create Sub-User
Add Balance
Manage Access
Label Types
Tracking Series
Reset Password
Authentication
Use the following API key to authenticate your requests. Include it in the X-API-Key header for all API calls.
Example
Loading...
Label Types
Available label types for your account. Each row is a label type + tracking series combination. The recommended way to select a product when creating orders is the stable label_type and tracking_prefix codes.
Loading label types...
Avoid hardcoding the numeric ID. The id is positional: when the label types or tracking series on your account change, the same number silently maps to a different product. Use label_type + tracking_prefix in your integration instead.
Response
Loading...
Create Order
Send a POST request to create a shipping label. Select the product with label_type + tracking_prefix (recommended), or with a numeric label_id from the services list. Weight is in pounds (lbs) - the value you send is printed on the label as whole pounds. Returns the tracking number and a PDF download link.
Request
Response
Always check barcodes_status before printing.complete means all barcodes rendered, partial means some barcodes are missing from the PDF (listed in barcodes_failed), and unavailable means the PDF could not be generated. Do not print or ship a label with partial barcodes.
cURL
Errors
Status
Meaning
Example message
400
Missing or invalid parameters
Either label_id OR (label_type + tracking_prefix) is required
No access to the label type or tracking series, or account deactivated
You do not have access to this label type: rollo_priority_mail
404
Resource not found
Order not found
429
Rate limit exceeded
Maximum 500 labels per minute. Please try again shortly.
Rate limits: create order allows up to 500 requests per minute per account, and all API endpoints share a limit of 5,000 requests per 15 minutes per IP. A 429 response includes a retryAfter field (seconds).
Order Status
Retrieve an order by its tracking number. Returns the label details, status and PDF download link. The weight field echoes the value sent at creation, in pounds.
Response
Loading...
cURL
Processing...
0%
Please wait...
Data saved automatically
ShipStation Orders
Import orders and generate shipping labels
Not Connected
Connect ShipStation
Link your ShipStation account to import orders and generate labels directly.
1 Settings
→
2 API Settings
→
3 Copy Keys
0
Pending Orders
0
Selected
$0.00
Est. Cost
From Address
Click Edit to set your return address
Label Type:
Tracking:
Description:
When on, orders are marked shipped as soon as their labels finish, and the buyer is emailed their tracking number unless you turn that off in the from-address settings.
Search Orders
Order #
Customer
Items
Weight
Amount
Date
Loading orders...
Generated Labels
Labels you generated for ShipStation orders. Use Mark Shipped to sync any rows that weren't auto-shipped.
Order #
Customer
Tracking #
Status
Action
No generated labels yet
Labels you generate from this page will appear here.
Veeqo Orders
Import orders and generate shipping labels
Not Connected
Connect Veeqo
Link your Veeqo account to import orders and generate labels directly.
1 Veeqo → Employees
→
2 Your Profile
→
3 Refresh API Key
0
Pending Orders
0
Selected
$0.00
Est. Cost
From Address
Click Edit to set your return address
Label Type:
Tracking:
Description:
When on, orders are marked shipped as soon as their labels finish, and the buyer is emailed their tracking number unless you turn that off in the Veeqo settings.
Search Orders
Order #
Customer
Items
Weight
Amount
Date
Loading orders...
Generated Labels
Labels you generated for Veeqo orders. Use Mark Shipped to sync any rows that weren't auto-shipped.
Order #
Customer
Tracking #
Status
Action
No generated labels yet
Labels you generate from this page will appear here.
Settings
Customize your portal experience
Integrations
Show or hide third-party order import tabs in the sidebar. Turn these on only if you actually use the service.
ShipStation
Import orders from your ShipStation account
Veeqo
Import orders from your Veeqo account
Change Password
Update your account password to keep it secure
Help Center
How can we help you?
Search the guide or pick a topic below to learn how to use every part of ShipHub.
ShipHub is a USPS shipping label generator. You buy balance, then spend it to generate labels - either one at a time, or by uploading a CSV of orders.
1
Log in
Use the username and password your administrator gave you.
2
Check your balance
It's the green pill at the top right. On the Home page the balance is shown on the dashboard card instead, so the pill is hidden there - that is expected, not a bug.
3
Pick how you want to ship
Use Single Label for a one-off, or Bulk Upload if you have many orders at once.
4
Labels are saved automatically
Re-download anytime from Orders History or Download Batches.
Tip: Your account only sees the label types and tracking number series your admin has assigned to you. An empty dropdown usually means access has not been granted - but it looks the same when the list simply failed to load, so reload the page once before you report it.
The Home page shows three live counters, all measured on the UTC day.
Today Labels
How many labels you have generated since 00:00 UTC today.
Yesterday Labels
Total for the previous UTC day.
Total Labels
Every label your account has ever generated.
Counters use UTC, not your local timezone, so they roll over at the same moment for everyone - but the page itself does not print the UTC date, so if your local day is ahead of or behind UTC, "Today" will not match your own calendar day. The More info links open Orders History with no filters applied; set the date range there yourself to see the rows behind a counter.
Use this when you have one shipment to generate. It's the fastest path for individual orders.
1
Open Single Label
Pick Single Label from the sidebar to start a one-off shipment.
2
Choose tracking series & label type
Pick a Carrier, a Tracking Series (e.g. 9401, 9505) and a Label Type (e.g. Priority Mail, Ground Advantage). The Label Type dropdown shows each option's price, so you can see what a label costs before you fill anything else in. If a dropdown is empty, either your admin has not granted that access yet or the list has not loaded - reload the page once before asking.
3
Enter From and To addresses
Enter the From address (your warehouse) and the To address (recipient). Required on both sides: name, address line 1, city, state and ZIP. Company, phone and address line 2 are optional. Address autocomplete suggests valid US addresses as you type, and you can save an address to reuse it on the next label.
4
Enter weight
Enter Weight in pounds - the number you type is what gets printed on the label. Length, width, height and package description are optional and do not change the price. The price comes from the label type you picked, not from the weight or the zone; the amount shown next to the label type is what you will be charged.
5
Generate the label
Click Generate Label. A confirmation appears first, quoting the exact amount that will be charged - nothing is deducted until you accept it. The PDF then opens for printing and is saved to Orders History. Tracking numbers are unique; the system prevents accidental re-use. If the button stays disabled, a required field is still empty or the tracking series / label type is not selected.
Why two dropdowns? "Tracking Series" controls the barcode format (the leading digits - 9401, 9505, etc.). "Label Type" controls the visual layout / carrier program (Priority Mail vs Ground Advantage). Your admin decides which combinations are available to you.
Generate up to thousands of labels in one batch from a CSV file.
1
Download the CSV template
Open Bulk Upload (the page is titled Order Bulk CSV) and click Export File. The download is an Excel workbook, template.xlsx. You can upload it back as .xlsx, .xls or .csv - all three are accepted.
2
Fill in your shipments
One row per shipment. Keep the template's header row exactly as it is - the column names are matched literally. Required per row: FromName, Street1From, CityFrom, StateFrom, PostalCodeFrom, ToName, Street1To, CityTo, StateTo, ZipTo and Weight.
3
Pick tracking series & label type
In Step 1, choose the Tracking Series and Label Type that apply to all rows in this CSV. (One batch = one label type.)
4
Upload your CSV
In Step 2, drag the file onto the upload zone or click Browse. Nothing is charged at this point.
5
Click Verify Data
Verify Data is the next button you press - Generate Labels stays hidden until the file passes. Validation is all-or-nothing: if even one row fails, nothing can be generated. The first 20 problems are listed with their row numbers; fix them in the file, re-upload and verify again. When the file passes you get the row count and the estimated charge before anything is spent.
6
Generate Labels
Click Generate Labels. Labels are produced in the background - you can leave the page and come back. Rows are processed in parallel, so they do not finish in file order.
7
Download the finished batch
When it finishes, the batch appears in Download Batches. From the batch row you can take a combined PDF of every label (one file, ready to print), a ZIP of the individual PDFs, or an Excel tracking export. They are separate downloads, not one file.
CSV column reference
Column header (exact)
Required
Example
FromName
Yes
Acme Warehouse
CompanyFrom
No
Acme LLC
Street1From
Yes
123 Industrial Way
Street2From
No
Dock 4
CityFrom
Yes
Brooklyn
StateFrom
Yes
NY
PostalCodeFrom
Yes
11201
PhoneFrom
No
7185550123
ToName
Yes
Jane Smith
CompanyTo
No
XYZ Ltd
Street1To
Yes
500 Main St
Street2To
No
Apt 4B
CityTo
Yes
Austin
StateTo
Yes
TX
ZipTo
Yes
78701
PhoneTo
No
5125550147
Weight
Yes
2
length / width / height
No
10 / 8 / 4
description
No
Electronics
Ref01 / Ref02
No
ORD-12042
Weight is in pounds, not ounces. A bare number is read as pounds - 2 prints 2 LB. You can also write 2 lb or 32 oz and the unit is honoured. Values are rounded to whole pounds, anything under 1 lb becomes 1 lb, and over 70 lbs is rejected.
Watch the two odd column names. The sender ZIP column is PostalCodeFrom but the recipient one is ZipTo. They are not symmetric - copying one and renaming it is the most common cause of a failed verify.
Each label costs balance. The portal refuses to start a batch when your balance is below the total for the file. If you see this, top up from Balance β Add Funds and verify again.
Safe to refresh. Batches are saved on the server, and each row is keyed by its position in the file, so refreshing or reopening the tab cannot charge you twice for the same row.
Every label you generate, single or batch, lands here.
Search
The box is labelled Search by ID, Name, Tracking⦠and matches on tracking number, sender/recipient name and address. Note that on large accounts the search runs on the server and then only matches tracking number and names - if an address search stops finding a row, narrow the date range first.
Filter
By date range and label type. There is no batch filter here - open Download Batches to work with a specific batch.
Order Details
Click any row to view the full address, weight, charge, and a button to re-download or reprint the label.
Free re-downloads
Re-downloading a label does not charge you again - you only pay when the label is first created.
Select rows, then act on them
Tick individual rows or use the per-page selector, then use Merge PDF (one print-ready file), Download ZIP (separate PDFs), Export Tracking (spreadsheet of tracking numbers) or Track Packages (current USPS status).
The Batches page lists every bulk upload you have ever processed.
Batch summary
Each row shows the label type, then a live count of Pending, Processing, Success and Fail against the batch Total, plus tracking status and the date it was added. The batch row does not show a total charge - open Balance for what was actually spent.
Download combined PDF
Each batch row offers View, Download combined PDF, Download ZIP, Export tracking (Excel) and Track all shipments. These are greyed out until at least one label in the batch has succeeded. You can also tick several batches and use Merge Selected Batches for one file across all of them.
Re-downloads and failed rows
Re-downloading a batch never charges you again. If some rows show under Fail, only the successful labels are included in the downloads - the failed rows were not charged, so re-upload just those rows as a new file. Batches stay available under your account's current retention policy; export anything you need to keep in your own records.
ShipHub uses a prepaid balance model.
1
Top up your own balance, any time
Open Balance β Add Funds and pay with crypto (BTC, ETH or USDT). Nobody has to approve it - the credit is automatic once the payment confirms on the blockchain, which is usually well inside an hour but depends on the network, not on us. The Add Funds screen shows the current minimum and any bonus offer that happens to be running.
Prefer to pay another way? That route still works exactly as before - message support and an administrator credits your balance manually.
1
Your administrator credits your balance
Ask your administrator to add funds to your account. Every credit appears under Balance in the sidebar the moment it lands.
2
Each label deducts postage
Every generated label subtracts its postage cost from your balance.
3
Track every transaction
The Balance page in the sidebar shows every credit and debit, with a running balance after each.
4
No partial charges
If you run out of balance, label generation is blocked until balance is added - no partial charges are ever applied.
Where do I top up?Balance β Add Funds, or the same button on the dashboard balance card. Never sent crypto before? The full US walkthrough is in How to Buy & Send Crypto, and a short version sits on the Add Funds screen itself.
Why was I not charged for a re-download? Charges happen once, at the moment the label is first created. Re-downloading or reprinting an existing label is always free.
If a top-up does not land. A crypto payment moves through several states and the dashboard shows which one you are in. Waiting means nothing has arrived yet. Confirming means the network has seen it - wait, do not send again. Partially paid means less than the invoice arrived; the balance is not credited until the remainder is sent or support settles it. Expired means the invoice timed out - start a new one rather than paying the old address, because the rate has moved. Failed, or a payment sent on an unsupported network, needs support - send the asset, the amount, the network and the time.
Pay for your ShipHub balance with crypto - even if you've never bought crypto before. This guide is written for shippers based in the United States.
The 60-second version. Buy the coin in an app you already trust, open Balance β Add Funds, pick the same coin, and send the exact amount to the address shown. Your balance credits itself when the network confirms. If your app account is already funded and verified this takes minutes; if you are starting from scratch, bank verification can add 1β3 business days before you can buy anything.
Last reviewed: August 2026. Third-party app fees, limits and speeds change without notice - treat every number below as a starting point and confirm the current figure in the app before you commit.
1. What ShipHub accepts
You can top up with any of the four supported assets. Pick whichever you find easiest to buy.
Bitcoin (BTC)Native Bitcoin network
Ethereum (ETH)Native Ethereum network
USDT (Tron / TRC-20)Lowest network fees
USDT (Ethereum / ERC-20)Most widely supported
New to crypto? Check the withdrawal minimum before you pick an app. Buying is easy; sending is where apps differ. Most set a minimum withdrawal amount, and it varies by app, by account and by the route you pick - Cash App, for example, quotes different floors for its Standard and Instant bitcoin withdrawals, and Coinbase has its own BTC minimum. Whichever app you choose, open its withdrawal screen and confirm you can send the amount you plan to send before you buy it.
2. Pick your buying app (US options)
These are the three apps most US users will already have. Pick one - you only need one. If you are opening an account for the first time, budget for identity and bank verification before you can buy; that step is on the app, not on us, and can take a few business days.
Cash AppBitcoin only
Buys: Bitcoin only
Funding: Linked bank / debit card
Speed: Buy instant, withdraw 10β30 min
Fees: ~1.5β2% spread + small mining fee
Withdrawal floor: 100,000 sats (0.001 BTC) on free Standard sends; Instant has no floor but costs a fee
Verification: SSN, photo ID
Reasonable if you already use Cash App and your top-up clears its withdrawal floor.
CoinbaseAll assets
Buys: BTC, ETH, USDT (ERC-20)
Funding: ACH (free), debit (instant fee), wire
Speed: ACH 1β3 days, debit instant
Fees: ~1β4%, lower on a Coinbase One subscription (which itself costs a monthly fee, and a spread can still apply). Check the fee Coinbase quotes you at checkout.
Verification: SSN, photo ID, selfie
Best if you want USDT or to keep multiple coins in one place.
StrikeLowest fee
Buys: Bitcoin only
Funding: ACH bank transfer
Speed: ACH 1β3 business days
Fees: Under 1% - much cheaper than Cash App
Verification: SSN, photo ID
Best if you'll be topping up often and want to save on fees.
Other US options that work the same way: Robinhood (BTC, ETH - external transfers enabled), Binance.US (BTC, ETH, USDT on multiple networks - lower fees), Kraken (advanced users), PayPal / Venmo (BTC, ETH - withdrawals allowed but fees are high).
3. Walkthrough - Buying BTC with Cash App
1
Open Cash App β Bitcoin tab
Tap the Bitcoin (BTC) icon at the bottom of the home screen. First-time users will be asked for SSN + photo ID - verification usually takes <5 min.
2
Tap "Buy" β enter USD amount
Enter the dollar amount you want to top up - the current minimum is shown on ShipHub's Add Funds screen. Cash App will deduct it from your linked debit card or Cash App balance. The BTC arrives in your Cash App wallet instantly.
3
Open ShipHub β Add Funds β Bitcoin
In a second tab, go to ShipHub Balance β Add Funds (or the button on the dashboard balance card), pick BTC, enter the same USD amount, and press the pay button - it is labelled Pay with Crypto, and while a bonus offer is running it shows what you pay and what you get. A secure checkout page opens in a new tab with a one-time BTC address, a QR code and the exact BTC amount to send.
4
In Cash App: Bitcoin β Withdraw Bitcoin
Back in Cash App, on the Bitcoin tab tap Withdraw Bitcoin β scan the QR code on the checkout page or paste the address from it. Enter the exact BTC amount the checkout page shows. Cash App's free Standard withdrawal has a minimum send amount (recently 100,000 sats / 0.001 BTC) - if your top-up is under that, use Instant, which charges a fee shown in the app, or use an app without a withdrawal floor. Confirm both figures in Cash App before you buy.
5
Confirm - your balance auto-credits
Confirm the withdrawal. Once Bitcoin confirms on-chain (usually 10β30 minutes), ShipHub credits your balance automatically. You'll see the new amount on the dashboard.
4. Walkthrough - Buying BTC, ETH or USDT with Coinbase
1
Sign up at coinbase.com and verify ID
Standard US KYC - SSN, photo ID, and a selfie. Verification is usually instant. Use the official Coinbase app or coinbase.com - beware of lookalikes.
2
Link a US payment method
In Settings β Payment methods, link a bank (ACH - free but takes 1β3 days) or a debit card (instant, ~3.99% fee). Wires are also supported for larger top-ups.
3
Buy BTC, ETH or USDT
Tap Buy, pick the asset and enter your USD amount. For USDT, Coinbase uses the Ethereum / ERC-20 network - match this on ShipHub (pick the USDT-ERC20 option).
4
Start the payment on ShipHub
On ShipHub Balance β Add Funds, pick the same coin/network you bought on Coinbase, enter the USD amount, and press Pay with Crypto. A checkout page opens in a new tab showing the deposit address, the network and the exact amount - copy the address from there. Note: addresses are one-time - never reuse an old one.
5
In Coinbase: Send β paste address
Open the asset in Coinbase, tap Send, paste the address, and enter the exact amount ShipHub gave you. Coinbase shows the network - confirm it matches ShipHub. Tap Send.
6
Wait for confirmations
Typical confirmation times when the networks are not congested: USDT-TRC20 about 1β3 minutes, ETH and USDT-ERC20 about 3β10 minutes, BTC about 10β30 minutes. Congestion can make any of these considerably longer. Once it confirms, ShipHub credits your balance automatically - there is no manual step.
β Critical - network mismatch = lost funds. The network shown on ShipHub's Add Funds page must match the network you select when you click Send in your app. USDT on the wrong network is the #1 cause of lost crypto. If ShipHub says USDT TRC-20, do not send USDT ERC-20 to that address (and vice-versa). If you are unsure, use BTC on the Bitcoin mainnet - but still make sure your app is not sending over Lightning.
5. Quick comparison - which US option is best for me?
App
Coins
Speed (buy β send)
Approx. fees
Best for
Cash App
BTC
Instant buy, ~15 min on-chain
1.5β2% spread
BTC only - mind the 0.001 BTC free-withdrawal floor
Coinbase
BTC, ETH, USDT (ERC-20)
ACH 1β3 days Β· Debit instant
1β4% (less on Coinbase One)
Multi-coin, USDT
Strike
BTC
ACH 1β3 days
Under 1%
Frequent BTC top-ups
Robinhood
BTC, ETH
Instant if Robinhood Gold
~1% spread
If you already trade on Robinhood
Binance.US
BTC, ETH, USDT (multiple networks)
ACH 1β3 days
0.1β0.5% (lowest)
Power users, USDT-TRC20
PayPal / Venmo
BTC, ETH
Instant
2β4% (highest)
Convenience over price
6. Sending safely - 5-step checklist
Every successful crypto top-up follows these five rules. Skim them before you click Send.
1
Copy-paste - never type the address
Never type an address by hand. Always copy it from ShipHub and paste it into your app, then check that the first and last few characters match what ShipHub shows. Many address formats are case-sensitive and a single wrong character means the funds are gone for good.
2
Match the network exactly
ShipHub accepts BTC on the Bitcoin mainnet and ETH on the Ethereum mainnet only - do not send over Lightning or an Ethereum layer-2, even though some apps offer those. USDT exists on several networks; pick the same one on both sides (TRC-20 β TRC-20 or ERC-20 β ERC-20). Send on any network ShipHub does not show and the funds are not recoverable.
3
Send the exact amount shown
If the invoice expires before you send, generate a new one - exchange rates move and a stale invoice may underpay.
4
Test small the first time
For your first transfer ever, top up the smallest amount Add Funds will accept, so you can prove the whole pipeline works before sending larger amounts.
5
Wait for confirmations - don't double-send
Once you click Send, the network does the rest. ShipHub's dashboard shows a "Crypto payment pending" pill - your balance auto-credits as soon as the blockchain confirms. Don't send a second time.
7. FAQ
I sent USDT on the wrong network - can I recover it?
Usually no - funds sent on a network ShipHub does not accept are lost. Always match the network shown on the invoice. If you are unsure, use BTC on the Bitcoin mainnet, and check your app is not defaulting to Lightning.
How long until my balance is credited?
Typically USDT-TRC20 1β3 minutes, ETH and USDT-ERC20 3β10 minutes, BTC 10β30 minutes - longer when the network is busy. ShipHub credits automatically, so you don't need to refresh or contact support unless it is still pending after an hour.
Why is my deposit address different each time?
Each top-up gets a unique one-time address for privacy and accounting. Never reuse an old address - generate a new one for every top-up.
What's the minimum top-up amount?
The current minimum is shown on the Add Funds screen - that screen is always the authority. Smaller amounts are rejected because network fees would eat too much of the deposit.
Can I use PayPal or Venmo to buy crypto?
Yes - both let US users buy BTC and ETH and now allow external transfers. Fees are higher than Coinbase/Strike, but the convenience is hard to beat if you already use them.
Does ShipHub charge a fee on top-ups?
No. ShipHub credits the full invoiced amount. The blockchain itself charges a network fee to move the coins, which your app deducts on its side - it is usually small, but it depends on the asset and how busy the network is, so check the fee your app quotes before you confirm.
The payment shows "partially paid" - what now?
Less than the invoice amount arrived - usually because the exchange rate moved between the quote and the send, or a fee was taken off the top. A partially paid invoice does not credit automatically. Send the shortfall against the same invoice while it is still open, or message support with the asset, amount, network and time and it can be settled by hand.
Tax implications?
The IRS treats digital assets as property, so disposing of crypto, including spending it, can create a reportable gain or loss, however small. Whether your app issues you a tax form depends on the app and on the rules for that year, and you may still have to report even if you never receive one. See the IRS guidance on digital asset transactions, and talk to a tax professional about your own situation. Nothing here is tax advice.
I'm not in the US - does this still work?
Yes. The technical steps are identical worldwide; only the recommended apps change. Use Coinbase (90+ countries), Binance (most of the world), Kraken (EU + UK + US), or any local exchange. The ShipHub side is the same.
Still stuck? Open Balance β Add Funds to start your first top-up. If a payment hasn't confirmed after an hour, message us - send the coin, the amount and the time, and we'll trace it.
If you already manage orders in ShipStation or Veeqo, you can pull them straight into ShipHub instead of typing addresses by hand.
1
Open Settings β Integrations
Click the gear icon at the top right.
2
Toggle ShipStation or Veeqo
A new tab will appear in the sidebar once enabled.
3
Connect your account
Click the new sidebar tab and connect. You'll be asked for an API key the first time: in ShipStation it is under Settings β Account β API Settings, in Veeqo under Settings β Users & Roles β API keys. Give it read access to orders and write access to shipments - anything less and imports or tracking sync will fail. The key is stored against your ShipHub account only; you can replace or remove it later from Settings β Integrations.
4
Set your From Address
Your warehouse address. It is reused as the sender for every imported order, so a typo here goes onto every label - check it before the first batch. You can change it any time from the same screen; existing labels are not affected.
5
Generate & sync
Pick orders from the imported list and generate labels. Tracking numbers are pushed back to ShipStation/Veeqo automatically when the option is on. Two confirmations are worth reading rather than clicking through: one warns that a selected order already has a label and generating again will charge you again, and one warns that an order has no weight and will be generated at 1 lb. If the push-back fails, the label is still created and charged - the tracking number is in Orders History and can be copied across by hand.
Don't see the toggle? Integrations are off by default to keep your sidebar clean. Turn them on only if you actually use the service. Re-importing the same order does not create a second label unless you generate again - the duplicate warning is your safeguard, so read it before confirming.
For developers: ShipHub exposes a REST API so you can generate labels from your own software. The API page is the source of truth - it renders live examples using your own account's host and key, so it cannot drift out of date. Everything below is a summary of it.
Live examples & your key
The API page shows your key, the exact host for your account, and copy-paste-ready examples. It also has Renew Key - renewing revokes the old key immediately, so swap it in your integration first.
API key auth
Send your key in the X-API-Key header - not as a Bearer token. Authorization: Bearer β¦ is only for the portal's own session token and will return 401 with an API key. Treat the key like a password.
Endpoints
GET /api/user/services to list the label type + tracking series combinations you can use, POST /api/user/create-order to create one label, and GET /api/user/order/{trackingId} to fetch it again. Those three accept an API key. The portal's own bulk upload is not exposed to API keys - loop create-order instead.
Shared balance & limits
API calls deduct from the same balance as the portal. Create-order allows up to 500 requests per minute per account, and all endpoints share 5,000 requests per 15 minutes per IP. A 429 response carries a retryAfter value in seconds. The API page lists the full 400/401/402/403/404/429 error table.
Quick example - create one label (curl)
The host below is the current production one. Your account's exact host is printed on the API page - copy it from there rather than from here.
Always check barcodes_status before printing.complete means every barcode rendered. partial means some are missing from the PDF (listed in barcodes_failed) and unavailable means the PDF could not be generated. Do not ship a package whose label came back partial.
Open Settings via the gear icon at the top right of any page.
Integrations tab
Show or hide the ShipStation and Veeqo sidebar tabs, and disconnect an account you no longer want linked.
Security tab
Change your password: enter your current one, then the new one twice. Minimum 8 characters with a mix of letters and numbers.
Your API key
The key on the API page spends the same balance as the portal, so treat it like a password: never paste it into a browser console, a shared document or client-side code. If it may have leaked, use Renew Key - the old key stops working the moment you do, so update your integration in the same sitting.
Lost your password? There is no self-serve reset - the Forgot your password? link on the sign-in page tells you the same thing. Contact support or your administrator and they will set a new one for you.
"Insufficient balance" error
Your balance is below the cost of the label(s) you tried to generate. You can top up yourself from Balance β Add Funds - no admin approval needed. Alternatively remove some rows from your CSV and generate the rest.
Tracking series dropdown is empty
Your account has not been granted access to any tracking series. Contact your admin.
Label type dropdown is empty after picking a tracking series
The label types tied to that tracking series aren't enabled for your account. Pick a different series, or ask your admin to add access.
"Duplicate tracking number" error
The system blocks reuse of any tracking number that has ever been generated. This protects you from USPS rejecting the package. Just retry - the next number in the series will be used automatically.
Batch stuck on "Processing"
Refresh the page. The batch processor reconnects and resumes where it left off. Each row is keyed by its position in the file, so the same row cannot be charged twice. If rows end up under Fail, those were not charged - re-upload just those rows as a new file.
Generated label PDF won't open
Disable popup blockers for this site, or use the re-download button in Orders History. Some browsers block auto-opened PDFs by default.
Address autocomplete not suggesting
Autocomplete only works for US addresses. Type at least the first 3 characters of the street.
I generated a label by mistake - can I get a refund?
Open Orders History, find the label and use the Refund button on that row. The credit goes back to your ShipHub balance, not to your card or wallet. A label can be refunded once, only within 30 days of purchase, and only if it has not already been refunded or voided. There is also a rolling cap - total refunds are limited to a small percentage of what you have topped up in the last 30 days, and the dialog shows how much of that you have left. If the label is outside those rules, contact support with the tracking number and an administrator can look at it.
My crypto top-up says "pending" or "confirming"
The payment has been seen but the blockchain has not finished confirming it. Wait - do not send a second payment. The balance credits itself when it confirms.
My payment invoice expired before I sent it
Start a new top-up. Do not pay an expired invoice's address: the exchange rate it was quoted at has moved, so the amount would no longer match.
I sent less than the invoice, or used the wrong network
Neither credits automatically. Contact support with the asset, the amount, the network and the time you sent it, and it can be traced.
Verify Data failed and Generate Labels never appeared
That is intentional - validation is all-or-nothing. Fix every listed row (only the first 20 are shown), re-upload the file and verify again. The two most common causes are a renamed header and a weight value meant as ounces: the sender ZIP column is PostalCodeFrom while the recipient one is ZipTo, and a bare number in Weight is read as pounds.
The API returns 401, 402 or 429
401 - the key is missing, revoked, or sent as Authorization: Bearer instead of the X-API-Key header. 402 - not enough balance; the message states what was required and what you had. 429 - rate limited; wait the number of seconds in retryAfter and retry.
An imported ShipStation/Veeqo order did not get its tracking number back
The label itself was still created and charged. Copy the tracking number from Orders History into the order manually, then check that the integration is still connected under Settings β Integrations.
My balance did not update after a label was generated
Reload the page - the balance pill reads a cached value. If it is still wrong, check the Balance page: every charge is listed there with a running balance, and that page is the record.
No matches found
Try a different keyword, or ask your administrator - or message support directly.
Before you write: include your username, the tracking number or batch ID, what you were doing, and the exact message you saw. That one line usually saves a whole round trip.
A support specialist replies to you directly on WhatsApp. Replies are fastest Monday to Friday, UK working hours.
Your administrator also has your full account history, including balance, charges and every label you have generated, and can resolve most account questions directly.
Set From Address (Your Warehouse)
Veeqo Settings
How to Generate Labels
Talk to us
Payments, labels, tracking, or anything that looks wrong - message us and a real person replies.
A ShipHub support specialist replies to you directly on WhatsApp. Replies are fastest MondayβFriday, UK working hours. Please include your tracking number or batch ID, what you were doing, and the exact error message.