Endpoint
- URL:
GET https://sse.kicks.dev/v1/stream
- Protocol:
text/event-stream
- Authentication:
Authorization: Bearer YOUR_API_KEY
- Plan requirement: Enterprise only
The connection remains open and continuously streams events as they occur.
Selecting Topics
SSE currently supports price updates for:
- StockX (all markets)
- GOAT (all markets)
You must specify which markets to listen to using the Topics header.
Topics: price:stockx:us, price:stockx:uk, price:goat:us, price:goat:nl
Rules
- Format:
[event_type]:[source]:[country_code]
- Lowercase only
- Comma-separated
Example request
GET https://sse.kicks.dev/v1/stream
Authorization: Bearer YOUR_API_KEY
Topics: price:goat:uk, price:goat:us, price:stockx:us
KicksDB is primarily a product catalog, not a tick-level trading feed.
Some markets may not emit events for extended periods depending on refresh cycles.
Refer to sources and markets for refresh expectations.
Event Format
Each event follows the standard SSE format:
id: 152
event: price:goat:uk
data: { ...json payload... }
Fields
id — unique incremental event ID
event — topic name (source:market)
data — JSON payload
Example Payload
{
"source": "goat",
"product_id": "583450",
"variant_id": "8",
"size": "8",
"price": 150,
"currency": "GBP",
"market": "UK",
"sku": "FW3725",
"timestamp": "2026-02-24T23:46:11.910541096Z"
}
Node.js Example
Node 18+ has native fetch support.
This example uses the eventsource package for automatic reconnection handling.
Install
Example Listener
import { EventSource } from "eventsource";
const topics = ["price:stockx:us", "price:goat:uk"];
const es = new EventSource("https://sse.kicks.dev/v1/stream", {
fetch: (input, init) =>
fetch(input, {
...init,
headers: {
...(init.headers || {}),
Authorization: `Bearer [YOUR_API_KEY]`,
Topics: topics.join(","),
},
})
});
es.onopen = () => {
console.log("Connected to KicksDB SSE");
};
es.addEventListener("price:goat:uk", (event) => {
const payload = JSON.parse(event.data);
console.log("GOAT UK update:");
console.log(payload);
});
es.onerror = (err) => {
console.error("SSE connection error:", err);
};
Reconnection & Resume (Recommended)
SSE supports automatic reconnection.
For production systems:
- Persist the last processed
id
- Reconnect with
Last-Event-ID header
- Use exponential backoff if connection fails repeatedly
- Run listener in a dedicated worker process
Only the 5,000 last events are retryable.
Testing with CLI
You can test streaming manually:
http --stream https://sse.kicks.dev/v1/stream \
"Authorization: Bearer YOUR_API_KEY" \
"Topics: price:goat:uk"
If successful, you’ll receive a continuous stream:
id: 152
event: goat:uk
data: { ... }
id: 153
event: goat:uk
data: { ... }