Skip to content

Supplier API

A small, honest REST API. Register as a partner, publish deals, read anonymised demand from live itineraries, and settle payouts from travellers’ shared funds.

Base URL /api/v1JSON over HTTPSBearer auth

Overview

Embirea connects travellers who are actively planning with the local businesses who can make their trip. As a supplier you do three things: publish deals, watch demand from real itineraries, and get paid when a group books from their pooled fund.

GET/api/v1/health
Heartbeat + catalogue size. No auth - use it to verify connectivity.
curl https://your-host/api/v1/health

{
  "ok": true,
  "service": "embirea-supplier-api",
  "version": "1.0.0",
  "catalogue": { "suppliers": 6, "deals": 6, "liveItineraries": 2 }
}

Authentication

Authenticated endpoints expect your live key as a Bearer token. You receive a key the moment you register (below) - it’s shown once, so store it securely.

Authorization: Bearer emb_live_xxxxxxxx

A non-admin key only sees demand and may only publish deals for the supplier it belongs to.

Itinerary intents

Start here. Intents are the UNBOOKED items on real itineraries being planned - the transfer someone still needs, the excursion pencilled in as an idea, the hotel night without a booking. The feed is filtered to the item categories your supplier account serves (transfers → transport legs, experiences → activities, hotels → stays…) and to your country. Anonymised: shape-of-demand only, never traveller identity.

GET/api/v1/itinerary-intents🔒 API key
Returns the open intents you can serve. Each row carries an opaque intentRef you can target a deal at.
curl https://your-host/api/v1/itinerary-intents   -H "Authorization: Bearer emb_live_…"

{
  "ok": true,
  "data": {
    "count": 2,
    "intents": [{
      "intentRef": "dF9jeWNsYWRlc3xpdF9mZXJyeQ",
      "category": "transport",
      "title": "High-speed ferry · Piraeus → Santorini",
      "date": "2026-09-14",
      "destination": "Athens", "countryCode": "GR",
      "partySize": 4, "bookingStatus": "planned",
      "estimatedCost": 260, "currency": "EUR"
    }]
  }
}

Deals

Deals are proposed FOR specific intents: pass the intentRef and the deal inherits the intent's destination and dates, then surfaces directly on that traveller's itinerary. (Suppliers can do the same manually from the partner portal - Intents page → "Propose a deal".) Your account can only target intents in categories it serves.

POST/api/v1/deals🔒 API key
Propose a deal for an intent.
curl -X POST https://your-host/api/v1/deals   -H "Authorization: Bearer emb_live_…"   -H "Content-Type: application/json"   -d '{
    "intentRef": "dF9jeWNsYWRlc3xpdF9mZXJyeQ",
    "category": "airport-transfer",
    "title": "Private night transfer · ATH → centre",
    "description": "Fixed-fare meet & greet, 24/7.",
    "price": 38, "wasPrice": 55, "currency": "EUR",
    "unit": "per group", "servesHours": "24h",
    "tags": ["meet & greet","fixed fare"], "instantConfirm": true
  }'

Without an intentRef, location and countryCode are required and the deal is matched to itineraries by location/dates instead.

GET/api/v1/deals?country=GR&category=experience
Browse the public catalogue, optionally filtered by country and category.

Content management

Manage your catalogue and fleet over the API: create, update and delete products (transfers, excursions, stays, services - including zone/per-passenger transfer pricing) and drivers. Suppliers on the Multi channel manager additionally get live pricing, instant bookings and driver telemetry (see the contract below).

POST/api/v1/products🔒 API key
Create a product. Body is a listing shape: { type, title, summary, area, basePrice, currency, capacity, transfer?, … }
curl -X POST https://your-host/api/v1/products   -H "Authorization: Bearer emb_live_…"   -H "Content-Type: application/json"   -d '{ "type": "transport", "title": "Airport transfer · ATH → centre",
        "area": "Athens", "basePrice": 38, "currency": "EUR",
        "capacity": { "maxPax": 4 } }'
PATCH/api/v1/products/{id}🔒 API key
Update your product - price, availability, status, transfer pricing…
DELETE/api/v1/products/{id}🔒 API key
Remove your product.
POST/api/v1/drivers🔒 API key
Create a driver: { name, phone?, vehicle? }. GET lists your roster.
PATCH/api/v1/drivers/{id}🔒 API key
Update a driver (name, phone, vehicle, active).
DELETE/api/v1/drivers/{id}🔒 API key
Remove a driver.
POST/api/multi/events/{supplierId}
Inbound webhook: Multi pushes driver events and positions here, authenticated with the supplier's Multi API key.
POST /api/multi/events/s_welcome
Authorization: Bearer <multi-api-key>

{ "driverRef": "DRV-12", "event": "on_way",
  "lat": 37.94, "lng": 23.94,
  "bookingRef": "EMB-BK-7QF2", "at": "2026-09-14T08:30:00Z" }

Outbound contract Embirea calls on your Multi URL

  • GET /entities · POST /entities - your bookable products, for the product sync.
  • GET /drivers - your driver roster, for the driver sync.
  • POST /pricing { listingRef, date, pax } - live price + availability (cached ≤60s).
  • POST /bookings - instant booking creation; PATCH/DELETE /bookings/:ref - amendments (incl. driver assignment) and cancellations.
  • GET /bookings/:ref/invoice - your receipt/invoice for a booking, as contentBase64 or a url we fetch. Connected suppliers never upload invoices by hand.
  • POST /inquiries { bookingRef, from, text, at } - traveller messages raised on your Multi inbox.

Ready to list your business?

Get a live API key in two minutes.

Become a partner →