Developers

An API that reads
like the dashboard.

Everything you can click, you can call. Assistants, calls, leads, campaigns, voices and models over plain REST with JSON. Keys carry scopes, webhooks carry signatures, and the docs are written for people who would rather copy a working example than read a spec. The spec is there too.

Quickstart

Three requests to your first call.

  • Create a key under Developers → API keys, tick the scopes it needs
  • Send it as the X-API-Key header; the key acts in the workspace it was created in
  • Create an assistant, or use one you built in the dashboard, and place a call
  • Poll the call, or let a webhook tell you when it completes

Base URL: https://nordtell.com/api/v1. Sixty requests a minute per key; above that you get a 429 and wait. Errors say which field was wrong.

curl
# 1. an assistant, from a prompt in plain words
curl -X POST https://nordtell.com/api/v1/assistants \
  -H "X-API-Key: $NORDTELL_KEY" -H "Content-Type: application/json" \
  -d '{"name": "Reception", "direction": "inbound", "engine": "hybrid",
       "config": {"prompt": "You are Freja, the receptionist at Nørrebro Clinic…"}}'

# 2. a call
curl -X POST https://nordtell.com/api/v1/calls/make \
  -H "X-API-Key: $NORDTELL_KEY" -H "Content-Type: application/json" \
  -d '{"agent_id": "ASSISTANT_ID", "to_number": "+4531183990",
       "variables": {"name": "Sara"}}'

# 3. what happened
curl https://nordtell.com/api/v1/calls/CALL_ID -H "X-API-Key: $NORDTELL_KEY"
Webhooks

We tap you on the shoulder.

Register a URL and a secret. When a call starts, is answered, ends or completes, you get a signed JSON body with the transcript, the summary, the variables the agent collected and the minutes it cost. One endpoint per system, so you can revoke the CRM's without touching Slack's.

  • Events: call.started, call.answered, call.ended, call.completed, plus agent and lead events
  • HMAC signature in the header; verify it, then trust the body
  • Delivery log on every call, with the status your server answered
POST https://your-server/webhooks/nordtell
{
  "event": "call.completed",
  "data": {
    "id": "b0c1…", "direction": "inbound", "duration_seconds": 134,
    "from_number": "+45…", "summary": "Booked a check-up Tue 14:40.",
    "variables": { "appointment": "2026-09-15T14:40" },
    "transcript": [ … ]
  }
}
Tools and MCP

Your API, in the agent's hands.

A tool is a function with a name, a description and typed parameters. Point it at your HTTP endpoint and the model calls it mid-conversation, waits for the answer and speaks it. Already have an MCP server? Add its URL and every tool it exposes appears in the agent editor.

  • Tool names are function names: check_availability, not "Check availability"
  • Per-tool timeouts and a spoken filler while the tool runs
  • Built-ins: transfer, end call, send SMS, current time
tool definition
{
  "name": "check_availability",
  "description": "Free slots for a practitioner on a date",
  "parameters": {
    "practitioner": { "type": "string" },
    "date": { "type": "string", "format": "date" }
  },
  "url": "https://clinic.example/api/slots",
  "method": "GET"
}
Endpoints

What is on the menu.

Each key gets only the scopes you tick. The full reference, with request and response bodies, lives in the docs and in the OpenAPI spec.

EndpointScopeWhat it does
GET / POST /assistantsagents:read / agents:writeList and create assistants; PATCH and DELETE by id
GET /calls, GET /calls/{id}calls:readCall list; transcript, summary, variables and deliveries
POST /calls/makecalls:makePlace an outbound call from an assistant's number
GET / POST /leadsleads:read / leads:writeLeads with phone, name, variables and status
POST /campaigns, …/leads, …/start, …/stopcampaigns:manageOutbound campaigns: create, add leads, run, pause
GET /languages, /models, /voicesany keyThe lookups the editor uses, so your UI can match ours

Python

requests, twenty lines. The docs have a nightly CRM sync you can paste.

Example

JavaScript

fetch with the key in an environment variable. Same shapes, same errors.

Example

OpenAPI

Generated from the code that serves the API, so it is never out of date.

Browse the spec
Free to try

Make a key. Make a call.

The free account includes the API. Keys live under Developers in the dashboard.