Major Delivery Platforms
Integration Approaches
1. Direct API Integration
Each platform provides APIs for order management.
2. Aggregator Services
Third-party services that unify multiple platforms.
3. POS Integration
Many POS systems have built-in delivery integrations.
Architecture
┌──────────────────────────────────────────┐
│ Restaurant POS │
└──────────────────────────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ │ │ │
┌───▼──┐ ┌───▼──┐ ┌───▼──┐ ┌───▼──┐
│Uber │ │Door │ │Grub │ │Local │
│Eats │ │Dash │ │hub │ │ │
└──────┘ └──────┘ └──────┘ └──────┘
Webhook Integration
// Receive orders from delivery platforms
import { NextRequest, NextResponse } from 'next/server';
interface DeliveryOrder {
orderId: string;
platform: 'ubereats' | 'doordash' | 'grubhub';
items: Array<{
name: string;
quantity: number;
modifiers?: string[];
}>;
customer: {
name: string;
phone: string;
address: string;
};
total: number;
}
export async function POST(request: NextRequest) {
const order: DeliveryOrder = await request.json();
// Validate order
if (!order.items?.length) {
return NextResponse.json(
{ error: 'Invalid order' },
{ status: 400 }
);
}
// Create order in your system
const internalOrder = await createOrder({
source: order.platform,
externalId: order.orderId,
items: order.items,
customer: order.customer,
total: order.total,
});
// Send to kitchen
await sendToKitchen(internalOrder);
// Acknowledge to platform
return NextResponse.json({ status: 'accepted' });
}
Key Challenges
Conclusion
Delivery integration is essential for modern restaurants. Start with one platform, then expand as you learn the patterns.
┌──────────────────────────────────────────┐
│ Restaurant POS │
└──────────────────────────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ │ │ │
┌───▼──┐ ┌───▼──┐ ┌───▼──┐ ┌───▼──┐
│Uber │ │Door │ │Grub │ │Local │
│Eats │ │Dash │ │hub │ │ │
└──────┘ └──────┘ └──────┘ └──────┘
// Receive orders from delivery platforms
import { NextRequest, NextResponse } from 'next/server';
interface DeliveryOrder {
orderId: string;
platform: 'ubereats' | 'doordash' | 'grubhub';
items: Array<{
name: string;
quantity: number;
modifiers?: string[];
}>;
customer: {
name: string;
phone: string;
address: string;
};
total: number;
}
export async function POST(request: NextRequest) {
const order: DeliveryOrder = await request.json();
// Validate order
if (!order.items?.length) {
return NextResponse.json(
{ error: 'Invalid order' },
{ status: 400 }
);
}
// Create order in your system
const internalOrder = await createOrder({
source: order.platform,
externalId: order.orderId,
items: order.items,
customer: order.customer,
total: order.total,
});
// Send to kitchen
await sendToKitchen(internalOrder);
// Acknowledge to platform
return NextResponse.json({ status: 'accepted' });
}