Core Concepts
How atoship Works
Understand the key concepts behind atoship's shipping API. Learn about rates, labels, tracking, carriers, and billing.
The Shipping Flow
Every shipment follows this simple 3-step process: get rates, create a label, and track the package.
Step 1
Get Rates
Compare prices from USPS, UPS, and FedEx in one API call
Send package dimensions and addresses to get real-time rates with delivery estimates from all carriers.
Step 2
Create Label
Generate a shipping label with the selected rate
Choose the best rate and create a print-ready label. Cost is deducted from your wallet balance.
Step 3
Track Package
Monitor delivery status with real-time updates
Track packages across all carriers with a unified tracking API and webhook notifications.
Core Resources
Addresses
/v1/addressesOrigin and destination addresses for shipments. atoship validates and standardizes addresses to prevent delivery failures.
- Address validation ensures deliverability
- Residential vs commercial detection
- Standardized formatting (USPS standards)
- International address support
Rates
/v1/ratesReal-time shipping prices from multiple carriers. Compare USPS, UPS, and FedEx rates instantly.
- Multi-carrier rate comparison in one call
- Discounted commercial pricing included
- Delivery time estimates
- Service level options (Express, Ground, etc.)
Labels
/v1/labelsShipping labels with tracking numbers. Generate print-ready labels in PDF, PNG, or ZPL format.
- Multiple formats: PDF, PNG, ZPL (thermal)
- Tracking number auto-generated
- Cost deducted from wallet
- Void/refund within 30 days
Tracking
/v1/trackingPackage delivery status updates. Track shipments across all carriers with a unified API.
- Real-time status updates
- Webhook notifications for events
- Delivery confirmation
- Exception alerts
Carriers
USPS
carrier: "usps"United States Postal Service — best for lightweight packages and residential deliveries.
- Priority Mail — 1-3 days
- Priority Mail Express — Overnight
- Ground Advantage — 2-5 days
- First Class Mail — Letters & small packages
UPS
carrier: "ups"United Parcel Service — reliable for business shipments and heavier packages.
- Ground — 1-5 days
- 2nd Day Air — 2 days
- Next Day Air — Overnight
- 3 Day Select — 3 days
FedEx
carrier: "fedex"Federal Express — excellent for express shipping and international deliveries.
- Ground — 1-5 days
- Express Saver — 3 days
- 2Day — 2 days
- Home Delivery — Residential
Account & Billing
Wallet
/v1/wallet/balancePre-paid balance for purchasing shipping labels. Add funds via credit card or bank transfer.
- Pay-as-you-go model
- No monthly fees or minimums
- Auto-reload available
- Transaction history in dashboard
Refunds
/v1/labels/{id}/voidVoid unused labels and get credits back. Most labels can be refunded within 30 days.
- Void unused labels for full refund
- USPS: Refund within 30 days
- UPS/FedEx: Refund within 30 days
- Credit returned to wallet
Integrations
E-commerce Channels
Dashboard → ChannelsConnect your online stores to import orders automatically. Sync with Shopify, eBay, Amazon, and more.
- Shopify — Real-time order sync
- eBay — Marketplace integration
- Amazon — SP-API integration
- WooCommerce — WordPress plugin
Webhooks
/v1/webhooksReceive real-time notifications for tracking updates, label creation, and more.
- Tracking status updates
- Label created/voided events
- Delivery confirmations
- Custom endpoint URLs
Putting It All Together
Complete API Workflow
Here's how all the concepts work together in a typical integration
// Complete shipping workflow
const API_KEY = 'your_api_key';
const BASE_URL = 'https://atoship.com/api/v1';
// 1. Get rates from all carriers
const ratesResponse = await fetch(`${BASE_URL}/rates`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: {
name: "Your Store",
street1: "123 Store Street",
city: "San Francisco",
state: "CA",
zip: "94102"
},
to: {
name: "John Customer",
street1: "456 Customer Ave",
city: "Los Angeles",
state: "CA",
zip: "90210"
},
parcel: {
weight: 16, // ounces
length: 12,
width: 8,
height: 6
}
})
});
const { rates } = await ratesResponse.json();
// rates = [{ id, carrier, service, rate, delivery_days }, ...]
// 2. Create label with cheapest rate
const labelResponse = await fetch(`${BASE_URL}/labels`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
rate_id: rates[0].id,
label_format: 'PDF'
})
});
const label = await labelResponse.json();
// label = { id, tracking_number, label_url, carrier, cost }
// 3. Track the package
const trackingResponse = await fetch(
`${BASE_URL}/tracking/${label.tracking_number}`,
{ headers: { 'Authorization': `Bearer ${API_KEY}` } }
);
const tracking = await trackingResponse.json();
// tracking = { status, events: [{ timestamp, description, location }] }Pro Tip
Use the API Playground to test these calls interactively before integrating into your app.