Skip to main content

Floating Deli Integration Guide

Complete guide to integrating with Courimax for Floating Deli merchant deliveries.

Overview​

Courimax integrates with Floating Deli for restaurant and merchant deliveries. This guide covers:

  • Checking delivery feasibility
  • Creating delivery orders
  • Marking orders ready for pickup
  • Tracking order status
  • Canceling orders
  • Handling webhooks

Prerequisites​

  1. Obtain Floating Deli API credentials from your Courimax account manager
  2. Configure your webhook endpoint
  3. Understand your merchant delivery workflow

Step 1: Authentication​

All API requests require an API key in the X-API-Key header:

curl -H "X-API-Key: cmx_your_floating_deli_api_key" \
https://api.courimax.com/api/integrations/floating-deli/orders

Step 2: Check Feasibility​

Before creating an order, check if delivery is feasible:

curl -X POST "https://api.courimax.com/api/integrations/floating-deli/feasibility" \
-H "Content-Type: application/json" \
-d '{
"pickupLat": 32.0639,
"pickupLng": 34.7742,
"dropoffLat": 32.0753,
"dropoffLng": 34.7749,
"packageSize": "small"
}'

Response:

{
"feasible": true,
"estimatedDeliveryMinutes": 25,
"distance": 3.5,
"zone": "TLV-CENTER"
}

Feasibility Request Schema​

{
pickupLat: number; // Pickup latitude
pickupLng: number; // Pickup longitude
dropoffLat: number; // Dropoff latitude
dropoffLng: number; // Dropoff longitude
packageSize?: string; // "small", "medium", or "large"
}

Response Fields​

  • feasible - Whether delivery is possible
  • estimatedDeliveryMinutes - Estimated delivery time
  • distance - Distance in kilometers
  • zone - Delivery zone

Step 3: Create Orders​

Create a delivery order:

curl -X POST "https://api.courimax.com/api/integrations/floating-deli/orders" \
-H "X-API-Key: cmx_your_floating_deli_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: unique-order-id-789" \
-d '{
"pickupAddress": "Restaurant Name, Rothschild Blvd, Tel Aviv",
"pickupLat": 32.0639,
"pickupLng": 34.7742,
"dropoffAddress": "Customer Address, Dizengoff Center, Tel Aviv",
"dropoffLat": 32.0753,
"dropoffLng": 34.7749,
"recipientName": "John Doe",
"recipientPhone": "+972501234567",
"externalRef": "FD-ORDER-123",
"merchantName": "Pizza Palace",
"prepMinutes": 15,
"items": [
{
"name": "Margherita Pizza",
"quantity": 2
},
{
"name": "Caesar Salad",
"quantity": 1
}
],
"requiresPinHandshake": false,
"notes": "Ring doorbell"
}'

Required Fields​

  • pickupAddress - Merchant address
  • pickupLat/Lng - Merchant coordinates
  • dropoffAddress - Customer address
  • dropoffLat/Lng - Customer coordinates
  • recipientName - Customer name
  • recipientPhone - Customer phone
  • externalRef - Your unique order reference
  • merchantName - Merchant name

Optional Fields​

  • prepMinutes - Preparation time (max 180 minutes)
  • items - Array of order items
  • requiresPinHandshake - Require PIN verification
  • notes - Delivery instructions

Item Schema​

{
name: string; // Item name
quantity: number; // Quantity (default: 1)
}

Step 4: Mark Order Ready​

When the merchant finishes preparation, mark the order as ready:

curl -X POST "https://api.courimax.com/api/integrations/floating-deli/orders/FD-ORDER-123/ready" \
-H "X-API-Key: cmx_your_floating_deli_api_key"

Response:

{
"ready": true,
"orderId": "order-uuid",
"status": "pending",
"readyAt": "2026-08-19T12:30:00.000Z"
}

This triggers driver dispatch for pickup.

Step 5: Track Orders​

Check order status:

curl -X GET "https://api.courimax.com/api/integrations/floating-deli/orders/FD-ORDER-123" \
-H "X-API-Key: cmx_your_floating_deli_api_key"

Response:

