Documentation

Freezetale is a lightning-fast speech-to-text API service hosted in Norway, powered by Iceland’s 100% renewable hydro- and geothermal energy grid.

With automatic speaker diarization (speaker labels) supported out of the box for all languages, Freezetale is the perfect solution for all your speech-to-text needs.

Connection and authorization

To use the Freezetale APIs, first create a project and an API token. Then, find the ID of your project above the transcription list.

Note: Both the project ID and the API token are case-sensitive. Requests towards the API must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.

Conveniently, you can fill in your project ID and token here, and we’ll use them in the examples below instead of placeholders.

Base URL
https://freezetale.com/api
Authenticated request
curl -X GET \
-H "Authorization: Bearer API_TOKEN" \
"https://freezetale.com/api/v1/app/transcriptions?project-id=PROJECT_ID"

Create a transcription

Start a new transcription job. Automatically dedupes identical requests.

See supported languages for codes to use in language.

POST /v1/app/transcriptions
curl -X POST \
-H "Authorization: Bearer API_TOKEN" \
--json '{"audioUrl": "https://example.com/audio.mp3", "language": "en"}' \
"https://freezetale.com/api/v1/app/transcriptions?project-id=PROJECT_ID"
Example response
{
	"success": true,
	"transcription": {
		"id": "o3V8FEvUHG21BcuQBCwSZXqO7BV3",
		"status": "pending",
		"audio": {
			"url": "https://example.com/audio.mp3",
			"language": "en"
		},
		"creationDate": "2025-06-07T12:00:00.000Z",
		"modificationDate": "2025-06-07T12:00:00.000Z"
	}
}

Get a transcription

Retrieve a transcription job by its ID.

When the transcription job is finished, its status changes to completed. Also, resultUrl is set to a URL containing the result of the transcription, and other metadata, which can then be downloaded.

The response contains a Last-Modified header that you can use when pinging the API for updates using If-Modified-Since.

GET /v1/app/transcriptions
curl -X GET \
-H "Authorization: Bearer API_TOKEN" \
"https://freezetale.com/api/v1/app/transcriptions?id=TRANSCRIPTION_ID&project-id=PROJECT_ID"
Example response
{
	"success": true,
	"transcription": {
		"id": "pkbvMEdhVavGa80K4zBU53N3XiCR",
		"status": "completed",
		"audio": {
			"url": "https://example.com/audio.mp3",
			"language": "en",
			"length": 1034947.4375
		},
		"resultUrl": "https://example.com/36c16505-0fb5-4b8c-8e22-0240d95e1eb5-pkbvMEdhVavGa80K4zBU53N3XiCR.json",
		"creationDate": "2025-06-07T12:00:00.000Z",
		"modificationDate": "2025-06-07T12:00:00.000Z",
		"completionDate": "2025-06-07T12:00:00.000Z"
	}
}

status can be one of the following values: pending, errored, timeout, cancelled, completed.

Example result response
{
	"id": "b25129c7-6354-4676-923f-c997ba8fb3db",
	"reference": "pkbvMEdhVavGa80K4zBU53N3XiCR",
	"words": [
		{
			"start": 1448,
			"end": 2108,
			"word": "Hello!",
			"speaker": 1
		}
	],
	"metadata": {
		"speakers": 1,
		"confidence": 0.988733,
		"language": {
			"input": "en",
			"detected": "en"
		},
		"audio": {
			"type": "audio/mpeg",
			"size": 788013,
			"length": 1034947.4375
		}
	}
}

Note: All time values are in milliseconds.

Get all transcriptions

Get a list of all transcription jobs in a project.

GET /v1/app/transcriptions
curl -X GET \
-H "Authorization: Bearer API_TOKEN" \
"https://freezetale.com/api/v1/app/transcriptions?project-id=PROJECT_ID"
Example response
{
	"success": true,
	"transcriptions": [
		{
			"id": "o3V8FEvUHG21BcuQBCwSZXqO7BV3",
			"status": "pending",
			"audio": {
				"url": "https://example.com/audio.mp3",
				"language": "en"
			},
			"creationDate": "2025-06-07T12:00:00.000Z",
			"modificationDate": "2025-06-07T12:00:00.000Z",
			"estimatedCompletionDate": "2025-06-07T12:00:00.000Z"
		},
		{
			"id": "pkbvMEdhVavGa80K4zBU53N3XiCR",
			"status": "completed",
			"audio": {
				"url": "https://example.com/audio.mp3",
				"language": "en",
				"length": 1034947.4375
			},
			"resultUrl": "https://example.com/36c16505-0fb5-4b8c-8e22-0240d95e1eb5-pkbvMEdhVavGa80K4zBU53N3XiCR.json",
			"creationDate": "2025-06-07T12:00:00.000Z",
			"modificationDate": "2025-06-07T12:00:00.000Z",
			"completionDate": "2025-06-07T12:00:00.000Z"
		}
	]
}

Supported languages

Freezetale supports the following languages. If you’d like to see a language added, please get in touch.

LanguageCodeSupports speaker diarization
EnglishenYes
DanishdaYes
GermandeYes
SpanishesYes
FinnishfiYes
FrenchfrYes
IcelandicisYes
DutchnlYes
Norwegian (Nynorsk)nnYes
Norwegian (Bokmål)noYes
SwedishsvYes

Limits

Your API requests are limited based on the details of your subscription plan. Otherwise, these are the general limits:

  • Maximum file size: 1024 MB
  • Maximum audio length: 180 minutes

100% renewable?

While Freezetale’s data center is in Norway, our transcription runtime GPUs are located in, and powered by Iceland’s 100% renewable hydro- and geothermal energy grid. This enables us to deliver transcriptions on a near-zero carbon footprint, and also be fully compliant with the EU’s General Data Protection Regulation (GDPR).

A product from Nattskiftet
Made in Norway
ContactPrivacy policyTerms of use