Create submission
curl --request POST \
--url https://api.tastelabs.com/design/submissions \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"url": "https://stripe.com"
}
'import requests
url = "https://api.tastelabs.com/design/submissions"
payload = { "url": "https://stripe.com" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: 'https://stripe.com'})
};
fetch('https://api.tastelabs.com/design/submissions', 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.tastelabs.com/design/submissions",
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([
'url' => 'https://stripe.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tastelabs.com/design/submissions"
payload := strings.NewReader("{\n \"url\": \"https://stripe.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.tastelabs.com/design/submissions")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://stripe.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tastelabs.com/design/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://stripe.com\"\n}"
response = http.request(request)
puts response.read_body{
"submission_id": "sub_2f9a1c7b",
"status": "accepted",
"source_url": "https://stripe.com",
"accepted_at": "2026-06-10T12:00:00Z",
"cache_hit": false
}{
"detail": {
"error": "UNAUTHORIZED",
"message": "Bearer token or X-API-Key required"
}
}{
"detail": {
"error": "INSUFFICIENT_CREDITS",
"message": "Not enough credits for this request.",
"balance": 0,
"required": 1
}
}{
"detail": {
"error": "FORBIDDEN",
"message": "This key is not allowed to call this endpoint."
}
}{
"detail": [
{
"loc": [
"body",
"url"
],
"msg": "Field required",
"type": "missing"
}
]
}"Internal Server Error"Brand extractor
Create submission
Creates an extraction job for a single URL. The job runs asynchronously: poll GET /submissions/{id}/result until the status is completed or failed.
Set the map query parameter to true to run map-mode discovery, which crawls the site and submits multiple URLs (up to max_urls).
POST
/
design
/
submissions
Create submission
curl --request POST \
--url https://api.tastelabs.com/design/submissions \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"url": "https://stripe.com"
}
'import requests
url = "https://api.tastelabs.com/design/submissions"
payload = { "url": "https://stripe.com" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: 'https://stripe.com'})
};
fetch('https://api.tastelabs.com/design/submissions', 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.tastelabs.com/design/submissions",
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([
'url' => 'https://stripe.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tastelabs.com/design/submissions"
payload := strings.NewReader("{\n \"url\": \"https://stripe.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.tastelabs.com/design/submissions")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://stripe.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tastelabs.com/design/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://stripe.com\"\n}"
response = http.request(request)
puts response.read_body{
"submission_id": "sub_2f9a1c7b",
"status": "accepted",
"source_url": "https://stripe.com",
"accepted_at": "2026-06-10T12:00:00Z",
"cache_hit": false
}{
"detail": {
"error": "UNAUTHORIZED",
"message": "Bearer token or X-API-Key required"
}
}{
"detail": {
"error": "INSUFFICIENT_CREDITS",
"message": "Not enough credits for this request.",
"balance": 0,
"required": 1
}
}{
"detail": {
"error": "FORBIDDEN",
"message": "This key is not allowed to call this endpoint."
}
}{
"detail": [
{
"loc": [
"body",
"url"
],
"msg": "Field required",
"type": "missing"
}
]
}"Internal Server Error"Authorizations
API key issued by the Taste Engine. Create one in the dashboard at https://engine.tastelabs.com/app/api-keys.
Query Parameters
When true, discover and submit multiple URLs from the site instead of just the one provided.
Maximum number of URLs to discover in map mode. The server clamps this to 200.
Required range:
1 <= x <= 200Body
application/json
Was this page helpful?

