SciFig

Referencia de la API

Archivos

Subir entradas y descargar resultados.

Ver como Markdown

Subir#

POST /files acepta multipart/form-data y requiere el ámbito figures:generate. Devuelve 201 con file_id, purpose, content_type, size_bytes, expires_at y created_at.

CampoTipoObligatorioValor predeterminadoReglas
filefilesí—Consulta los límites por finalidad más abajo
purposestringnoimageimage, mask o flowchart_attachment
FinalidadAceptadoSe usa en
imagePNG, JPEG o WebP de hasta 20 MB, comprobado por su contenido y no por el nombreEdición, detección de texto, ampliación, conversión, imágenes de referencia
maskPNG de hasta 8 MB; el blanco marca la región que se debe redibujarPOST /images/edits
flowchart_attachmentFormatos del espacio de trabajo FlowChart, hasta 32 MBPOST /flowcharts/generations

Las subidas pueden usarse durante 24 horas; después, el file_id es desconocido: 400 INVALID_REQUEST, FILE_NOT_FOUND. Solo son entradas: nunca aparecen en las respuestas de tareas ni se comparten con nadie.

Las subidas cuentan para los mismos límites que en el sitio web. Al superarlos, la respuesta es 429 RATE_LIMITED con Retry-After y details.reason igual a UPLOAD_RATE_LIMITED por minuto o UPLOAD_DAILY_LIMIT_REACHED por día para archivos adjuntos de diagramas de flujo.

Una subida puede enviar una cabecera opcional Idempotency-Key de 1 a 255 caracteres ASCII visibles. La misma cuenta, clave y purpose siempre corresponden a un único file_id: repetirla devuelve el primer archivo con 201, sin volver a subirlo ni consumir el límite. La misma clave y purpose con bytes diferentes devuelve 409 IDEMPOTENCY_CONFLICT. Sin cabecera, cada subida crea un archivo nuevo. Si esa subida ha caducado, repetirla devuelve 400 INVALID_REQUEST con details.reason = FILE_EXPIRED; súbela de nuevo con una clave nueva.

Descargar#

Cada resultado tiene un download_url que funciona sin credenciales durante una hora; consulta la tarea de nuevo para obtener otro enlace. GET /files/{file_id} con tus credenciales descarga cualquiera de tus archivos. Los archivos siempre se sirven como adjuntos.

Un download_url firmado devuelve 404 NOT_FOUND cuando caduca o si se modifica; todos los enlaces de una cuenta bloqueada o en proceso de eliminación dejan de funcionar del mismo modo.

ResultadoSe puede pasar a
PNG o JPEGTodos los puntos de acceso de imagen: edición, detección de texto, ampliación, conversión, imágenes de referencia
WebPEdición, detección de texto, ampliación, vectorización SVG e imágenes de referencia; no conversiones PNG, PDF, TIFF o PPTX
SVG de diagrama de flujoPOST /images/conversions a PNG, PDF, TIFF o PPTX
PDF, TIFF, EPS, PPTX y otros SVGNinguno: solo descarga

Una fuente de conversión de más de 20 MB, por ejemplo una ampliación 8K, se rechaza con 400 INVALID_REQUEST y FILE_TOO_LARGE.

cURL#

curl -X POST https://scifig.ai/api/v1/files \
  -H "Authorization: Bearer $SCIFIG_API_KEY" \
  -F "file=@figure.png" \
  -F "purpose=image"

JavaScript#

import { readFile } from 'node:fs/promises';

const form = new FormData();
form.set('file', new Blob([await readFile('figure.png')]), 'figure.png');
form.set('purpose', 'image');

const response = await fetch('https://scifig.ai/api/v1/files', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SCIFIG_API_KEY}`,
  },
  body: form,
});
const result = await response.json();
console.log(response.status, result);

Python#

import os

import requests

headers = {
    "Authorization": f"Bearer {os.environ['SCIFIG_API_KEY']}",
}
response = requests.post(
    "https://scifig.ai/api/v1/files",
    headers=headers,
    files={"file": open("figure.png", "rb")},
    data={"purpose": "image"},
    timeout=60,
)
print(response.status_code, response.json())