Saltar al contenido
API HTTP local
API, CLI e MCP

API HTTP local

Genera EPS, SVG y PNG, convierte LaTeX y MathML, reconoce imágenes y sigue vínculos con la API HTTP de NeoMath, que solo atiende en tu propio equipo y exige token.

En esta página

La API HTTP local es un servidor que solo atiende en el propio equipo (127.0.0.1). Es la que usa el plugin de InDesign, y sirve también para scripts y otros programas en cualquier lenguaje. La referencia de cada ruta está en Referencia de la API HTTP.

Iniciar#

Hay dos servidores con la misma API:

Comando Para quién Rutas extra
NeoMath --servidor la aplicación instalada; es la que usa InDesign /v1/ocr, /v1/quimica, /v1/editar, /v1/vinculos
neomath servidor la línea de comandos (sin las rutas de la aplicación) /v1/vinculos; las demás responden 501
Terminal
NeoMath --servidor
neomath servidor --porta 8790

El instalador puede dejar NeoMath --servidor iniciándose con el sistema (activado de forma predeterminada en Windows y Linux). No abre ventana y usa la carpeta del usuario como raíz.

Opción Predeterminado Qué hace
--porta N 8790 puerto
--token T generado token fijo; sin la opción, un token aleatorio de 64 caracteres en cada inicio
--sem-token desactiva el token (solo para pruebas)
--origem URL ninguna origen de página web autorizado (repetible)
--raiz CARPETA desactivado (neomath), carpeta del usuario (NeoMath) permite /v1/lote, /v1/editar y /v1/vinculos solo dentro de esa carpeta
--threads N 4 peticiones atendidas a la vez (1 a 16)
--sessao ARCHIVO carpeta de datos dónde escribir el servidor.json

Puerto y token: servidor.json#

Al iniciar, el servidor escribe el servidor.json, con permiso solo para el usuario:

Sistema Ruta
Windows %LOCALAPPDATA%\NeoMath\servidor.json
macOS ~/Library/Application Support/NeoMath/servidor.json
Linux $XDG_STATE_HOME/neomath/servidor.json o ~/.local/state/neomath/servidor.json
JSON
{ "porta": 8790, "token": "9f2c…", "url": "http://127.0.0.1:8790", "pid": 4242, "versao": "0.2.0" }

Los clientes leen el puerto y el token de ese archivo.

Autenticación#

Toda petición, salvo GET /v1/saude, lleva el token:

HTTP
Authorization: Bearer <token>

También valen X-NeoMath-Token: <token> y ?token=<token> en la URL, para quien no puede enviar cabeceras.

Ejemplos#

curl

Terminal
TOKEN=$(python3 -c "import json,os;print(json.load(open(os.path.expanduser('~/.local/state/neomath/servidor.json')))['token'])")
curl -s http://127.0.0.1:8790/v1/saude
curl -s -H "Authorization: Bearer $TOKEN" -X POST http://127.0.0.1:8790/v1/svg -d '{"mathml":"\\frac{a}{b}"}' -o eq.svg
curl -s -H "Authorization: Bearer $TOKEN" -X POST "http://127.0.0.1:8790/v1/eps?bruto=1" -d '{"mathml":"\\ce{2 H2 + O2 -> 2 H2O}","opcoes":{"cor":[0,100,100,0]}}' -o reacao.eps

JavaScript

JavaScript
const r = await fetch("http://127.0.0.1:8790/v1/eps", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` },
  body: JSON.stringify({ mathml: "x^2 + y^2 = r^2" }),
});
const g = await r.json();
console.log(g.largura_pt, g.altura_pt, g.linha_base_pt);

Python

Python
import json, os, urllib.request
s = json.load(open(os.path.expandvars(r"%LOCALAPPDATA%\NeoMath\servidor.json")))
pedido = urllib.request.Request(s["url"] + "/v1/png?dpi=600", data=json.dumps({"mathml": r"\sqrt{2}"}).encode(),
                                headers={"Authorization": "Bearer " + s["token"], "Content-Type": "application/json"})
open("raiz.png", "wb").write(urllib.request.urlopen(pedido).read())

El campo mathml acepta MathML o LaTeX: NeoMath lo reconoce solo.

Opciones de salida#

Clave Ejemplo Efecto
neqp texto del estilo estilo (fuentes, tamaños, espaciados)
cor "#1F4E79", "red", [0,100,100,0], [31,78,121] color de la ecuación (una lista de 4 es CMYK)
cor_em_tudo true pinta también trazos y fracciones
tamanho 18 tamaño del cuerpo en pt (1 a 1000)
fonte "Arial" fuente del texto, de las variables y de los números

Respuestas y errores#

Código Cuándo
200 éxito
400 JSON u opciones no válidos
401 sin token o token incorrecto
403 origen de navegador no autorizado, o carpeta fuera de --raiz
404 ruta desconocida
413 cuerpo mayor que 16 MB (64 MB en /v1/lote-zip)
421 Host distinto de 127.0.0.1:<puerto> o localhost:<puerto> (protección contra DNS rebinding)
422 construcción no admitida, o imagen de OCR no reconocida
501 ruta que solo existe en el servidor de la aplicación
JSON
{ "status": "erro", "codigo": "token", "erro": "token ausente ou inválido …" }

Flujo de edición#

Así mantiene InDesign las ecuaciones al día:

  1. El cliente genera el EPS con "formato": "neof" y lo escribe en el documento.
  2. Llama a POST /v1/editar con la ruta; la aplicación abre el archivo y devuelve modificado_ms y tamanho.
  3. Consulta POST /v1/vinculos cada 2 segundos.
  4. Cuando la fecha o el tamaño cambian, el archivo se guardó en NeoMath: el cliente actualiza el vínculo y recupera el código nuevo con /v1/abrir y /v1/para-latex.

Seguridad#

  • Escucha solo en 127.0.0.1 y rechaza otro Host.
  • Las peticiones de navegador solo se aceptan de los orígenes pasados en --origem.
  • Las rutas que tocan el disco quedan limitadas a la carpeta --raiz (con enlaces simbólicos resueltos).
  • Las rutas antiguas sin /v1 siguen funcionando para clientes antiguos, también con token.