Skip to main content

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​

  1. Obtain Galaxis API credentials from your Courimax account manager
  2. Configure your webhook endpoint
  3. 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 address
  • dropoffAddress - Delivery destination
  • recipientName - Recipient name
  • recipientPhone - Recipient phone
  • externalRef - Your unique outbound order reference

Optional Fields​

  • soNo - Sales order number
  • warehouseCode - Warehouse identifier
  • waveNo - Wave number
  • packageSize - small, medium, or large
  • weightKg - Total weight
  • palletCount - Number of pallets
  • containers - Array of container details
  • temperatureClass - Ambient, Chilled, or Frozen
  • deliveryMethod - motorcycle, car, or refrigerated
  • deliveryZone - Delivery zone name
  • deliveryWindowStart/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_up or 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 created
  • order.assigned - Driver assigned
  • order.picked_up - Package picked up from warehouse
  • order.in_transit - In transit to destination
  • order.delivered - Delivered
  • order.failed - Delivery failed
  • order.cancelled - Order cancelled

Best Practices​

Warehouse Workflow​

  1. Pick and Pack: Complete warehouse picking and packing
  2. Create Order: Create outbound order in Courimax
  3. Schedule Dispatch: Order auto-schedules based on delivery window
  4. Driver Assignment: System assigns driver automatically
  5. Pickup: Driver picks up from warehouse
  6. Delivery: Driver delivers to destination
  7. 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​

Next Steps​