Saltar al contenido
API de Origami

La línea de producción, programable

Todo lo que hace el workspace — subir, evaluar, mejorar, descargar — manejado desde tus propios sistemas con una API JSON simple.

El ciclo

La API refleja el workspace: cuatro pasos, repetidos por libro.

01

Subir

Declaras el archivo, haces PUT de los bytes a una URL prefirmada y registras la publicación. Los archivos nunca pasan por la API.

02

Correr

Inicias cualquier herramienta contra la versión de trabajo de la publicación. La respuesta es un run que consultas — las herramientas sincrónicas terminan en la primera consulta.

03

Leer

Obtienes el reporte JSON del run: hallazgos, puntajes, metadatos o la descripción para la página de la publicación.

04

Descargar

Las reparaciones y ediciones agregan nuevas versiones del archivo. Descargas la versión de trabajo con un enlace de corta duración.

Autenticación

Cada request lleva una clave de API de workspace como token Bearer. La clave está atada a un workspace: todo lo que creas y lees con ella vive ahí, exactamente como si trabajaras en la app.

Las claves se emiten por workspace y se muestran una sola vez. La gestión autoservicio llega pronto a la configuración del workspace; mientras tanto, pide tu clave a tu contacto en publica.la.

curl https://origami.publica.la/api/v1/publications \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}" \
  -H "Accept: application/json"

Inicio rápido

Seis requests llevan un libro de tu disco a un reporte de validación, ida y vuelta. Reemplaza el token y el nombre de archivo; el resto es copiar y pegar.

1 · Pide un lugar de subida

curl -X POST https://origami.publica.la/api/v1/uploads \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"original_filename": "book.epub", "size_bytes": 4180294}'

2 · PUT de los bytes a la URL prefirmada

curl -X PUT "UPLOAD_URL_FROM_STEP_1" \
  -H "Content-Type: application/epub+zip" \
  --data-binary @book.epub

3 · Registra la publicación

curl -X POST https://origami.publica.la/api/v1/publications \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"publication_id": "ID_FROM_STEP_1", "key": "KEY_FROM_STEP_1", "original_filename": "book.epub", "size_bytes": 4180294}'

4 · Corre una herramienta

curl -X POST https://origami.publica.la/api/v1/publications/PUBLICATION_ID/runs \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"tool": "epub-check"}'

5 · Consulta el run y lee el reporte

curl https://origami.publica.la/api/v1/runs/RUN_ID \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}"

curl https://origami.publica.la/api/v1/runs/RUN_ID/report \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}"

6 · Descarga la versión de trabajo

curl https://origami.publica.la/api/v1/publications/PUBLICATION_ID/files/current \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}"

curl -L -o book-improved.epub \
  https://origami.publica.la/api/v1/files/FILE_ID/download \
  -H "Authorization: Bearer ${ORIGAMI_API_KEY}"

Endpoints

Todos los endpoints viven bajo /api/v1, hablan JSON y responden errores como {error, reason, detail} con un reason estable para máquinas.

Publicaciones y subidas

GET /api/v1/tools

El catálogo de herramientas que expone la API, con sus flags de medición.

POST /api/v1/uploads

Genera un PUT prefirmado para un archivo nuevo (30 minutos).

POST /api/v1/publications

Registra un objeto subido como publicación.

GET /api/v1/publications

Lista las publicaciones del workspace (paginación por cursor).

GET /api/v1/publications/{id}

Una publicación: tipo, estado, título, archivo de trabajo.

Versiones de archivo

GET /api/v1/publications/{id}/files

El historial completo de versiones: el original inmutable más cada copia mejorada.

GET /api/v1/publications/{id}/files/current

La versión de trabajo — sobre la que actúa la próxima herramienta.

GET /api/v1/files/{id}/download

302 a un enlace de descarga de corta duración para cualquier versión.

Ejecuciones de herramientas

POST /api/v1/publications/{id}/runs

Inicia una ejecución (202). Acepta un objeto options y un header Idempotency-Key.

GET /api/v1/publications/{id}/runs

Lista los runs de una publicación, filtrable por herramienta.

GET /api/v1/runs/{id}

Estado, tiempos y detalle de error del run.

GET /api/v1/runs/{id}/report

El reporte JSON del run terminado.

Convenciones

Asincrónico por defecto

Los runs responden 202 con un recurso que consultas. Un run es terminal en succeeded, failed o rejected.

Idempotencia

Manda un header Idempotency-Key en POST /runs; un reintento devuelve el run original en vez de gastar dos veces.

Paginación

Las listas responden {data, next_cursor, has_more}; pasa next_cursor como ?cursor= hasta que has_more sea false.

Límites

Los requests se limitan por clave. Las herramientas medidas comparten el cupo diario de uso justo de tu workspace — un 429 con reason daily_limit_reached significa reintentar mañana, y las subidas consumen el cupo de publicaciones del plan.

Descripciones

La herramienta de descripciones devuelve el texto para la página de la publicación: un solo estilo (back_cover) con una versión larga para el cuerpo y una corta para tarjetas y metadatos.

Los archivos van directo

Las subidas son PUTs prefirmados y las descargas GETs prefirmados contra el storage — la API nunca hace de proxy de los bytes, así que las transferencias son rápidas a cualquier tamaño.

¿Construyendo una integración?

Cuéntanos qué estás automatizando — ingesta masiva, un hook desde tu DAM, un pipeline de preflight — y te ayudamos a conectarlo.