Register uploaded seed key
curl --request POST \
--url https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>"
}
'import requests
url = "https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register"
payload = { "key": "<string>" }
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({key: '<string>'})
};
fetch('https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register', 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.yourproducthere.ai/v1/digital-samples/{id}/seed/register",
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([
'key' => '<string>'
]),
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.yourproducthere.ai/v1/digital-samples/{id}/seed/register"
payload := strings.NewReader("{\n \"key\": \"<string>\"\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.yourproducthere.ai/v1/digital-samples/{id}/seed/register")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register")
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 \"key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"digitalSample": {
"id": "d3b07384-d113-4956-a5e2-416b2a41bc3c",
"orgId": "org_123abc",
"title": "Summer Vacation",
"description": "Outdoor digital sample for summer looks",
"positiveRenderPrompt": "cinematic sunset, detailed face, 8k",
"negativeRenderPrompt": "blurry, low quality, bad hands",
"renderSeedFps": 30,
"renderVoiceConversionEnabled": true,
"renderEntryWidth": 720,
"seedVideoUrl": "https://cdn.example.com/seeds/summer.mp4",
"signedSeedVideoUrl": "https://account.r2.cloudflarestorage.com/bucket/seed-assets/sample.mp4?X-Amz-Signature=...",
"seedAssetPending": false,
"seedVideoDurationSec": 15,
"status": "ACTIVE",
"videoReviewStatus": "APPROVED",
"accountToken": "brand_nike",
"productToken": "sku_air_max_90",
"createdAt": "2026-06-20T12:00:00Z",
"updatedAt": "2026-06-20T12:05:00Z"
}
}
Digital Samples
Register uploaded seed key
Associate your uploaded seed video key with the digital sample. Under the public API, this endpoint performs an asynchronous validation of the uploaded file’s format and duration, automatically approves it, and activates the sample.
POST
/
digital-samples
/
{id}
/
seed
/
register
Register uploaded seed key
curl --request POST \
--url https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>"
}
'import requests
url = "https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register"
payload = { "key": "<string>" }
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({key: '<string>'})
};
fetch('https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register', 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.yourproducthere.ai/v1/digital-samples/{id}/seed/register",
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([
'key' => '<string>'
]),
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.yourproducthere.ai/v1/digital-samples/{id}/seed/register"
payload := strings.NewReader("{\n \"key\": \"<string>\"\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.yourproducthere.ai/v1/digital-samples/{id}/seed/register")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.yourproducthere.ai/v1/digital-samples/{id}/seed/register")
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 \"key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"digitalSample": {
"id": "d3b07384-d113-4956-a5e2-416b2a41bc3c",
"orgId": "org_123abc",
"title": "Summer Vacation",
"description": "Outdoor digital sample for summer looks",
"positiveRenderPrompt": "cinematic sunset, detailed face, 8k",
"negativeRenderPrompt": "blurry, low quality, bad hands",
"renderSeedFps": 30,
"renderVoiceConversionEnabled": true,
"renderEntryWidth": 720,
"seedVideoUrl": "https://cdn.example.com/seeds/summer.mp4",
"signedSeedVideoUrl": "https://account.r2.cloudflarestorage.com/bucket/seed-assets/sample.mp4?X-Amz-Signature=...",
"seedAssetPending": false,
"seedVideoDurationSec": 15,
"status": "ACTIVE",
"videoReviewStatus": "APPROVED",
"accountToken": "brand_nike",
"productToken": "sku_air_max_90",
"createdAt": "2026-06-20T12:00:00Z",
"updatedAt": "2026-06-20T12:05:00Z"
}
}
Authorizations
Your organization API key starting with yph_sk_live_…
Path Parameters
Body
application/json
The unique secure object key returned in the presigned URL generation response.
Response
Registered successfully
Digital sample resource returned by GET, POST, and PATCH.
- Write-only (POST/PATCH body):
seedVideoUrl— your public HTTPS source URL. YPH ingests a copy into private storage. Use the presigned upload flow (/seed/upload-url+/seed/register) when uploading directly. - Read-only (responses):
signedSeedVideoUrl— short-lived presigned GET URL for preview/download. Never send this back on PATCH. - Echo (responses):
seedVideoUrlrepeats the external source URL you submitted (null when the seed was uploaded via presigned PUT or created in the YPH app). - Integrator identity:
accountTokenidentifies the brand (your marketplace advertiser).productTokenis your internal catalog product id. See Integrator tokens. - Credits: Org credit balance is not on this resource — use
GET /account(creditBalance).
Show child attributes
Show child attributes
Example:
{ "id": "d3b07384-d113-4956-a5e2-416b2a41bc3c", "orgId": "org_123abc", "title": "Summer Vacation", "description": "Outdoor digital sample for summer looks", "positiveRenderPrompt": "cinematic sunset, detailed face, 8k", "negativeRenderPrompt": "blurry, low quality, bad hands", "renderSeedFps": 30, "renderVoiceConversionEnabled": true, "renderEntryWidth": 720, "seedVideoUrl": "https://cdn.example.com/seeds/summer.mp4", "signedSeedVideoUrl": "https://account.r2.cloudflarestorage.com/bucket/seed-assets/sample.mp4?X-Amz-Signature=...", "seedAssetPending": false, "seedVideoDurationSec": 15, "status": "ACTIVE", "videoReviewStatus": "APPROVED", "accountToken": "brand_nike", "productToken": "sku_air_max_90", "createdAt": "2026-06-20T12:00:00Z", "updatedAt": "2026-06-20T12:05:00Z" }
