---
title: "Encrypted Audio Transcriptions (RVENC)"
method: POST
path: "/rvenc/audio/transcriptions"
tags: ["Audio", "dev-api"]
---

# Encrypted Audio Transcriptions (RVENC)

`POST /rvenc/audio/transcriptions`

## Request

- Base URL: `https://gateway.prem.io`
- URL: `https://gateway.prem.io/rvenc/audio/transcriptions`
- Auth: HTTP bearer and API key in header `Authorization`

Transcribe an end-to-end encrypted audio file into text, in the language spoken in the audio. Nothing is stored: neither the audio nor the transcript.

## Headers

- `X-Queue-Timeout` string

## Request body

- CreateRvencAudioTranscriptionRequest: Audio transcription request with an end-to-end encrypted payload and the key material needed to decrypt it.
  - `model` string, required: Model identifier to use for transcription
  - `encryptedInference` string, required: Encrypted JSON string containing all audio transcription parameters. When decrypted, this string must match the structure shown in the expandable `_decryptedInference` property below (reference only - do not send this property).
  - `_decryptedInference` RvencAudioTranscriptionInferenceParams: Structure of the JSON to encrypt and send as `encryptedInference` for audio transcription.
    - `model` 'openai/whisper-large-v3', required: ID of the model to use. Only openai/whisper-large-v3 is currently available.
    - `language` string: The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency. Optional, not applicable for openai/whisper-large-v3 models which auto-detect language.
    - `prompt` string: An optional text to guide the model's style or continue a previous audio segment. The prompt should match the audio language for openai/whisper-large-v3. For openai/whisper-large-v3 models, the prompt can be used to provide additional context or instructions.
    - `response_format` 'json' | 'text' | 'verbose_json': The format of the output. Options: json (default), text (plain text), verbose_json (JSON with additional metadata like word timestamps).
    - `temperature` number: The sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.
    - `timestamp_granularities` string[]: The timestamp granularities to populate for this transcription. response_format must be set to verbose_json to use timestamp granularities. Either or both of these options are supported: word, or segment. Note: There is no additional latency for segment timestamps, but generating word timestamps incurs additional latency.
  - `cipherText` string, required: Cipher text for shared secret generation (ECDH key exchange)
  - `nonce` string, required: Nonce used for encrypting the inference payload
  - `encryptedFileName` string, required: The encrypted audio file name. The file name is encrypted using XChaCha20-Poly1305 with the shared secret and fileNameNonce.
  - `fileNameNonce` string, required: Nonce used for encrypting the encrypted audio file name
  - `encryptedFile` string, required: The encrypted audio file data. The audio content is encrypted using XChaCha20-Poly1305 with the shared secret and fileNonce.
  - `fileNonce` string, required: Nonce used for encrypting the encrypted audio file

## Response `200`

Encrypted audio transcription response. The response contains the encrypted transcription result which must be decrypted using the shared secret derived from the request's cipherText, along with the response nonce.

- object
  - `status` 200 | 201 | 202, required: Status code of the response
  - `data` object, nullable, required: Encrypted audio transcription response. Contains the encrypted transcription result that must be decrypted using the shared secret derived from the request's cipherText.
    - `encryptedResponse` string, required: Encrypted JSON string containing the transcription result. Decrypt using XChaCha20-Poly1305 with the shared secret (derived from cipherText) and the response nonce. When decrypted, the content matches the structure shown in the `_decryptedResponse` property below (reference only).
    - `nonce` string, required: Hex-encoded nonce used for decrypting the encryptedResponse payload.
    - `_decryptedResponse` RvencTranscriptionDecryptedResponse: Decrypted audio transcription result matching OpenAI's Transcription response. When `encryptedResponse` is decrypted, it will match this structure.
      - `text` string, required: The transcribed text of the audio.
      - `task` string: The task performed, typically 'transcribe'. (Verbose JSON only)
      - `language` string: The detected or specified language. (Verbose JSON only)
      - `duration` number: The duration of the audio in seconds. (Verbose JSON only)
      - `segments` object[]: Segments of the transcribed text with timestamps. (Verbose JSON only, if requested)
        - `id` integer
        - `seek` integer
        - `start` number
        - `end` number
        - `text` string
        - `tokens` integer[]
        - `temperature` number
        - `avg_logprob` number
        - `compression_ratio` number
        - `no_speech_prob` number
      - `words` object[]: Word-level timestamps. (Verbose JSON only, if requested)
        - `word` string
        - `start` number
        - `end` number
  - `error` string, nullable: Error message of the response, human readable
  - `message` string, nullable, required: Message of the response, human readable
  - `env` 'development' | 'production', required: API environment
  - `log` union: Useful informaiton, not always present, to debug the response
    - string
    - object
  - `validator` union: Validator response object, each key is the field name and value is the error message
    - object
    - unknown[]
      - unknown
  - `support_id` string, uuid, nullable: Support ID linked to the response, used to identify it when talking with our team.

## Other responses

- `400`: Bad request
- `401`: Access token is missing or invalid
- `403`: You do not have the required permissions to access this resource
- `413`: Request entity too large - audio file exceeds maximum allowed size
- `429`: Too many requests - rate limit exceeded

## Changes

- **2026-11-13** `d46bc3931b34`: 9 warning, 1 info
  - added the new `405.00` enum value to the `allOf[subschema #1]/status` response property for the response status `401`
  - added the new `405.00` enum value to the `allOf[subschema #1]/status` response property for the response status `403`
  - added the new `405.00` enum value to the `status` response property for the response status `400`
  - added the new `409.00` enum value to the `allOf[subschema #1]/status` response property for the response status `401`
  - …6 more
- **2026-10-16** `d5b1beb33be5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/premai-io/apis/prem-studio-api/changes/rvenc/audio/transcriptions/post.md)

---

[API](https://skmtc.dev/premai-io/apis/prem-studio-api.md) - [All operations](https://skmtc.dev/premai-io/apis/prem-studio-api/llms.txt) - [OpenAPI document](https://skmtc.dev/premai-io/apis/prem-studio-api/revisions/d46bc3931b34?raw)
