Apps de citas

Que la gente se enamore, pero no de una estafa

Perfiles, biografías, fotos y mensajes, revisados en el momento en que se escriben. ToxicFilter lee a la misma persona a lo largo de la conversación, así que ve cómo los piropos acaban en un billete de avión, el número de WhatsApp metido en la biografía y al adulto que se lleva a otra app a alguien que acaba de decir que tiene quince años, y te explica el motivo en una frase.

Lo que falla en plataformas como la tuya

Estafas románticas que llegan por entregas

Primero los halagos, luego "casi no uso esta app, hablemos por WhatsApp", después una historia que nadie puede comprobar y al final el dinero: un billete, una tasa de aduana, una cuenta bloqueada o una plataforma de inversión que le enseñó su tío. Cada mensaje suelto es alguien con muchas ganas. El orden es la estafa.

Perfiles que son un anuncio de otra cosa

Un teléfono o un usuario de mensajería en la biografía, puesto para sacar a la gente de tu app antes de que haya match. A veces es alguien con prisa; muchas veces es el primer paso de una estafa o de vender algo que tu app no permite.

Menores donde solo debería haber adultos

Una chica de quince años que mintió al registrarse, y un adulto que le contesta pidiéndole secreto y que se pase a Snapchat. Decir la edad no es ningún hallazgo, y tratarlo como tal sería acusar a los menores de serlo. Lo que importa es lo que hace la otra persona a continuación.

Fotos explícitas y acoso en privado

Una app de citas es gente adulta ligando, así que un filtro que rechaza todo lo que insinúa algo la deja vacía. Una foto explícita que nadie ha pedido o una lluvia de insultos después de un no son otra cosa, y llegan por mensaje privado, donde nadie más va a denunciarlas.

Qué decide con contenido como el tuyo

Juzgado ahora mismo por el mismo motor que usa la API, con la plantilla de este tipo de plataforma y sin intervención del modelo.

  1. 01 Una estafa romántica
  2. 02 Un acercamiento a alguien que dice tener 15 años
  3. 03 Un WhatsApp en la biografía
  4. 04 Un número después de la primera cita
  5. 05 Un primer mensaje normal

Una estafa romántica POST /v1/conversation

sam Hola, qué perfil tan majo. ¡Me encantan tus fotos de Lisboa!

alex Gracias. Trabajo en una plataforma petrolífera y viajo mucho. Me he enamorado de ti, mi amor. Hablemos por WhatsApp, casi no uso esta app.

alex Mi amor, mi cuenta está bloqueada y necesito que me ayudes a pagarme el billete para ir a verte.

block 39 ms
  • Proposes continuing outside the platform.
  • Reads like a romance scam: affection, a move to another app, a request for money and a story nobody can check, from the same person.

