Un límite diario de avisos de compartición y un límite de peticiones para lo demás

Una cuenta puede enviar cincuenta avisos de compartición al día. Añadir a alguien a un documento sigue funcionando más allá de esa cifra: sencillamente no le llega ningún correo. Los puntos de acceso propios de la aplicación están ya limitados como siempre lo estuvo la API pública, así que un script en bucle recibe un 429 en vez de todo lo que pide.

Dos contadores, que cuentan dos cosas distintas, y conviene saber con cuál de ellos se ha topado. Uno tiene que ver con el correo que sale de nuestro dominio; el otro, con la velocidad a la que cualquiera puede pedirle algo a esta aplicación.

Cincuenta avisos al día, y un aviso no es un acceso

Añadir a alguien a un documento escribe el acceso. El correo que se lo cuenta es una cortesía encima, y aquí las dos cosas siempre estuvieron separadas. Pasados cincuenta en un día, el aviso sencillamente no se envía: la persona queda añadida igualmente, el documento se le abre y la respuesta nombra las direcciones a las que de verdad se escribió en lugar de reclamarlas todas.

Cincuenta está muy por encima de lo que parece compartir un documento y muy por debajo de lo que parece un envío masivo. Lo que se protege no es el precio de un envío, sino el dominio: una tanda de correo no deseado firmada por nuestro SPF y nuestro DKIM termina con el dominio remitente desactivado, y lo primero que deja de funcionar después es el código de confirmación que alguien necesita para entrar.

Sesenta peticiones por minuto, ahora también en la aplicación

La API pública y el conector cuentan llamadas por llamante y por minuto desde que existen, y responden 429 con un retry-after que dice cuántos segundos faltan para que gire el minuto. Los puntos de acceso de la aplicación quedaban fuera con el argumento de que solo los llaman nuestras páginas: cierto de las páginas y falso de los puntos de acceso. Una cookie de sesión es una credencial como cualquier otra, y esas rutas escriben en la base de datos, mandan correo y hacen peticiones hacia fuera.

Se cuentan por cuenta cuando la hay y por dirección cuando no, de modo que un script desbocado no puede gastarse el cupo de otra persona. Un resumen por IA tiene su propio presupuesto, más pequeño, veinte al día, porque esa llamada cuesta dinero de una manera en que una corriente no lo cuesta.

Lo que no hace

No pone nada en cola. Una petición por encima del límite se rechaza, con los segundos que hay que esperar, y reintentar corre de tu cuenta. Tampoco es un limitador exacto: una fila por llamante y minuto en Postgres significa que dos llamadas que llegan juntas pueden leer la misma cifra, lo cual a este tamaño es el cambio correcto frente a mantener un segundo sistema al lado de la base de datos.

Y un contador al que no se llega cuenta como margen de sobra. Un limitador que deja a todo el mundo fuera cuando falta su propia tabla es peor que aquello de lo que protegía.

Relacionado: compartir un documento como enlace y convertir documentos con una API.