Аутентификация ShopStory Public API
По состоянию на 24 февраля 2026 для production-интеграций используется applicationId в query-параметрах.
- cURL
- JavaScript fetch
- Axios
request-streams.sh
curl -s "https://app.shopstory.live/v3/streams?applicationId=<your-app-id>&limit=10"
request-streams.js
const appId = process.env.SHOPSTORY_APPLICATION_ID;
const response = await fetch(
`https://app.shopstory.live/v3/streams?applicationId=${appId}&limit=10`
);
const payload = await response.json();
request-streams-axios.js
import axios from 'axios';
const appId = process.env.SHOPSTORY_APPLICATION_ID;
const { data } = await axios.get('https://app.shopstory.live/v3/streams', {
params: { applicationId: appId, limit: 10 },
});
Что обязательно
- Держать
applicationIdна серверной стороне (proxy/backend). - Не публиковать
applicationIdв клиентском JS-коде. - Проверять в ответе и HTTP-код, и
statusвнутри envelope.
Минимальный proxy-шаблон (Node.js)
- Express
- Next.js Route Handler
shopstory-auth-proxy-express.js
import express from 'express';
const app = express();
const APP_ID = process.env.SHOPSTORY_APPLICATION_ID;
app.get('/api/shopstory/streams', async (req, res) => {
const search = new URLSearchParams({
applicationId: APP_ID,
limit: String(req.query.limit ?? 12),
offset: String(req.query.offset ?? 0),
});
const upstream = await fetch(`https://app.shopstory.live/v3/streams?${search}`);
const payload = await upstream.json();
res.status(200).json(payload);
});
app/api/shopstory/streams/route.ts
import { NextResponse } from 'next/server';
const APP_ID = process.env.SHOPSTORY_APPLICATION_ID;
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const upstreamParams = new URLSearchParams({
applicationId: APP_ID ?? '',
limit: searchParams.get('limit') ?? '10',
offset: searchParams.get('offset') ?? '0',
});
const upstream = await fetch(`https://app.shopstory.live/v3/streams?${upstreamParams}`);
const payload = await upstream.json();
return NextResponse.json(payload, { status: 200 });
}
Реальное поведение ошибок
Для /v3/streams ошибки валидации часто приходят как:
- HTTP
200; status: 400внутри JSON;body.errorкак строка ("invalid"), а не только объект.
Пример:
auth-error-envelope.json
{
"status": 400,
"body": {
"error": "invalid",
"message": "invalid applicationId"
},
"serverTime": "2026-02-24T14:20:01.108672592Z"
}
Bearer токены
Bearer-модель запланирована на лето 2026. До официального релиза для production-интеграций используется applicationId.
Практика эксплуатации
- Логируйте долю ответов с
status != 200. - Включите rate limiting и кэш на своей стороне.
- При утечке или подозрительной активности запрашивайте ротацию
applicationIdчерез поддержку.