Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.vern.so/llms.txt

Use this file to discover all available pages before exploring further.

This walks you from API key to a working integration: create a company programmatically, then receive a webhook when its data is ready.

1. Get an API key

See Authentication.

2. Create a company

This single call creates the company, its workbook (with one sheet per template), and a magic link to share with your customer.
curl -X POST https://app.vern.so/api/v1/companies \
  -H "x-api-key: $VERN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "source": "01234567-89ab-cdef-0123-456789abcdef",
    "email": "ops@yourco.com",
    "external_id": "customer_42"
  }'
The response includes a magic_link_url:
{
  "company": { "id": "...", "name": "Acme Corp", "external_id": "customer_42", "created_at": "..." },
  "workbook_id": "...",
  "sheets": [ /* one per template */ ],
  "magic_link_url": "https://app.vern.so/link/abc123"
}
You can find the source UUID in Settings → Sources. See Create a company for full request/response details. Drop magic_link_url into your onboarding email or UI. The customer authenticates and uploads data — no Vern login required on their end.

4. Receive cleaned data via webhook

Once your implementation team has imported and exported the workbook, Vern POSTs the cleaned rows to your endpoint:
{
  "version": "1.0",
  "workbook_id": "wb_abc123",
  "external_id": "customer_42",
  "batch": { "id": "batch_...", "index": 0, "total": 1, "size": 50 },
  "sheets": [
    {
      "id": "sheet_001",
      "name": "Employees",
      "data": [ /* row objects */ ]
    }
  ]
}
Use external_id to match the payload back to your customer record. Configure the endpoint in Settings → Webhooks. See Webhooks for setup, signature verification, batching, and the full payload schema (flat and nested).

Next