Feeds
How an AI assistant connects to a store (agent.json)
A small JSON document that tells an AI assistant how to shop the store: the API’s base address, a publishable key to call it with, where the tool list and the OpenAPI specification are, the store’s feeds, and that every checkout is confirmed by the shopper. No API key is required to read it. The key it carries is a production publishable key dedicated to assistants, so the merchant can switch it off on its own.
Published by default; a wholesale store’s stays off until the merchant turns it on, and turning it off deactivates
the key. A storefront serves it at /.well-known/agentic-commerce.json by forwarding that path here. {store} is the
store’s code or id.
GET
/
v1
/
feeds
/
{store}
/
agent.json
How an AI assistant connects to a store (agent.json)
curl --request GET \
--url https://api.tybritelabs.com/v1/feeds/{store}/agent.jsonimport requests
url = "https://api.tybritelabs.com/v1/feeds/{store}/agent.json"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.tybritelabs.com/v1/feeds/{store}/agent.json', 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.tybritelabs.com/v1/feeds/{store}/agent.json",
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.tybritelabs.com/v1/feeds/{store}/agent.json"
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.tybritelabs.com/v1/feeds/{store}/agent.json")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tybritelabs.com/v1/feeds/{store}/agent.json")
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{
"version": 1,
"store": {
"name": "Galactic Core Store",
"website": "https://tybritelabs.com",
"currency": "EUR",
"assistant": null
},
"api": {
"base_url": "https://api.tybritelabs.com",
"publishable_key": "tybrite_pk_live_YOUR_API_KEY",
"authentication": "Send the key as \"Authorization: Bearer <key>\".",
"capabilities": "https://api.tybritelabs.com/v1/agent/capabilities",
"openapi": "https://docs.tybritelabs.com/openapi.yaml"
},
"feeds": {
"llms_txt": "https://api.tybritelabs.com/v1/feeds/GAL001/llms.txt",
"llms_full_txt": "https://api.tybritelabs.com/v1/feeds/GAL001/llms-full.txt",
"products_json": null
},
"checkout": {
"human_confirmation_required": true,
"intents": "https://api.tybritelabs.com/v1/agent/checkout-intents"
}
}{
"error": {
"code": "feed_not_available_on_trial",
"message": "This is available on paid plans."
}
}{
"error": {
"code": "not_found",
"message": "This store does not publish a descriptor for AI assistants"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests for this API key. Please slow down and try again shortly.",
"remaining": 0,
"reset": 1706198400
}
}⌘I
How an AI assistant connects to a store (agent.json)
curl --request GET \
--url https://api.tybritelabs.com/v1/feeds/{store}/agent.jsonimport requests
url = "https://api.tybritelabs.com/v1/feeds/{store}/agent.json"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.tybritelabs.com/v1/feeds/{store}/agent.json', 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.tybritelabs.com/v1/feeds/{store}/agent.json",
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.tybritelabs.com/v1/feeds/{store}/agent.json"
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.tybritelabs.com/v1/feeds/{store}/agent.json")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tybritelabs.com/v1/feeds/{store}/agent.json")
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{
"version": 1,
"store": {
"name": "Galactic Core Store",
"website": "https://tybritelabs.com",
"currency": "EUR",
"assistant": null
},
"api": {
"base_url": "https://api.tybritelabs.com",
"publishable_key": "tybrite_pk_live_YOUR_API_KEY",
"authentication": "Send the key as \"Authorization: Bearer <key>\".",
"capabilities": "https://api.tybritelabs.com/v1/agent/capabilities",
"openapi": "https://docs.tybritelabs.com/openapi.yaml"
},
"feeds": {
"llms_txt": "https://api.tybritelabs.com/v1/feeds/GAL001/llms.txt",
"llms_full_txt": "https://api.tybritelabs.com/v1/feeds/GAL001/llms-full.txt",
"products_json": null
},
"checkout": {
"human_confirmation_required": true,
"intents": "https://api.tybritelabs.com/v1/agent/checkout-intents"
}
}{
"error": {
"code": "feed_not_available_on_trial",
"message": "This is available on paid plans."
}
}{
"error": {
"code": "not_found",
"message": "This store does not publish a descriptor for AI assistants"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests for this API key. Please slow down and try again shortly.",
"remaining": 0,
"reset": 1706198400
}
}
