curl --request GET \
--url https://api.recoupable.dev/api/content/validate \
--header 'x-api-key: <api-key>'import requests
url = "https://api.recoupable.dev/api/content/validate"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.recoupable.dev/api/content/validate', 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.recoupable.dev/api/content/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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.recoupable.dev/api/content/validate"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.recoupable.dev/api/content/validate")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/content/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"ready": true,
"artist_account_id": "1873859c-dd37-4e9a-9bac-80d3558527a9",
"songs": 17,
"templates": [
"artist-caption-bedroom",
"artist-caption-outside",
"artist-caption-stage"
],
"checks": {
"face_guide": {
"status": "ok"
},
"artist_context": {
"status": "ok"
},
"audience_context": {
"status": "ok"
},
"songs": {
"status": "ok",
"count": 17
}
},
"missing": [
{
"file": "context/images/face-guide.png",
"severity": "required",
"description": "Face guide image used for AI image generation",
"fix": "Generate a face guide using fal-ai/nano-banana-pro/edit with 2-3 reference photos of the artist"
}
]
}{
"error": "Unauthorized"
}{
"error": "Unauthorized"
}{
"error": "Unauthorized"
}Validate Artist
Check whether an artist has all the required files to run the content creation pipeline. Returns a structured report of each required and recommended file with its status. Required files must be present or the pipeline will fail. Recommended files improve output quality but are not strictly necessary. Provide artist_account_id as a query parameter.
curl --request GET \
--url https://api.recoupable.dev/api/content/validate \
--header 'x-api-key: <api-key>'import requests
url = "https://api.recoupable.dev/api/content/validate"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.recoupable.dev/api/content/validate', 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.recoupable.dev/api/content/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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.recoupable.dev/api/content/validate"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.recoupable.dev/api/content/validate")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/content/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"ready": true,
"artist_account_id": "1873859c-dd37-4e9a-9bac-80d3558527a9",
"songs": 17,
"templates": [
"artist-caption-bedroom",
"artist-caption-outside",
"artist-caption-stage"
],
"checks": {
"face_guide": {
"status": "ok"
},
"artist_context": {
"status": "ok"
},
"audience_context": {
"status": "ok"
},
"songs": {
"status": "ok",
"count": 17
}
},
"missing": [
{
"file": "context/images/face-guide.png",
"severity": "required",
"description": "Face guide image used for AI image generation",
"fix": "Generate a face guide using fal-ai/nano-banana-pro/edit with 2-3 reference photos of the artist"
}
]
}{
"error": "Unauthorized"
}{
"error": "Unauthorized"
}{
"error": "Unauthorized"
}Authorizations
Your Recoup API key. Learn more.
Query Parameters
UUID of the artist account to validate. Use GET /api/artists to find artist account IDs.
"1873859c-dd37-4e9a-9bac-80d3558527a9"
Response
Validation completed. Check the ready field to determine if the artist can run the pipeline.
Validation report for an artist's content creation readiness.
true if the artist has all required files and the pipeline can run. false if required files are missing.
true
UUID of the artist account that was validated
"1873859c-dd37-4e9a-9bac-80d3558527a9"
Number of songs found in the artist's songs/ directory
17
Available templates that can be used with this artist
[
"artist-caption-bedroom",
"artist-caption-outside",
"artist-caption-stage"
]
Per-file validation results. Only present when ready is true.
Show child attributes
Show child attributes
List of missing files with severity and fix instructions. Only present when ready is false.
Show child attributes
Show child attributes
Was this page helpful?
