DEVELOPER PLATFORM

Connect NGolaBooking to your ERP and POS.

One versioned, provider-neutral integration API for restaurant operations, payments, bookings, tickets, menus, and inventory.

INTEGRATION MODEL

One canonical model. Any provider.

NGolaBookingbookings · orders · payments
Integration API v1validation · events · audit
Adaptermapping · retries · webhooks
ERP / POSSAP · Primavera · Odoo · other

Adapters only translate provider-specific data. They never access NGolaBooking's database, so the core workflow and audit trail remain consistent for every restaurant.

Primavera BSS

Use the customer's Primavera Web API through a secure connector to sync sales documents, customers, menu items, payments, and stock.

Odoo

Connect sales, POS, inventory, accounting, and CRM through an Odoo adapter and the customer's supported external API.

SAP

Use SAP APIs or SAP Integration Suite for enterprise, hybrid, and governed integration landscapes.

Other POS

Implement the same adapter contract for REST APIs, webhooks, or a local connector where an on-premise POS has no public API.

GETTING STARTED

Authenticate every request with a credential pair.

1. Create credentials

Restaurant owners and general managers create a connection in NgolaManager → API & Integrações. The API key and secret are displayed once only.

2. Send required headers

X-NGola-Integration-Key: ngb_int_…
X-NGola-Integration-Secret: ngb_sec_…
Accept: application/json

CONNECTIONS

Each restaurant controls its own integration.

Provision a connection

POST /api/manager/integrations

{
  "restaurantId": "…",
  "actorId": "…",
  "provider": "PRIMAVERA",
  "name": "Primavera production"
}

What happens next

  1. Only the restaurant owner or general manager can create a connection.
  2. NGolaBooking returns an API key and secret once.
  3. Only SHA-256 hashes of the credentials are persisted.
  4. Each key is scoped to one restaurant and can be paused or revoked.

REST API

Canonical resources and commands

GET/api/integrations/v1/restaurants/{restaurantId}/catalog

Restaurant, menu, and table catalogue

GET/api/integrations/v1/restaurants/{restaurantId}/bookings?updatedSince=

Incremental bookings sync

GET/api/integrations/v1/restaurants/{restaurantId}/orders?updatedSince=

Incremental orders sync

GET/api/integrations/v1/restaurants/{restaurantId}/payments?updatedSince=

Payment and settlement data

POST/api/integrations/v1/restaurants/{restaurantId}/commands

Check-in, check-out, and order-status commands

Responses use { version: "v1", data, requestId }. Use updatedSince for incremental reads and always send Idempotency-Key with commands.

CANONICAL JSON OBJECTS

Stable contracts for every adapter

IDs are NGolaBooking identifiers. Provider-specific IDs belong in externalRefs; adapters should not replace canonical identifiers or mutate the database directly.

Restaurant

{
  "id": "rst_7c9…",
  "name": "Lookal Ocean Club",
  "location": "Ilha de Luanda",
  "currency": "AOA",
  "taxId": null
}

Menu item

{
  "id": "menu_a91…",
  "sku": "PRATO-001",
  "name": "Calulu de peixe",
  "description": "Especialidade angolana",
  "price": 8500,
  "currency": "AOA",
  "taxRate": 14,
  "available": true
}

Table

{
  "id": "tbl_12…",
  "code": "T12",
  "capacity": 4,
  "status": "FREE",
  "externalRefs": {
    "primavera": "MESA-12"
  }
}

Customer

{
  "id": "usr_41…",
  "name": "Cláudio Iombo",
  "email": "cliente@example.com",
  "phone": "+244923000000",
  "externalRefs": {
    "odoo": "493"
  }
}

Booking

{
  "id": "bkg_32…",
  "code": "RES-3798",
  "restaurantId": "rst_7c9…",
  "customerId": "usr_41…",
  "startAt": "2026-09-05T19:00:00+01:00",
  "guestCount": 4,
  "status": "CONFIRMED",
  "tableId": "tbl_12…",
  "amounts": {
    "deposit": 5000,
    "preorder": 0,
    "currency": "AOA"
  }
}

Order

{
  "id": "ord_56…",
  "code": "PED-4821",
  "restaurantId": "rst_7c9…",
  "type": "PICKUP",
  "status": "READY",
  "pickupAt": "2026-09-05T18:30:00+01:00",
  "bookingId": null,
  "items": [
    {
      "sku": "PRATO-001",
      "name": "Calulu de peixe",
      "quantity": 2,
      "unitPrice": 8500
    }
  ],
  "totals": {
    "gross": 17000,
    "currency": "AOA"
  }
}

Payment

{
  "id": "pay_91…",
  "reference": "INV-RES-3798-123456",
  "type": "BOOKING",
  "method": "MULTICAIXA",
  "status": "COMPLETED",
  "gross": 5000,
  "platformFee": 150,
  "processorFee": 75,
  "net": 4775,
  "currency": "AOA",
  "paidAt": "2026-09-05T10:10:00Z"
}

Event ticket

{
  "id": "tkt_44…",
  "code": "TICKET-9F2K",
  "eventId": "evt_20…",
  "customerId": "usr_41…",
  "status": "VALID",
  "qrCode": "NGB-TICKET-…",
  "quantity": 1,
  "total": 12000,
  "currency": "AOA"
}

Event envelope

{
  "id": "evt_01J…",
  "type": "payment.completed",
  "version": "v1",
  "occurredAt": "2026-09-05T12:30:00.000Z",
  "restaurantId": "rst_7c9…",
  "data": {
    "paymentId": "pay_91…",
    "method": "MULTICAIXA",
    "amount": 5000
  }
}

Command

{
  "type": "booking.check_in",
  "resourceId": "bkg_32…"
}

SECURITY & RELIABILITY

Designed for financial and operational sync.

Scoped credentials

Pass X-NGola-Integration-Key and X-NGola-Integration-Secret. A credential pair cannot read or write data outside its restaurant.

Idempotent commands

Repeated check-in, check-out, and order-status requests are safely replayed without duplicating the operation.

Outbox delivery

Integration events are retained as deliveries so worker retries do not block a booking, payment, or order transaction.

Audit evidence

Connection creation and integration actions remain traceable per restaurant.

EVENTS

Subscribe to business events

booking.confirmedbooking.checked_inbooking.checked_outorder.paidorder.readyorder.collectedpayment.completedpayment.refundedticket.paidticket.checked_inmenu_item.updatedinventory.adjusted