curl --request POST \
--url https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency-Key: <x-idempotency-key>' \
--data '
{
"source": {
"materialId": "YOUR_MATERIAL_ID"
},
"language": {
"source": "en-US"
},
"options": {
"asr": {
"quality": "standard"
},
"speakers": "auto"
},
"title": "Weekly meeting"
}
'import requests
url = "https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async"
payload = {
"source": { "materialId": "YOUR_MATERIAL_ID" },
"language": { "source": "en-US" },
"options": {
"asr": { "quality": "standard" },
"speakers": "auto"
},
"title": "Weekly meeting"
}
headers = {
"X-Idempotency-Key": "<x-idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Idempotency-Key': '<x-idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
source: {materialId: 'YOUR_MATERIAL_ID'},
language: {source: 'en-US'},
options: {asr: {quality: 'standard'}, speakers: 'auto'},
title: 'Weekly meeting'
})
};
fetch('https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source' => [
'materialId' => 'YOUR_MATERIAL_ID'
],
'language' => [
'source' => 'en-US'
],
'options' => [
'asr' => [
'quality' => 'standard'
],
'speakers' => 'auto'
],
'title' => 'Weekly meeting'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Idempotency-Key: <x-idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async"
payload := strings.NewReader("{\n \"source\": {\n \"materialId\": \"YOUR_MATERIAL_ID\"\n },\n \"language\": {\n \"source\": \"en-US\"\n },\n \"options\": {\n \"asr\": {\n \"quality\": \"standard\"\n },\n \"speakers\": \"auto\"\n },\n \"title\": \"Weekly meeting\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Idempotency-Key", "<x-idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async")
.header("X-Idempotency-Key", "<x-idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source\": {\n \"materialId\": \"YOUR_MATERIAL_ID\"\n },\n \"language\": {\n \"source\": \"en-US\"\n },\n \"options\": {\n \"asr\": {\n \"quality\": \"standard\"\n },\n \"speakers\": \"auto\"\n },\n \"title\": \"Weekly meeting\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Idempotency-Key"] = '<x-idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source\": {\n \"materialId\": \"YOUR_MATERIAL_ID\"\n },\n \"language\": {\n \"source\": \"en-US\"\n },\n \"options\": {\n \"asr\": {\n \"quality\": \"standard\"\n },\n \"speakers\": \"auto\"\n },\n \"title\": \"Weekly meeting\"\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"message": "",
"data": {
"taskId": "<string>",
"taskType": "transcription",
"status": "running",
"createdAt": "<string>",
"editorUrl": "https://www.vmeg.ai/transcription/editor/2047316590123456789/"
}
}Create transcription job
Create a transcription job on the same pipeline as vmeg.ai. The job appears in My tasks on the website; open editorUrl to review and edit the transcript. Your webhook receives the first result (event openapi-app-media-translation, data.taskType is transcription), or poll Query job status until status is finished, then download the transcript from result.srtEndpoint. Credits follow website pricing.
source takes exactly one of materialId (an audio or video material) or youtubeUrl; sourceUrl, output, and extraData return 400. Other unknown fields are ignored.
curl --request POST \
--url https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency-Key: <x-idempotency-key>' \
--data '
{
"source": {
"materialId": "YOUR_MATERIAL_ID"
},
"language": {
"source": "en-US"
},
"options": {
"asr": {
"quality": "standard"
},
"speakers": "auto"
},
"title": "Weekly meeting"
}
'import requests
url = "https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async"
payload = {
"source": { "materialId": "YOUR_MATERIAL_ID" },
"language": { "source": "en-US" },
"options": {
"asr": { "quality": "standard" },
"speakers": "auto"
},
"title": "Weekly meeting"
}
headers = {
"X-Idempotency-Key": "<x-idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Idempotency-Key': '<x-idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
source: {materialId: 'YOUR_MATERIAL_ID'},
language: {source: 'en-US'},
options: {asr: {quality: 'standard'}, speakers: 'auto'},
title: 'Weekly meeting'
})
};
fetch('https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source' => [
'materialId' => 'YOUR_MATERIAL_ID'
],
'language' => [
'source' => 'en-US'
],
'options' => [
'asr' => [
'quality' => 'standard'
],
'speakers' => 'auto'
],
'title' => 'Weekly meeting'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Idempotency-Key: <x-idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async"
payload := strings.NewReader("{\n \"source\": {\n \"materialId\": \"YOUR_MATERIAL_ID\"\n },\n \"language\": {\n \"source\": \"en-US\"\n },\n \"options\": {\n \"asr\": {\n \"quality\": \"standard\"\n },\n \"speakers\": \"auto\"\n },\n \"title\": \"Weekly meeting\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Idempotency-Key", "<x-idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async")
.header("X-Idempotency-Key", "<x-idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source\": {\n \"materialId\": \"YOUR_MATERIAL_ID\"\n },\n \"language\": {\n \"source\": \"en-US\"\n },\n \"options\": {\n \"asr\": {\n \"quality\": \"standard\"\n },\n \"speakers\": \"auto\"\n },\n \"title\": \"Weekly meeting\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vmeg.ai/openapi/v1/app/task/transcription/create-async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Idempotency-Key"] = '<x-idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source\": {\n \"materialId\": \"YOUR_MATERIAL_ID\"\n },\n \"language\": {\n \"source\": \"en-US\"\n },\n \"options\": {\n \"asr\": {\n \"quality\": \"standard\"\n },\n \"speakers\": \"auto\"\n },\n \"title\": \"Weekly meeting\"\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"message": "",
"data": {
"taskId": "<string>",
"taskType": "transcription",
"status": "running",
"createdAt": "<string>",
"editorUrl": "https://www.vmeg.ai/transcription/editor/2047316590123456789/"
}
}Authorizations
Send your API Key in the Authorization header (Bearer <api_key>). See Authentication.
Headers
Required on mutating POST requests that create tasks or change persisted data (max 64 characters). See Idempotency.
64Body
Exactly one of materialId or youtubeUrl. sourceUrl is not supported for transcription and returns 400.
Show child attributes
Show child attributes
Language settings
Show child attributes
Show child attributes
Transcription options (all optional)
Show child attributes
Show child attributes
Job name shown in My tasks (max 255 characters). Defaults to the file name or the YouTube video title.
255
