Saltar a contenido

Facturacion y Suscripciones

MDU usa Stripe para todos los pagos: suscripciones, compras unicas y el sistema de recompensas por referidos.

Planes de Suscripcion

Plan Generaciones/mes Exportaciones STL/mes Precio
Free 1 10 Gratis
Starter 10 30 Facturacion anual
Pro 30 50 Facturacion anual

Los limites de plan son aplicados por plans.cjs y verificados via checkGenerationLimit() antes de cada llamada IA.

Note

El IVA esta incluido en todos los precios (tax-inclusive). automatic_tax esta desactivado en Stripe. Declaracion manual trimestral al contador.

Endpoints

Suscripciones

Metodo Ruta Auth Descripcion
POST /api/create-checkout Requerido Crear sesion de checkout Stripe
POST /api/customer-portal Requerido Portal de facturacion Stripe
POST /api/check-subscription Requerido Verificar suscripcion activa
GET /api/usage Requerido Estadisticas de uso del mes
POST /api/validate-promo - Validar codigo promocional

Compras Unicas

Metodo Ruta Auth Descripcion
POST /api/texture-checkout Requerido Pago textura (4.50)
POST /api/private-model-checkout Requerido Pago privacidad (4.00)
POST /api/delete-model-checkout Requerido Pago eliminacion (3.50)
POST /api/private-map-checkout Requerido Privacidad mapa (4.00)
POST /api/delete-map-checkout Requerido Eliminacion mapa (3.50)

Flujo de Checkout

1. POST /api/create-checkout { priceId, promoCode? }
   → Verificar invitacion referido → aplicar cupon 15% si anual
   → stripe.checkout.sessions.create()
   → Devolver { url }

2. Usuario completa Stripe Checkout

3. Webhook: checkout.session.completed
   → Activar suscripcion en DB local

4. POST /api/check-subscription
   → Devolver { subscribed, plan_key, rewards }

Seguimiento de Uso

GET /api/usage
Authorization: Bearer <token>
{
  "plan": "pro",
  "plan_name": "Pro",
  "usage": {
    "generations": { "used": 5, "limit": 30, "remaining": 25 },
    "stl_exports": { "used": 3, "limit": 50, "remaining": 47 }
  },
  "period_start": "2026-03-01T00:00:00.000Z"
}

Flujo de Pago Unico

Todos los pagos unicos (textura, privacidad, eliminacion) siguen el mismo patron:

1. POST /api/{accion}-checkout { modelId }
   → Verificar propiedad (WHERE id=$id AND user_id=$userId)
   → Crear sesion checkout Stripe con metadata
   → Devolver { url }

2. Usuario completa pago

3. POST /api/confirm-{accion} { modelId }
   → Verificar propiedad de nuevo
   → Buscar sesion pagada en Stripe
   → Aplicar cambio en DB
   → Devolver { success: true }

Toggle de Privacidad

Hacer un modelo/mapa privado requiere: - Suscripcion activa, O - privacy_paid = true (compra unica)

Hacer publico es siempre gratis.

Webhooks

MDU tiene dos endpoints de webhook Stripe:

Ruta Handler Eventos
/api/webhooks/stripe 3dplim (Next.js) Eventos suscripcion 3dplim
/api/webhooks/mdu-stripe mdu-api Eventos Miniature Forge

Eventos Webhook mdu-api

  • checkout.session.completed — Activar suscripcion, registrar conteos
  • customer.subscription.updated — Actualizar plan_key y estado
  • customer.subscription.deleted — Degradar a free

Sistema de Referidos

Hitos de Recompensa

Cada N referidos suscritos otorga +10 dias bonus:

  • Planes anuales: N = 10
  • Planes mensuales: N = 30

Estadisticas de Referidos

{
  "invite_code": "ABC123",
  "invite_url": "https://app.minidreamuniverse.com?invite=ABC123",
  "total_invited": 5,
  "total_converted": 3,
  "bonus_generations": 30,
  "bonus_stl_exports": 30
}