telkit

Use case

One API for SMS, email, letters, calls and transcription

You need to send a code, a receipt or a letter from your system, ideally without five vendor contracts to get there. telkit is one REST API with one key and one balance in Norwegian kroner.

Last reviewed 14 October 2026

The problem

Every channel has its own vendor, API, invoice and way of reporting status. When a product needs SMS, email and letters, the integration becomes a project of its own.

At telkit every channel is a plain JSON call under /v1, with the same error codes, the same Idempotency-Key and the same signed webhooks. What the API does, you also see in the dashboard, with the price of every message.

What you get

Five services and the tools around them.
  • SMSSend to Norwegian mobile numbers from a name, a reply number or a dedicated number. Schedule, cancel, and see the price before you send.
  • EmailSend from your own verified domain, and receive incoming email. The statuses are sent, delivered, bounced, complained and failed.
  • LettersSend a PDF, a template or plain text to an address. Digipost when the recipient has it, paper otherwise. See both prices before you send.
  • CallsPlace a call that reads a text in a Norwegian voice, or take calls on a Norwegian number and let your system decide what happens.
  • TranscriptionSend a file or a link and get text with timestamps and speakers, as JSON, SRT, VTT or plain text.
  • Webhooks and event logEvery delivery is signed with HMAC, and with Ed25519 if you switch it on. Failures are retried, and you can send them again from the API.

Example flows

From the first try to production.

From test key to production

  1. Register your company with its organisation number and create a test key in the dashboard.
  2. Build the whole flow against the API. With the test key nothing is sent and nothing costs anything.
  3. Create a live key, top up the balance, and switch keys.

Status back to your system

  1. Register an endpoint for sms.status, email.status and letter.status. The secret is shown once.
  2. Check the signature before you read the body, and store the status with the message.
  3. If your endpoint was down, telkit sends the deliveries again. If telkit gave up, you fetch them from the list of failed deliveries.

One key per service

  1. The login service gets a key that covers one profile and holds only sms:send.
  2. Reporting gets a key with usage:read for the whole company.
  3. If a key leaks, you revoke it without touching the others.

What the request looks like

An email, a webhook endpoint and a month of usage. Every call uses the same key in Authorization.
POST /v1/emailbash
curl https://api.telkit.no/v1/email \  -H "Authorization: Bearer $TELKIT_API_KEY" \  -H "Idempotency-Key: ordre-10482-bekreftelse" \  -H "Content-Type: application/json" \  -d '{    "profile": "nettbutikken",    "to": "kari@eksempel.no",    "subject": "Takk for bestillingen",    "text": "Vi har mottatt ordre 10482 og sender pakken i morgen."  }'
Without senderId the email goes from the profile's default sender on the verified domain.
POST /v1/webhook-endpointsbash
curl https://api.telkit.no/v1/webhook-endpoints \  -H "Authorization: Bearer $TELKIT_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "url": "https://eksempel.no/telkit/hendelser",    "events": [      "sms.status",      "email.status",      "letter.status"    ],    "description": "Produksjon"  }'
The answer holds the secret (whsec_…) that signs the deliveries. It is shown only once.
GET /v1/usagebash
curl "https://api.telkit.no/v1/usage?from=2026-10-01&to=2026-10-31&groupBy=service" \  -H "Authorization: Bearer $TELKIT_API_KEY"
Usage per service in the period, in øre excl. VAT. With profile=… you get one profile.

What to watch out for

Four habits that save you debugging later.
  • Give every send an Idempotency-Key. The API requires one on everything that sends, and the same key twice sends once.
  • Check the webhook signature before you trust the body, and use the id (evt_…) to ignore duplicates.
  • A key can cover the whole company or one profile, and hold every scope or only some. Give each service what it needs.
  • Prices in the answers are in øre excl. VAT (priceOre). Show them in kroner incl. VAT if your users see them.

What it costs

You top up a balance in kroner, and every send is drawn from it. These are the most common prices.
SMS sent, per unit
NOK 0.75
Email sent
NOK 0.01
Letter delivered to Digipost
NOK 5
Paper letter within Norway
NOK 19
Outbound call, per minute
NOK 0.60
Transcription, per audio minute
NOK 0.06

Prices exclude VAT.

Questions from developers

How do I authenticate?

With an API key in the Authorization header: Bearer followed by the key. The key is shown once when you create it. We store only a hash of it.

Can I test without paying?

Yes. A test key sends nothing and costs nothing. You can build the whole flow before you top up.

What happens if I send the same request twice?

With the same Idempotency-Key it is sent once, and you get the same answer back.

Where is the API documentation?

Under API documentation in the menu. It is generated from the API's OpenAPI description, so it shows what the API actually accepts.

Will I know when the balance runs low?

Yes. The balance.low event goes to the company's webhook endpoints.

Read more about the services

Create your first key

Register your company with its organisation number, create a test key and make your first call.