# API-voorbeelden

Lees records, maak een bedrijf en contactpersoon aan en werk een CRM-taak bij.

De voorbeelden gebruiken de basis-URL van het beheerscherm en een servervariabele voor het geheim:

```bash
export TRELYN_BASE_URL="https://app.trelyn.nl/api/v1"
# Stel TRELYN_API_KEY veilig in, bijvoorbeeld via je deployment-secrets.
```

## Bedrijf aanmaken en bijwerken

Vereist: `companies:read` en `companies:write`.

```bash
curl -X POST "$TRELYN_BASE_URL/companies" \
  -H "Authorization: Bearer $TRELYN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Bakkerij De Vries","email":"info@devries.example","website":"https://devries.example"}'
```

Het antwoord heeft status `201` en bevat `data.id`. Gebruik die UUID in volgende verzoeken:

```bash
curl -X PATCH "$TRELYN_BASE_URL/companies/$COMPANY_ID" \
  -H "Authorization: Bearer $TRELYN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"industry":"Retail"}'
```

## Contactpersoon koppelen

Vereist: `contacts:read` en `contacts:write`. Gebruik een bestaand bedrijf uit dezelfde workspace.

```bash
curl -X POST "$TRELYN_BASE_URL/contacts" \
  -H "Authorization: Bearer $TRELYN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"firstName\":\"Eva\",\"lastName\":\"De Vries\",\"email\":\"eva@devries.example\",\"companyId\":\"$COMPANY_ID\"}"
```

## Alle pagina's lezen met JavaScript

```js
const base = process.env.TRELYN_BASE_URL;
const key = process.env.TRELYN_API_KEY;
let cursor = null;
const seen = new Set();

do {
  const url = new URL(`${base}/companies`);
  url.searchParams.set("limit", "100");
  if (cursor) url.searchParams.set("cursor", cursor);
  const response = await fetch(url, {
    headers: { Authorization: `Bearer ${key}` },
  });
  const body = await response.json();
  if (!response.ok) {
    throw new Error(`${body.error.code}: ${body.error.message} (${body.error.requestId})`);
  }
  for (const company of body.data) {
    if (seen.has(company.id)) continue;
    seen.add(company.id);
    console.log(company.id, company.name);
  }
  cursor = body.nextCursor;
} while (cursor);
```

Deze code stopt bij fouten. Voeg in productie foutafhandeling en begrensde retries toe volgens [fouten en limieten](/developers/fouten-en-limieten/). Bij gelijktijdige wijzigingen kan een gepagineerde lijst verschuiven; gebruik webhooks voor doorlopende synchronisatie en voer zo nodig een volledige herlezing uit.

## CRM-taak aanmaken en afronden

Vereist: `tasks:read` en `tasks:write`. Een CRM-taak is een activiteit van het type task, geen projecttaak.

```bash
curl -X POST "$TRELYN_BASE_URL/tasks" \
  -H "Authorization: Bearer $TRELYN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"body\":\"Offerte nabellen\",\"companyId\":\"$COMPANY_ID\",\"dueAt\":\"2026-11-01T09:00:00Z\"}"

curl -X POST "$TRELYN_BASE_URL/tasks/$TASK_ID/complete" \
  -H "Authorization: Bearer $TRELYN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

## Deals en stages

Haal eerst de pipeline en stages op met `GET /pipelines` en het vinkje `pipelines:read`. Gebruik een open stage uit de gewenste pipeline:

```bash
curl -X POST "$TRELYN_BASE_URL/deals" \
  -H "Authorization: Bearer $TRELYN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"name\":\"Nieuwe website\",\"pipelineId\":\"$PIPELINE_ID\",\"stageId\":\"$STAGE_ID\",\"source\":\"Eigen integratie\"}"
```

Dit vereist `deals:read` en `deals:write`. Voeg je `oneTimeRevenue`, `mrr` of `estimatedBudget` toe, dan is ook `deals:values` nodig. Gebruik de [API-referentie](/developers/api-referentie/) voor alle ondersteunde velden en waarden.
