How an OpenAI, Gemini, or fal.ai key is selected
Provider keys belong to the organization and have a label. You can assign one key to several advertisers or mark one key as the organization default for that provider. When generation starts, an advertiser-assigned key takes precedence. If the advertiser has no assigned key, Apostra uses the provider default only when you explicitly set one. It never silently chooses another key, because that could charge the wrong provider account.Rotate a key
A delegated call that selects a specific connection credential fails if that credential becomes unavailable. It cannot substitute a local development environment key for the selected credential. In Settings → Generative creative, open the key’s action menu and choose Rotate key. Enter the replacement API key and confirm. Rotation preserves the credential’s label, advertiser assignments, and default status. The existing key remains active unless the replacement is stored and the credential is switched successfully. After the switch, Apostra retires the old stored secret. You can also rotate through the buyer API:Provider costs and Intelligence Units
Creative generated with your provider key is charged by that provider to your provider account. Buyer-funded provider attempts are excluded from Apostra’s generated-media IU meter, including retries and discarded variants. AudioStack and ElevenLabs remain bring-your-own-key regardless of the organization’s other billing settings. Their credentials are managed on the provider connection, not in Settings → Generative creative. The mapped provider account controls billing; voice selection is independent. Set the brand’s durable default voice withbrand.voice_synthesis, or set
transformer voice_id to override it for one build.
Provide exact copy for ElevenLabs voice drafts
ElevenLabs speaks only explicit voice copy. Put the exact words to speak in straight or curly quotation marks increative_brief.prompt, or provide a
creative_manifest.assets.script text asset. For example:
Clip length follows your script
The clip is as long as it takes to speak your words, not as long as the slot you name. A 15-word line produces a clip of about six seconds whether the slot is 15 or 30 seconds, and you can add music or silence to fill the slot later. A duration in the brief, such as “15-second”, is a target and never causes a rejection. Apostra checks the generated audio against your script. It estimates the spoken length and rejects audio that is under one second or under 40% of that estimate, because such audio cannot be your script. For space-separated languages the estimate is about 160 words per minute. Chinese and Japanese scripts have no spaces between words, so they are measured at about five characters per second, and Thai at about two words per second. If Apostra cannot estimate the length of your script, it cannot show the clip is long enough and rejects it asgenerated_audio_too_short. Audio that cannot be
decoded is also rejected. When a leaf is rejected after the
provider was called, the generation result carries a failureReason on that
leaf, one of generated_audio_too_short, generated_audio_undecodable, or
provider_error. The provider may have charged for that attempt, so the leaf is
not retried automatically; create a new generation action to try again.