curl --request GET \
--url https://api.syntalic.com/v1/shopper/price-historyimport requests
url = "https://api.syntalic.com/v1/shopper/price-history"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.syntalic.com/v1/shopper/price-history', 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/shopper/price-history",
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/shopper/price-history"
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/shopper/price-history")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.syntalic.com/v1/shopper/price-history")
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{
"query": "<string>",
"country": "<string>",
"currency": "<string>",
"product_uid": "<string>",
"entity_uid": "<string>",
"product_name": "<string>",
"retailer": "<string>",
"condition": "<string>",
"current_price": 123,
"period_low": 123,
"period_high": 123,
"period_avg": 123,
"is_good_deal": true,
"trend": "<string>",
"insufficient_history": true,
"observation_count": 123,
"scope": "entity",
"member_count": 123,
"window": {
"preset": "<string>",
"from": "2023-12-25",
"to": "2023-12-25",
"granularity": "<string>",
"comparison_from": "2023-12-25",
"comparison_to": "2023-12-25",
"timezone": "UTC"
},
"observations": [
{
"date": "2023-12-25",
"price": 123
}
],
"meta": {
"served_from": "<string>",
"freshness_seconds": 123,
"schema_version": "<string>",
"computed_at": "2023-11-07T05:31:56Z",
"price_observed_at_min": "2023-11-07T05:31:56Z",
"price_observed_at_max": "2023-11-07T05:31:56Z"
}
}{
"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": {}
}
}Get price history for a product over time
Get historical price observations for a product within a date range. Returns current price, period low/high/avg, trend (rising/falling/stable), good-deal flag, and an observation time-series for charting. Includes a nullable gpc block for the resolved product (fail-soft).
curl --request GET \
--url https://api.syntalic.com/v1/shopper/price-historyimport requests
url = "https://api.syntalic.com/v1/shopper/price-history"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.syntalic.com/v1/shopper/price-history', 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/shopper/price-history",
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/shopper/price-history"
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/shopper/price-history")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.syntalic.com/v1/shopper/price-history")
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{
"query": "<string>",
"country": "<string>",
"currency": "<string>",
"product_uid": "<string>",
"entity_uid": "<string>",
"product_name": "<string>",
"retailer": "<string>",
"condition": "<string>",
"current_price": 123,
"period_low": 123,
"period_high": 123,
"period_avg": 123,
"is_good_deal": true,
"trend": "<string>",
"insufficient_history": true,
"observation_count": 123,
"scope": "entity",
"member_count": 123,
"window": {
"preset": "<string>",
"from": "2023-12-25",
"to": "2023-12-25",
"granularity": "<string>",
"comparison_from": "2023-12-25",
"comparison_to": "2023-12-25",
"timezone": "UTC"
},
"observations": [
{
"date": "2023-12-25",
"price": 123
}
],
"meta": {
"served_from": "<string>",
"freshness_seconds": 123,
"schema_version": "<string>",
"computed_at": "2023-11-07T05:31:56Z",
"price_observed_at_min": "2023-11-07T05:31:56Z",
"price_observed_at_max": "2023-11-07T05:31:56Z"
}
}{
"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
Search query (product name, keyword, or brand + model). Required unless product_uid or entity_uid is supplied.
1Stable product identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should pin to this listing instead of re-resolving free text.
1Stable cross-retailer entity identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should resolve within the same physical-product entity.
1Country (us or ca)
us, ca Filter to a specific retailer platform (long-tail specialty stores are also present; any platform key is accepted)
amazon, walmart, target, bestbuy, homedepot, costco, ikea, samsclub, cvs, dillards Historical window preset. Explicit from/to takes precedence and is reported as custom; time_window=custom requires both from and to. Date-only ranges use UTC calendar boundaries with inclusive from and exclusive to.
last_30_days, last_60_days, last_90_days, month_to_date, previous_month, month_over_month, quarter_to_date, custom Start date (ISO 8601, defaults to 30 days ago)
End date (ISO 8601, defaults to now)
Response
Price history
entity, listing Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes

