Coûts opérationnels
Budget mensuel prévisionnel, stack Dokploy + open source + IA
Reciprok est volontairement frugal côté infra : tout ce qui peut être self-host l'est, ce qui reste payant est ce qui apporte une vraie valeur (Claude, Whisper, Resend). Cette page liste les coûts attendus, comment les surveiller, et comment éviter les dérapages.
Disclaimer : les prix listés sont ceux affichés par les providers en avril 2026. Toujours vérifier sur la page tarifs officielle avant chaque déploiement.
Estimation mensuelle (volume cible)
Hypothèses :
- ~100 demandes / mois traitées
- ~1 000 messages chat IA / mois (10 par demande en moyenne)
- ~50 audios uploadés / mois (membres + vocaux organisateurs)
- 70 000 membres en base
- ~3-5 utilisateurs internes
| Poste | Provider | Détail | Coût mensuel |
|---|---|---|---|
| Hébergement app + DB + monitoring | Hostinger VPS (Dokploy) | 1 VPS suffit (~16 GB RAM, 4 vCPU) | ~12-20€ |
| LLM Claude | Anthropic | 1000 messages × ~3000 tokens in/out, prompt caching activé | ~50-80€ |
| Embeddings | OpenAI text-embedding-3-small | Refresh members + queries | ~3-5€ |
| Whisper | OpenAI | 50 audios × 5 min en moyenne | ~10€ |
| Resend | < 3000 emails (free tier) | 0€ | |
| Meta Cloud API | ~200 conversations utilitaires | ~5-10€ | |
| Storage | Cloudflare R2 | Photos, audios, backups (~10 GB) | 0€ (free tier 10 GB) |
| Push notifications | Web Push natif | - | 0€ |
| Monitoring | Grafana / Loki / Prometheus / GlitchTip / Uptime Kuma (self-host) | - | 0€ |
| DNS | Cloudflare | - | 0€ |
| TOTAL | ~80-125€/mois |
Pas de Neon, pas de Vercel, pas de Sentry SaaS, pas de Datadog, pas de Twilio. La quasi-totalité du budget va dans les services à valeur ajoutée IA.
Scénario "ça décolle"
Si l'usage explose (chaque utilisateur converse intensivement, l'IA fait beaucoup de tool calls par message) :
| Poste | Volume × N | Coût mensuel |
|---|---|---|
| Claude | 5000 messages × tool calls profonds | ~300-400€ |
| Embeddings | 70k members × 4 refresh / mois | ~10€ |
| Whisper | 200 audios | ~40€ |
| Resend | passage plan Pro 50k mails | ~20€ |
| WhatsApp Meta | 1000 conversations | ~30€ |
| VPS plus gros (32 GB) | upgrade Hostinger | ~30€ |
| Total ajusté | ~430-530€/mois |
Garde-fou principal : si on dépasse 200€ de coût IA / mois, alerte automatique et investigation. Probablement un usage abusif ou un bug.
Scénario "Black Swan"
Une boucle de tool use qui part en vrille, un script qui régénère 70k embeddings 10 fois, une API attaquée. Plafond hard à 600€/mois pour l'IA : au-delà, l'app passe en mode dégradé (chat désactivé, search via SQL/vector seulement, pas de LLM).
Prompt caching (obligatoire)
Anthropic supporte le prompt caching : on cache les parties répétées du prompt (system prompt, contexte de la demande) et on paie 90 % moins cher en input pour ces tokens.
Pour Reciprok :
- Le system prompt est identique pour toutes les conversations → cacher
- Le contexte de la demande (description, infos, résultats actuels) est répété à chaque message d'une même conversation → cacher
const response = await anthropic.messages.create({
model: 'claude-sonnet-4-5',
system: [
{
type: 'text',
text: SYSTEM_PROMPT,
cache_control: { type: 'ephemeral' }, // ← cache du system prompt
},
],
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: requestContext,
cache_control: { type: 'ephemeral' }, // ← cache du contexte demande
},
{ type: 'text', text: userMessage }, // ← non caché
],
},
],
tools,
});Économie attendue : 60-80 % sur les coûts d'input du chat. Sans caching, le coût Claude serait 3-5× plus élevé.
Garde-fous à implémenter dès le jour 1
1. Compteur de tokens par utilisateur
export const aiUsage = pgTable('ai_usage', {
id: uuid('id').defaultRandom().primaryKey(),
userId: text('user_id').notNull(),
date: date('date').notNull(),
provider: text('provider').notNull(), // 'anthropic' | 'openai'
model: text('model').notNull(),
inputTokens: integer('input_tokens').notNull(),
outputTokens: integer('output_tokens').notNull(),
cachedTokens: integer('cached_tokens').default(0).notNull(),
costEur: numeric('cost_eur', { precision: 8, scale: 4 }).notNull(),
context: text('context'), // 'chat_message' | 'embedding' | 'transcription'
});À chaque appel API, on log la consommation. Page admin pour visualiser :
- Coût par jour / semaine / mois
- Coût par utilisateur
- Coût par contexte (chat vs embedding vs transcription)
Ces métriques alimentent aussi Prometheus (cf. operations/monitoring).
2. Rate limiting
const RATE_LIMITS = {
chat_messages_per_hour: 60,
search_per_hour: 100,
audio_uploads_per_day: 20,
email_sends_per_hour: 50,
};Implémenté côté API (macro Elysia). Si dépassé : error(429, 'TOO_MANY_REQUESTS').
3. Caps de coût mensuel
const MONTHLY_CAPS = {
warning: 200, // €
critical: 400, // €
hard_stop: 600, // €
};Worker quotidien qui vérifie la consommation cumulée du mois :
- À 200€ : alerte Discord équipe + email admin
- À 400€ : alerte critique
- À 600€ : désactivation temporaire du chat IA (passe en mode "lecture seule")
4. Timeouts et max iterations
const AI_LIMITS = {
tool_call_timeout_ms: 5000,
max_iterations_per_message: 10,
max_message_size_tokens: 8000,
};Évite qu'une boucle agentique partie en vrille consomme des tokens à l'infini.
5. Alertes GlitchTip / Grafana
- Erreurs API providers (Anthropic 5xx, rate limits OpenAI)
- Augmentation soudaine du coût (× 3 vs jour précédent)
- Échecs de transcription Whisper
- Échecs d'envoi d'email Resend
Pricing détaillé par provider
Tarifs avril 2026, vérifier les pages officielles avant intégration.
Anthropic (Claude Sonnet 4.6, claude-sonnet-4-5)
| Type | Prix |
|---|---|
| Input | $3 / 1M tokens |
| Cached input read | $0.30 / 1M tokens (10× moins cher) |
| Cached input write | $3.75 / 1M tokens (25 % plus cher la 1ère fois) |
| Output | $15 / 1M tokens |
Astuce : le cached input write est plus cher la première fois, mais devient ultra rentable dès le 2ᵉ message d'une conversation.
OpenAI
| Service | Prix |
|---|---|
text-embedding-3-small | $0.02 / 1M tokens |
| Whisper | $0.006 / minute |
tts-1 (futur) | $15 / 1M caractères |
Resend
| Plan | Prix | Volume |
|---|---|---|
| Free | 0€ | 100 emails/jour, 3 000/mois |
| Pro | $20/mois | 50 000 emails/mois |
Pour Reciprok au démarrage, le plan Free suffit. Pro à activer si on dépasse 3 000 mails/mois.
WhatsApp Cloud API (Meta)
Tarification "conversation-based" Meta (avril 2026, FR) :
- 1 000 conversations utilitaires gratuites par mois (free tier)
- Au-delà : ~0.005 € à 0.04 € par conversation selon le type (utility, marketing, authentication)
- Pas de marge revendeur (vs Twilio)
Pour Reciprok en volume nominal : ~5-10€/mois.
Hostinger VPS
| Plan | Prix | Specs |
|---|---|---|
| KVM 4 | ~12€/mois | 4 vCPU, 16 GB RAM, 200 GB SSD |
| KVM 8 | ~22€/mois | 8 vCPU, 32 GB RAM, 400 GB SSD |
KVM 4 suffit pour le démarrage (app + Postgres + monitoring + workers sur le même VPS).
Cloudflare R2
| Poste | Prix |
|---|---|
| Storage | $0.015/GB/mois (gratuit jusqu'à 10 GB) |
| Egress (download) | 0€ (différenciateur clé vs S3) |
| Operations | $4.50/M class A, $0.36/M class B |
R2 = quasi-gratuit pour Reciprok.
Optimisations actionnables
- Active le prompt caching dès le jour 1, économie 60-80 % sur le chat
- Embed les members en batch la nuit, pas à chaque update
- Cache les résultats de recherche identiques pendant 5 minutes (mêmes critères, même demande)
- Compresse les audios avant upload (Opus 16 kHz mono = 10× plus petit que MP3)
- Lazy load les transcripts, ne les renvoie pas par défaut, seulement à la demande
- Tier les modèles : Sonnet pour 99 % des cas, Opus uniquement pour les tâches complexes (training, comparaisons historiques)
- Self-host tout ce qui peut l'être : monitoring, status page, mailcatcher en dev
- Backups Postgres uniquement vers R2 : pas de service de backup tiers payant
Voir aussi
operations/environments, où les services tournent (et donc qui paye quoi)operations/monitoring, d'où viennent les alertes coûts- ADR-02, choix de la stack IA
- ADR-05, Resend comme provider email
- ADR-06, Postgres self-host (Dokploy) au lieu de Neon