faktry Audio API
The Audio API from faktry — 12 operation(s) for audio.
The Audio API from faktry — 12 operation(s) for audio.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/faktry-ai:faktry-ai-audio-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: faktry Media Audio API
description: '# faktry Media API
A comprehensive API for AI-powered media processing including image generation/editing, video creation, audio processing, and PDF manipulation.
## Authentication
All requests must include an `Authorization` header with a Bearer token:
```
Authorization: Bearer
```
Two token types are accepted:
1. **API Key** (recommended for programmatic access): Tokens are prefixed with `mt_` and can be generated in your account settings. Example: `Authorization: Bearer mt_abc123...`
2. **Supabase JWT**: The session JWT issued by Supabase auth, used by the web app and desktop client.
## Credits & Pricing
All operations consume credits. Costs vary by operation and model:
- Basic operations: 1-5 credits
- AI-powered operations: 5-32 credits depending on model
- Check individual operation descriptions for exact costs
## File Uploads
- Use `multipart/form-data` for file uploads
- File parameter names: `file`, `file0`, `file1`, etc. for multiple files
- Maximum file sizes vary by subscription tier
## Async Operations
Some operations run asynchronously and return a job ID. Poll the job status using the returned `poll_url`.'
version: 1.0.0
contact:
name: Media Tools Support
email: support@mediatools.com
servers:
- url: https://faktry.ai
description: Production server
security:
- BearerAuth: []
tags:
- name: Audio
paths:
/api/media/v1/audio/transcribe:
post:
operationId: audio_transcribe
summary: Transcribe Audio
description: 'Convert speech in audio files to text using AI transcription
**Model Costs (credits):**
- `whisper-1`: 2 credits
- `elevenlabs/speech-to-text/scribe-v2`: 2 credits
- `nvidia/nemotron-asr-multilingual/asr`: 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
model:
type: string
enum:
- whisper-1
- elevenlabs/speech-to-text/scribe-v2
- nvidia/nemotron-asr-multilingual/asr
description: AI model to use for processing
language:
type: string
response_format:
type: string
temperature:
type: number
minimum: 0
maximum: 1
timestamp_granularities:
type: string
file:
$ref: '#/components/schemas/FileUpload'
required:
- model
- file
responses:
'202':
description: Job queued for async processing
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/generatespeech:
post:
operationId: audio_generatespeech
summary: Generate Speech (TTS)
description: 'Create audio from text using AI text-to-speech technology
**Model Costs (credits):**
- `gpt-4o-mini-tts`: 3 credits
- `tts-1`: 3 credits
- `tts-1-hd`: 5 credits
- `elevenlabs/tts/eleven-v3`: 3 credits
- `qwen-3-tts/text-to-speech/1.7b`: 3 credits
- `qwen-3-tts/voice-design/1.7b`: 3 credits
- `gemini-tts`: 5 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
model:
type: string
enum:
- gpt-4o-mini-tts
- tts-1
- tts-1-hd
- elevenlabs/tts/eleven-v3
- qwen-3-tts/text-to-speech/1.7b
- qwen-3-tts/voice-design/1.7b
- gemini-tts
description: AI model to use for processing
input:
type: string
voice:
type: string
response_format:
type: string
speed:
type: number
minimum: 0.25
maximum: 4
instructions:
type: string
prompt:
type: string
description: Text prompt for AI generation
required:
- model
- input
- prompt
responses:
'202':
description: Job queued for async processing
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/clonevoice:
post:
operationId: audio_clonevoice
summary: Clone Voice
description: 'Clone a voice from audio samples using AI voice cloning technology
**Model Costs (credits):**
- `qwen-3-tts/clone-voice/1.7b`: 5 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
model:
type: string
enum:
- qwen-3-tts/clone-voice/1.7b
description: AI model to use for processing
reference_text:
type: string
file:
$ref: '#/components/schemas/FileUpload'
required:
- model
- file
responses:
'202':
description: Job queued for async processing
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/generatemusic:
post:
operationId: audio_generatemusic
summary: Generate Music
description: 'Create music and audio from text descriptions using AI music generation
**Model Costs (credits):**
- `minimax-music/v2`: 5 credits
- `minimax-music/v2.6`: 5 credits
- `elevenlabs/music/v2.5`: 20 credits
- `minimax/music-3`: 3 credits
- `google/lyria-3.5`: 5 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
model:
type: string
enum:
- minimax-music/v2
- minimax-music/v2.6
- elevenlabs/music/v2.5
- minimax/music-3
- google/lyria-3.5
description: AI model to use for processing
lyrics_prompt:
type: string
sample_rate:
type: string
bitrate:
type: string
format:
type: string
prompt:
type: string
description: Text prompt for AI generation
required:
- model
- lyrics_prompt
- prompt
responses:
'202':
description: Job queued for async processing
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/generatesound:
post:
operationId: audio_generatesound
summary: Generate Sound
description: 'Create speech and sound effects from text using AI
**Model Costs (credits):**
- `bytedance/seed-audio-1.0`: 5 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
model:
type: string
enum:
- bytedance/seed-audio-1.0
description: AI model to use for processing
speed:
type: number
minimum: 0.5
maximum: 2
pitch:
type: number
minimum: -12
maximum: 12
volume:
type: number
minimum: 0.5
maximum: 2
sample_rate:
type: string
output_format:
type: string
prompt:
type: string
description: Text prompt for AI generation
required:
- model
- prompt
responses:
'202':
description: Job queued for async processing
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/convert:
post:
operationId: audio_convert
summary: Convert Audio
description: 'Convert audio files between different formats like MP3, WAV, OGG, AAC, and M4A
**Cost:** 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
format:
type: string
enum:
- mp3
- wav
- ogg
- aac
- m4a
default: mp3
description: Output Format
bitrate:
type: string
default: 256k
description: Bitrate
sampleRate:
type: number
default: 44100
description: Sample Rate
file:
$ref: '#/components/schemas/FileUpload'
required:
- format
- bitrate
- sampleRate
- file
responses:
'200':
description: Processed audio file
content:
application/octet-stream:
schema:
type: string
format: binary
description: Processed audio file
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/mix:
post:
operationId: audio_mix
summary: Mix Audio
description: 'Combine multiple audio files into a single track with volume control
**Cost:** 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
volume:
type: number
minimum: 0
maximum: 2
default: 1
description: Volume
file0:
$ref: '#/components/schemas/FileUpload'
file1:
$ref: '#/components/schemas/FileUpload'
file2:
$ref: '#/components/schemas/FileUpload'
file3:
$ref: '#/components/schemas/FileUpload'
file4:
$ref: '#/components/schemas/FileUpload'
file5:
$ref: '#/components/schemas/FileUpload'
file6:
$ref: '#/components/schemas/FileUpload'
file7:
$ref: '#/components/schemas/FileUpload'
file8:
$ref: '#/components/schemas/FileUpload'
file9:
$ref: '#/components/schemas/FileUpload'
required:
- volume
- file0
responses:
'200':
description: Processed audio file
content:
application/octet-stream:
schema:
type: string
format: binary
description: Processed audio file
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/trim:
post:
operationId: audio_trim
summary: Trim Audio
description: 'Cut audio files to specific start time and duration
**Cost:** 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
start:
type: number
minimum: 0
multipleOf: 0.1
default: 0
description: Start Time (seconds)
duration:
type: number
minimum: 0
multipleOf: 0.1
description: Duration (seconds)
file:
$ref: '#/components/schemas/FileUpload'
required:
- start
- duration
- file
responses:
'200':
description: Processed audio file
content:
application/octet-stream:
schema:
type: string
format: binary
description: Processed audio file
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/merge:
post:
operationId: audio_merge
summary: Merge Audio
description: 'Combine multiple audio files sequentially into one file
**Cost:** 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file0:
$ref: '#/components/schemas/FileUpload'
file1:
$ref: '#/components/schemas/FileUpload'
file2:
$ref: '#/components/schemas/FileUpload'
file3:
$ref: '#/components/schemas/FileUpload'
file4:
$ref: '#/components/schemas/FileUpload'
file5:
$ref: '#/components/schemas/FileUpload'
file6:
$ref: '#/components/schemas/FileUpload'
file7:
$ref: '#/components/schemas/FileUpload'
file8:
$ref: '#/components/schemas/FileUpload'
file9:
$ref: '#/components/schemas/FileUpload'
required:
- file0
responses:
'200':
description: Processed audio file
content:
application/octet-stream:
schema:
type: string
format: binary
description: Processed audio file
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/analyze:
post:
operationId: audio_analyze
summary: Analyze Audio
description: 'Extract duration, format, codec, bitrate, sample rate, channels and file size via FFprobe
**Cost:** 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
$ref: '#/components/schemas/FileUpload'
required:
- file
responses:
'200':
description: Processed json file
content:
application/octet-stream:
schema:
type: string
format: binary
description: Processed json file
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/timeline:
post:
operationId: audio_timeline
summary: Audio Timeline
description: 'Build one audio track from several clips placed at exact start times, with silence in the gaps, optional ducking of music under voice, and loudness normalisation. The input files are the clips, and `tracks` is a JSON array string with one object per file in the same order: [{"start": seconds, "role": "voice"|"music"|"fx", "volume": 0-2, "fade_in": s, "fade_out": s}]. `duration` pads or cuts the result to an exact length. `duck` ("true" or a JSON object string with amount_db, attack_ms, release_ms) lowers every music track while a voice track plays and needs at least one of each. `normalize_lufs` (e.g. -16) is applied once, after mixing and ducking.
**Cost:** 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
tracks:
type: string
description: Tracks (JSON array)
duration:
type: number
minimum: 0.1
maximum: 900
multipleOf: 0.1
description: Total Length (seconds)
duck:
type: string
description: Duck music under voice
normalize_lufs:
type: number
minimum: -50
maximum: -5
multipleOf: 0.5
description: Loudness Target (LUFS)
format:
type: string
enum:
- mp3
- wav
- m4a
- aac
- ogg
- flac
default: mp3
description: Output Format
sample_rate:
type: string
enum:
- '8000'
- '16000'
- '22050'
- '44100'
- '48000'
- '96000'
default: '44100'
description: Sample Rate
file0:
$ref: '#/components/schemas/FileUpload'
file1:
$ref: '#/components/schemas/FileUpload'
file2:
$ref: '#/components/schemas/FileUpload'
file3:
$ref: '#/components/schemas/FileUpload'
file4:
$ref: '#/components/schemas/FileUpload'
file5:
$ref: '#/components/schemas/FileUpload'
file6:
$ref: '#/components/schemas/FileUpload'
file7:
$ref: '#/components/schemas/FileUpload'
file8:
$ref: '#/components/schemas/FileUpload'
file9:
$ref: '#/components/schemas/FileUpload'
required:
- tracks
- duration
- duck
- normalize_lufs
- format
- sample_rate
- file0
responses:
'200':
description: Processed audio file
content:
application/octet-stream:
schema:
type: string
format: binary
description: Processed audio file
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/media/v1/audio/download:
post:
operationId: audio_download
summary: Download Audio
description: 'Downloads audio content from a provided URL and converts it to the specified format. Supports SoundCloud, YouTube, Vimeo, Bandcamp, and more.
**Cost:** 1 credits'
tags:
- Audio
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
url:
type: string
description: Audio URL
format:
type: string
enum:
- mp3
- m4a
- ogg
- flac
- wav
default: mp3
description: Output Format
required:
- url
- format
responses:
'200':
description: Processed audio file
content:
application/octet-stream:
schema:
type: string
format: binary
description: Processed audio file
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: File too large
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded or insufficient credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
JobResponse:
type: object
properties:
job_id:
type: string
description: Unique job identifier
status:
type: string
enum:
- pending
description: Job status
poll_url:
type: string
description: URL to poll job status
required:
- job_id
- status
- poll_url
FileUpload:
type: string
format: binary
description: File to upload
Error:
type: object
properties:
error:
type: string
description: Error message
required:
- error
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: mt_<api-key> | supabase-jwt
description: 'Pass either an mt_-prefixed API key or a Supabase session JWT as the Bearer token. Example: `Authorization: Bearer mt_abc123...`'