For developers

Extending

Integration framework

Add a new fulfillment vendor (Bookalimo, Flights, Uber, …) with one manifest file.

Each fulfillment vendor ships a single manifest declaring everything: ProductType + categories + IFulfillmentProvider class + credential schema + customer-flow component. The registry imports every manifest and auto-wires the rest.

IntegrationManifest shape

// apps/api/src/integrations/uber/manifest.ts
export const uberManifest: IntegrationManifest = {
  key: 'uber',
  displayName: 'Uber B2B',
  icon: 'car',
  description: 'On-demand rides via Uber for Business.',

  productType: {
    key: 'taxi',
    name: 'Taxi',
    attributeSchema: { /* JSON Schema */ },
  },
  categories: [
    { slug: 'point-to-point', name: 'Point to point' },
  ],

  fulfillmentProvider: UberProvider,    // Nest @Injectable() class
  credentialSchema: {
    apiKey: { type: 'string', label: 'API key', required: true, secret: true },
  },
  customerFlowComponent: 'LimoBookingPanel',
};

Steps to add a new vendor

  1. 1
    Implement IFulfillmentProvider

    Drop apps/api/src/fulfillment/<vendor>/<vendor>.provider.ts implementing quote / reserve / cancel / status / testCredentials. A Mock variant lets local dev work without real creds.

  2. 2
    Author the manifest

    apps/api/src/integrations/<vendor>/manifest.ts.

  3. 3
    Register it

    Append to INTEGRATION_MANIFESTS in apps/api/src/integrations/registry.ts.

  4. 4
    Customer flow

    Reuse LimoBookingPanel or ship a new one and add it to apps/web/src/booking-flows/registry.ts.

  5. 5
    Install

    Click Install on /admin/integrations — seeds the ProductType + categories.

See it in practice

apps/api/src/integrations/{bookalimo,flights}/manifest.ts are the two reference implementations.