Skip to main content
Sincroniza tus datos de Dodo Payments con tu propia base de datos para realizar analítica, informes e integraciones. El motor de sincronización replica automáticamente pagos, clientes, suscripciones y licencias en MongoDB, PostgreSQL, MySQL o ClickHouse.
Paquete: dodo-sync en npm | Código fuente: GitHub

¿Qué Puedes Sincronizar?

Elige cualquier combinación de estas entidades:

Payments

Todas las transacciones de pago, incluidos los pagos únicos, los reembolsos y las actualizaciones de estado.

Customers

Perfiles de clientes, información de contacto y metadatos.

Subscriptions

Datos de suscripciones, ciclos de facturación y cambios de estado.

Licenses

Claves de licencia, activaciones y actualizaciones de estado.
Especifique qué entidades sincronizar mediante el parámetro scopes. Cada ejecución obtiene todos los registros de los ámbitos seleccionados y los escribe usando su ID, por lo que las filas existentes se actualizan en el mismo lugar en vez de duplicarse. Cada página de registros se escribe en su base de datos en un único lote.

Soporte de Base de Datos

Dodo Sync es compatible con MongoDB, PostgreSQL, MySQL 8.0.20 o posterior y ClickHouse. La compatibilidad con Snowflake y otras bases de datos, las canalizaciones ETL y la sincronización en tiempo real están en desarrollo. Para contribuir con una nueva integración de base de datos, envía un pull request al repositorio de GitHub.

Primeros pasos

Usa Dodo Sync mediante la CLI para una configuración rápida o de forma programática en tu código para integrarlo en tu aplicación. Ambos métodos ofrecen la misma funcionalidad.

Uso de la CLI

Instala la CLI globalmente para ejecutarla desde cualquier ubicación:

Ejecución de la CLI

La CLI admite dos modos: interactivo, para una configuración guiada, y manual, para una configuración directa. Modo interactivo: Ejecuta el comando sin argumentos para iniciar el asistente de configuración.
Modo manual: Pasa los argumentos directamente para omitir el asistente.
Ejemplos:

Argumentos de la CLI

number
requerido
Intervalo de sincronización en segundos. La CLI se ejecuta continuamente con este intervalo. Para una sincronización única, usa .run() en tu código.
string
requerido
Tipo de base de datos: "mongodb", "postgres", "mysql" o "clickhouse".
string
requerido
URI de conexión para tu base de datos:
  • MongoDB: mongodb://localhost:27017 o mongodb+srv://user:pass@cluster.mongodb.net/
  • PostgreSQL: postgresql://user:password@localhost:5432/mydb
  • MySQL: mysql://user:password@localhost:3306/mydb
  • ClickHouse: http://localhost:8123
string
requerido
Lista separada por comas de las entidades que se sincronizarán: licences, payments, customers, subscriptions. Ejemplo: "payments,customers".
string
requerido
Tu clave de API de Dodo Payments de Developer → API Keys. Usa una clave del mismo modo que --env.
string
requerido
Entorno: "live_mode" o "test_mode".
number
Límite de solicitudes por segundo. Controla la velocidad a la que el motor de sincronización realiza solicitudes de API. El valor predeterminado es 10; los valores de 100 o superiores desactivan la limitación.

Uso en tu código

Integra la funcionalidad de sincronización directamente en tu aplicación. Instálala como dependencia:

Sincronización automática (basada en intervalos)

Ejecuta la sincronización continuamente a intervalos regulares:
La opción interval es obligatoria al usar .start(). La sincronización se ejecuta continuamente con el intervalo especificado hasta que se detiene el proceso.

Sincronización manual

Active operaciones de sincronización bajo demanda, por ejemplo desde un trabajo cron, un endpoint de API o una función serverless:
La opción interval no es necesaria para la sincronización manual. Llame a .run() cuando necesite sincronizar. .run() solo se resuelve cuando todas las escrituras en la base de datos han finalizado. .close() es un alias de .disconnect().

Ejecución en Serverless

En Vercel, AWS Lambda o plataformas similares:
  • Llame a .disconnect() dentro de un bloque finally, como en el ejemplo anterior, para que las conexiones no permanezcan abiertas entre invocaciones.
  • Use el runtime de Node.js. Los runtimes Edge no pueden abrir conexiones de base de datos.
  • Aumente el tiempo de espera de la función. Una sincronización grande puede tardar más que el límite predeterminado. En Vercel, establezca export const maxDuration = 60;.
  • Sincronice menos ámbitos por invocación, como scopes: ['payments'], para mantener breve cada ejecución.

Ejemplo de PostgreSQL

Ejemplo de MySQL

Ejemplo de ClickHouse

Opciones del constructor

string
requerido
Tipo de base de datos: "mongodb", "postgres", "mysql" o "clickhouse".
string
requerido
Cadena de conexión de su base de datos:
  • MongoDB: mongodb://localhost:27017 o mongodb+srv://...
  • PostgreSQL: postgresql://user:password@localhost:5432/mydb
  • MySQL: mysql://user:password@localhost:3306/mydb
  • ClickHouse: http://localhost:8123
string[]
requerido
Matriz de entidades que sincronizar: "licences", "payments", "customers", "subscriptions". Incluya cualquier combinación.
object
requerido
Configuración de Dodo Payments API. Consulte los tipos del SDK de TypeScript para ver todas las opciones.Propiedades obligatorias:
  • bearerToken: Su clave de API de Dodo Payments
  • environment: "test_mode" o "live_mode"
number
Tiempo en segundos entre sincronizaciones automáticas. Obligatorio para .start() y opcional para .run().
number
Límite de velocidad en solicitudes por segundo. El valor predeterminado es 10; los valores de 100 o superiores desactivan la limitación.

Información importante

MongoDB: Las colecciones (subscriptions, payments, licences, customers) se crean en la base de datos indicada en su URI de conexión, como mongodb://localhost:27017/my_database. Si la URI no indica ninguna base de datos, Dodo Sync usa dodopayments_sync.PostgreSQL: Las tablas (Subscriptions, Payments, Licenses, Customers) se crean en la base de datos especificada en su URI de conexión. Los datos se almacenan como JSONB.MySQL: Requiere MySQL 8.0.20 o posterior. Las tablas (Subscriptions, Payments, Licenses, Customers) se crean en la base de datos especificada en su URI de conexión. Los datos se almacenan como JSON.ClickHouse: Las tablas (Subscriptions, Payments, Licenses, Customers) se crean usando el engine ReplacingMergeTree. Al realizar consultas, use la palabra clave FINAL para garantizar resultados sin duplicados.

Actualización desde 0.x

La versión 1.0 cambia la forma en que se almacenan los datos de MongoDB y aumenta el requisito de MySQL. Antes de actualizar:
  • MongoDB: Elimine la colección licences existente. Ahora los documentos de licencia se almacenan mediante id de licencia en lugar de subscription_id, y la siguiente sincronización vuelve a llenar la colección.
  • MongoDB: Compruebe su URI de conexión. Ahora los datos se escriben en la base de datos indicada por la URI, no siempre en dodopayments_sync. Para seguir usando los datos existentes, incluya dodopayments_sync en la URI o deje fuera la base de datos.
  • MySQL: Actualice a MySQL 8.0.20 o posterior.

Recursos adicionales

GitHub Repository

Vea el código fuente, informe de problemas o contribuya con mejoras

npm Package

Vea los detalles del paquete y las instrucciones de instalación
Última modificación el 26 de septiembre de 2026