Developing a White-Label AI Analytics Platform for Resellers
White-label AI analytics is a ready-made product that a reseller (agency, consulting company, or SaaS vendor) sells to its clients under its own brand. The reseller doesn't develop the AI functionality itself, but rather integrates the ready-made solution into its product.
Architecture for the reseller model
Технологический провайдер (мы)
↓ [White-Label SDK + API]
Реселлер (агентство, ISV)
↓ [Branded platform]
Конечные клиенты реселлера
Three levels of customization:
- Branding only: The reseller changes the logo, colors, and domain. Minimal effort.
- Embedded widgets: The reseller embeds individual components (dashboards, chatbots) into their product via iframe or JavaScript SDK.
- Full API integration: The reseller builds their own UI on top of our API. Maximum flexibility.
JavaScript SDK for embedded analytics
// Клиентский SDK для реселлера
class AIAnalyticsWidget {
constructor(config: WidgetConfig) {
this.apiKey = config.apiKey;
this.tenantId = config.tenantId;
this.theme = config.theme;
this.container = config.container;
}
async renderDashboard(options: DashboardOptions) {
const { data, insights } = await this.fetchAnalytics(options);
const widget = document.createElement('div');
widget.innerHTML = await this.renderTemplate('analytics-dashboard', {
data, insights, theme: this.theme
});
this.container.appendChild(widget);
this.applyCustomTheme(this.theme);
}
private applyCustomTheme(theme: Theme) {
// Инъекция CSS переменных для брендинга
const style = document.createElement('style');
style.textContent = `
.ai-analytics-widget {
--primary-color: ${theme.primaryColor};
--font-family: ${theme.fontFamily};
--logo-url: url('${theme.logoUrl}');
}
`;
document.head.appendChild(style);
}
}
// Использование реселлером
const analytics = new AIAnalyticsWidget({
apiKey: 'reseller_key_...',
tenantId: 'client_123',
container: document.getElementById('analytics-container'),
theme: {
primaryColor: '#E67E22', // Цвета бренда клиента
fontFamily: 'Roboto, sans-serif',
logoUrl: 'https://client.com/logo.png'
}
});
analytics.renderDashboard({ period: '30d', metrics: ['revenue', 'churn'] });
Reseller Management Portal
# Реселлер управляет своими клиентами (sub-tenants)
class ResellerPortal:
async def create_client(self, reseller_id: str,
client_data: ClientCreateRequest) -> Client:
# Проверка квот реселлера
reseller = await self.db.get_reseller(reseller_id)
if reseller.active_clients >= reseller.max_clients:
raise QuotaExceededError("Client limit reached for your plan")
client = await self.db.create_client({
'reseller_id': reseller_id,
'name': client_data.name,
'plan': client_data.plan,
# Наценка реселлера поверх базового тарифа
'pricing_multiplier': reseller.markup_multiplier,
'allowed_features': self.get_plan_features(client_data.plan)
})
# Выдача API ключей клиенту
api_key = await self.generate_scoped_api_key(
client.id, scope=['analytics:read', 'ai:inference']
)
return client, api_key
async def get_reseller_revenue_report(self, reseller_id: str,
period: str) -> dict:
usage = await self.billing.get_usage(reseller_id, period)
return {
'total_client_revenue': usage.total_billed,
'platform_cost': usage.total_cost, # Наш тариф для реселлера
'reseller_margin': usage.total_billed - usage.total_cost,
'top_clients': usage.top_clients_by_usage[:10]
}
SLA Management for Resellers
The reseller is responsible for the SLA to its customers, and the provider is responsible for the SLA to the reseller. Liabilities are divided as follows:
- The provider guarantees 99.95% API uptime
- The reseller independently establishes SLA with clients (usually 99.5-99.9%)
- Reseller monitoring dashboard shows current status, incidents, and rolling uptime
Business model: The reseller pays us a wholesale rate (e.g., $5 for 1M tokens) and sells to customers for $15—a 67% margin. Development time for a full reseller platform: 4-5 months.







