telkittelkit
telkit Voice

A voice API with real Norwegian numbers

One REST API and one type-safe SDK cover outbound and inbound calls, recording, live transcripts and summaries. The media plane is contractually pinned to Frankfurt (eu-central), and recordings are stored in the EEA. Metering starts the moment someone answers, so a call nobody picked up costs nothing.

Numbers

Real Norwegian numbers, local and mobile

Order geographic +47 numbers and Norwegian mobile numbers straight from the API, with voice and optional SMS on the same number. You fill in the KYC bundle once, and every later number order reuses it.

Local and mobile numbers

Geographic +47 numbers, and Norwegian mobile numbers from the 4- and 9-series. Either can carry voice and SMS on one number.

KYC once, reused everywhere

One verified RegulatoryBundle (org number, certificate of registration, Norwegian address, recent proof) covers every number order you place.

Porting via NRDB

Bring the numbers you already have. We collect the LOA and run the NRDB process, and the donor ports by the end of the next working day.

Premium blocking built in

Norwegian premium prefixes are blocked in two places: our dial plan and the carrier. A leaked key cannot dial its way to an expensive invoice.

Why the numbers are hard to come by

Nkom hands out Norwegian mobile numbers in the 4- and 9-series, and those are the ones people recognise and call back. +4759 is a different thing: a range assigned to communication between machines and equipment. We order from the 4- and 9-series through our carrier agreements (DIDWW primary, Telnyx secondary), and run the KYC process for you.

telkit+47 local and mobile (4-/9-series)
The M2M range (+4759)Assigned to machines and equipment
Calls

One call object, both directions

A call is a generic communications session: from, to, direction, status, timing, cost, recording and transcript, plus your own external_ref and metadata. telkit carries no business meaning. You map call_id onto your own entities on your side.

Outbound

Dial from a telkit number you own to any E.164 number. Bridge two SIP legs directly (PSTN↔PSTN), or attach a browser leg over WebRTC when an agent needs to join.

Inbound

An INVITE on your number resolves to the right tenant, then routes onward to an E.164 number, a SIP or WebRTC endpoint, an IVR or your own webhook. You decide per number.

Status machine

PENDINGDIALINGRINGINGACTIVECOMPLETED

The status is monotone, so events arriving late or out of order are dropped. Every transition writes a call.* event with timestamps (dialed_at, ringed_at, answered_at, ended_at).

Side branches: FAILED on busy, no answer or a SIP error, and TRANSFERRED on a cold REFER (terminal).

calls.tsts
import { Telkit } from "@telkit/sdk"; const telkit = new Telkit({ apiKey: process.env.TELKIT_API_KEY }); // Place an outbound call from your +47 number, recorded and live-transcribedconst call = await telkit.calls.create({  from: "+4721000000",  to: "+4790000000",  recording: { enabled: true },  transcription: { enabled: true, language: "no", diarize: true },}); console.log(call.id, call.status); // "call_…", "pending"

In-call control

Simple endpoints steer an active call, and every action emits an event you can react to.

  • POST /calls/{id}/hangup
  • POST /calls/{id}/dtmf
  • POST /calls/{id}/transfer
  • POST /calls/{id}/participants
Recording & transcription

Recording and live transcription behind one flag

Turn recording on per call. You get one mixed, audio-only file, stored in EU S3 and fetched through a short-lived presigned URL. Media URLs never go into the database. It holds the storage key, and the URL is signed at read time.

Composite recording

One mixed, audio-only track per call. Recording starts at room_started for traceability and is trimmed to answered_at on playback.

Live transcription & summaries

transcription.enabled: true wires up the whole STT pipeline. The transcript streams over SSE, call.transcript.ready fires when it is complete, and the summary follows after the call. Same engine as telkit Transcribe.

Consent built in

An optional beep or announcement per number, with consent state recorded in the call metadata. The legal duty to obtain consent stays with you.

Note: recording stops at a cold transfer (SIP REFER), because LiveKit leaves the dialog there. A warm transfer keeps full coverage, since telkit stays in place as the bridge.

Explore telkit Transcribe
Primitives

Building blocks for call flow

telkit exposes raw building blocks. You write the rules for who may do what, and we make sure mode switches are explicit and emit call.participant.* events you can act on.

IVR

Webhook-driven routing, a declarative call-flow document, or a telkit-hosted LiveKit Agent for DTMF and conversational menus.

Conference

Add a participant to the room with one call, whether that is an external PSTN number, an agent or an AI voice. Removing one is just as quick.

Transfer

A cold transfer uses SIP REFER and is terminal. A warm transfer leaves telkit in place as the bridge. The original caller ID survives through carrier ANI passthrough.

Supervisor modes

LISTEN only monitors, WHISPER lets you coach the agent without the customer hearing it, and TALK opens full duplex audio. Who is allowed to do which is your policy.

Pricing

Per second, all-in EUR

Each call is priced at completion from the carrier rate sheet, per second from the moment it is answered. A call nobody answered costs 0. There is no platform fee. The rates below are origin-based EUR anchors, and both CDR export and call.completed carry billable seconds and cost.

Billed per second

Price preview estimates the cost before you dial, and blocks destinations you would rather not pay for.

See full pricing
Voice, EUR rates
Outbound mobile
€0.025–€0.035 / min
Outbound fixed-line
€0.012–€0.018 / min
Inbound
€0.006–€0.01 / min
Recording
€0.002 / min
Compliance

Built for Norwegian regulation

Telephony is regulated, and the rules reach you as the one building on top. We put the requirements into the product: the KYC flow, a block on caller IDs you do not own, and explicit disclosure about emergency calls.

KYC / RegulatoryBundle

Norwegian local numbers need a verified business identity: org number, certificate of registration, Norwegian address, and proof less than three months old. The bundle is reused across orders.

Emergency (112)

telkit does not replace ordinary telephony, and emergency calls (112, 110, 113) are limited. The terms say so explicitly, and you have to make sure your end users know.

CLI & AUP

Only caller IDs you are entitled to use. No spoofing, no predictive dialing. Use has to be human-initiated and consented, and that is enforced in the product and in the terms.

Frequently asked questions

Questions about telkit Voice

Numbers, the media plane, billing and regulation.

Can't find what you're looking for? Talk to our support team.

Ready to place a call?

Get an API key and set up your first call. The free tier needs no card.