4.5 KiB
4.5 KiB
Bootstrap API Specification
1. Endpoint
- Method:
GET - Path:
/bootstrap - Auth: public (or optional lightweight token), tenant-scoped by domain
2. Domain-Based Request Flow
- Receive request with host.
- Resolve tenant by host.
- Load tenant config aggregate from CONFIG DOMAIN.
- Build versioned bootstrap payload.
- Return public config JSON.
Failure responses:
404unknown tenant domain403tenant inactive/suspended500config assembly failure
3. Production-Like Sample Response
{
"schemaVersion": "2.1.0",
"generatedAt": "2026-07-05T10:30:00Z",
"tenant": {
"id": "a95c2f1b-58c1-4d8b-b35b-82e5bdf14321",
"slug": "alpha-market",
"code": "ALPHA",
"host": "shop.alpha.example.com",
"name": "Alpha Marketplace",
"defaultLocale": "en",
"supportedLocales": ["en", "ru", "hy"],
"defaultCurrency": "USD",
"supportedCurrencies": ["USD", "EUR", "AMD"],
"timezone": "UTC"
},
"theme": {
"themeId": "alpha-light",
"mode": "light",
"palette": {
"primary": "#2F6F6D",
"secondary": "#9FB8B6",
"accent": "#B5D7D4",
"textPrimary": "#1E3C38",
"textSecondary": "#5E7471",
"backgroundPrimary": "#FFFFFF",
"backgroundSecondary": "#F6F8F8",
"border": "#D7E0DF"
}
},
"layout": {
"type": "sidebar-left",
"options": {
"sidebarSticky": true,
"heroEnabled": true
}
},
"widgetRegistry": {
"manifestUrl": "/config/widgets/manifest.json"
},
"pages": [
{
"id": "page-home",
"key": "home",
"route": { "path": "/", "exact": true },
"layout": { "type": "carousel-home" },
"sections": [
{
"id": "sec-hero",
"type": "hero",
"order": 1,
"widgets": [
{
"id": "w-hero-main",
"type": "hero",
"version": "1.0.0",
"order": 1,
"padding": "0.5rem 0",
"visibility": { "desktop": true, "tablet": true, "mobile": true },
"props": { "title": "Welcome", "subtitle": "B2B Catalog" }
}
]
}
]
}
],
"footer": {
"paymentIcons": [
{ "src": "/assets/payments/visa.svg", "alt": "Visa", "width": 40, "height": 28 },
{ "src": "/assets/payments/mastercard.svg", "alt": "Mastercard", "width": 40, "height": 28 }
],
"copyrightText": {
"en": "© 2026 Alpha Marketplace. All rights reserved.",
"ru": "© 2026 Alpha Marketplace. Все права защищены.",
"hy": "© 2026 Alpha Marketplace. Բոլոր իրավունքները պաշտպանված են:"
},
"legalPageKeys": ["about-us", "privacy-policy", "terms-of-service"]
},
"localization": {
"defaultLocale": "en",
"supportedLocales": ["en", "ru", "hy"],
"currencyByLocale": {
"en": "USD",
"ru": "USD",
"hy": "AMD"
}
},
"apiEndpoints": {
"bootstrap": { "path": "/bootstrap", "method": "GET", "timeoutMs": 5000 },
"website": {
"items": { "path": "/items", "method": "GET" },
"categories": { "path": "/categories", "method": "GET" },
"cart": { "path": "/cart", "method": "GET" },
"orders": { "path": "/orders", "method": "POST" },
"payments": { "path": "/payments", "method": "POST" }
}
}
}
4. Field-by-Field Meaning
schemaVersion: bootstrap contract version used by frontend parser.generatedAt: payload generation timestamp.tenant: public tenant identity and locale/currency defaults.theme: UI tokens; no business logic.layout.type: global layout mode. Supported:default,sidebar-left,carousel-home,minimal.widgetRegistry.manifestUrl: source for widget definitions/components mapping metadata.pages: route-driven composition graph.footer: footer links/icons/legal references.localization: supported locales and currency mapping.apiEndpoints: public endpoint mapping for frontend clients.
5. Versioning Strategy
Use semantic versioning in schemaVersion:
- Patch (
2.1.1): non-breaking metadata additions. - Minor (
2.2.0): additive fields/sections with backward compatibility. - Major (
3.0.0): breaking structural changes.
Operational rules:
- Keep old parser compatibility for at least one minor line.
- Publish migration notes for any major bump.
- Validate payload against schema before release.
6. Security Rules
Never include in bootstrap:
- private keys
- internal credentials
- admin secrets
- payment signing material
Bootstrap is strictly public runtime configuration.