GEBETA Partner API
Base URL: https://gebetaexpress.com/api/v1
· Flutter --dart-define=GEBETA_API=https://gebetaexpress.com/api/v1
Partner / hotel order API
Base URL: https://gebetaexpress.com/api/v1
Same orders / order_items tables as the website, QR menu, Telegram, restaurant POS, and GEBETA Market. Use this for Zemen Booking, Zemen Gebeya, Dallol ERP / Ministry of Revenue, and in-house room service.
Authentication
Send credentials on every request.
Legacy env keys (GEBETA_PARTNER_KEYS=zemenbooking:secret,zemengebeya:secret,dallolerp:secret):
X-Api-Key: your-partner-secretAdmin-issued keys (GEBETA Admin → API keys, same idea as Dallol ERP):
X-API-Key: gbk_…
X-API-Secret: gbs_…or Authorization: Bearer gbk_…:gbs_…. Copy the secret once when generated.
The partner name becomes the default source on orders unless you override it in the body.
Response shape
{ "success": true, "message": "...", "data": { ... }, "errors": [] }Endpoints
| Method | Path | Description ||--------|------|-------------|| GET | /partner/menu?restaurant=slug | Menu for a hotel/restaurant || POST | /partner/orders | Place a food order || GET | /partner/orders/{pnr} | Order status by PNR or order number || GET | /partner/market/catalog | Marketplace + farmer catalog (Zemen Gebeya) || POST | /partner/market/orders | Place a market / farm-to-table order || GET | /partner/erp/orders | Tax-ready orders for Dallol ERP / MoR || POST | /partner/erp/push/{id} | Push one order into Dallol ERP sales / EIMS |OpenAPI: openapi.yaml (partner section).
---
GET /partner/menu
Query:
- restaurant or hotel — slug (e.g. addis-spice-kitchen) - restaurant_id — numeric id
Example:
curl -s "https://gebetaexpress.com/api/v1/partner/menu?restaurant=addis-spice-kitchen" \
-H "X-Api-Key: YOUR_SECRET"---
POST /partner/orders
Place delivery, in-house, or room-service orders.
Body (JSON)
| Field | Required | Notes ||-------|----------|-------|| restaurant_id or restaurant / slug / hotel | yes | Target property || items | yes | [{ "menu_item_id": 12, "quantity": 2 }] || order_type or type | no | inhouse, dine_in, delivery, drive_through (default inhouse) || full_name / customer_name | yes | Guest name || phone / customer_phone | recommended | Guest phone || room / room_number | in-house | Room number || table / table_number | dine-in | Table || delivery_address / address | delivery | Street / landmark || lat, lng | delivery | Coordinates || payment_method | no | cash, room_charge, bill_to_room, chapa, … (default cash) || external_id / partner_ref | no | Idempotent key from your PMS || source | no | Override source label (default = partner key name) || instructions / notes | no | Kitchen / delivery notes |In-house example (ZemenBooking)
curl -s -X POST "https://gebetaexpress.com/api/v1/partner/orders" \
-H "X-Api-Key: YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{
"restaurant": "addis-spice-kitchen",
"order_type": "inhouse",
"full_name": "Abebe Kebede",
"phone": "0912345678",
"room": "304",
"payment_method": "room_charge",
"external_id": "ZB-2026-88421",
"items": [
{ "menu_item_id": 5, "quantity": 1 },
{ "menu_item_id": 8, "quantity": 2 }
],
"instructions": "No pepper"
}'Success response
{
"success": true,
"message": "Order placed",
"data": {
"order_id": 1234,
"pnr": "482910",
"order_number": "ORD-20260902-001",
"status": "confirmed",
"grand_total": 450.00,
"track_url": "https://gebetaexpress.com/track/482910"
}
}In-house / room-charge orders are confirmed immediately. Online payment methods return pending_payment until paid.
---
GET /partner/orders/{pnr}
Track by 6-digit PNR (tracking_code) or order_number.
curl -s "https://gebetaexpress.com/api/v1/partner/orders/482910" \
-H "X-Api-Key: YOUR_SECRET"---
Order sources (where orders appear)
| Source | Where staff see it ||--------|-------------------|| website | Admin call center + restaurant orders || telegram | Same || qr | Same || restaurant_pos | Restaurant panel (in-house POS) || zemenbooking / partner | Admin call center + restaurant orders || zemengebeya | Market / merchant orders || dallolerp | ERP tax sync || admin_dispatch | Call center phone orders |Restaurant panel: /restaurant/orders (auto-refresh every 8s). Platform call center: /admin/orders.
---
Related docs
- Guest / mobile API — passenger app, Bearer auth - Mobile API — sync, tracking, checkout with Bearer token