← Back to blog
TutorialNov 15, 2025 · 9 min read
Building a Release Calendar with /releases/upcoming
The /v1/releases/upcoming endpoint returns sneakers with confirmed future release dates. Here's how to turn that into a release calendar in your app.
Basic fetch
const res = await fetch(
'https://graildata-api-production.up.railway.app/v1/releases/upcoming?limit=50',
{ headers: { 'X-API-Key': process.env.GRAILDATA_API_KEY! } }
);
const { items } = await res.json();Each item is a full sneaker object with release_date, release_type, release_regions, and hype_score fields.
Grouping by date
const byDate = items.reduce((acc, sneaker) => {
const date = sneaker.release_date ?? 'TBA';
if (!acc[date]) acc[date] = [];
acc[date].push(sneaker);
return acc;
}, {} as Record<string, typeof items>);
const sorted = Object.entries(byDate).sort(([a], [b]) => {
if (a === 'TBA') return 1;
if (b === 'TBA') return -1;
return new Date(a).getTime() - new Date(b).getTime();
});Timezone edge cases
Release dates are stored as calendar dates (2026-03-15), not timestamps. Nike SNKRS drops at 10am in the buyer's local time. Don't assume UTC — display the date without a time component unless you know the exact drop time for that release.
Filtering by region
Use release_regions to filter drops relevant to your users. A global release includes all regions; a US-only SNKRS exclusive won't include EU or APAC.
const usDrops = items.filter(s => s.release_regions.includes('US'));Ready to start building?