Skip to content

API reference

Feeds and page speed

Sitemaps and RSS for search engines and feed readers, Google Merchant Center's products and local inventory feeds, and the page-speed readings behind the Website speed card. Feeds are plain XML at an address carrying the key, as search engines, feed readers and Merchant Center send no headers; every link in them is on the website address the shop sets on its Storefront API page, and a feed answers 404 until it is set.

Every call sends the shop's key in the X-Storefront-Key header and asks for JSON. Calls marked with a customer token also send the signed-in customer's token. The integration guide explains keys, answers, errors and limits.

Sitemaps

GET

/api/v1/feeds/{key}/sitemap.xml

Scope
catalogue
Customer token
none

Every page of the shop's website: its fixed pages, then each product the website shows, each active category and brand, and each published post, at the paths product/, category/, brands/ and blog/. A product out of stock at the website branch gets priority 0.6, a featured or new one 0.9.

Parameters

key string · path · required
The shop's storefront key, dpk_ followed by its characters.

Point robots.txt or Google Search Console at it, or serve it from the website's own /sitemap.xml.

Example answer
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://www.bikeyard.co.ke/product/agv-k1-helmet</loc>
    <lastmod>2026-10-20T09:14:02+03:00</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
</urlset>
GET

/api/v1/feeds/{key}/sitemap-images.xml

Scope
catalogue
Customer token
none

Google's image sitemap: each product's pictures and each post's image, with the page they are on.

Parameters

key string · path · required
The shop's storefront key.
Example answer
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://www.bikeyard.co.ke/product/agv-k1-helmet</loc>
    <image:image>
      <image:loc>https://media.debianpos.com/products/agv-k1-helmet.jpg</image:loc>
      <image:title>AGV K1 helmet</image:title>
    </image:image>
  </url>
</urlset>

RSS

GET

/api/v1/feeds/{key}/rss/products.xml

Scope
catalogue
Customer token
none

RSS 2.0 of the 50 newest products the website shows, each with a short description, its first picture, its category and its link.

Parameters

key string · path · required
The shop's storefront key.
Example answer
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Bike Yard - All products</title>
    <link>https://www.bikeyard.co.ke/</link>
    <item>
      <title>AGV K1 helmet</title>
      <description>A light, well-vented full-face helmet for the daily ride.</description>
      <link>https://www.bikeyard.co.ke/product/agv-k1-helmet</link>
      <guid>https://www.bikeyard.co.ke/product/agv-k1-helmet</guid>
      <pubDate>Tue, 20 Oct 2026 09:14:02 +0300</pubDate>
      <enclosure url="https://media.debianpos.com/products/agv-k1-helmet.jpg" type="image/jpeg" length="0"/>
      <category>Riding gear</category>
    </item>
  </channel>
</rss>
GET

/api/v1/feeds/{key}/rss/new-products.xml

Scope
catalogue
Customer token
none

The same feed, every product added in the last 30 days.

Parameters

key string · path · required
The shop's storefront key.
GET

/api/v1/feeds/{key}/rss/blogs.xml

Scope
content
Customer token
none

RSS 2.0 of the shop's 50 newest published blog posts, with their image and category. Needs a key with the content scope.

Parameters

key string · path · required
The shop's storefront key.

Google Shopping

GET

/api/v1/feeds/{key}/google-merchant.xml

Scope
catalogue
Customer token
none

Google Merchant Center's products feed: an item for each variant the website offers, at the website branch's price and stock. The id is the variant's SKU (else its own id), so it stays the same as the shop's listings grow; variants of one product share an item_group_id and carry their size and colour. Each has its images (the variant's first), the sale price and its dates while a sale runs or is to come, the brand (else the shop's name), a GTIN from the product or a barcode that is a valid GTIN, the SKU as its MPN, and the Google category set on its category or the parent's, left out when neither has one so Google works it out. Shipping is not sent: set delivery rates in Merchant Center.

Parameters

key string · path · required
The shop's storefront key.

Add it in Merchant Center as a scheduled fetch. It answers 404 until the website address is set, like every feed.

Example answer
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>Bike Yard</title>
    <link>https://www.bikeyard.co.ke/</link>
    <item>
      <g:id>AGV-K1S-M</g:id>
      <g:title>AGV K1 S helmet Matt black M</g:title>
      <g:link>https://www.bikeyard.co.ke/product/agv-k1-s-helmet?variant=01a16356-910e-73f7-b1b8-07effdf04dab</g:link>
      <g:item_group_id>01a15f39-c4db-73fd-bc21-4e33c178eca7</g:item_group_id>
      <g:size>M</g:size>
      <g:color>Matt black</g:color>
      <g:image_link>https://media.debianpos.com/tenants/9d2c/products/agv-k1-s.jpg</g:image_link>
      <g:price>28500.00 KES</g:price>
      <g:availability>in_stock</g:availability>
      <g:condition>new</g:condition>
      <g:brand>AGV</g:brand>
      <g:mpn>AGV-K1S-M</g:mpn>
      <g:google_product_category>2110</g:google_product_category>
      <g:product_type>Riding gear &gt; Helmets</g:product_type>
    </item>
  </channel>
</rss>
GET

/api/v1/feeds/{key}/local-inventory.tsv

Scope
catalogue
Customer token
none

Merchant Center's local inventory feed, tab-separated: a row for each item in the products feed at each branch with a Google store code, at that branch's stock and price. Pickup is offered on what is in stock while Shop pickup is on in Website > Store settings: "same day" until two hours before the shop closes on a trading day, else the next trading day, as "next day" or "3-day".

Parameters

key string · path · required
The shop's storefront key.

Set each branch's store code, exactly as in its Google Business Profile, on the branch's edit page.

Example answer
store_code	id	quantity	price	sale_price	sale_price_effective_date	availability	pickup_method	pickup_SLA
BY-WESTLANDS	AGV-K1S-M	3	28500.00 KES			in_stock	buy	same day
BY-WESTLANDS	AGV-K1S-L	0	28500.00 KES			out_of_stock	not supported	

Page speed

POST

/api/v1/performance/metrics

Scope
content
Customer token
none
Limit
60 a minute

Keeps one Core Web Vital from one visitor's page, as Google's web-vitals library reports it. The shop sees the 75th percentile of LCP, INP and CLS over 28 days on its Storefront API page; readings are kept 90 days. Answers 204 with no body.

Parameters

metric_name string · body · required
CLS, INP, LCP, FCP or TTFB.
metric_id string · body · required
The reading's id from web-vitals, up to 128 characters.
value number · body · required
In milliseconds, or without a unit for CLS.
page_path string · body · required
The page's path, such as /product/agv-k1-helmet.
page_url string · body · required
The page's full address.
is_mobile boolean · body
Whether the visitor is on a phone; the card splits phones from desktops by it.
delta, rating, navigation_type mixed · body
As web-vitals reports them.
referrer, user_agent string · body
The user agent defaults to the request's own.
connection_type, effective_connection_type, save_data mixed · body
From navigator.connection, where the browser has it.
hardware_concurrency, device_memory number · body
From navigator, where the browser has it.
screen_width, screen_height, viewport_width, viewport_height integer · body
In CSS pixels.

The guide's Page speed section has a snippet that sends these from every page.