Idioma: English | Español
Este documento describe la API pública actualmente montada en aymurai/api/main.py + aymurai/api/core.py.
- Base local:
http://localhost:8899 - Swagger UI:
http://localhost:8899/api/docs - OpenAPI JSON:
http://localhost:8899/api/openapi.json
| Método | Path | Propósito |
|---|---|---|
GET |
/api/server/healthcheck |
Liveness del servicio |
GET |
/api/server/stats/summary |
Métricas de CPU/memoria |
POST |
/api/document-extract |
Alias deprecado de /api/misc/document-extract |
POST |
/api/misc/document-extract |
Extrae párrafos normalizados de un documento |
POST |
/api/anonymizer/predict |
Predicción NER por párrafo |
POST |
/api/anonymizer/disambiguate |
Desambiguación canónica + merge de políticas |
POST |
/api/anonymizer/validation |
Obtiene validación manual por párrafo |
POST |
/api/anonymizer/anonymize-document |
Compila y exporta documento anonimizado |
POST |
/api/datapublic/predict/{document_id} |
Predicción para flujo data-public |
GET |
/api/datapublic/validation/document/{document_id} |
Lee validación a nivel documento |
POST |
/api/datapublic/validation/document/{document_id} |
Guarda validación a nivel documento |
POST |
/api/convert/pdf/odt |
Convierte PDF a ODT |
POST |
/api/convert/pdf/docx |
Convierte PDF a DOCX |
POST |
/api/convert/docx/odt |
Convierte DOCX a ODT |
POST |
/api/convert/docx/pdf |
Convierte DOCX a PDF |
POST |
/api/convert/odt/pdf |
Convierte ODT a PDF |
POST |
/api/convert/odt/docx |
Convierte ODT a DOCX |
Nota: los snippets JSON de abajo son ejemplos mínimos válidos. Los payloads reales pueden incluir campos adicionales según el endpoint y la etapa de procesamiento.
{
"text": "Acusado: Ramiro Marrón DNI 34.555.666."
}{
"aymurai_label": "PER",
"aymurai_label_subclass": [],
"aymurai_method": "flair",
"aymurai_score": 0.97,
"canonical_entity_id": "a3f8b60f-8e7e-4c8b-9de2-ec8dd3f44c12",
"aymurai_label_instance": 1,
"aymurai_disambiguation": "fuzzy",
"aymurai_anonymize": true
}{
"text": "Ramiro Marrón",
"start_char": 9,
"end_char": 22,
"attrs": {
"aymurai_label": "PER"
}
}{
"document": "Acusado: Ramiro Marrón DNI 34.555.666.",
"labels": [
{
"text": "Ramiro Marrón",
"start_char": 9,
"end_char": 22,
"attrs": {
"aymurai_label": "PER"
}
}
]
}{
"anonymize": true,
"disambiguation": "fuzzy",
"use_subclass_when_available": true
}{
"suffix_mode": "auto",
"suffix_threshold": 1
}{
"data": [
{
"document": "...",
"labels": []
}
],
"label_policies": {
"PER": {
"anonymize": true,
"disambiguation": "fuzzy",
"use_subclass_when_available": false
}
},
"render_policy": {
"suffix_mode": "auto",
"suffix_threshold": 1
}
}- Respuesta
200:
{"status": "ok"}curl -s http://localhost:8899/api/server/healthcheck- Respuesta
200(forma):
{
"is_docker": true,
"cpu_core_limit": 4,
"cpu_usage_percent": 0.0,
"memory_limit_mb": 4096.0,
"memory_usage_mb": 823.5
}curl -s http://localhost:8899/api/server/stats/summary- Request:
multipart/form-dataconfile - MIME types soportados en extracción: DOCX, ODT, PDF
- Respuesta
200:
{
"document": ["Párrafo 1", "Párrafo 2"],
"document_id": "f2b25507-cf88-5b11-8f2a-c0b6f940b7f8"
}curl -s -X POST \
-F "file=@/resources/data/sample/document-01.docx" \
http://localhost:8899/api/misc/document-extractErrores comunes:
504timeout de extracción500errores del extractor/internos
- Body:
TextRequest - Query param:
use_cache=true|false(defaulttrue) - Respuesta
200:DocumentInformation
curl -s -X POST "http://localhost:8899/api/anonymizer/predict?use_cache=true" \
-H "Content-Type: application/json" \
-d '{"text":"Acusado: Ramiro Marrón DNI 34.555.666."}'- Body request:
{
"paragraphs": [
{
"document": "Acusado: Ramiro Marrón DNI 34.555.666.",
"labels": []
}
],
"label_policies": {
"PER": {
"anonymize": true,
"disambiguation": "fuzzy",
"use_subclass_when_available": false
}
}
}- Respuesta
200:DocumentAnnotations(incluyedataylabel_policiesefectivas)
curl -s -X POST http://localhost:8899/api/anonymizer/disambiguate \
-H "Content-Type: application/json" \
-d '{"paragraphs":[{"document":"Acusado: Ramiro Marrón DNI 34.555.666.","labels":[]}],"label_policies":{"PER":{"anonymize":true,"disambiguation":"fuzzy"}}}'- Body:
TextRequest - Respuesta
200:list[DocLabel] | null
curl -s -X POST http://localhost:8899/api/anonymizer/validation \
-H "Content-Type: application/json" \
-d '{"text":"Acusado: Ramiro Marrón DNI 34.555.666."}'- Request:
multipart/form-datafile: documento original (.docxo.pdf)annotations: string JSON serializado deDocumentAnnotations
- Respuesta
200:.odtanonimizado para entrada DOCX o.pdfanonimizado para entrada PDF
curl -X POST http://localhost:8899/api/anonymizer/anonymize-document \
-F "file=@/resources/data/sample/document-01.docx" \
-F 'annotations={"data":[{"document":"Acusado: Ramiro Marrón DNI 34.555.666.","labels":[]}],"label_policies":{"PER":{"anonymize":true,"disambiguation":"fuzzy"}},"render_policy":{"suffix_mode":"auto","suffix_threshold":1}}'Errores comunes:
400payload multipart inválido, formato no soportado o documento inválido500errores de anonimización/conversión
- Path param:
document_id(UUID5) - Body:
TextRequest - Query param:
use_cache=true|false(defaulttrue) - Respuesta
200:DocumentInformation
curl -s -X POST "http://localhost:8899/api/datapublic/predict/7e6b6f35-2f29-58f7-9f8e-fd1d9026a6bc?use_cache=true" \
-H "Content-Type: application/json" \
-d '{"text":"Buenos Aires, 17 de noviembre de 2024"}'- Respuesta
200: objeto onull - Respuesta
404: documento inexistente
curl -s http://localhost:8899/api/datapublic/validation/document/7e6b6f35-2f29-58f7-9f8e-fd1d9026a6bc- Body: objeto JSON libre (se persiste como validación a nivel documento)
- Respuesta
200: body vacío
curl -s -X POST http://localhost:8899/api/datapublic/validation/document/7e6b6f35-2f29-58f7-9f8e-fd1d9026a6bc \
-H "Content-Type: application/json" \
-d '{"materia":"penal","violencia_de_genero":"si"}'Todos los endpoints de conversión usan multipart/form-data con campo file.
| Método | Path | Input | Output |
|---|---|---|---|
POST |
/api/convert/pdf/odt |
.pdf |
.odt |
POST |
/api/convert/pdf/docx |
.pdf |
.docx |
POST |
/api/convert/docx/odt |
.docx |
.odt |
POST |
/api/convert/docx/pdf |
.docx |
.pdf |
POST |
/api/convert/odt/pdf |
.odt |
.pdf |
POST |
/api/convert/odt/docx |
.odt |
.docx |
Para endpoints con input PDF, query param opcional:
backend=libreoffice|pandoc(default:libreoffice)
Ejemplo:
curl -X POST "http://localhost:8899/api/convert/pdf/docx?backend=libreoffice" \
-F "file=@input.pdf" -o output.docxErrores comunes:
400extensión de entrada no soportada500falla de herramienta de conversión
Las siguientes rutas existen en código pero no están incluidas en core.router en runtime:
aymurai/api/endpoints/routers/datapublic/dataset.py- define
/api/datapublic/dataset/*, pero ese router no está montado.
- define
aymurai/api/endpoints/routers/anonymizer/database.py- define
/api/anonymizer/database/*, pero su include está comentado.
- define
aymurai/api/endpoints/routers/database/*- rutas administrativas de DB, sin montaje en
core.router.
- rutas administrativas de DB, sin montaje en
Estas rutas deben tratarse como caminos internos/legacy hasta su exposición explícita.