El cariño y pasarse a WhatsApp es como hablan dos personas que se gustan. Con una plataforma petrolífera que nadie puede comprobar, los dos primeros mensajes ya quedan retenidos para revisión; que la misma persona pida dinero completa la estafa, y se rechaza.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "scam",
    "spam"
  ],
  "scores": {
    "scam": 0.9,
    "spam": 0.45
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.45,
      "reason": "Proposes continuing outside the platform.",
      "evidence": [
        "hablemos por whatsapp"
      ]
    },
    {
      "category": "scam",
      "score": 0.9,
      "reason": "Reads like a romance scam: affection, a move to another app, a request for money and a story nobody can check, from the same person.",
      "evidence": [
        "mi amor",
        "me he enamorado de ti",
        "hablemos por whatsapp",
        "casi no uso esta app",
        "pagarme el billete",
        "mi cuenta esta bloqueada",
        "plataforma petrolifera"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 39
}

Un acercamiento a alguien que dice tener 15 años POST /v1/conversation

nina hola, tengo 15 años, ¿pasa algo?

pablo la edad es solo un número. pásame tu snap y no se lo digas a nadie

block 9 ms
  • Somebody in this conversation has said they are 15. The other participant asked for it to be kept secret, asked to move to another app. This needs a person now.

Lo que dice la menor sobre sí misma nunca es un hallazgo. Lo que se rechaza es que la otra persona, después de leerlo, le pida secreto y que se pase a otra app, y eso tiene que verlo una persona ya.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "minor_safety"
  ],
  "scores": {
    "minor_safety": 0.9
  },
  "signals": [
    {
      "category": "minor_safety",
      "score": 0.9,
      "reason": "Somebody in this conversation has said they are 15. The other participant asked for it to be kept secret, asked to move to another app. This needs a person now.",
      "evidence": []
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 9
}

Un WhatsApp en la biografía POST /v1/text

Senderismo los domingos, fatal en el karaoke. Agrégame a WhatsApp: +44 7700 900456

block 7 ms
  • Contains what looks like a phone number.
  • Points the reader to a private chat app, which is where a deal leaves the platform.

Un teléfono solo quedaría retenido para revisión. Mandar a la gente a una app de mensajería es lo que rechaza la plantilla de citas, porque así es como un perfil saca a la gente de tu app antes del match.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "spam",
    "personal_data"
  ],
  "scores": {
    "spam": 0.65,
    "personal_data": 0.5
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.5,
      "reason": "Contains what looks like a phone number.",
      "evidence": [
        "447•••••••56"
      ]
    },
    {
      "category": "spam",
      "score": 0.65,
      "reason": "Points the reader to a private chat app, which is where a deal leaves the platform.",
      "evidence": [
        "WhatsApp: +44 7700 900456"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un número después de la primera cita POST /v1/conversation

sam ¡Qué bien lo pasamos ayer!

alex Sí, de verdad. Escríbeme por WhatsApp, que es más cómodo que esta app: +44 7700 900321

review 7 ms
  • Contains what looks like a phone number.
  • Proposes continuing outside the platform.

Se retiene, no se rechaza: dos personas que ya han quedado pueden querer darse el número, y lo decide una persona o una regla tuya. Proponer WhatsApp sin dar el número también se retiene, porque es salir de la app.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "personal_data",
    "spam"
  ],
  "scores": {
    "personal_data": 0.5,
    "spam": 0.45
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.5,
      "reason": "Contains what looks like a phone number.",
      "evidence": [
        "447•••••••21"
      ]
    },
    {
      "category": "spam",
      "score": 0.45,
      "reason": "Proposes continuing outside the platform.",
      "evidence": [
        "escribeme por whatsapp"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un primer mensaje normal POST /v1/text

¡Hola, Sam! He visto que también te gusta el senderismo. ¿Has hecho el Camino de Ronda en la Costa Brava? Busco una ruta bonita para el otoño.

allow 7 ms

Así son casi todos los mensajes. Lo resuelven las comprobaciones gratuitas en torno a un milisegundo, sin pagar nada más.

La respuesta, resumida
{
  "decision": "allow",
  "flagged": [],
  "signals": [],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Qué decide con contenido como el tuyo

Juzgado ahora mismo por el mismo motor que usa la API, con la plantilla de este tipo de plataforma y sin intervención del modelo.

Una estafa romántica POST /v1/conversation

sam Hola, qué perfil tan majo. ¡Me encantan tus fotos de Lisboa!

alex Gracias. Trabajo en una plataforma petrolífera y viajo mucho. Me he enamorado de ti, mi amor. Hablemos por WhatsApp, casi no uso esta app.

alex Mi amor, mi cuenta está bloqueada y necesito que me ayudes a pagarme el billete para ir a verte.

block 39 ms
  • Proposes continuing outside the platform.
  • Reads like a romance scam: affection, a move to another app, a request for money and a story nobody can check, from the same person.

El cariño y pasarse a WhatsApp es como hablan dos personas que se gustan. Con una plataforma petrolífera que nadie puede comprobar, los dos primeros mensajes ya quedan retenidos para revisión; que la misma persona pida dinero completa la estafa, y se rechaza.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "scam",
    "spam"
  ],
  "scores": {
    "scam": 0.9,
    "spam": 0.45
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.45,
      "reason": "Proposes continuing outside the platform.",
      "evidence": [
        "hablemos por whatsapp"
      ]
    },
    {
      "category": "scam",
      "score": 0.9,
      "reason": "Reads like a romance scam: affection, a move to another app, a request for money and a story nobody can check, from the same person.",
      "evidence": [
        "mi amor",
        "me he enamorado de ti",
        "hablemos por whatsapp",
        "casi no uso esta app",
        "pagarme el billete",
        "mi cuenta esta bloqueada",
        "plataforma petrolifera"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 39
}

Un acercamiento a alguien que dice tener 15 años POST /v1/conversation

nina hola, tengo 15 años, ¿pasa algo?

pablo la edad es solo un número. pásame tu snap y no se lo digas a nadie

block 9 ms
  • Somebody in this conversation has said they are 15. The other participant asked for it to be kept secret, asked to move to another app. This needs a person now.

Lo que dice la menor sobre sí misma nunca es un hallazgo. Lo que se rechaza es que la otra persona, después de leerlo, le pida secreto y que se pase a otra app, y eso tiene que verlo una persona ya.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "minor_safety"
  ],
  "scores": {
    "minor_safety": 0.9
  },
  "signals": [
    {
      "category": "minor_safety",
      "score": 0.9,
      "reason": "Somebody in this conversation has said they are 15. The other participant asked for it to be kept secret, asked to move to another app. This needs a person now.",
      "evidence": []
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 9
}

Un WhatsApp en la biografía POST /v1/text

Senderismo los domingos, fatal en el karaoke. Agrégame a WhatsApp: +44 7700 900456

block 7 ms
  • Contains what looks like a phone number.
  • Points the reader to a private chat app, which is where a deal leaves the platform.

Un teléfono solo quedaría retenido para revisión. Mandar a la gente a una app de mensajería es lo que rechaza la plantilla de citas, porque así es como un perfil saca a la gente de tu app antes del match.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "spam",
    "personal_data"
  ],
  "scores": {
    "spam": 0.65,
    "personal_data": 0.5
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.5,
      "reason": "Contains what looks like a phone number.",
      "evidence": [
        "447•••••••56"
      ]
    },
    {
      "category": "spam",
      "score": 0.65,
      "reason": "Points the reader to a private chat app, which is where a deal leaves the platform.",
      "evidence": [
        "WhatsApp: +44 7700 900456"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un número después de la primera cita POST /v1/conversation

sam ¡Qué bien lo pasamos ayer!

alex Sí, de verdad. Escríbeme por WhatsApp, que es más cómodo que esta app: +44 7700 900321

review 7 ms
  • Contains what looks like a phone number.
  • Proposes continuing outside the platform.

Se retiene, no se rechaza: dos personas que ya han quedado pueden querer darse el número, y lo decide una persona o una regla tuya. Proponer WhatsApp sin dar el número también se retiene, porque es salir de la app.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "personal_data",
    "spam"
  ],
  "scores": {
    "personal_data": 0.5,
    "spam": 0.45
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.5,
      "reason": "Contains what looks like a phone number.",
      "evidence": [
        "447•••••••21"
      ]
    },
    {
      "category": "spam",
      "score": 0.45,
      "reason": "Proposes continuing outside the platform.",
      "evidence": [
        "escribeme por whatsapp"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un primer mensaje normal POST /v1/text

¡Hola, Sam! He visto que también te gusta el senderismo. ¿Has hecho el Camino de Ronda en la Costa Brava? Busco una ruta bonita para el otoño.

allow 7 ms

Así son casi todos los mensajes. Lo resuelven las comprobaciones gratuitas en torno a un milisegundo, sin pagar nada más.

La respuesta, resumida
{
  "decision": "allow",
  "flagged": [],
  "signals": [],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Qué busca

Cada cosa con su propia puntuación y sus propios umbrales, y el motivo explicado en una frase cada vez que actúa.

La plantilla con la que empiezas

Elígela al crear una política y estas reglas se escriben por ti, listas para editar. Todo lo que no menciona sigue nuestros valores por defecto.

  • Estafa retiene desde 0,30 · rechaza desde 0,60
  • Spam retiene desde 0,35 · rechaza desde 0,65
  • Elusión del filtro retiene desde 0,35 · rechaza desde 0,70
  • Texto sin sentido retiene desde 0,45 · nunca rechaza
  • Contenido sexual retiene desde 0,60 · rechaza desde 0,85
  • Acercamiento a menores retiene desde 0,20 · rechaza desde 0,70
  • Datos personales retiene desde 0,45 · rechaza desde 0,95
  • Acoso retiene desde 0,45 · rechaza desde 0,80

Lo fija la plantilla

Una llamada antes de publicar

Envía el texto indicando dónde va a aparecer y actúa según la decisión.

La petición

curl https://toxicfilter.com/api/v1/text \
  -H "Authorization: Bearer $TOXICFILTER_KEY" \
  -d content="Hola, qué perfil tan majo. ¡Me encantan tus fotos de Lisboa!" \
  -d surface=profile
La referencia completa →

Un mes de ejemplo, en cifras

Elementos revisados
400.000
Leídos por el modelo
25.000
Imágenes
60.000
Créditos, aproximadamente
1.175.000

Guía para moderar una app de citas

Qué revisar, cuándo hacerlo y cómo fijar las reglas, en perfiles, fotos y mensajes privados.

Cómo moderar una app de citas sin cargarte la conversación

Llama a la API antes de publicar un perfil y antes de entregar un mensaje, y actúa según una de tres respuestas: entregarlo, retenerlo para que lo vea una persona o rechazarlo. Casi todos los mensajes de una app de citas son alguien saludando, y eso lo resuelven las comprobaciones gratuitas en torno a un milisegundo, así que nadie espera una respuesta por culpa de la moderación. El modelo solo lee lo que ellas dejan abierto, y las fotos. Lo que llega como review espera en una cola, en tu panel o por la API, y un webhook firmado avisa a tu app cuando alguien lo aprueba.

Cómo detectar estafas románticas en una app de citas

Una estafa romántica nunca es un solo mensaje. Empieza con cariño, se pasa a WhatsApp o a Telegram, suma una historia que nadie puede comprobar (una plataforma petrolífera, una misión militar) y termina en dinero: un billete, una tasa de aduana, una factura del hospital o una plataforma de trading. Manda el hilo a /v1/conversation y ToxicFilter lee a la misma persona de principio a fin. El cariño y el cambio de app no son por sí solos una estafa romántica, porque así hablan dos personas que se gustan: la plantilla de citas solo retiene el cambio de app para que alguien lo mire, como retiene cualquier invitación a salir de la app. El dinero o una propuesta de inversión al lado se rechazan con la plantilla de citas, y el motivo dice qué se ha encontrado.

Teléfonos y usuarios de mensajería en los perfiles

Una biografía que dice "agrégame a WhatsApp" con un número es un perfil que trabaja para otra app. ToxicFilter informa del número como personal_data y de la invitación a la app de mensajería como spam. La plantilla de citas retiene el número solo y rechaza la pareja. Si prefieres publicar la biografía sin el número, pide redact y la respuesta trae el mismo texto con el número tapado.

Cómo mantener a los menores fuera de una app para adultos

Que alguien de menos de dieciocho años diga su edad no es una falta suya, y ToxicFilter nunca lo trata así. Lo que lee es al otro participante: secreto, pasarse a otra app, fotos, regalos, aislamiento. Después de una edad declarada por debajo de dieciocho, cualquiera de esas cosas se rechaza como minor_safety, con un motivo que dice lo que ha pasado y nunca lo que es nadie. Sin una edad declarada, dos de ellas juntas quedan retenidas para revisión con la plantilla de citas. Las comprobaciones instantáneas leen estas formas en ocho idiomas, un aviso es trabajo para una persona en ese momento y, con effort: high, el modelo lee la conversación entera buscando lo que las palabras dejan al contexto.

Desnudos y fotos explícitas

El contenido sexual de las imágenes lo juzga el modelo, que en la misma llamada lee la foto y el texto que lleve escrito. La plantilla de citas retiene el contenido sexual para que alguien lo mire a partir de 0,60 y lo rechaza a partir de 0,85: más alto que en un foro, porque ligar es para lo que está la app. Si alguien vuelve a subir una foto ya rechazada, se reconoce por su huella, y si el archivo declara que lo ha generado una IA, te llega como un dato para que hagas con él lo que quieras.

Cómo elegir los umbrales de tu app de citas

Empieza por la plantilla de citas, que baja los umbrales de estafas, spam, texto camuflado y acercamientos a menores, y sube los del contenido sexual. Después, prueba cualquier cambio como una segunda política que funciona en paralelo con la que está activa: se calculan los dos veredictos sobre tu propio tráfico, solo uno decide, y el panel te enseña en qué no coinciden antes de que cambies.

Preguntas frecuentes

¿Cómo se detectan las estafas románticas?

Manda la conversación a /v1/conversation con el autor de cada mensaje. ToxicFilter lee a la misma persona a lo largo de ella buscando cinco familias de frases: cariño, pasarse a otra app, una historia que nadie puede comprobar, una petición de dinero y una propuesta de inversión. El cariño y pasarse a otra app son cosas de parejas de verdad y no bastan para dar forma a la estafa, ni por separado ni juntas (aunque la plantilla de citas retiene igualmente el cambio de app para que alguien lo mire, como cualquier invitación a salir de la app); lo que da forma a la estafa es el dinero o la inversión pedidos por la misma persona. Quien pregunta "¿esto es una estafa?" nunca cuenta como quien la monta.

¿Impide poner el teléfono en el perfil?

Informa de un teléfono o un correo como datos personales, y de una invitación a una app de mensajería como spam. Con la plantilla de citas, un número solo queda retenido para revisión y un número con una app de mensajería se rechaza. Con redact, la respuesta trae el mismo texto con el número tapado, para que puedas publicar el resto de la biografía.

¿Cómo protege a los menores en una app para mayores de 18?

Se fija en lo que hace otro participante después de que alguien diga que tiene menos de dieciocho años: pedirle secreto, llevársela a otra app, pedirle fotos, ofrecerle regalos, aislarla. Con la plantilla de citas, eso se rechaza. Sin una edad declarada, dos de esas cosas juntas quedan retenidas para revisión, porque la plantilla baja ese umbral. Que un menor diga su propia edad nunca es un hallazgo.

¿Detecta desnudos en las fotos de perfil?

Las imágenes las lee el modelo, que puntúa el contenido sexual junto con las demás categorías y lee además el texto que haya en la foto. La plantilla de citas retiene el contenido sexual para revisión a partir de 0,60 y lo rechaza a partir de 0,85, porque ligar es justo para lo que está la app. Una foto ya rechazada en tu app se reconoce por su huella sin pagar otra lectura.

¿Me puede decir si una foto de perfil está hecha con IA?

Solo cuando el propio archivo lo dice. ToxicFilter lee las Content Credentials, el tipo de origen IPTC y los ajustes que los generadores escriben en el archivo, y lo devuelve como un dato, nunca como motivo para rechazar. Una captura de pantalla o volver a guardar la imagen lo borra todo, así que no recibir nada significa que el archivo no lo dice, no que la foto sea real.

¿Tengo que explicarle a un usuario por qué he retirado su perfil o su mensaje?

En la UE, sí: el artículo 17 del Reglamento de Servicios Digitales exige una declaración de motivos por cada retirada o restricción, sea cual sea el tamaño de la plataforma. ToxicFilter puede redactarla con cada bloqueo, en el idioma del usuario, y recoger su recurso.

Pruébalo con tu tráfico real

2.000 créditos al mes en el plan gratuito, sin tarjeta. Suficiente para pasarle una semana de tu propio contenido y ver qué opina de él.