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-secret

Admin-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

All API docs

Back to home