Developer Portal

Build on Ohala — SDKs, APIs, Plugins, and CLI tools.

Getting Started

Welcome to the Ohala Developer Portal. This guide covers everything you need to build on Ohala Business OS.

1. Create Your Workspace

Sign up at guerison.website/signup. Each workspace gets isolated data, users, and settings.

2. Get Your API Key

Navigate to Settings → API Keys, create a key with appropriate scopes, and store it securely.

3. Install the SDK

npm install @ohala/client

4. Make Your First Call

import { OhalaClient } from "@ohala/client";

const ohala = new OhalaClient({
  apiKey: "ohala_your_key_here"
});

const products = await ohala.products.list();
console.log(products.data);

API Reference

Base URL: https://guerison.website/api

Authentication

Authorization: Bearer ohala_your_api_key_here

Core Endpoints

GET /inventory/productsList products (paginated, searchable)
POST /inventory/productsCreate product
POST /inventory/products/importBulk CSV import with header detection
POST /api/plugins/installInstall plugin (lifecycle: validate, migrate, hook)
POST /api/plugins/submitSubmit plugin to marketplace for review
GET /api/plugins/hooksView active plugin hooks
POST /api/plugins/executeTest-fire a plugin's webhook handler
POST /api/plugins/webhookExternal webhook receiver for third-party services
GET /api/store/wishlistCustomer wishlist by email
POST /api/store/reviewsSubmit product review with star rating
GET /api/store/productsStorefront products with variants + reviews
POST /api/store/checkoutCheckout with discount codes + gift cards
GET /api/admin/dashboardSuper admin mission control (15+ data sources)
GET /api/cron/cart-recoveryAbandoned cart reminder emails (6h)
GET /api/notifications/pushPush notification status/manage subscriptions
GET /api/media/listMedia library with folder filtering

Full interactive docs at Settings → API Docs.

JavaScript SDK

npm install @ohala/client

Client API

const ohala = new OhalaClient({ apiKey: "ohala_xxx" });

// Products
await ohala.products.list({ search: "leather", page: 1 });
await ohala.products.get("product-uuid");
await ohala.products.create({ name: "Bag", price: 1500 });
await ohala.products.bulkUpdate(["id1","id2"], { price: 2000 });

// Orders
await ohala.orders.list({ status: "completed" });
await ohala.orders.create({
  items: [{ variant_id: "uuid", quantity: 2 }],
  payment_method: "MPESA", amount_paid: 3000
});

// Analytics
await ohala.analytics.dashboard();
await ohala.accounting.reports("trial_balance");

// Webhooks
await ohala.webhooks.list();
await ohala.webhooks.create({
  url: "https://my-app.com/webhook",
  events: ["order.created", "payment.received"]
});

Full SDK source: sdk/index.ts in the repository.

CLI Reference

npx ohala [command]
ohala loginAuthenticate with API key
ohala whoamiShow workspace status
ohala products listList all products
ohala orders listList recent orders
ohala analytics dashboardShow dashboard KPIs
ohala webhooks listList webhooks
ohala helpShow help

Building Plugins

Plugins are webhook-driven extensions. Define a manifest, Ohala calls your webhook when events fire. No code runs on our servers — your plugin is your own service.

Plugin Manifest (plugin.json)

{
  "slug": "my-awesome-plugin",
  "name": "My Awesome Plugin",
  "version": "1.0.0",
  "description": "Does something amazing.",
  "author": { "name": "You", "email": "you@example.com" },
  "icon": "zap",
  "categories": ["inventory", "sales"],
  "price": 0,
  "hooks": [{
    "event": "order.created",
    "handler": "onOrderCreated",
    "priority": 10
  }],
  "routes": [{
    "method": "GET",
    "path": "/status",
    "handler": "getStatus"
  }],
  "integrations": [{
    "name": "Slack",
    "configFields": [
      { "key": "webhook_url", "label": "Slack Webhook URL", "type": "url", "required": true }
    ]
  }],
  "webhook_url": "https://your-service.com/ohala-webhook"
}

Webhook Payload (Ohala → Your Service)

POST https://your-service.com/ohala-webhook
Headers:
  X-Ohala-Event: order.created
  X-Ohala-Tenant: tenant-uuid
  X-Ohala-Plugin: my-awesome-plugin

Body: {
  "event": "order.created",
  "data": { "order_id": "uuid", "total": 5000, "customer": "Jane" },
  "timestamp": "2026-08-05T12:00:00Z",
  "tenant_id": "uuid"
}

Your service responds: { "success": true, "modified": {} }

Available System Hooks (50+)

order.createdorder.confirmedorder.paidorder.shippedorder.cancelledproduct.createdproduct.updatedproduct.low_stockcustomer.createdpayment.receivedpayment.failedinventory.updatedinvoice.createdinvoice.paidjournal.postedtenant.createduser.inviteduser.joinedwebhook.receivedemployee.createdpayroll.processed

Submit via Developer Portal at /app/marketplace/developer. Full SDK docs at Developer SDK.

Webhooks Guide

Available Events

order.createdorder.updatedorder.paidproduct.createdproduct.updatedproduct.deletedcustomer.createdcustomer.updatedpayment.receivedpayment.failedstock.lowstock.adjusted

Verifying Signatures

import crypto from "crypto";

function verifySignature(payload, signature, secret) {
  const hash = crypto
    .createHmac("sha256", secret)
    .update(payload).digest("hex");
  return hash === signature;
}

Each request includes X-Ohala-Signature for verification.