EasyRoutes API - Developer Overview
EasyRoutes is a route optimization and delivery management platform for last-mile delivery, built for e-commerce businesses. The API lets you integrate EasyRoutes with your existing systems — import orders, read route data, and react to delivery events in real-time.
What you can do
| Task | How |
|---|---|
| Import orders from external systems | POST /stops/imports |
| Retrieve routes and stops | GET /routes , GET /routes/{id} |
| Look up routes by Shopify order | GET /stops/shopify/{orderId}/routes |
| Get driver information | GET /drivers |
| React to delivery events | Webhooks |
| Connect to Zapier (no code) | Zapier integration |
Note: Optimized route creation happen in the EasyRoutes app (manually or automated via our Workflows). The API focuses on updating planned routes, importing stops and reading data.
Core concepts
Routes
A planned sequence of stops for a driver on a given day. Includes start/end locations, assigned driver, and optimization status.
ID format: rte-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Route Stops
Individual deliveries on a route. Contains address, customer info, delivery status, and proof of delivery (photos, signature, notes).
ID format: rst-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Imported Stops
Orders you've sent to EasyRoutes via API that haven't been added to a route yet. They appear in your Orders page, ready for route planning.
ID format: ist-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Drivers
Team members who deliver routes. Includes contact info and current status.
ID format: drv-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Webhooks
Real-time notifications when things happen — routes dispatched, stops delivered, drivers updated. Register webhooks in Settings > API.
Authentication
- Get your Client ID and Secret from Settings > API
- Exchange them for an access token via
POST /authenticate - Include the token in all requests:
Authorization: Bearer {token}
Tokens expire after 1 hour. See the Getting Started Guide for details.
Base URL
https://easyroutes.roundtrip.ai/api/2024-07/
Common workflows
Import orders from your system
- Authenticate
POST /stops/importswith your order data- Stops appear in EasyRoutes Orders page
- Add to routes via our endpoint or let Workflows assign them automatically on route creation
Sync delivery status to your system
- Register a webhook for
STOP_STATUS_UPDATED - When a stop is delivered, you receive the event
- Update your order management system
Track proof of delivery
- Subscribe to
STOP_UPDATEDwebhook - Access photos, signatures, and notes from the payload
- Store or display in your system
Best Practices
Consider the following when building solutions or integrations with the EasyRoutes API.
Security
- Store credentials securely: Never commit API keys to version control
- Use HTTPS: All API requests must use HTTPS
- Rotate tokens: Implement token refresh logic before expiration (tokens expire after 1 hour)
- Validate webhooks: Verify webhook signatures using HMAC-SHA256 (sent in
X-EasyRoutes-Hmac-Sha256header)
Performance
- Cache access tokens: Reuse tokens until they expire (1 hour)
- Batch operations: Import or add multiple stops in a single request when possible
- Use webhooks: Prefer event-driven updates over polling
- Implement pagination: Don't request all records at once
Reliability
- Idempotent imports: Use
client_stop_idwhen importing stops - existing stops with the same ID will be replaced instead of duplicated - Retry logic: Implement retries with exponential backoff for transient errors
- Monitor webhooks: Track webhook delivery success and implement retry logic for failed deliveries
- Validate inputs: Check data constraints before sending requests
- Log requests: Maintain request/response logs for debugging
Data Quality
- Geocode addresses: Ensure addresses on your stops have valid addresses that can be matched to a geolocation.
- Structured phone numbers: When inputting phone numbers, ensure these are in the expected E.164 format.
- Use custom IDs: Include your order IDs in the
client_stop_idfield for reference and idempotent updates - Add metadata: Use tags and attributes for filtering and reporting, add a delivery date or time window if these are constraints required for planning routes, etc.
Data formats
Timestamps: RFC3339 with timezone — "2024-12-15T14:30:00Z"
Durations: Seconds as string — "300s" (5 minutes)
Coordinates:
{ "latitude": 43.6532, "longitude": -79.3832 }
Addresses:
{
"address1": "123 Queen St W",
"city": "Toronto",
"provinceCode": "ON",
"countryCode": "CA",
"zip": "M5H 2M9"
}
Error handling
| Status | Meaning |
|---|---|
200 |
Success |
400 |
Bad request — check your input |
401 |
Unauthorized — invalid or expired token |
404 |
Resource not found |
429 |
Rate limited — slow down |
500 |
Server error — contact support |
Error responses include a message field explaining what went wrong.
Pagination
List endpoints return up to 20 items by default. Use cursor-based pagination for more:
GET /routes?limit=20&cursor=eyJsYXN0X2lkIjoiMTIzIn0=
Response includes nextCursor — pass it in subsequent requests.
Next steps
| Goal | Resource |
|---|---|
| Set up credentials and make your first call | Getting Started Guide |
| See all endpoints | API Reference Guide |
| Set up real-time events | Webhooks Guide |
| Build no-code workflows | Zapier Integration |