API Reference
Test public endpoints live and review authentication, idempotency, and human-publication boundaries for content workflows.
Speech-to-Text API
/transcribeConvert audio files to text with support for multiple formats and custom dictionaries.
Long audio may return a pending/running AI optimization status while chunked optimization finishes in the background. This interactive tester only covers the public /transcribe request; internal AI optimization job status and recovery endpoints are not exposed as public API.
When AI optimization is enabled, dify_processing may include optional n8n_workflow_name, n8n_workflow_id, n8n_call_id, and n8n_execution_id diagnostics; a successful desktop Records retry preserves the same workflow identity. A prefetch cache hit reuses the first call, so finalize does not dispatch a duplicate workflow merely to populate these fields. These identifiers are not credentials, but they still should not be published together with transcript text, API keys, or webhook URLs.
Try it out
Dictionary Management API
/api/v1/dictionaryRetrieve all dictionary entries for the user.
Try it out
/api/v1/dictionary/addAdd or update a dictionary entry.
Try it out
/api/v1/dictionary/deleteDelete a specific dictionary entry. Requires misspelling in query parameters.
Try it out
Content Workflow API
Authorization: Bearer YOUR_API_KEYThese endpoints return only content owned by the API-key user. Platform variants roll out per environment; clients must handle 404, 409, and 503 instead of assuming that a route means the product surface is enabled.
/api/v1/content/items/{id}/familyRead a master, its platform variants, generation state, approval state, and freshness.
/api/v1/content/items/{master_id}/variantsCreate or reuse variants for active user-owned Channels, with at most 10 targets per request.
/api/v1/content/items/{variant_id}/regenerateCreate a new generation job for an existing variant while preserving source snapshot and edit-conflict protection.
/api/v1/content/items/{variant_id}/approveApprove only the current title and body identified by content_hash; later edits invalidate approval.
/api/v1/content/items/{id}/deliveriesRecord evidence states for direct share, copy, or file export; opening a share sheet is not confirmed publication.
/api/v1/content/items/{variant_id}/deliveries/manualConfirm a manually posted approved, fresh variant; this endpoint never calls a third-party platform.
Create-platform-variants example
client_request_id must be stable and unique within the current user scope. The same ID may replay only the identical master, Channel, preset, and source snapshot; another payload returns 409 idempotency_conflict.
curl -X POST "https://api.vowise.com/api/v1/content/items/CONTENT_ITEM_ID/variants" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"client_request_id": "client-generated-stable-id",
"targets": [
{ "channel_id": "CHANNEL_ID", "preset_id": "PRESET_ID" }
]
}'Delivery evidence boundary
The content workflow stores no third-party account credentials and does not auto-post for a user. A native or browser share surface usually proves only initiated, presented, or result-unknown state; an external result becomes confirmed only with separate trusted evidence. The internal generation callback is service-secret protected, is not public API, and has no tester here.
SDKs & Integration
Python SDK
pip install vowise-sdk
from vowise import VowiseClient
client = VowiseClient(api_key="YOUR_API_KEY")
# Transcribe audio
result = client.transcribe("audio.wav")
print(result.text)
# Manage dictionary
client.dictionary.add("AI", "Artificial Intelligence")
entries = client.dictionary.list()
client.dictionary.delete("AI")JavaScript SDK
npm install @vowise/sdk
import { VowiseClient } from '@vowise/sdk';
const client = new VowiseClient({
apiKey: 'YOUR_API_KEY'
});
// Transcribe audio
const result = await client.transcribe(audioFile);
console.log(result.text);
// Manage dictionary
await client.dictionary.add('AI', 'Artificial Intelligence');
const entries = await client.dictionary.list();
await client.dictionary.delete('AI');