curl --request POST \
--url https://api.heybee.app/v1/experiments/{experiment_id}/upload-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content_hash": "<string>",
"content_type": "audio/mpeg",
"filename": "<string>",
"idempotency_key": "<string>",
"size_bytes": 1
}
'import requests
url = "https://api.heybee.app/v1/experiments/{experiment_id}/upload-url"
payload = {
"content_hash": "<string>",
"content_type": "audio/mpeg",
"filename": "<string>",
"idempotency_key": "<string>",
"size_bytes": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content_hash: '<string>',
content_type: 'audio/mpeg',
filename: '<string>',
idempotency_key: '<string>',
size_bytes: 1
})
};
fetch('https://api.heybee.app/v1/experiments/{experiment_id}/upload-url', 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.heybee.app/v1/experiments/{experiment_id}/upload-url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content_hash' => '<string>',
'content_type' => 'audio/mpeg',
'filename' => '<string>',
'idempotency_key' => '<string>',
'size_bytes' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.heybee.app/v1/experiments/{experiment_id}/upload-url"
payload := strings.NewReader("{\n \"content_hash\": \"<string>\",\n \"content_type\": \"audio/mpeg\",\n \"filename\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"size_bytes\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.heybee.app/v1/experiments/{experiment_id}/upload-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content_hash\": \"<string>\",\n \"content_type\": \"audio/mpeg\",\n \"filename\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"size_bytes\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.heybee.app/v1/experiments/{experiment_id}/upload-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content_hash\": \"<string>\",\n \"content_type\": \"audio/mpeg\",\n \"filename\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"size_bytes\": 1\n}"
response = http.request(request)
puts response.read_body{
"expires_in": 123,
"file_path": "<string>",
"upload_url": "<string>",
"bucket": "<string>",
"resumable_url": "<string>",
"upload_headers": {},
"upload_token": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get Upload Url
Get a presigned URL for uploading a file.
The file uploads directly to storage. After it completes, create the sample with POST /experiments//samples using the returned file path.
curl --request POST \
--url https://api.heybee.app/v1/experiments/{experiment_id}/upload-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content_hash": "<string>",
"content_type": "audio/mpeg",
"filename": "<string>",
"idempotency_key": "<string>",
"size_bytes": 1
}
'import requests
url = "https://api.heybee.app/v1/experiments/{experiment_id}/upload-url"
payload = {
"content_hash": "<string>",
"content_type": "audio/mpeg",
"filename": "<string>",
"idempotency_key": "<string>",
"size_bytes": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content_hash: '<string>',
content_type: 'audio/mpeg',
filename: '<string>',
idempotency_key: '<string>',
size_bytes: 1
})
};
fetch('https://api.heybee.app/v1/experiments/{experiment_id}/upload-url', 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.heybee.app/v1/experiments/{experiment_id}/upload-url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content_hash' => '<string>',
'content_type' => 'audio/mpeg',
'filename' => '<string>',
'idempotency_key' => '<string>',
'size_bytes' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.heybee.app/v1/experiments/{experiment_id}/upload-url"
payload := strings.NewReader("{\n \"content_hash\": \"<string>\",\n \"content_type\": \"audio/mpeg\",\n \"filename\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"size_bytes\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.heybee.app/v1/experiments/{experiment_id}/upload-url")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content_hash\": \"<string>\",\n \"content_type\": \"audio/mpeg\",\n \"filename\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"size_bytes\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.heybee.app/v1/experiments/{experiment_id}/upload-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content_hash\": \"<string>\",\n \"content_type\": \"audio/mpeg\",\n \"filename\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"size_bytes\": 1\n}"
response = http.request(request)
puts response.read_body{
"expires_in": 123,
"file_path": "<string>",
"upload_url": "<string>",
"bucket": "<string>",
"resumable_url": "<string>",
"upload_headers": {},
"upload_token": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
Request for a presigned upload URL.
Client-side content hash for deduplication and verification
1 - 128MIME type of the file
"audio/mpeg"
Original filename
1 - 255Stable key used to replay upload signing safely
1 - 255Declared byte size, required before upload signing
x >= 0Response
Successful Response
Response with presigned upload URL.
Seconds until the upload URL expires
Path where the file will be stored (use this when creating the sample)
Presigned URL for uploading the file
Storage bucket used in TUS metadata
TUS endpoint for resumable uploads
Show child attributes
Show child attributes
Signed token supplied as x-signature to the TUS endpoint

