Recipes

Werkende voorbeelden van veelvoorkomende workflows met de Corlega API.

Eindwerkende code-voorbeelden voor de meest gevraagde integraties. Kopieer-plak vriendelijk.

1. Intake-formulier op je eigen website → Corlega-agent

Doel: een formulier op je site stuurt een aanvraag naar Corlega, de Offerte-agent maakt een concept-offerte, jij ontvangt een webhook met de output.

Setup:

  1. Maak een API-key met scope requests.write + webhooks.write
  2. Maak een webhook-subscription voor quote.created
  3. Bouw je formulier-handler

Form-handler (Next.js Route):

// app/api/intake/route.ts
import { NextResponse } from "next/server";

export async function POST(req: Request) {
  const form = await req.json();

  const res = await fetch("https://api.corlega.com/v1/requests", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.CORLEGA_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      fromEmail: form.email,
      fromName: form.name,
      subject: form.subject,
      bodyText: form.message,
      externalRef: `web-form-${form.formId}`,
      processImmediately: true,
    }),
  });

  if (!res.ok) {
    const err = await res.json();
    return NextResponse.json(err, { status: res.status });
  }

  const { data } = await res.json();
  return NextResponse.json({ requestId: data.id });
}

Webhook-handler:

// app/api/webhooks/corlega/route.ts
import crypto from "node:crypto";
import { NextResponse } from "next/server";

export const runtime = "nodejs";

function verify(body: string, sig: string | null) {
  if (!sig) return false;
  const expected = crypto
    .createHmac("sha256", process.env.CORLEGA_WEBHOOK_SECRET!)
    .update(body)
    .digest("hex");
  const received = sig.replace(/^sha256=/, "");
  return crypto.timingSafeEqual(
    Buffer.from(expected, "hex"),
    Buffer.from(received, "hex"),
  );
}

export async function POST(req: Request) {
  const body = await req.text();
  const sig = req.headers.get("x-corlega-signature");
  if (!verify(body, sig)) {
    return new NextResponse("Invalid signature", { status: 401 });
  }
  const event = JSON.parse(body);
  if (event.event === "quote.created") {
    // Update je eigen CRM
    console.log("Nieuw concept-offerte van Corlega:", event.data);
  }
  return NextResponse.json({ ok: true });
}

2. Externe webshop → automatisch B2B-factuur

Doel: Bij een nieuwe Shopify B2B-order maak je automatisch een factuur in Corlega.

async function createInvoiceFromShopifyOrder(order: ShopifyOrder) {
  // 1. Vind of maak een contact
  let contact;
  const search = await fetch(
    `https://api.corlega.com/v1/contacts?page=1`,
    { headers: { Authorization: `Bearer ${process.env.CORLEGA_API_KEY}` } },
  );
  // …of haal het op via een externalRef die je in eerdere call hebt geset

  if (!contact) {
    const created = await fetch("https://api.corlega.com/v1/contacts", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.CORLEGA_API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        name: order.customer.companyName ?? order.customer.name,
        email: order.customer.email,
        kvkNumber: order.customer.kvkNumber,
        vatNumber: order.customer.vatNumber,
        billingAddressLine1: order.billingAddress.line1,
        billingPostalCode: order.billingAddress.zip,
        billingCity: order.billingAddress.city,
      }),
    });
    contact = (await created.json()).data;
  }

  // 2. Maak een factuur
  const items = order.lineItems.map((li) => ({
    name: li.title,
    quantity: li.quantity,
    unitPrice: Number(li.price),
    vatPercentage: 21,
  }));

  const res = await fetch("https://api.corlega.com/v1/invoices", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.CORLEGA_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      contactId: contact.id,
      items,
      currency: order.currency,
    }),
  });

  return (await res.json()).data;
}

3. Bulk-export van alle quotes naar je BI-tool

async function* allQuotes() {
  let page = 1;
  while (true) {
    const res = await fetch(
      `https://api.corlega.com/v1/quotes?page=${page}&pageSize=100`,
      { headers: { Authorization: `Bearer ${process.env.CORLEGA_API_KEY}` } },
    );
    const { data, meta } = await res.json();
    for (const q of data) yield q;
    if (!meta.hasMore) break;
    page++;
  }
}

const rows = [];
for await (const q of allQuotes()) {
  rows.push({
    id: q.id,
    number: q.number,
    status: q.status,
    total: q.total,
    createdAt: q.createdAt,
  });
}
console.log(`Geëxporteerd: ${rows.length} quotes`);

4. Agent op autopilot zetten. alleen voor service-offertes onder €500

curl -X PATCH https://api.corlega.com/v1/agents/{agentId}/autonomy \
  -H "Authorization: Bearer corlega_..." \
  -H "Content-Type: application/json" \
  -d '{
    "defaultMode": "manual",
    "actionOverrides": {
      "send_quote_under_500": { "mode": "auto_instant" }
    }
  }'

5. n8n / Zapier. Corlega als trigger en action

n8n heeft een generieke HTTP Request node. Triggers ontvang je via webhooks.

n8n workflow:

  1. Webhook-node (Trigger). luistert op een URL die je in Corlega als webhook-endpoint registreert
  2. HTTP Request-node. actie op https://api.corlega.com/v1/...

Voor Zapier-vergelijkbare flows: hetzelfde patroon met een Catch Hook + Custom Request.


6. Eigen CRM bidirectional syncen

Loop elke nacht:

import { allQuotes } from "./helpers"; // van recipe 3

const since = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();

for await (const quote of allQuotes()) {
  if (quote.updatedAt < since) continue;
  await myCrm.upsertOpportunity({
    externalId: quote.id,
    title: `${quote.number}. €${quote.total}`,
    status: mapStatus(quote.status),
    customerId: quote.contactId,
  });
}

Andersom: gebruik webhooks (quote.created, quote.approved, invoice.paid) voor realtime updates.


7. Smoke-test je API-key

Snelle one-liner om te verifiëren dat je key werkt + welke scopes hij heeft:

curl -s https://api.corlega.com/v1/me \
  -H "Authorization: Bearer $CORLEGA_API_KEY" | jq

Output:

{
  "data": {
    "apiKeyId": "01HE...",
    "organizationId": "01HD...",
    "scopes": ["contacts.*", "quotes.read"],
    "prefix": "corlega_abc12345…"
  }
}

Volgende stap

On this page