Galaxis Integration Guide
Complete guide to integrating with Courimax for Galaxis WMS outbound orders.
Overview
Courimax integrates with Galaxis Warehouse Management System (WMS) to handle outbound delivery orders. This guide covers:
- Creating outbound orders
- Tracking order status
- Canceling orders
- Handling webhooks
Prerequisites
- Obtain Galaxis API credentials from your Courimax account manager
- Configure your webhook endpoint
- Understand your warehouse outbound workflow
Step 1: Authentication
All API requests require an API key in the X-API-Key header:
curl -H "X-API-Key: cmx_your_galaxis_api_key" \
https://api.courimax.com/api/integrations/galaxis/outbound-orders
Step 2: Create Outbound Orders
Create an outbound order from your warehouse:
curl -X POST "https://api.courimax.com/api/integrations/galaxis/outbound-orders" \
-H "X-API-Key: cmx_your_galaxis_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: unique-order-id-456" \
-d '{
"pickupAddress": "Warehouse 5, Industrial Zone, Tel Aviv",
"pickupLat": 32.0639,
"pickupLng": 34.7742,
"dropoffAddress": "Retail Store, Rothschild Blvd, Tel Aviv",
"dropoffLat": 32.0753,
"dropoffLng": 34.7749,
"recipientName": "Store Manager",
"recipientPhone": "+972501234567",
"externalRef": "GALAXIS-OUT-789",
"soNo": "SO-2026-001",
"warehouseCode": "WH-TEL-01",
"waveNo": "WAVE-001",
"packageSize": "medium",
"weightKg": 25,
"palletCount": 2,
"containers": [
{
"barcode": "CONT-001",
"name": "Electronics",
"quantity": 10,
"weightKg": 15
},
{
"barcode": "CONT-002",
"name": "Accessories",
"quantity": 20,
"weightKg": 10
}
],
"deliveryZone": "TLV-CENTER",
"deliveryWindowStart": "2026-08-20T10:00:00Z",
"deliveryWindowEnd": "2026-08-20T14:00:00Z"
}'
Required Fields
pickupAddress- Warehouse addressdropoffAddress- Delivery destinationrecipientName- Recipient namerecipientPhone- Recipient phoneexternalRef- Your unique outbound order reference
Optional Fields
soNo- Sales order numberwarehouseCode- Warehouse identifierwaveNo- Wave numberpackageSize-small,medium, orlargeweightKg- Total weightpalletCount- Number of palletscontainers- Array of container detailstemperatureClass-Ambient,Chilled, orFrozendeliveryMethod-motorcycle,car, orrefrigerateddeliveryZone- Delivery zone namedeliveryWindowStart/End- Preferred delivery window
Container Schema
{
barcode: string; // Container barcode
name: string; // Container name/description
quantity?: number; // Number of items
weightKg?: number; // Container weight
}
Step 3: Track Orders
Check outbound order status:
curl -X GET "https://api.courimax.com/api/integrations/galaxis/outbound-orders/GALAXIS-OUT-789" \
-H "X-API-Key: cmx_your_galaxis_api_key"
Response:
{
"externalRef": "GALAXIS-OUT-789",
"courimaxOrderId": "order-uuid",
"status": "in_transit",
"driver": {
"id": "driver-uuid",
"name": "David Cohen",
"phone": "+972501234567"
},
"deliveryWindowStart": "2026-08-20T10:00:00.000Z",
"deliveryWindowEnd": "2026-08-20T14:00:00.000Z",
"trackingToken": "tracking-token-xyz",
"currentMappingStatus": "assigned"
}
Step 4: Cancel Orders
Cancel an outbound order if needed:
curl -X POST "https://api.courimax.com/api/integrations/galaxis/outbound-orders/GALAXIS-OUT-789/cancel" \
-H "X-API-Key: cmx_your_galaxis_api_key" \
-H "Content-Type: application/json" \
-d '{
"reason": "Customer requested cancellation"
}'
Response:
{
"cancelled": true,
"orderId": "order-uuid",
"status": "cancelled"
}
Cancellation Rules
- Orders can be cancelled before pickup
- Orders in
picked_upor later status cannot be cancelled - Provide a reason for audit trail
Step 5: Set Up Webhooks
Configure your webhook endpoint to receive real-time updates:
curl -X POST "https://api.courimax.com/api/provisioning/organizations/org-uuid/api-keys/key-uuid" \
-H "X-Provisioning-Secret: your_secret" \
-H "Content-Type: application/json" \
-d '{
"name": "Production Galaxis Key",
"platform": "galaxis",
"webhookUrl": "https://your-app.com/webhooks/courimax"
}'
Webhook events:
order.created- Order createdorder.assigned- Driver assignedorder.picked_up- Package picked up from warehouseorder.in_transit- In transit to destinationorder.delivered- Deliveredorder.failed- Delivery failedorder.cancelled- Order cancelled
Best Practices
Warehouse Workflow
- Pick and Pack: Complete warehouse picking and packing
- Create Order: Create outbound order in Courimax
- Schedule Dispatch: Order auto-schedules based on delivery window
- Driver Assignment: System assigns driver automatically
- Pickup: Driver picks up from warehouse
- Delivery: Driver delivers to destination
- Confirmation: Receive webhook confirmation
Container Tracking
Use containers to track individual packages within an order:
{
"containers": [
{
"barcode": "CONT-001",
"name": "Electronics",
"quantity": 10,
"weightKg": 15
}
]
}
Pallet Management
Track pallet count for large shipments:
{
"palletCount": 2,
"weightKg": 500,
"packageSize": "large"
}
Temperature Control
Specify temperature requirements:
{
"temperatureClass": "Chilled",
"deliveryMethod": "refrigerated"
}
Wave Planning
Organize orders by wave for efficient dispatch:
{
"waveNo": "WAVE-001",
"warehouseCode": "WH-TEL-01"
}
Error Handling
Common Errors
400 Bad Request - Validation error
{
"statusCode": 400,
"message": ["externalRef (Galaxis outbound order ID) is required"],
"error": "Bad Request"
}
401 Unauthorized - Invalid API key
{
"statusCode": 401,
"message": "Missing X-API-Key header",
"error": "Unauthorized"
}
404 Not Found - Order not found
{
"statusCode": 404,
"message": "Order not found",
"error": "Not Found"
}
409 Conflict - Cannot cancel order
{
"statusCode": 409,
"message": "Cannot cancel order that has already been picked up",
"error": "Conflict"
}
Retry Logic
Implement retry logic for transient errors:
async function createOutboundOrderWithRetry(orderData, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
const response = await fetch(
'https://api.courimax.com/api/integrations/galaxis/outbound-orders',
{
method: 'POST',
headers: {
'X-API-Key': API_KEY,
'Content-Type': 'application/json',
'Idempotency-Key': generateUniqueId()
},
body: JSON.stringify(orderData)
}
);
if (response.status === 429) {
await sleep(Math.pow(2, i) * 1000);
continue;
}
return await response.json();
} catch (error) {
if (i === maxRetries - 1) throw error;
await sleep(Math.pow(2, i) * 1000);
}
}
}
Testing
Test Orders
Create test orders with test API keys:
curl -X POST "https://api.courimax.com/api/integrations/galaxis/outbound-orders" \
-H "X-API-Key: cmx_galaxis_test_key" \
-H "Content-Type: application/json" \
-d '{
"pickupAddress": "Test Warehouse",
"dropoffAddress": "Test Destination",
"recipientName": "Test Recipient",
"recipientPhone": "+972500000000",
"externalRef": "TEST-001",
"packageSize": "small"
}'
Mock Mode
Enable mock mode for development without actual deliveries.
Integration Checklist
- Obtain API credentials
- Configure webhook endpoint
- Implement order creation
- Implement order tracking
- Implement order cancellation
- Handle webhook events
- Implement error handling
- Test in sandbox environment
- Deploy to production
- Monitor webhook delivery
Support
- API Documentation: docs.courimax.com
- Email: support@courimax.com
- Status Page: status.courimax.com