PowerPost APIv1
PowerPost APIv1
DashboardAPI keysPowerPost API
QuickstartAuthenticationWorkspacesErrors & Rate Limits
Input TypesPost TypesCreditsResearch Modes
Generate CaptionsGenerate ImagesPublish and ScheduleWebhooksMCP Server

Content

Generate ContentGenerations

Media

Upload MediaGenerate ImagesGenerate VideosVideo CaptionsAudio GenerationVideo Audio

Publishing & planning

PostsPublish & SchedulePost ItemsAnalyticsCalendar

Account

Get Credits
Changelog
API reference

Audio Generation

Generate speech audio from text with ElevenLabs v3.

Generate audio

POST /api/v1/audio/generate

Scope: audio:generate

Turn text into an MP3. The request returns immediately with an id. Poll Get generation until the job is completed or failed.

Audio generation requires at least one credit purchase on the account. Signup credits are not enough. See Purchase required.

Request body

Generic fields stay at the top level. Settings unique to ElevenLabs go in provider_options.

FieldTypeRequiredDescription
textstringYesText to speak, 1–5,000 characters. Eleven v3 audio tags may be included inline.
providerstringYesCurrently elevenlabs
output_formatstringNoCurrently mp3; defaults to mp3
provider_optionsobjectYesProvider-specific settings (see below)

provider_options (ElevenLabs)

FieldTypeRequiredDescription
voice_idstringYesElevenLabs voice ID
modelstringNoCurrently eleven_v3
stabilitystringNocreative, natural, or robust (default: natural)
language_codestringNoTwo-letter ISO 639-1 code (en, he, …)
seedintegerNoBest-effort deterministic seed. Identical output is not guaranteed.
text_normalizationstringNoauto, on, or off (default: auto)

Credits

Cost is based on text length: 1 credit per 400 characters, rounded up, minimum 1. Charged when the job starts. Failed jobs are refunded. The start response includes credits_used and remaining_credits.

Examples: 1 character costs 1 credit. 400 characters cost 1. 401 characters cost 2.

Eleven v3 text

Put delivery direction in text:

  • Audio tags such as [whispers], [excited], or [sighs]
  • Ellipses, punctuation, capitalization, and line breaks for pauses, rhythm, and emphasis
  • Do not use SSML <break> tags; Eleven v3 does not support them
  • Pick a voice whose natural character matches the delivery. Tag behavior varies by voice

One voice per request. For more than one speaker, generate a separate job per voice.

Example

curl -X POST https://powerpost.ai/api/v1/audio/generate \
  -H "x-api-key: pp_live_sk_YOUR_KEY" \
  -H "X-Workspace-Id: YOUR_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "[warmly] Welcome to PowerPost.",
    "provider": "elevenlabs",
    "output_format": "mp3",
    "provider_options": {
      "model": "eleven_v3",
      "voice_id": "YOUR_VOICE_ID",
      "stability": "natural",
      "language_code": "en"
    }
  }'

Response

{
  "audio_generation_id": "22222222-2222-4222-8222-222222222222",
  "status": "processing",
  "status_url": "/api/v1/audio/generations/22222222-2222-4222-8222-222222222222",
  "created_at": "2026-09-04T18:30:00Z",
  "credits_used": 1,
  "remaining_credits": 46
}
FieldTypeDescription
audio_generation_idstringId to poll for this job
statusstringAlways processing on a successful start
status_urlstringRelative URL to poll for results
created_atstringISO 8601 timestamp
credits_usednumberCredits deducted
remaining_creditsnumberBalance after deduction

Errors

CodeDescription
400Invalid request body
401Invalid API key
402Insufficient credits (INSUFFICIENT_CREDITS)
402Purchase required (MEDIA_REQUIRES_PURCHASE)
403API key is missing the audio:generate scope
429Rate limit exceeded

Get generation

GET /api/v1/audio/generations/{id}

Scope: audio:read

Poll every 2–5 seconds until status is completed or failed.

Path parameters

ParameterTypeDescription
idstringThe audio generation id

Example

curl https://powerpost.ai/api/v1/audio/generations/22222222-2222-4222-8222-222222222222 \
  -H "x-api-key: pp_live_sk_YOUR_KEY" \
  -H "X-Workspace-Id: YOUR_WORKSPACE_ID"

Response (processing)

{
  "audio_generation_id": "22222222-2222-4222-8222-222222222222",
  "status": "processing",
  "provider": "elevenlabs",
  "model": "eleven_v3",
  "error": null,
  "created_at": "2026-09-04T18:30:00Z",
  "updated_at": "2026-09-04T18:30:01Z",
  "audio": null
}

Response (completed)

{
  "audio_generation_id": "22222222-2222-4222-8222-222222222222",
  "status": "completed",
  "provider": "elevenlabs",
  "model": "eleven_v3",
  "error": null,
  "created_at": "2026-09-04T18:30:00Z",
  "updated_at": "2026-09-04T18:30:08Z",
  "audio": {
    "audio_id": "33333333-3333-4333-8333-333333333333",
    "media_id": "33333333-3333-4333-8333-333333333333",
    "url": "https://temporary-signed-url.example/audio.mp3",
    "file_name": "33333333-3333-4333-8333-333333333333.mp3",
    "file_size": 123456,
    "mime_type": "audio/mpeg",
    "duration": 4.2
  }
}

Response (failed)

{
  "audio_generation_id": "22222222-2222-4222-8222-222222222222",
  "status": "failed",
  "provider": "elevenlabs",
  "model": "eleven_v3",
  "error": {
    "code": "AUDIO_GENERATION_FAILED",
    "message": "Audio generation failed"
  },
  "created_at": "2026-09-04T18:30:00Z",
  "updated_at": "2026-09-04T18:30:08Z",
  "audio": null
}

Response fields

FieldTypeDescription
audio_generation_idstringAudio generation id
statusstringprocessing, completed, or failed
providerstringSpeech provider
modelstringModel used for this job
errorobject | nullPresent when status is failed
created_atstringISO 8601 timestamp
updated_atstringISO 8601 timestamp
audioobject | nullOutput file when status is completed

Audio object

FieldTypeDescription
audio_idstringGenerated audio asset id. Same value as media_id.
media_idstringWorkspace media library id.
urlstring | nullSigned MP3 URL, valid for 1 hour
file_namestringStored file name
file_sizenumberSize in bytes
mime_typestringaudio/mpeg
durationnumber | nullLength in seconds, when known

Status values

StatusDescription
processingSpeech is being generated
completedMP3 is ready
failedGeneration failed; credits are refunded

audio.url is signed and expires after 1 hour. Keep audio_generation_id and call this endpoint again for a fresh URL. Completed audio is also stored in the workspace media library as media_type: audio. You cannot pass media_id on posts yet; no publish destination accepts a raw MP3. Use Video audio to mix it into a publishable MP4. If the media item is deleted, the generation remains in history and audio becomes null, matching image and video generations.

Errors

CodeDescription
401Invalid API key
403API key is missing the audio:read scope
404Audio generation not found
429Rate limit exceeded

Video Captions

Add timed, styled captions to a video.

Video Audio

Mix voiceover, music, or sound effects into a video.

On this page

Generate audioRequest bodyprovider_options (ElevenLabs)CreditsEleven v3 textExampleResponseErrorsGet generationPath parametersExampleResponse (processing)Response (completed)Response (failed)Response fieldsAudio objectStatus valuesErrors