Getting Started with FlexOps
FlexOps provides a unified shipping API that connects your application to all major carriers — USPS, FedEx, UPS, DHL, OnTrac, LSO, Canada Post, Royal Mail, and Australia Post — through a single integration.
Quick Start
1. Get your API key
Sign up at the FlexOps Dashboard and create a workspace. Your API key will be available in Settings > API Keys.
2. Install an SDK
- Node.js
- Python
- C#
- Ruby
- PHP
- Go
- Java
npm install @flexops/sdk
pip install flexops
dotnet add package FlexOps.Sdk
gem install flexops
composer require flexops/sdk
go get github.com/FlexOps/flexops-sdk-go
<dependency>
<groupId>com.flexops</groupId>
<artifactId>flexops-sdk</artifactId>
<version>1.0.0</version>
</dependency>
3. Create a label
- Node.js
- Python
- C#
- Ruby
- PHP
- Go
- Java
import { FlexOps } from '@flexops/sdk';
const client = new FlexOps({
apiKey: 'fxk_live_your_api_key',
workspaceId: 'ws_abc123',
});
const label = await client.shipping.createLabel({
carrier: 'USPS',
service: 'PRIORITY_MAIL',
fromAddress: {
name: 'FlexOps HQ',
street1: '123 Main St',
city: 'Denver',
state: 'CO',
zip: '80202',
country: 'US',
},
toAddress: {
name: 'Jane Doe',
street1: '456 Oak Ave',
city: 'Portland',
state: 'OR',
zip: '97201',
country: 'US',
},
parcel: { weight: 16, weightUnit: 'oz', length: 10, width: 8, height: 4 },
});
console.log(`Label URL: ${label.labelUrl}`);
console.log(`Tracking: ${label.trackingNumber}`);
from flexops import FlexOps
client = FlexOps(
api_key="fxk_live_your_api_key",
workspace_id="ws_abc123",
)
label = client.shipping.create_label({
"carrier": "USPS",
"service": "PRIORITY_MAIL",
"fromAddress": {
"name": "FlexOps HQ",
"street1": "123 Main St",
"city": "Denver",
"state": "CO",
"zip": "80202",
"country": "US",
},
"toAddress": {
"name": "Jane Doe",
"street1": "456 Oak Ave",
"city": "Portland",
"state": "OR",
"zip": "97201",
"country": "US",
},
"parcel": {"weight": 16, "weightUnit": "oz", "length": 10, "width": 8, "height": 4},
})
print(f"Label URL: {label['labelUrl']}")
print(f"Tracking: {label['trackingNumber']}")
using FlexOps.Sdk;
using var client = new FlexOpsClient(
baseUrl: "https://api.flexops.io",
apiKey: "fxk_live_your_api_key");
client.WorkspaceId = "ws_abc123";
var label = await client.PostAsync<LabelResponse>(
client.WsPath("shipping/labels"),
new
{
carrier = "USPS",
service = "PRIORITY_MAIL",
fromAddress = new { name = "FlexOps HQ", street1 = "123 Main St", city = "Denver", state = "CO", zip = "80202", country = "US" },
toAddress = new { name = "Jane Doe", street1 = "456 Oak Ave", city = "Portland", state = "OR", zip = "97201", country = "US" },
parcel = new { weight = 16, weightUnit = "oz", length = 10, width = 8, height = 4 }
});
Console.WriteLine($"Label URL: {label.LabelUrl}");
Console.WriteLine($"Tracking: {label.TrackingNumber}");
require 'flexops'
client = FlexOps::Client.new(
api_key: 'fxk_live_your_api_key',
workspace_id: 'ws_abc123',
)
label = client.shipping.create_label({
carrier: 'USPS',
service: 'PRIORITY_MAIL',
fromAddress: { name: 'FlexOps HQ', street1: '123 Main St', city: 'Denver', state: 'CO', zip: '80202', country: 'US' },
toAddress: { name: 'Jane Doe', street1: '456 Oak Ave', city: 'Portland', state: 'OR', zip: '97201', country: 'US' },
parcel: { weight: 16, weightUnit: 'oz', length: 10, width: 8, height: 4 },
})
puts "Label URL: #{label['labelUrl']}"
puts "Tracking: #{label['trackingNumber']}"
use FlexOps\FlexOps;
$client = new FlexOps([
'apiKey' => 'fxk_live_your_api_key',
'workspaceId' => 'ws_abc123',
]);
$label = $client->shipping->createLabel([
'carrier' => 'USPS',
'service' => 'PRIORITY_MAIL',
'fromAddress' => ['name' => 'FlexOps HQ', 'street1' => '123 Main St', 'city' => 'Denver', 'state' => 'CO', 'zip' => '80202', 'country' => 'US'],
'toAddress' => ['name' => 'Jane Doe', 'street1' => '456 Oak Ave', 'city' => 'Portland', 'state' => 'OR', 'zip' => '97201', 'country' => 'US'],
'parcel' => ['weight' => 16, 'weightUnit' => 'oz', 'length' => 10, 'width' => 8, 'height' => 4],
]);
echo "Label URL: {$label->labelUrl}\n";
echo "Tracking: {$label->trackingNumber}\n";
import "github.com/FlexOps/flexops-sdk-go"
client := flexops.NewClient(flexops.Config{
APIKey: "fxk_live_your_api_key",
WorkspaceID: "ws_abc123",
})
label, err := client.Shipping.CreateLabel(ctx, &flexops.CreateLabelRequest{
Carrier: "USPS",
Service: "PRIORITY_MAIL",
FromAddress: &flexops.Address{
Name: "FlexOps HQ", Street1: "123 Main St",
City: "Denver", State: "CO", Zip: "80202", Country: "US",
},
ToAddress: &flexops.Address{
Name: "Jane Doe", Street1: "456 Oak Ave",
City: "Portland", State: "OR", Zip: "97201", Country: "US",
},
Parcel: &flexops.Parcel{Weight: 16, WeightUnit: "oz", Length: 10, Width: 8, Height: 4},
})
fmt.Printf("Label URL: %s\n", label.LabelURL)
fmt.Printf("Tracking: %s\n", label.TrackingNumber)
import com.flexops.sdk.FlexOpsClient;
var client = new FlexOpsClient("https://api.flexops.io", "fxk_live_your_api_key");
client.setWorkspaceId("ws_abc123");
var label = client.post(client.wsPath("shipping/labels"), Map.of(
"carrier", "USPS",
"service", "PRIORITY_MAIL",
"fromAddress", Map.of("name", "FlexOps HQ", "street1", "123 Main St", "city", "Denver", "state", "CO", "zip", "80202", "country", "US"),
"toAddress", Map.of("name", "Jane Doe", "street1", "456 Oak Ave", "city", "Portland", "state", "OR", "zip", "97201", "country", "US"),
"parcel", Map.of("weight", 16, "weightUnit", "oz", "length", 10, "width", 8, "height", 4)
), LabelResponse.class);
System.out.println("Label URL: " + label.getLabelUrl());
System.out.println("Tracking: " + label.getTrackingNumber());
4. Track the shipment
- Node.js
- Python
- C#
- Ruby
- PHP
- Go
- Java
const tracking = await client.shipping.track('9400111899223456789012');
console.log(`Status: ${tracking.status}`);
console.log(`ETA: ${tracking.estimatedDelivery}`);
tracking = client.shipping.track("9400111899223456789012")
print(f"Status: {tracking['status']}")
print(f"ETA: {tracking['estimatedDelivery']}")
var tracking = await client.GetAsync<TrackingResponse>(
client.WsPath("shipping/tracking/9400111899223456789012"));
Console.WriteLine($"Status: {tracking.Status}");
Console.WriteLine($"ETA: {tracking.EstimatedDelivery}");
tracking = client.shipping.track('9400111899223456789012')
puts "Status: #{tracking['status']}"
puts "ETA: #{tracking['estimatedDelivery']}"
$tracking = $client->shipping->track('9400111899223456789012');
echo "Status: {$tracking->status}\n";
echo "ETA: {$tracking->estimatedDelivery}\n";
tracking, err := client.Shipping.Track(ctx, "9400111899223456789012")
fmt.Printf("Status: %s\n", tracking.Status)
fmt.Printf("ETA: %s\n", tracking.EstimatedDelivery)
var tracking = client.get(
client.wsPath("shipping/tracking/9400111899223456789012"),
TrackingResponse.class);
System.out.println("Status: " + tracking.getStatus());
System.out.println("ETA: " + tracking.getEstimatedDelivery());
What's next?
- Authentication — API key management, JWT tokens, and security
- Rate Shopping — Compare rates across carriers in real time
- Webhooks — Get notified when shipment status changes
- SDKs — Full SDK reference for all 7 languages
- Test Data — Sandbox addresses and tracking numbers