Map Amazon browse node ids to GS1 GPC codes
curl --request GET \
--url https://api.syntalic.com/v1/reference/classifyimport requests
url = "https://api.syntalic.com/v1/reference/classify"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.syntalic.com/v1/reference/classify', 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.syntalic.com/v1/reference/classify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.syntalic.com/v1/reference/classify"
req, _ := http.NewRequest("GET", url, nil)
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.syntalic.com/v1/reference/classify")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.syntalic.com/v1/reference/classify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"results": [
{
"browse_id": "<string>",
"browse_node": {
"browse_id": "<string>",
"name": "<string>",
"path": "<string>",
"in_serving_catalog": true
},
"gpc": {
"code": "<string>",
"title": "<string>",
"level": "brick",
"segment": "<string>",
"family": "<string>",
"class": "<string>",
"brick": "<string>"
},
"match_precision": "<string>",
"match_source": "<string>",
"inherited_from": "<string>",
"assurance_state": "<string>",
"attribute_count": 123,
"miss": {
"reason": "need_type",
"detail": "<string>",
"hint": "<string>",
"try": [
"<string>"
],
"candidates": [
{
"code": "<string>",
"title": "<string>",
"level": "<string>"
}
]
},
"forms": [
{
"code": "<string>",
"title": "<string>",
"level": "<string>"
}
]
}
],
"gpc_release": "v20260520",
"schema_version": "v3"
}{
"type": "<string>",
"title": "Bad Request",
"status": 400,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Payment Required",
"status": 402,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Not Found",
"status": 404,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Too Many Requests",
"status": 429,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Internal Server Error",
"status": 500,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Reference
Map Amazon browse node ids to GS1 GPC codes
Map Amazon browse node ids or product-type phrases to GS1 GPC codes. Accepts up to 100 comma-separated browse_id values or q phrases per request (not both). Each browse result carries GPC ancestry, match_precision (SKOS-style), match_source (self | inherited), assurance_state, and browse_node { name, path, in_serving_catalog }. Unmapped ids come back with gpc: null so the response lines up 1:1 with the request. Phrase results are certain-or-blank: a hit is always curated. A class-level hit (e.g. coffee → 50202600) includes forms[] — the child bricks; ask the user which form if they need a leaf, or pass the class code as category= (it matches every brick beneath). An empty gpc list always includes miss { reason, detail, hint, try, candidates }. reason is unmatched_phrase, or ambiguous when several GPC types share the head (fish → prepared vs raw). hint is built from this query; try is nearby lexicon phrases; candidates are competing type identities (code + title), not keyword hits like fish oil. Do not treat empty gpc as 'give up' — read miss and either retry or ask which type. Version-pinned: X-GPC-Release and X-Map-Version, not X-Data-Freshness-Hours.
GET
/
v1
/
reference
/
classify
Map Amazon browse node ids to GS1 GPC codes
curl --request GET \
--url https://api.syntalic.com/v1/reference/classifyimport requests
url = "https://api.syntalic.com/v1/reference/classify"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.syntalic.com/v1/reference/classify', 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.syntalic.com/v1/reference/classify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.syntalic.com/v1/reference/classify"
req, _ := http.NewRequest("GET", url, nil)
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.syntalic.com/v1/reference/classify")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.syntalic.com/v1/reference/classify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"results": [
{
"browse_id": "<string>",
"browse_node": {
"browse_id": "<string>",
"name": "<string>",
"path": "<string>",
"in_serving_catalog": true
},
"gpc": {
"code": "<string>",
"title": "<string>",
"level": "brick",
"segment": "<string>",
"family": "<string>",
"class": "<string>",
"brick": "<string>"
},
"match_precision": "<string>",
"match_source": "<string>",
"inherited_from": "<string>",
"assurance_state": "<string>",
"attribute_count": 123,
"miss": {
"reason": "need_type",
"detail": "<string>",
"hint": "<string>",
"try": [
"<string>"
],
"candidates": [
{
"code": "<string>",
"title": "<string>",
"level": "<string>"
}
]
},
"forms": [
{
"code": "<string>",
"title": "<string>",
"level": "<string>"
}
]
}
],
"gpc_release": "v20260520",
"schema_version": "v3"
}{
"type": "<string>",
"title": "Bad Request",
"status": 400,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Payment Required",
"status": 402,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Not Found",
"status": 404,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Too Many Requests",
"status": 429,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"type": "<string>",
"title": "Internal Server Error",
"status": 500,
"detail": "<string>",
"instance": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Query Parameters
Comma-separated Amazon browse node ids (max 100 per request). Provide either browse_id or q, not both.
Pattern:
^\d{1,20}(,\d{1,20})*$Comma-separated product-type phrases to resolve to GPC bricks or classes via the curated lexicon, e.g. 'protein bars' or 'coffee'. Max 100 per request. Certain-or-blank: a phrase the lexicon does not carry returns an empty gpc list plus miss { reason, detail, hint, try, candidates }, never a nearest guess. A class hit includes forms[]. Provide either browse_id or q, not both.

