Similarity and AI detection reports, by API Reportes de similitud y detección de IA, por API
You send a document, we analyse it and hand back the PDF report with its percentage. One call to upload, one to check. Nothing else to learn. Envías un documento, nosotros lo analizamos y te devolvemos el informe en PDF con su porcentaje. Una llamada para subir, otra para consultar. Nada más que aprender.
01How it worksCómo funciona
Three steps, always the same. Analysis is not instant: you upload, you wait, you collect. Tres pasos, siempre los mismos. El análisis no es instantáneo: subes, esperas y recoges.
You upload the documentSubes el documento
A POST with the file. We answer instantly with an orderId.
Un POST con el archivo. Te respondemos al instante con un orderId.
You check the statusConsultas el estado
Ask about that orderId every 30 seconds. It is usually ready in a few minutes.
Preguntas por ese orderId cada 30 segundos. Suele estar listo en unos minutos.
You download the reportDescargas el informe
Once the status is completed, you get the percentages and the PDF links.
Cuando el estado es completed, recibes los porcentajes y los enlaces al PDF.
Every route hangs off https://api.similaritycheck.app/api/v1 and answers JSON. Accepted formats are .docx, .doc, .pdf and .txt, up to 50 MB.
Todas las rutas cuelgan de https://api.similaritycheck.app/api/v1 y responden JSON. Los formatos admitidos son .docx, .doc, .pdf y .txt, hasta 50 MB.
02Your tokenTu token
We hand you a permanent token when your account is created. It goes in the Authorization header of every call and it does not expire: if you ever need to invalidate it, we issue a new one and the old one stops working immediately.
Te entregamos un token permanente al darte de alta. Va en la cabecera Authorization de cada llamada y no caduca: si necesitas invalidarlo, te generamos otro y el anterior deja de servir en el acto.
Authorization: Bearer YOUR_TOKEN
Keep it on your server. Anyone holding your token can spend your credits, so never embed it in a mobile app or in code that reaches your users' browsers. Guárdalo en el servidor. Cualquiera con tu token puede gastar tus créditos, así que no lo incrustes en una app móvil ni en código que llegue al navegador de tus usuarios.
03SandboxProbador
Paste your token and send a real document from here. This is the same API you will use in production, so it spends one credit for every document accepted. Pega tu token y envía un documento de verdad desde aquí. Es la misma API que usarás en producción, así que consume un crédito por cada documento que se acepte.
If your plan only includes one report type, asking for the other returns an error and costs no credit: you are only charged once the document enters analysis. Si tu plan solo incluye un tipo de reporte, pedir el otro devuelve un error y no gasta crédito: solo se cobra cuando el documento entra a analizarse.
04Endpoints
Five routes. The first two already give you a complete integration. Cinco rutas. Con las dos primeras ya tienes una integración completa.
multipart/form-data request. The only required field is file.
Envío multipart/form-data. El único campo obligatorio es file.
| FieldCampo | ValueValor | What forPara qué |
|---|---|---|
file | filearchivo | The document. Required.El documento. Obligatorio. |
reports | both · similarity · ai |
Which analysis you want. Defaults to whatever your plan includes.Qué análisis quieres. Por defecto, lo que incluya tu plan. |
excludeQuotes | true / false |
Leave quoted text out.Dejar fuera el texto entrecomillado. |
excludeBibliography | true / false |
Leave the bibliography out.Dejar fuera la bibliografía. |
title | texttexto | Title shown on the report.Título que aparecerá en el informe. |
authorFirst · authorLast | texttexto | Author name on the report.Nombre del autor en el informe. |
Answers 202 with the orderId and your remaining balance.
Responde 202 con el orderId y tu saldo restante.
curl -X POST https://api.similaritycheck.app/api/v1/documents \
-H "Authorization: Bearer $TOKEN" \
-H "Idempotency-Key: order-4471" \
-F "file=@thesis.docx" \
-F "reports=both"
The Idempotency-Key header is optional but recommended: if your connection drops and you retry with the same key, we return the order that already exists instead of charging you twice for the same file.
La cabecera Idempotency-Key es opcional pero recomendable: si se te corta la conexión y reintentas con la misma clave, te devolvemos el pedido que ya existía en vez de cobrarte dos veces por el mismo archivo.
Poll every 30 seconds until the status is completed or failed. PDF links expire, so download them or ask for them again when you need them.
Consulta cada 30 segundos hasta que el estado sea completed o failed. Los enlaces a los PDF caducan, así que descárgalos o vuelve a pedirlos cuando los necesites.
{
"success": true,
"orderId": "a7f3c9d1",
"status": "completed",
"requested": "both",
"result": { "similarity": 18.4, "aiDetection": 7.2 },
"reports": {
"similarity": "https://...",
"aiDetection": "https://...",
"expiresAt": "2026-09-07T18:30:00.000Z"
}
}
Paged by date, newest first. Accepts limit (max 200), status and cursor to request the next page.
Paginado por fecha, del más reciente al más antiguo. Admite limit (máximo 200), status y cursor para pedir la página siguiente.
Returns acceptingNow: how many documents we will take from you right now, with your balance, your daily limit and current load already accounted for. Check it before a large batch.
Devuelve acceptingNow: el número de documentos que aceptamos de ti en este momento, ya descontados tu saldo, tu límite diario y la carga del servicio. Consúltalo antes de una carga grande.
Balance, expiry date, daily limit and how many documents you have in flight right now. Saldo, fecha de vencimiento, límite diario y cuántos documentos tienes procesándose ahora mismo.
05Similarity, AI or bothSimilitud, IA o ambos
There are two levels and they are worth keeping apart. Your plan sets which reports you have contracted. Each document can ask for less than that with the reports field, and it comes back sooner.
Hay dos niveles y conviene no confundirlos. Tu plan define qué reportes tienes contratados. Cada documento puede pedir menos que eso con el campo reports, y así el informe sale antes.
| Your plan includesTu plan incluye | You ask forPides | What you getQué recibes |
|---|---|---|
| BothAmbos | anythinglo que sea | ✓ Exactly thatExactamente eso |
| Similarity onlySolo similitud | similarity |
✓ Your similarity reportTu informe de similitud |
| Similarity onlySolo similitud | ai |
403 error telling you what your plan does include. No credit spent.
Error 403 indicándote qué sí incluye tu plan. No gasta crédito. |
| Similarity onlySolo similitud | both or nothingo nada |
✓ Your similarity report, no errorTu informe de similitud, sin error |
The response only carries the fields of the report you asked for. If you asked for similarity alone, you will not see aiDetection set to null: it simply is not there, so you never mistake it for a failed analysis.
La respuesta solo trae los campos del reporte que pediste. Si pediste únicamente similitud, no verás aiDetection en null: sencillamente no aparece, para que no lo confundas con un análisis fallido.
06States and reasonsEstados y motivos
A document goes through four states and only four. Code against these names: they will not change. Un documento pasa por cuatro estados y solo cuatro. Programa contra estos nombres: no van a cambiar.
| StateEstado | MeansSignifica |
|---|---|
received | Accepted and queued.Aceptado y en cola. |
processing | Being analysed.Analizándose. |
completed | Done. Carries percentages and links.Listo. Trae porcentajes y enlaces. |
failed | Could not be done. Carries a reasonCode.No se pudo. Trae un reasonCode. |
Failure reasonsMotivos de fallo
React to the reasonCode, not to the text: the text may be rewritten, the code will not.
Reacciona al reasonCode, no al texto: el texto puede reescribirse, el código no.
| reasonCode | What happenedQué pasó | What to doQué hacer |
|---|---|---|
DOCUMENT_HAS_COVER |
The document has a cover page.El documento lleva carátula o portada. | Send it again without it.Reenvíalo sin ella. |
DOCUMENT_UNREADABLE |
No text could be extracted (scanned or images only).No se pudo extraer texto (escaneado o solo imágenes). | Send a version with real text.Envía una versión con texto real. |
DOCUMENT_TOO_LARGE |
Over the accepted size.Supera el tamaño admitido. | Split it or shrink it.Divídelo o redúcelo. |
UNSUPPORTED_FORMAT |
The format is not accepted.El formato no está admitido. | Convert it to .docx or .pdf.Conviértelo a .docx o .pdf. |
TEMPORARY_FAILURE |
A temporary problem on our side.Un problema temporal por nuestra parte. | Retry later. The credit is returned to you automatically.Reintenta más tarde. El crédito se te devuelve solo. |
You never pay for a document you do not receive. If the analysis fails on our side, or we reject it for carrying a cover page, the credit returns to your balance automatically. And if a request is rejected before it enters, nothing is charged at all. Nunca pagas por un documento que no recibes. Si el análisis falla por algo nuestro, o si lo rechazamos por llevar portada, el crédito vuelve a tu saldo automáticamente. Y si una petición se rechaza antes de entrar, no se descuenta nada.
07Credits and limitsCréditos y límites
An accepted document spends one credit. Credits are sold in packs with their own expiry date and are consumed starting with the pack that expires soonest, so you never lose the nearest ones while spending the others. Un documento aceptado gasta un crédito. Los créditos se venden por paquetes con su propia fecha de caducidad y se consumen empezando por el que antes vence, para que no pierdas los más próximos mientras gastas los otros.
| LimitLímite | What it controlsQué controla | If you exceed itSi lo superas |
|---|---|---|
| DailyDiario | Documents per rolling 24 hours.Documentos por cada 24 horas. | 429 DAILY_LIMIT_REACHED |
| Per minutePor minuto | Bursts of back-to-back uploads.Ráfagas de subidas seguidas. | 429 RATE_LIMITED withcon Retry-After |
| ConcurrentSimultáneos | Documents being analysed at once.Documentos analizándose a la vez. | 429 TOO_MANY_IN_FLIGHT |
On a 429, wait the seconds given in Retry-After and try again. Check /capacity before a large batch and spread your uploads.
Ante un 429, espera los segundos que indica Retry-After y reintenta. Consulta /capacity antes de una carga grande y reparte los envíos.
08Error codesCódigos de error
Every error carries success: false, a stable code and a readable error.
Todos los errores traen success: false, un code estable y un error legible.
| HTTP | code | MeansQué significa |
|---|---|---|
| 400 | MISSING_FILE |
The file field is missing.Falta el campo file. |
| 401 | MISSING_TOKEN · INVALID_SIGNATURE |
Token missing or not valid.Falta el token o no es válido. |
| 402 | INSUFFICIENT_CREDITS |
You have run out of credits.Te has quedado sin créditos. |
| 403 | CLIENT_EXPIRED |
Your subscription has expired.Tu suscripción ha vencido. |
| 403 | REPORT_TYPE_NOT_ALLOWED |
Your plan does not include that report type.Tu plan no incluye ese tipo de reporte. |
| 404 | ORDER_NOT_FOUND |
That orderId does not exist or is not yours.Ese orderId no existe o no es tuyo. |
| 413 | FILE_TOO_LARGE |
The file is over 50 MB.El archivo pasa de 50 MB. |
| 415 | UNSUPPORTED_TYPE |
Format not accepted.Formato no admitido. |
| 429 | RATE_LIMITED · DAILY_LIMIT_REACHED |
Going too fast, or you hit your cap.Vas demasiado rápido o llegaste a tu tope. |
| 503 | TEMPORARILY_UNAVAILABLE |
We could not register the document. You were not charged.No pudimos registrar el documento. No se te cobró. |