{
"externalRef": "FD-ORDER-123",
"courimaxOrderId": "order-uuid",
"status": "in_transit",
"driver": {
"id": "driver-uuid",
"name": "David Cohen",
"phone": "+972501234567"
},
"merchantName": "Pizza Palace",
"items": [
{ "name": "Margherita Pizza", "quantity": 2 },
{ "name": "Caesar Salad", "quantity": 1 }
],
"trackingToken": "tracking-token-abc",
"currentMappingStatus": "assigned"
}

Step 6: Cancel Orders​

Cancel an order if needed:

curl -X POST "https://api.courimax.com/api/integrations/floating-deli/orders/FD-ORDER-123/cancel" \
-H "X-API-Key: cmx_your_floating_deli_api_key" \
-H "Content-Type: application/json" \
-d '{
"reason": "Customer cancelled order"
}'

Response:

{
"cancelled": true,
"orderId": "order-uuid",
"status": "cancelled"
}

Step 7: Set Up Webhooks​

Configure your webhook endpoint:

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 Floating Deli Key",
"platform": "floating_deli",
"webhookUrl": "https://your-app.com/webhooks/courimax"
}'

Webhook events:

  • order.created - Order created
  • order.assigned - Driver assigned
  • order.picked_up - Package picked up from merchant
  • order.in_transit - In transit to customer
  • order.delivered - Delivered to customer
  • order.failed - Delivery failed
  • order.cancelled - Order cancelled

Merchant Workflow​

Standard Flow​

  1. Order Received: Customer places order with merchant
  2. Feasibility Check: Check if delivery is feasible
  3. Create Order: Create delivery order in Courimax
  4. Preparation: Merchant prepares order (prepMinutes)
  5. Mark Ready: Merchant marks order ready
  6. Driver Dispatch: System assigns driver
  7. Pickup: Driver picks up from merchant
  8. Delivery: Driver delivers to customer
  9. Confirmation: Receive webhook confirmation

PIN Handshake​

For high-value orders, require PIN verification:

{
"requiresPinHandshake": true
}

Driver must collect PIN from customer before completing delivery.

Best Practices​

Preparation Time​

Accurately estimate preparation time:

{
"prepMinutes": 15
}

This helps optimize driver dispatch timing.

Order Items​

Include order items for driver reference:

{
"items": [
{ "name": "Margherita Pizza", "quantity": 2 },
{ "name": "Caesar Salad", "quantity": 1 }
]
}

Delivery Instructions​

Provide clear delivery instructions:

{
"notes": "Ring doorbell, leave at door if no answer"
}

Feasibility Checks​

Always check feasibility before creating orders:

async function createOrderIfFeasible(orderData) {
// Check feasibility first
const feasibility = await checkFeasibility({
pickupLat: orderData.pickupLat,
pickupLng: orderData.pickupLng,
dropoffLat: orderData.dropoffLat,
dropoffLng: orderData.dropoffLng,
packageSize: orderData.packageSize
});

if (!feasibility.feasible) {
throw new Error('Delivery not feasible');
}

// Create order
return await createOrder(orderData);
}

Timing​

  • Check feasibility immediately when order is placed
  • Create order as soon as feasible
  • Mark ready when preparation is complete
  • Monitor driver assignment

Error Handling​

Common Errors​

400 Bad Request - Validation error

{
"statusCode": 400,
"message": ["externalRef (merchant 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"
}

Testing​

Test Orders​

Create test orders:

curl -X POST "https://api.courimax.com/api/integrations/floating-deli/orders" \
-H "X-API-Key: cmx_floating_deli_test_key" \
-H "Content-Type: application/json" \
-d '{
"pickupAddress": "Test Restaurant",
"pickupLat": 32.0639,
"pickupLng": 34.7742,
"dropoffAddress": "Test Customer",
"dropoffLat": 32.0753,
"dropoffLng": 34.7749,
"recipientName": "Test Customer",
"recipientPhone": "+972500000000",
"externalRef": "TEST-001",
"merchantName": "Test Merchant",
"prepMinutes": 10
}'

Integration Checklist​

  • Obtain API credentials
  • Configure webhook endpoint
  • Implement feasibility checks
  • Implement order creation
  • Implement mark ready
  • 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​