The Shipi API v1 provides a modern RESTful interface for managing your entire shipping workflow programmatically — shipments, addresses, carriers, account info, and analytics. Use it to build custom integrations, dashboards, or AI-powered shipping assistants.
Base URL
https://app.myshipi.com/api/v1
All v1 endpoints live under the /api/v1/ path. The existing endpoints (Create Shipment, Get Rates, Track) remain at their original paths and continue to work as before.
Authentication
All v1 API requests require your integration key. This is a single credential that identifies your store. You can find it in your Shipi dashboard under Settings > General.
3 Ways to Send Your Key
Choose whichever method fits your workflow best:
| Method | How | Example |
|---|---|---|
| Header (recommended) | Send as X-Integration-Key header | X-Integration-Key: sk_live_abc123... |
| Query Parameter | Add integration_key to URL | ?integration_key=sk_live_abc123... |
| JSON Body | Include in POST request body | {"integration_key": "sk_live_abc123..."} |
Keep your key safe. Never expose your integration key in client-side JavaScript. Always make API calls from your backend server.
Authentication Example
// cURL — using header (recommended)
curl -X GET "https://app.myshipi.com/api/v1/account.php" \
-H "X-Integration-Key: sk_live_abc123def456"
// cURL — using query parameter
curl -X GET "https://app.myshipi.com/api/v1/account.php?integration_key=sk_live_abc123def456"
// PHP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://app.myshipi.com/api/v1/account.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"X-Integration-Key: sk_live_abc123def456",
"Accept: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
// JavaScript (Node.js)
const response = await fetch("https://app.myshipi.com/api/v1/account.php", {
headers: {
"X-Integration-Key": "sk_live_abc123def456",
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
# Python
import requests
response = requests.get(
"https://app.myshipi.com/api/v1/account.php",
headers={"X-Integration-Key": "sk_live_abc123def456"}
)
print(response.json())
Authentication Errors
If authentication fails, the API returns a 401 status with:
{
"status": "error",
"message": "Invalid integration key or inactive account."
}
Response Format
All responses are JSON with a consistent structure:
// Success
{
"status": "success",
"data": { ... },
"message": "Optional success message"
}
// Error
{
"status": "error",
"message": "Description of what went wrong"
}
HTTP Status Codes
| Code | Meaning |
|---|---|
200 | Success |
201 | Created (new resource added) |
400 | Bad Request (missing or invalid parameters) |
401 | Unauthorized (invalid or missing integration key) |
404 | Not Found (resource doesn’t exist) |
405 | Method Not Allowed (wrong HTTP method) |
500 | Server Error |
CORS
All v1 endpoints support CORS with Access-Control-Allow-Origin: *, allowing requests from any origin. OPTIONS preflight requests are handled automatically.
Available Endpoints
| Endpoint | Methods | Description |
|---|---|---|
/api/v1/shipments.php | GET | List, get, or search shipments |
/api/v1/addresses.php | GET, POST | Address book CRUD operations |
/api/v1/carriers.php | GET | List carrier accounts (safe info only) |
/api/v1/account.php | GET | Account info, billing, plan details |
/api/v1/stats.php | GET | Shipping statistics and analytics |
/api/v1/tracking_url.php | GET | Get tracking URL (no auth required) |
Rate Limits
The API currently does not impose strict rate limits, but we recommend keeping requests under 60 per minute per integration key. Excessive usage may be throttled in the future.
Need Help?
If you have questions or need help with integration, reach out to our support team at support@myshipi.com or visit the Shipi Dashboard.