curl --request POST 'https://api.voicecheap.ai/v1/actions/subtitles_result_download' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"resultId":"b3caf96f-5f2a-4619-832c-a12c0d57f78b"}'
const input = {
resultId: 'b3caf96f-5f2a-4619-832c-a12c0d57f78b',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/subtitles_result_download', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/subtitles_result_download",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
"operation": "captions_transcribe",
"createdAt": 1792152000000,
"fileName": "voicecheap-captions_transcribe-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
"byteLength": 190,
"contentType": "application/json; charset=utf-8",
"status": "completed",
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"getAction": "subtitles_result_get",
"downloadAction": "subtitles_result_download",
"listAction": "subtitles_result_list",
"content": "{\"words\":[{\"text\":\"Hello\",\"startMs\":0,\"endMs\":500,\"speakerId\":\"speaker_0\"},{\"text\":\"world.\",\"startMs\":500,\"endMs\":1500,\"speakerId\":\"speaker_0\"}],\"detectedLanguage\":\"en\",\"durationSeconds\":60}"
}
}
Ondertitels en captions
Een opgeslagen resultaat van een ondertitelactie exporteren
Exporteer het volledige resultaat waarvan je eigenaar bent als JSON-tekst met een bestandsnaam en inhoudstype. Toegang blijft geauthenticeerd; geen openbare media-URL maakt het transcript toegankelijk.
POST
/
v1
/
actions
/
subtitles_result_download
curl --request POST 'https://api.voicecheap.ai/v1/actions/subtitles_result_download' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"resultId":"b3caf96f-5f2a-4619-832c-a12c0d57f78b"}'
const input = {
resultId: 'b3caf96f-5f2a-4619-832c-a12c0d57f78b',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/subtitles_result_download', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/subtitles_result_download",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
"operation": "captions_transcribe",
"createdAt": 1792152000000,
"fileName": "voicecheap-captions_transcribe-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
"byteLength": 190,
"contentType": "application/json; charset=utf-8",
"status": "completed",
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"getAction": "subtitles_result_get",
"downloadAction": "subtitles_result_download",
"listAction": "subtitles_result_list",
"content": "{\"words\":[{\"text\":\"Hello\",\"startMs\":0,\"endMs\":500,\"speakerId\":\"speaker_0\"},{\"text\":\"world.\",\"startMs\":500,\"endMs\":1500,\"speakerId\":\"speaker_0\"}],\"detectedLanguage\":\"en\",\"durationSeconds\":60}"
}
}
Exporteer het volledige resultaat waarvan je eigenaar bent als JSON-tekst met een bestandsnaam en inhoudstype. Toegang blijft geauthenticeerd; geen openbare media-URL maakt het transcript toegankelijk.
Vereiste machtigingen:
POST https://api.voicecheap.ai/v1/actions/subtitles_result_download
Authenticatie en machtigingen
string
vereist
Stuur een VoiceCheap API-sleutel mee in deze header. Authorization: Bearer met dezelfde API-sleutel wordt ook ondersteund. OAuth-toegangstokens
worden alleen door MCP geaccepteerd, niet door dit REST-endpoint.
subtitles:read.
Een actief betaald abonnement is vereist. Machtigingen wijzigen geen teamrollen, eigendom van resources, mediategoed of abonnementslimieten.
Parameters
string
vereist
Tekstwaarde.Formaat: “uuid”. Patroon:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$.Volledig invoerschema
Volledig invoerschema
Het onderstaande JSON Schema behoudt de exacte veldnamen, geneste typen, standaardwaarden, grenzen en toegestane waarden die discovery beschikbaar stelt. Aanvullende regels tussen velden staan in de opmerkingen bij de bewerking.
{
"type": "object",
"properties": {
"resultId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": ["resultId"],
"additionalProperties": false
}
Voorbeeldaanvragen
Vervang de voorbeeldidentificaties van resources en mediasleutels door waarden die voor je account zijn geretourneerd. Behoud dezelfde aanvraagidentificatie wanneer je dezelfde wijziging opnieuw probeert.curl --request POST 'https://api.voicecheap.ai/v1/actions/subtitles_result_download' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"resultId":"b3caf96f-5f2a-4619-832c-a12c0d57f78b"}'
const input = {
resultId: 'b3caf96f-5f2a-4619-832c-a12c0d57f78b',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/subtitles_result_download', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/subtitles_result_download",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
Antwoord
Een geslaagde eerste uitvoering retourneert HTTP 200 met het resultaat van de bewerking onder data. Een herhaalde aanvraag kan in plaats daarvan de opgeslagen aanvraagstatus retourneren. Het voorbeeld toont één ondersteund antwoord, niet alle optionele velden. Opgeslagen uitvoermetadata met de volledige gegenereerde JSON geserialiseerd als content-tekenreeks voor een geauthenticeerde lokale export.{
"data": {
"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
"operation": "captions_transcribe",
"createdAt": 1792152000000,
"fileName": "voicecheap-captions_transcribe-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
"byteLength": 190,
"contentType": "application/json; charset=utf-8",
"status": "completed",
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"getAction": "subtitles_result_get",
"downloadAction": "subtitles_result_download",
"listAction": "subtitles_result_list",
"content": "{\"words\":[{\"text\":\"Hello\",\"startMs\":0,\"endMs\":500,\"speakerId\":\"speaker_0\"},{\"text\":\"world.\",\"startMs\":500,\"endMs\":1500,\"speakerId\":\"speaker_0\"}],\"detectedLanguage\":\"en\",\"durationSeconds\":60}"
}
}
Resultaatvelden
| Veld | Beschrijving |
|---|---|
data.resultId | UUID van opgeslagen uitvoer waarvan je eigenaar bent. Gebruik deze met getAction of downloadAction; deze verschilt van requestId en elke historyId. |
data.operation | Generatieactie die deze opgeslagen JSON heeft geproduceerd. |
data.createdAt | Unix-tijdstempel in milliseconden waarop de opgeslagen uitvoer is voorbereid. |
data.fileName | Voorgestelde bestandsnaam voor een JSON-export. |
data.byteLength | UTF-8-bytes van de volledige geserialiseerde uitvoer, niet van de compacte metadata. |
data.contentType | application/json; charset=utf-8. |
data.status | completed bij geslaagde generatie. De resultaatgeschiedenis kan ook herstelvermeldingen met de status pending tonen. |
data.requestId | UUID van de oorspronkelijke actieaanvraag, indien vastgelegd. |
data.getAction | Ophaalactie voor gegevens die je bezit; includeContent is standaard false en moet true zijn voor de volledige gestructureerde uitvoer. |
data.downloadAction | Geauthenticeerde exportactie die de volledige JSON als inhoudstekenreeks retourneert. |
data.listAction | Actie voor het weergeven van eigen opgeslagen uitvoer binnen dit machtigingsdomein. |
data.content | Volledig oorspronkelijk openbaar generatieresultaat, gecodeerd als JSON-tekst en klaar om op te slaan in fileName. |
Opmerkingen bij de bewerking
- Vereist een betaald abonnement en de actiemachtiging. Het persoonlijke toolabonnement van de uitvoerende gebruiker wordt bij uitvoering opnieuw gecontroleerd; opgeslagen tools en uploadreferenties behoren toe aan die gebruiker, ook wanneer het toegangsmiddel aan een team is gekoppeld.
- Een geslaagde actie verbruikt één gedeelde maandelijkse API/MCP-aanroep. Beginner staat 500, Starter 5,000 en Creator 25,000 aanroepen/maand toe; Pro, Scale en Enterprise hebben geen maandelijkse bovengrens. De limieten per minuut blijven gelden: respectievelijk 30, 60, 120, 180, 300 en 600. Tegoeden voor toolgeneraties staan hier los van.
- resultId is een UUID uit een voltooide generatiereferentie of uit result_list van dit domein. Deze verschilt van requestId van de actie en historyId van de webtool.
- Resultaten behoren toe aan de geauthenticeerde actor en het machtigingsdomein. Een subtitles-resultaat kan niet via transcription-acties worden gelezen, of andersom.
- De volledige opgeslagen JSON is versleuteld in opslag en wordt onafhankelijk van de begrensde cache voor het opvragen van actiestatussen bewaard. Ophalen blijft geauthenticeerd; er wordt geen openbare JSON-URL voor transcripten of ondertitels uitgegeven.
- Deze acties halen bestaande uitvoer op en genereren geen media en verbruiken geen dagelijkse limiet. Elke geslaagde ophaalactie gebruikt wel één maandelijkse integratieaanroep.
- Metadata met de status pending betekent dat de opslag van de uitvoer moet worden hersteld. Het lezen van inhoud of downloaden probeert een reeds opgeslagen versleuteld object te herstellen; controleer dit voordat je een nieuwe generatie start.
- Schrijf content naar fileName met UTF-8, of gebruik JSON.parse(content) om de gestructureerde uitvoer te herstellen. Het buitenste antwoord bevat geen result-eigenschap of download-URL voor media.
- byteLength beschrijft de UTF-8-JSON binnen content; contentType is application/json; charset=utf-8. Bij downloaden wordt ook geprobeerd wachtende versleutelde uitvoer te herstellen.
Verbruik
Elke geslaagde aanroep verbruikt één maandelijkse API/MCP-aanroep. Ook het mediategoed en de eigen generatielimieten van de bewerking zijn van toepassing.Fouten
| HTTP-status | Code | Betekenis of herstel |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | Inloggegevens zijn opgegeven in een queryparameter access_token of api_key. Stuur inloggegevens in headers. |
| 400 | VALIDATION_ERROR | De argumenten voldoen niet aan het actieschema of er is een onbekend argument opgegeven. |
| 401 | API_KEY_EXPIRED | De API-sleutel is verlopen. |
| 401 | INVALID_API_KEY | Geef een geldige, niet-verlopen API-sleutel op. |
| 401 | INVALID_CREDENTIAL | De Authorization-header heeft een ongeldige indeling of is in strijd met x-api-key. |
| 401 | MISSING_CREDENTIAL | Er is geen bruikbaar authenticatiemiddel in de header opgegeven, of het overschreed 4096 tekens. |
| 401 | USER_NOT_FOUND | Het account dat bij de toegangsgegevens hoort, bestaat niet meer. |
| 403 | AMBIGUOUS_TEAM_API_KEY | De gebruiker van het authenticatiemiddel behoort tot meer dan één team, waardoor de factureringscontext onduidelijk is. |
| 403 | INSUFFICIENT_SCOPE | De API-sleutel of MCP-verbinding heeft niet de vereiste actiemachtiging. |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | De integratielimieten van het account konden niet worden geverifieerd. |
| 403 | PAID_SUBSCRIPTION_REQUIRED | De geauthenticeerde uitvoerende gebruiker heeft geen betaald abonnement meer wanneer deze toolactie wordt uitgevoerd. |
| 403 | SUBSCRIPTION_REQUIRED | Gebruik een actief betaald abonnement. |
| 403 | TEAM_OWNER_NOT_FOUND | Het effectieve account van de teameigenaar kon niet worden gevonden. |
| 404 | TOOL_RESULT_NOT_FOUND | Het resultaat ontbreekt, is van een andere uitvoerende gebruiker of behoort tot het andere machtigingsdomein. |
| 410 | TOOL_RESULT_ACCOUNT_UNAVAILABLE | Het account van de uitvoerende gebruiker wordt verwijderd of bestaat niet meer tijdens het herstel. |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | Gebruikte en nog lopende aanroepen hebben het gedeelde maandelijkse API/MCP-quotum bereikt. |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | Het account heeft de integratielimiet per minuut bereikt; controleer retryAfterSeconds. |
| 500 | INTERNAL_ERROR | De opgeslagen voltooide JSON kon niet worden gelezen of gevalideerd. |
| 503 | INTERNAL_ERROR | Een opgeslagen resultaat met de status pending kan nog niet worden hersteld; controleer hetzelfde resultaat voordat je opnieuw genereert. |
| 503 | SERVER_RESTARTING | De server wordt opnieuw gestart. Probeer het zo opnieuw en behoud bij een wijziging dezelfde aanvraagidentificatie. |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["subtitles:read"]
}
}
Was deze pagina nuttig?

