Ir al contenido

Documentación de la API de Fileverity

Detecciones de texto

Clasifique texto sin formato como escrito con IA, mixto o escrito por una persona con POST /text/detections. Campos de la solicitud y la respuesta, posiciones de los segmentos, límites y facturación.

Ver como MarkdownActualizado el 2026-11-04

POST /text/detections ejecuta una comprobación de texto. Clasifica texto sin formato con fvdoc-3-text y devuelve los pasajes escritos con IA. Es síncrono: el resultado va en la respuesta.

Los ejemplos leen el texto de un archivo, así que guarde antes cualquier pasaje de 100 palabras o más como essay.txt. El Inicio rápido incluye un comando que escribe un ejemplo.

curl https://api.fileverity.com/v1/text/detections \  -H "Authorization: Bearer $FILEVERITY_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 6b9d1c1e-3b0f-4c0a-9a53-2d1c9d6b7e11" \  -d "$(jq -Rs '{text: ., language: "en"}' essay.txt)"

Cuerpo de la solicitud

CampoTipoObligatorioDescripción
textcadenaSíTexto sin formato de al menos 100 palabras y como máximo 100 000 caracteres.
modelcadenaNoValor predeterminado: fvdoc-3-text. Acepta el ID del modelo o el ID de su versión fechada fvdoc-3-text-2026-11-03.
languagecadena o nullNoCódigo ISO 639-1: en, fr, de, es, zh. Se detecta automáticamente si se omite.

Los campos desconocidos se rechazan con invalid_parameter. Al comprobar el mínimo de 100 palabras, los caracteres chinos se cuentan a razón de unos dos por palabra.

Respuesta

{  "id": "tdet_8Hk2pQ4vN9sL1xR7cW3mY6zB",  "object": "text.detection",  "created": 1793664000,  "model": "fvdoc-3-text-2026-11-03",  "livemode": true,  "language": "en",  "verdict": "mixed",  "score": 0.97,  "ai_fraction": 0.41,  "segments": [    {      "start": 212,      "end": 433,      "score": 0.97    },    {      "start": 579,      "end": 790,      "score": 0.93    }  ],  "usage": {    "characters": 1412,    "free_characters": 0,    "billed_units": 2  }}
CampoTipoDescripción
idcadenaID de la detección, con el prefijo tdet_.
objectcadenaSiempre text.detection.
createdenteroMarca de tiempo Unix.
modelcadenaVersión fechada que produjo el resultado.
livemodebooleanofalse para las claves de prueba.
languagecadenaEl idioma utilizado: el que usted envió o el detectado.
verdictcadenaai: el texto parece escrito con IA de principio a fin. mixed: pasajes escritos con IA dentro de un texto escrito por una persona. human: no se encontró ningún pasaje escrito con IA.
scorenúmeroDe 0 a 1. Puntuación del modelo para el pasaje que más se parece a un texto escrito con IA.
ai_fractionnúmeroDe 0 a 1. Proporción del texto evaluado que se encuentra dentro de segmentos escritos con IA.
segmentsarrayLos pasajes escritos con IA. Cada uno tiene start, end (exclusivo) y score.
usageobjetocharacters evaluados, free_characters cubiertos por su inicio gratuito y billed_units realmente cobradas tras descontar los caracteres gratuitos.

La detección de texto devuelve una estimación estadística, no una prueba de autoría. Los límites de los segmentos son aproximados. Úsela como un elemento más de una revisión humana y no se base solo en ella para tomar decisiones que afecten a una persona.

Posiciones de los segmentos

start y end son posiciones dentro del texto que envió, contadas en puntos de código Unicode, no en bytes ni en unidades UTF-16. Los límites de los segmentos son aproximados y pueden incluir oraciones adyacentes. Las cadenas de JavaScript se indexan por UTF-16, así que divida primero la cadena en puntos de código:

const points = Array.from(text);for (const { start, end } of detection.segments) {  console.log(points.slice(start, end).join(""));}

Las cadenas de Python ya se indexan por punto de código.

Facturación

  • El texto se factura por cada 1000 caracteres a 0,14 US$, contados en puntos de código Unicode. Cada solicitud se redondea al alza a unidades enteras, con un mínimo de una unidad.
  • Primero se descuentan los caracteres de texto de su inicio gratuito, que se indican en usage.free_characters. usage.billed_units es el número de unidades que se cobran tras descontarlos, así que el importe es billed_units multiplicado por 0,14 US$. Ejemplo: 1412 caracteres, cuando ya no quedan caracteres gratuitos, se facturan como 2 unidades: 0,28 US$.
  • Las solicitudes rechazadas antes de la evaluación no se cobran: parámetros no válidos, texto demasiado corto o demasiado largo, idiomas no admitidos y casos similares. Una comprobación que falla dentro del servicio (service_unavailable) se libera y no se cobra.
  • Si los fondos son insuficientes, se devuelve insufficient_balance (402).

Qué se almacena

El texto se evalúa y se descarta. Nunca se almacena, por lo que no se puede recuperar más tarde.

Fileverity conserva el resultado sin el texto (veredicto, puntuaciones, posiciones de los pasajes y uso) durante 7 días, para que la Consola pueda mostrarlo y el uso pueda facturarse y auditarse. Una solicitud repetida con la misma Idempotency-Key recibe el resultado guardado durante 24 horas. Las detecciones de texto son síncronas: no aparecen en GET /analyses y no envían eventos de webhook. Las claves de prueba no registran nada. Consulte Conservación de datos y seguridad.

Errores

CódigoEstadoCausa
text_too_short400Menos de 100 palabras.
text_too_long413Más de 100 000 caracteres. Divida el texto en varias solicitudes.
unsupported_language400El idioma no está admitido o no se pudo detectar.
unsupported_media_type415El cuerpo no se envía como application/json.
invalid_json400El cuerpo no es un objeto JSON.
missing_parameter400Falta el campo text.
invalid_parameter400Un campo tiene un tipo incorrecto, se envió un campo desconocido o la Idempotency-Key no es válida.
model_not_found404El model es desconocido.
insufficient_balance402El saldo no cubre la solicitud.
spend_limit_reached402La clave alcanzó su límite de gasto mensual.
idempotency_mismatch, idempotency_in_progress409La Idempotency-Key se usó con un cuerpo distinto, o su primera solicitud sigue en curso.
service_unavailable, analysis_failed503, 502El servicio de detección no está disponible temporalmente o está ocupado. No se cobra; reintente. service_unavailable incluye un encabezado retry-after.

Envíe Idempotency-Key para que, si reintenta tras un tiempo de espera agotado, no se facture dos veces. Consulte Idempotencia.