Media: video, audio and posters
Every recorded testimonial is processed after the respondent sends it:
- a video becomes an MP4 (H.264 and AAC, at most 1080p);
- audio becomes an M4A (AAC);
- a written testimonial the respondent spoke is treated as audio;
- each one also gets a poster: a still frame for video, the waveform for audio, as a JPEG.
There are three ways to get those files, for three different jobs:
| You want to… | Use | How long it works | Who can open it |
|---|---|---|---|
| Put the testimonial on a website, in an email, in a spreadsheet | public_media |
Permanently, while the testimonial is published | Anyone with the link |
| Play it on a screen you control, right now | playback_url, poster_url |
About an hour | Anyone with the link, until it expires |
| Download the file, or host it yourself | GET /v1/submissions/{id}/media/{variant} |
Redirects to a link valid for about an hour | Only your credentials |
Permanent public links: public_media
"public_media": {
"video_url": "https://cdn.akteora.com/m/7kq2m9xwzr4tn8vbh3jp/video.mp4",
"audio_url": null,
"poster_url": "https://cdn.akteora.com/m/7kq2m9xwzr4tn8vbh3jp/poster.jpg"
}
public_media is on every testimonial the API returns. A testimonial is published, and
public_media is filled in, when all of these hold:
- it is approved,
- it is public,
- it has finished processing,
- it is not rejected or deleted.
Until then public_media is null, and it stays null for a few seconds after the decision
while the files are published. Fetch the testimonial again, or, once webhooks arrive, listen
for submission.published.
video_url is set for a video testimonial and audio_url for an audio or spoken one.
poster_url is set for both.
What the link promises:
- It does not change. The address stays the same if the recording is ever processed again. Store it.
- It is public. Anyone with it can play the file: no credentials, no signature, no expiry. It is served from Cloudflare's CDN, never from the API.
- It stops working when the testimonial is unpublished: made private, rejected or deleted. That happens within seconds. If the testimonial is published again, it comes back at the same address.
- It is opaque. Read it from
public_media; do not assemble it yourself. The id in it is not the testimonial's id, and reveals nothing about your account. - Caching: browsers may keep a copy for up to an hour and the CDN for up to a day. When a file is replaced or withdrawn, the CDN is told to drop it.
On any website
<video
src="https://cdn.akteora.com/m/7kq2m9xwzr4tn8vbh3jp/video.mp4"
poster="https://cdn.akteora.com/m/7kq2m9xwzr4tn8vbh3jp/poster.jpg"
controls
playsinline
preload="metadata"
width="360"
></video>
This works unchanged in:
- a Shopify theme section;
- a WordPress Custom HTML block;
- Webflow's Embed element;
- any page you write yourself.
In an email, where most clients will not play video, use the poster as an image that links to the video.
Every published testimonial for a brand
curl -H "Authorization: Bearer $AKTEORA_API_KEY" \
"https://api.akteora.com/v1/submissions?brand_id=brd_…&is_approved=true&is_public=true&limit=100"
Keep the testimonials whose public_media is not null, and follow next_cursor for more.
Short-lived links: playback_url and poster_url
poster_url on each testimonial, and playback_url on each file in a testimonial's assets
(GET /v1/submissions/{id}), are signed links that work for about an hour. They exist for
every testimonial that has finished processing, published or not.
Use them to show a testimonial on a screen you control, such as your own admin page, at the moment you fetch it. Do not store them. Fetch the testimonial again for fresh ones.
Downloading a file
GET /v1/submissions/{id}/media/{variant}
variant |
The file |
|---|---|
video |
A video testimonial's processed MP4 |
audio |
An audio or spoken testimonial's processed M4A |
poster |
The poster, as a JPEG |
The response is 302 Found, and Location holds a signed link to the file that works for about
an hour. Follow it:
curl -L -H "Authorization: Bearer $AKTEORA_API_KEY" -o testimonial.mp4 \
"https://api.akteora.com/v1/submissions/sub_…/media/video"
This works whether or not the testimonial is published: to put it into a video editor, or to
host it on your own storage. You get 404 when:
- the testimonial is still a draft;
- it has not finished processing;
- it has no such file, such as
audiofor a video testimonial. For the voice alone from a video, export it asmp3.
Do not store the Location link; ask again instead.
If you host the files yourself
A copy you make is yours to keep in step. When a testimonial is unpublished, its public link
stops working, but Akteora cannot reach a copy on your storage. When a respondent withdraws
their consent, that copy has to go too. Prefer public_media wherever a link will do. If you
must copy, check that the testimonial is still published before showing your copy (webhooks
will make this a push rather than a poll).