Skip to main content

Getting started

Which path?

GoalPath
Ship Restaurant / Clinic / Real Estate / Booking / CRM on MarketplaceMetadata — no backend
Connect Focus ERP, Yaaz, ABM, on-prem POS / CRMSDK/qefro
Marketplace App (default)
qefro app init → validate → package → publish → install → Qefro Runtime

External integration
npm install @qefro-ai/backend → POST /qefro → SDK Connection

See Runtime vs SDK.

Marketplace App (default)

qefro app init restaurant-pro --name "Restaurant Pro"
qefro app validate restaurant-pro
qefro app package restaurant-pro
qefro app install restaurant-pro

Tutorial: Managed Marketplace App · Build your first app.

Reference: qefro-marketplace-apps apps/restaurant-pro-runtime (app id restaurant-pro-runtime). Commerce example: apps/shopify-runtime (app id shopify-runtime). HTTP identity and email OTP: HTTP tools.

External SDK (ERP / POS / CRM)

Prerequisites

  • Node.js ≥ 18
  • Org Portal access to Business Tools → SDK Connections

Install the SDK

npm install @qefro-ai/backend

Current documented package version: 1.7.0 (SDK_VERSION in the SDK).

Other languages:

LanguagePackage
Pythonqefro-backend
Rustqefro-backend-sdk

Minimal external app

import { Qefro } from '@qefro-ai/backend';

const app = new Qefro({
signingSecret: process.env.QEFRO_SIGNING_SECRET || 'dev-secret',
endpointPath: '/qefro',
});

app.tool(
'pingEcho',
{
description: 'Echo a message',
auth: 'none',
input_schema: {
type: 'object',
properties: { message: { type: 'string' } },
},
},
async (ctx) => ({ ok: true, message: ctx.parameters.message ?? 'pong' }),
);

const port = Number(process.env.PORT || 8090);
await app.listen({ port });
console.log(`Listening on http://0.0.0.0:${port}/qefro`);

Run:

export QEFRO_SIGNING_SECRET=dev-secret
node index.js

Connect (external)

  1. Expose HTTPS to …/qefro (or tunnel for local: ngrok / host.docker.internal).
  2. Org Portal → Business ToolsSDK ConnectionsAdd Connection
    • Name
    • Webhook URL (must end at /qefro or your configured path)
    • Signing Secret (same as QEFRO_SIGNING_SECRET, or leave empty to let the platform generate one)
    • Enabled
  3. Test Connection
  4. Select a workspace → Sync Tools

API: POST /api/v1/org/sdk-connections with { name, webhook_url, enabled?, signing_secret? }.

Next