Skip to main content
GET
/
v1
/
voices
/
{id}
/
samples
/
{sample_id}
Get Voice Sample
curl --request GET \
  --url https://api.bland.ai/v1/voices/{id}/samples/{sample_id} \
  --header 'authorization: <authorization>'
import requests

url = "https://api.bland.ai/v1/voices/{id}/samples/{sample_id}"

headers = {"authorization": "<authorization>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {authorization: '<authorization>'}};

fetch('https://api.bland.ai/v1/voices/{id}/samples/{sample_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bland.ai/v1/voices/{id}/samples/{sample_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"authorization: <authorization>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.bland.ai/v1/voices/{id}/samples/{sample_id}"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("authorization", "<authorization>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.bland.ai/v1/voices/{id}/samples/{sample_id}")
.header("authorization", "<authorization>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.bland.ai/v1/voices/{id}/samples/{sample_id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["authorization"] = '<authorization>'

response = http.request(request)
puts response.read_body
HTTP/1.1 200 OK
Content-Type: audio/wav
Content-Length: 245318
Content-Disposition: attachment; filename="sample-d15b199a.wav"

<WAV binary>
{
  "sample": {
    "id": "d15b199a-1b79-4664-9a9a-b149ee3b136a",
    "voice_id": "73d4c04b-1e15-4272-9c7f-8d2955914ba9",
    "transcription": "Hello and welcome to Bland.",
    "duration_seconds": 11.4,
    "audio_data": "<base64 WAV>",
    "created_at": "2026-06-22T21:34:31.347Z"
  }
}
{
  "data": null,
  "errors": [
    { "error": "AUDIO_NOT_FOUND", "message": "No audio data found for this sample" }
  ]
}

Overview

Returns a single training sample for a voice you own. By default the response is the raw WAV audio. Pass ?format=json to get the metadata plus base64-encoded audio instead. Only voices owned by your org return samples. Default voices and shared-library voices return 400 VOICE_SAMPLE_ERROR.

Headers

authorization
string
required
Your API key for authentication.

Path Parameters

id
string
required
UUID of the parent voice.
sample_id
string
required
UUID of the sample to fetch.

Query Parameters

format
string
default:"audio"
Response format. audio returns the raw WAV binary, json returns sample metadata with base64-encoded audio under data.

Response

With format=audio (default), returns the WAV binary with:
  • Content-Type: audio/wav
  • Content-Disposition: attachment; filename="sample-<id>.wav"
With format=json, returns sample metadata.
sample
object
Only present in JSON mode.
HTTP/1.1 200 OK
Content-Type: audio/wav
Content-Length: 245318
Content-Disposition: attachment; filename="sample-d15b199a.wav"

<WAV binary>
{
  "sample": {
    "id": "d15b199a-1b79-4664-9a9a-b149ee3b136a",
    "voice_id": "73d4c04b-1e15-4272-9c7f-8d2955914ba9",
    "transcription": "Hello and welcome to Bland.",
    "duration_seconds": 11.4,
    "audio_data": "<base64 WAV>",
    "created_at": "2026-06-22T21:34:31.347Z"
  }
}
{
  "data": null,
  "errors": [
    { "error": "AUDIO_NOT_FOUND", "message": "No audio data found for this sample" }
  ]
}

Docs for agents: llms.txt