Primavera BSS
Use the customer's Primavera Web API through a secure connector to sync sales documents, customers, menu items, payments, and stock.
DEVELOPER PLATFORM
One versioned, provider-neutral integration API for restaurant operations, payments, bookings, tickets, menus, and inventory.
INTEGRATION MODEL
Adapters only translate provider-specific data. They never access NGolaBooking's database, so the core workflow and audit trail remain consistent for every restaurant.
Use the customer's Primavera Web API through a secure connector to sync sales documents, customers, menu items, payments, and stock.
Connect sales, POS, inventory, accounting, and CRM through an Odoo adapter and the customer's supported external API.
Use SAP APIs or SAP Integration Suite for enterprise, hybrid, and governed integration landscapes.
Implement the same adapter contract for REST APIs, webhooks, or a local connector where an on-premise POS has no public API.
GETTING STARTED
Restaurant owners and general managers create a connection in NgolaManager → API & Integrações. The API key and secret are displayed once only.
X-NGola-Integration-Key: ngb_int_… X-NGola-Integration-Secret: ngb_sec_… Accept: application/json
CONNECTIONS
POST /api/manager/integrations
{
"restaurantId": "…",
"actorId": "…",
"provider": "PRIMAVERA",
"name": "Primavera production"
}REST API
/api/integrations/v1/restaurants/{restaurantId}/catalogRestaurant, menu, and table catalogue
/api/integrations/v1/restaurants/{restaurantId}/bookings?updatedSince=Incremental bookings sync
/api/integrations/v1/restaurants/{restaurantId}/orders?updatedSince=Incremental orders sync
/api/integrations/v1/restaurants/{restaurantId}/payments?updatedSince=Payment and settlement data
/api/integrations/v1/restaurants/{restaurantId}/commandsCheck-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
IDs are NGolaBooking identifiers. Provider-specific IDs belong in externalRefs; adapters should not replace canonical identifiers or mutate the database directly.
{
"id": "rst_7c9…",
"name": "Lookal Ocean Club",
"location": "Ilha de Luanda",
"currency": "AOA",
"taxId": null
}{
"id": "menu_a91…",
"sku": "PRATO-001",
"name": "Calulu de peixe",
"description": "Especialidade angolana",
"price": 8500,
"currency": "AOA",
"taxRate": 14,
"available": true
}{
"id": "tbl_12…",
"code": "T12",
"capacity": 4,
"status": "FREE",
"externalRefs": {
"primavera": "MESA-12"
}
}{
"id": "usr_41…",
"name": "Cláudio Iombo",
"email": "cliente@example.com",
"phone": "+244923000000",
"externalRefs": {
"odoo": "493"
}
}{
"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"
}
}{
"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"
}
}{
"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"
}{
"id": "tkt_44…",
"code": "TICKET-9F2K",
"eventId": "evt_20…",
"customerId": "usr_41…",
"status": "VALID",
"qrCode": "NGB-TICKET-…",
"quantity": 1,
"total": 12000,
"currency": "AOA"
}{
"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
}
}{
"type": "booking.check_in",
"resourceId": "bkg_32…"
}SECURITY & RELIABILITY
Pass X-NGola-Integration-Key and X-NGola-Integration-Secret. A credential pair cannot read or write data outside its restaurant.
Repeated check-in, check-out, and order-status requests are safely replayed without duplicating the operation.
Integration events are retained as deliveries so worker retries do not block a booking, payment, or order transaction.
Connection creation and integration actions remain traceable per restaurant.
EVENTS
booking.confirmedbooking.checked_inbooking.checked_outorder.paidorder.readyorder.collectedpayment.completedpayment.refundedticket.paidticket.checked_inmenu_item.updatedinventory.adjusted