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
- Obtain Floating Deli API credentials from your Courimax account manager
- Configure your webhook endpoint
- 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 possibleestimatedDeliveryMinutes- Estimated delivery timedistance- Distance in kilometerszone- 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 addresspickupLat/Lng- Merchant coordinatesdropoffAddress- Customer addressdropoffLat/Lng- Customer coordinatesrecipientName- Customer namerecipientPhone- Customer phoneexternalRef- Your unique order referencemerchantName- Merchant name
Optional Fields
prepMinutes- Preparation time (max 180 minutes)items- Array of order itemsrequiresPinHandshake- Require PIN verificationnotes- 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 createdorder.assigned- Driver assignedorder.picked_up- Package picked up from merchantorder.in_transit- In transit to customerorder.delivered- Delivered to customerorder.failed- Delivery failedorder.cancelled- Order cancelled
Merchant Workflow
Standard Flow
- Order Received: Customer places order with merchant
- Feasibility Check: Check if delivery is feasible
- Create Order: Create delivery order in Courimax
- Preparation: Merchant prepares order (prepMinutes)
- Mark Ready: Merchant marks order ready
- Driver Dispatch: System assigns driver
- Pickup: Driver picks up from merchant
- Delivery: Driver delivers to customer
- 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
- API Documentation: docs.courimax.com
- Email: support@courimax.com
- Status Page: status.courimax.com