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