curl --request GET \
--url https://api.unif.dev/v1/lists/{list_id}/items \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.unif.dev/v1/lists/{list_id}/items"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.unif.dev/v1/lists/{list_id}/items', 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.unif.dev/v1/lists/{list_id}/items",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.unif.dev/v1/lists/{list_id}/items"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.unif.dev/v1/lists/{list_id}/items")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unif.dev/v1/lists/{list_id}/items")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"has_more": true,
"data": [
{
"id": "shp_01k3m9x7v2q8r4t6y0b1n5d7fa",
"object": "shop",
"channel": "tiktok_shop",
"market": "US",
"name": "GlowLab",
"handle": "glowlab",
"url": "<string>",
"logo_url": "<string>",
"seller_type": "brand",
"categories": [
{
"id": "cat_beauty_personal_care",
"name": "Beauty & Personal Care",
"path": [
"<string>"
]
}
],
"rating": 2.5,
"reviews_count": 123,
"products_count": 123,
"opened_at": "2023-12-25",
"metrics": {
"revenue": 123,
"units_sold": 123,
"avg_unit_price": 123,
"revenue_growth_rate": 123,
"revenue_by_source": {
"video": 123,
"live": 123,
"mall": 123,
"search": 123
},
"products_sold_count": 123,
"creators_count": 123,
"videos_count": 123,
"livestreams_count": 123
},
"period": {
"start": "2023-12-25",
"end": "2023-12-25",
"granularity": "day",
"adjusted": true
},
"currency": "<string>",
"meta": {
"refreshed_at": "2023-11-07T05:31:56Z",
"completeness": 0.5,
"missing_fields": [
"<string>"
]
}
}
],
"next_cursor": "<string>",
"total_count": 123,
"period": {
"start": "2023-12-25",
"end": "2023-12-25",
"granularity": "day",
"adjusted": true
},
"currency": "<string>"
}{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}List items in a list
Returns the full normalized record for every entity in the list, measured over the requested period.
curl --request GET \
--url https://api.unif.dev/v1/lists/{list_id}/items \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.unif.dev/v1/lists/{list_id}/items"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.unif.dev/v1/lists/{list_id}/items', 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.unif.dev/v1/lists/{list_id}/items",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.unif.dev/v1/lists/{list_id}/items"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.unif.dev/v1/lists/{list_id}/items")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unif.dev/v1/lists/{list_id}/items")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"has_more": true,
"data": [
{
"id": "shp_01k3m9x7v2q8r4t6y0b1n5d7fa",
"object": "shop",
"channel": "tiktok_shop",
"market": "US",
"name": "GlowLab",
"handle": "glowlab",
"url": "<string>",
"logo_url": "<string>",
"seller_type": "brand",
"categories": [
{
"id": "cat_beauty_personal_care",
"name": "Beauty & Personal Care",
"path": [
"<string>"
]
}
],
"rating": 2.5,
"reviews_count": 123,
"products_count": 123,
"opened_at": "2023-12-25",
"metrics": {
"revenue": 123,
"units_sold": 123,
"avg_unit_price": 123,
"revenue_growth_rate": 123,
"revenue_by_source": {
"video": 123,
"live": 123,
"mall": 123,
"search": 123
},
"products_sold_count": 123,
"creators_count": 123,
"videos_count": 123,
"livestreams_count": 123
},
"period": {
"start": "2023-12-25",
"end": "2023-12-25",
"granularity": "day",
"adjusted": true
},
"currency": "<string>",
"meta": {
"refreshed_at": "2023-11-07T05:31:56Z",
"completeness": 0.5,
"missing_fields": [
"<string>"
]
}
}
],
"next_cursor": "<string>",
"total_count": 123,
"period": {
"start": "2023-12-25",
"end": "2023-12-25",
"granularity": "day",
"adjusted": true
},
"currency": "<string>"
}{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Authorizations
Send your workspace API key as a bearer token:
Authorization: Bearer unif_sk_live_...
Keys are scoped to a single workspace. See Authentication.
Path Parameters
Query Parameters
A named period. Mutually exclusive with period_start and period_end.
last_7d, last_30d, last_90d, last_180d, month_to_date, previous_month Convert every monetary field to this ISO 4217 currency.
"USD"
"GBP"
"IDR"
How many objects to return per page.
1 <= x <= 100The next_cursor from a previous response.
Response
List items.
"list"Whether another page exists.
A normalized entity of the list's entity_type.
- Option 1
- Option 2
- Option 3
Hide child attributes
Hide child attributes
"shp_01k3m9x7v2q8r4t6y0b1n5d7fa"
"shop"A sales channel — the commerce surface a request is about. Behind each channel is a cascade of data sources, tried in cost order until one verifies; the roster is published, but which source answered a given row is not carried in the response, so the cascade can be re-tuned without breaking your code.
tiktok_shop "tiktok_shop"
An ISO 3166-1 alpha-2 country code identifying a channel storefront.
US, GB, IE, ES, FR, DE, IT, ID, TH, VN, MY, PH, SG, JP, BR, MX "US"
"GlowLab"
"glowlab"
Normalized seller classification.
brand, reseller, cross_border, local, unknown 0 <= x <= 5Shop performance over the requested period, in the requested currency.
Hide child attributes
Hide child attributes
Gross merchandise value attributed to the shop.
Change in revenue against the immediately preceding period of equal length, as a ratio. 0.25 is +25%.
Distinct products with at least one sale.
Distinct creators who drove attributed sales.
The concrete window a request was measured over, after any preset was expanded and any channel-specific snapping was applied. Always read this rather than assuming you got back exactly the dates you asked for.
Hide child attributes
Hide child attributes
The smallest bucket the channel reports for this market.
day, week, month True when the requested dates were snapped to the nearest boundary the channel supports. See Periods and currency.
How current and how complete this record is.
Pass to cursor to fetch the next page. Null on the last page.
Approximate number of matches. Null when the result set is too large to count exactly.
The concrete window a request was measured over, after any preset was expanded and any channel-specific snapping was applied. Always read this rather than assuming you got back exactly the dates you asked for.
Hide child attributes
Hide child attributes
The smallest bucket the channel reports for this market.
day, week, month True when the requested dates were snapped to the nearest boundary the channel supports. See Periods and currency.
Was this page helpful?