Documentación de la API

Secciones+

1. Inicio rápido

La API de Regunow utiliza HTTPS, autenticación Bearer y el prefijo versionado /api/v1. Puede consultar esta documentación sin una cuenta. Las solicitudes a la API requieren acceso Pro activo y la aceptación de las políticas vigentes.

  1. Inicie sesión en Regunow y cree una clave en Configuración → Claves de API.
  2. Guarde el secreto de forma segura. Solo se muestra una vez, al crear la clave.
  3. Configure el host y la clave y envíe su primera pregunta desde un backend o una automatización de confianza.
cURL · Primera pregunta
# Use your Regunow host and a key from Settings → API Keys.
export REGUNOW_BASE_URL="https://YOUR_REGUNOW_HOST"
export REGUNOW_API_KEY="YOUR_API_KEY"

curl --fail-with-body \
  "$REGUNOW_BASE_URL/api/v1/chat/completions" \
  -H "Authorization: Bearer $REGUNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: first-question-001" \
  -d '{
    "messages": [{
      "role": "user",
      "content": "Which EU product-safety obligations apply to a connected consumer device?"
    }],
    "mode": "jurisdiction",
    "jurisdiction": "eu"
  }'

La respuesta está en output.content. La respuesta incluye las referencias a fuentes y los créditos cobrados. Esta solicitud consume créditos. Utilice una clave de idempotencia nueva para cada pregunta nueva.

Ejemplo de JavaScript (Node.js)
JavaScript · Solicitud desde el servidor
// Node.js: set REGUNOW_BASE_URL and REGUNOW_API_KEY in your environment.
// Generate one key per operation; keep it unchanged when retrying that operation.
import { randomUUID } from "node:crypto";

const idempotencyKey = randomUUID();
const response = await fetch(
  process.env.REGUNOW_BASE_URL + "/api/v1/chat/completions",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer " + process.env.REGUNOW_API_KEY,
      "Content-Type": "application/json",
      "Idempotency-Key": idempotencyKey,
    },
    body: JSON.stringify({
      messages: [{ role: "user", content: "Summarize EU product-safety obligations." }],
      mode: "jurisdiction",
      jurisdiction: "eu",
    }),
  },
);

const result = await response.json();
if (!response.ok) {
  throw new Error(result.error.code + ": " + result.error.message);
}
console.log(result.output.content);

2. Autenticación

Envíe la clave de API en la cabecera HTTP Authorization en cada solicitud. No se aceptan claves en las URL, las cookies ni los cuerpos de las solicitudes.

HTTP · Cabecera de autenticación
Authorization: Bearer rgn_live_...

Guarde las claves en una variable de entorno o un gestor de secretos. No las incluya en código del navegador, paquetes de aplicaciones móviles, repositorios públicos ni registros. El acceso desde navegadores de otros orígenes no está habilitado; haga las solicitudes a través de su servidor.

Las claves desactivadas, eliminadas o caducadas dejan de autenticar inmediatamente. Regunow solo almacena un hash del secreto, por lo que no puede volver a mostrarlo. Cree una clave de reemplazo cuando la necesite.

El acceso Pro y la aceptación de las políticas se comprueban en cada solicitud. Si recibe legal_acceptance_required, el titular de la clave debe iniciar sesión y abrir Aceptación legal. Una clave de API no puede aceptar políticas.

3. Modelos y opciones

GET/api/v1/models

Consulte los modelos, niveles de esfuerzo, jurisdicciones, idiomas de respuesta y capacidades disponibles. Este endpoint autenticado no cobra créditos por separado y permite verificar una clave antes de solicitar una respuesta.

cURL · Catálogo de modelos
curl --fail-with-body \
  "$REGUNOW_BASE_URL/api/v1/models" \
  -H "Authorization: Bearer $REGUNOW_API_KEY"
Campos del catálogo de modelos
CampoContenido
modelsID de modelos, etiquetas, esfuerzo predeterminado y valores de esfuerzo admitidos.
defaultLa selección predeterminada de modelo y esfuerzo.
jurisdictionsIdentificadores de jurisdicciones admitidas y sus etiquetas.
languagesCódigos y etiquetas de los idiomas de respuesta admitidos.
capabilitiesCompatibilidad con transmisión y archivos, y límites de cantidad y tamaño de archivos.

Utilice los valores del catálogo de su despliegue. En el modo Jurisdicción, omita model y effort para usar los valores predeterminados aceptados. Si los indica, deben corresponder a Sonnet 4.6 / Alto. En respuestas sin adjuntos, el servicio de recuperación gestiona el modelo de respuesta; el campo de modelo describe la selección validada.

4. Respuestas de chat

POST/api/v1/chat/completions

Envíe un cuerpo JSON con un array messages. Por defecto, la API devuelve una respuesta completa en JSON. Establezca stream en true para recibir el texto de forma incremental.

Campos de la solicitud de chat
CampoPredeterminadoDescripción
messagesObligatorioEntre 1–20 mensajes alternados de user y assistant, terminando en user. Cada uno incluye role y content como cadena de texto.
modefreestylefreestyle para investigación regulatoria flexible, o jurisdiction para investigar una jurisdicción admitida.
jurisdictionnullObligatorio en el modo Jurisdicción. Utilice los identificadores del catálogo. En Freestyle debe omitirse o ser null.
modelPredeterminado del catálogoUn ID de modelo admitido. El modo Jurisdicción exige la selección predeterminada de Sonnet.
effortPredeterminado del modeloUn valor de esfuerzo admitido por el modelo. El modo Jurisdicción exige Alto.
web_searchauto / offauto, on o off en Freestyle; por defecto, auto. El modo Jurisdicción solo acepta off.
response_languageenUn código de idioma de respuesta del catálogo. El idioma de la documentación no limita el idioma de respuesta.
streamfalseEstablezca true para eventos enviados por el servidor (SSE).
file_idsNingunoHasta cinco UUID distintos de archivos disponibles de la cuenta del titular de la clave.
JSON · Freestyle con un adjunto
{
  "messages": [{
    "role": "user",
    "content": "What retention period does this policy specify? Cite the document."
  }],
  "mode": "freestyle",
  "web_search": "off",
  "response_language": "en",
  "file_ids": ["YOUR_FILE_ID"]
}

Sustituya YOUR_FILE_ID por el UUID devuelto tras una carga correcta. En cada seguimiento, envíe el historial pertinente del usuario y el asistente, y vuelva a incluir los file_ids deseados. La API no recuerda automáticamente el historial ni los adjuntos.

Se rechazan los mensajes de sistema y los campos desconocidos. Esta API no ofrece generación de imágenes o informes, entrada de audio ni acceso a memorias guardadas. Las imágenes cargadas pueden utilizarse como entrada para preguntas.

5. Respuestas y citas

Una solicitud correcta devuelve object: "regunow.chat.completion", la respuesta, metadatos de fuentes, uso y tiempos. Los valores siguientes son ilustrativos.

JSON · Respuesta de chat
{
  "id": "request-uuid",
  "request_id": "request-uuid",
  "object": "regunow.chat.completion",
  "created": 1790812800,
  "model": "jp.anthropic.claude-sonnet-4-6",
  "latency": {
    "time_to_first_token_ms": 2345,
    "time_to_answer_completion_ms": 9876
  },
  "output": {
    "input_files": [],
    "role": "assistant",
    "content": "The complete answer...",
    "finish_reason": "end_turn",
    "citations": [],
    "sources": [],
    "web_search": false
  },
  "usage": {
    "input_tokens": 1234,
    "output_tokens": 456,
    "charged_microcredits": 789000,
    "charged_credits": 0.789
  }
}
  • output.content contiene el texto definitivo de la respuesta. Las posiciones de las citas se refieren a esta cadena final; sourceIndexes identifica entradas en output.sources.
  • Las fuentes incluyen título, nombre de archivo, tipo MIME, URI y fragmento recuperado. Muestre los fragmentos y las citas junto a la respuesta.
  • Una URI de fuente indica una ubicación y puede apuntar a almacenamiento privado. Solo las URL públicas de los editores deben ofrecerse como enlaces accesibles. La API no permite descargar ni traducir archivos fuente regulatorios.
  • Cuando se usan adjuntos, output.input_files identifica los archivos proporcionados. Las fuentes de adjuntos tienen file_id; las regulatorias y web tienen file_id: null. Las URI de adjuntos son null.
  • La presencia de un archivo de entrada no prueba que respalde cada afirmación. Los modelos pueden omitir citas en línea; las imágenes o escaneos pueden tener fragmentos vacíos.

Los recuentos de tokens pueden ser null si el servicio de recuperación no los proporciona; significa desconocido, no cero. charged_credits es el cargo registrado al cliente. created es una marca Unix en segundos; las latencias se expresan en milisegundos.

Todas las respuestas de los endpoints llevan una cabecera X-Request-Id. Conserve el identificador para diagnosticar problemas. El JSON de respuestas de chat y errores también contiene request_id.

6. Transmisión

Establezca "stream": true. La respuesta usa text/event-stream. En cURL, añada -N para desactivar el almacenamiento en búfer de la salida.

cURL · Respuesta en transmisión
curl --fail-with-body -N \
  "$REGUNOW_BASE_URL/api/v1/chat/completions" \
  -H "Authorization: Bearer $REGUNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: streaming-question-001" \
  -d '{
    "messages": [{"role":"user","content":"Summarize EU product-safety obligations."}],
    "mode": "jurisdiction",
    "jurisdiction": "eu",
    "stream": true
  }'

Lea eventos SSE completos separados por líneas en blanco; un bloque de red puede contener parte de un evento o varios eventos. Añada choices[0].delta.content según llegue. Ignore los comentarios de mantenimiento de conexión que empiezan por :.

SSE · Secuencia de eventos (abreviada)
data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"choices":[{"index":0,"delta":{"content":"The answer begins..."},"finish_reason":null}]}

data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: {"choices":[],"usage":{"prompt_tokens":1234,"completion_tokens":456,"total_tokens":1690},"regunow":{"output":{},"latency":{},"usage":{"charged_credits":0.789,"charged_microcredits":789000}}}

data: [DONE]

El evento final de metadatos tiene un array choices vacío. Lea la respuesta definitiva, las citas y las fuentes en regunow.output, los tiempos en regunow.latency y los créditos en regunow.usage. Los tokens usan usage.prompt_tokens y usage.completion_tokens.

La recuperación y el procesamiento de citas pueden causar pausas. Trate el texto como provisional hasta recibir los metadatos finales. Un error posterior al inicio de la transmisión llega como un objeto error seguido de [DONE]; HTTP 200 por sí solo no confirma el éxito. Los errores previos de autenticación o validación devuelven respuestas JSON normales.

La repetición de una operación completada sigue usando SSE y devuelve la respuesta guardada en un único bloque de texto con X-Idempotent-Replayed: true.

7. Archivos

Cargue documentos o imágenes y adjunte sus ID a una solicitud de chat. Comparten la Biblioteca y la cuota de almacenamiento del titular de la clave. Los documentos admiten hasta 10 MiB y las imágenes hasta 5 MiB.

Formatos de archivo admitidos
CategoríaFormatos
DocumentosPDF, TXT, CSV, TSV, Markdown, DOC, DOCX, ODT, RTF, XLSX, ODS, PPTX, ODP
ImágenesJPEG, PNG, WebP, GIF

Carga directa (recomendada)

Este flujo de tres pasos envía los bytes originales directamente al almacenamiento y evita los límites del cuerpo de solicitud de la aplicación. Úselo en integraciones alojadas, especialmente con archivos grandes.

POST/api/v1/files/upload-intents

Envíe solo name, mime_type y bytes (el tamaño exacto). Si tiene éxito, recibirá HTTP 201 con el ID de un archivo pendiente y una URL de carga firmada válida durante 300 segundos.

cURL · Preparar una carga
curl --fail-with-body \
  "$REGUNOW_BASE_URL/api/v1/files/upload-intents" \
  -H "Authorization: Bearer $REGUNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: policy-intent-001" \
  -d '{"name":"policy.txt","mime_type":"text/plain","bytes":16384}'
JSON · Respuesta de preparación (campos seleccionados)
{
  "id": "YOUR_FILE_ID",
  "status": "pending",
  "upload_method": "PUT",
  "upload_url": "SIGNED_UPLOAD_URL",
  "upload_headers": {"Content-Type": "text/plain"},
  "expires_in": 300
}

Establezca FILE_ID con el id devuelto. Utilice los upload_method, upload_url y upload_headers recibidos para cargar los bytes originales exactos. Indique la Content-Length exacta. No envíe la clave de API de Regunow a la URL de carga ni registre las URL firmadas.

cURL · Enviar los bytes del archivo
# Set UPLOAD_URL from the intent response. Use its returned upload_headers.
# This example assumes policy.txt is exactly 16,384 bytes.
curl --fail-with-body -X PUT "$UPLOAD_URL" \
  -H "Content-Type: text/plain" \
  -H "Content-Length: 16384" \
  --data-binary @./policy.txt

POST/api/v1/files/{fileId}/complete

Envíe {} con otra clave de idempotencia. La finalización valida los bytes y devuelve HTTP 200 con un archivo disponible. Solo después de finalizar correctamente puede usar su ID en file_ids.

cURL · Finalizar una carga
curl --fail-with-body \
  "$REGUNOW_BASE_URL/api/v1/files/$FILE_ID/complete" \
  -H "Authorization: Bearer $REGUNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: policy-complete-001" \
  -d '{}'

Si caduca la URL, elimine el archivo pendiente no utilizado y prepare otra carga con una clave nueva. Repetir la preparación no amplía la vigencia de la URL. Si el resultado de la finalización es incierto, consulte primero el estado del archivo. Si sigue pendiente, reintente finalizarlo con una clave de idempotencia nueva; la anterior reproduce el resultado guardado. Finalizar un archivo ya disponible devuelve sus metadatos.

Carga multiparte

POST/api/v1/files

Para archivos pequeños, envíe un campo multipart/form-data llamado file. Envíe bytes originales, no base64 ni una URL remota. La pasarela de alojamiento puede imponer un límite de cuerpo menor que el permitido por la API.

cURL · Carga multiparte
curl --fail-with-body \
  "$REGUNOW_BASE_URL/api/v1/files" \
  -H "Authorization: Bearer $REGUNOW_API_KEY" \
  -H "Idempotency-Key: policy-upload-001" \
  -F "file=@./policy.pdf;type=application/pdf"

Una carga correcta devuelve HTTP 201 con un archivo disponible; no hace falta una llamada de finalización adicional.

JSON · Archivo disponible (ilustrativo)
{
  "id": "YOUR_FILE_ID",
  "object": "regunow.file",
  "name": "policy.pdf",
  "mime_type": "application/pdf",
  "category": "file",
  "bytes": 16384,
  "status": "available",
  "created_at": "2026-10-01T00:00:00Z",
  "request_id": "request-uuid",
  "usage": {"charged_microcredits":500,"charged_credits":0.0005}
}

Listar, consultar y eliminar archivos

Endpoints de gestión de archivos
MétodoEndpoint de la APIComportamiento
GET/api/v1/filesLista archivos disponibles. limit es 20 por defecto y admite 1–100. Los resultados contienen data, has_more y next_after. Pase next_after como after para la página siguiente.
GET/api/v1/files/{fileId}Consulta los metadatos y el estado del archivo (pendiente, disponible o fallido).
DELETE/api/v1/files/{fileId}Elimina permanentemente el archivo de la Biblioteca y sus artefactos de análisis y vista previa. Devuelve object: "regunow.file.deleted" y deleted: true.
cURL · Listar archivos disponibles
curl --fail-with-body \
  "$REGUNOW_BASE_URL/api/v1/files?limit=20" \
  -H "Authorization: Bearer $REGUNOW_API_KEY"

Las claves de una misma cuenta acceden a sus archivos disponibles en la Biblioteca. Tanto los archivos inexistentes como los de otras cuentas devuelven 404. Si atiende a varios usuarios mediante una cuenta, aplique sus propios permisos antes de adjuntar o eliminar archivos.

Las cargas pendientes y fallidas ocupan cuota hasta que se limpian correctamente. Las incompletas de más de 24 horas pueden limpiarse. Un archivo disponible ha superado la validación de carga; la extracción ocurre al hacer una pregunta, por lo que documentos dañados, cifrados o ilegibles aún pueden fallar durante el análisis.

8. Créditos y límites

Las respuestas de chat, cargas y eliminaciones registran uso medido. El catálogo de modelos y las lecturas de metadatos no cobran créditos por separado. La extracción de documentos y el análisis de imágenes se cobran a través de la solicitud de chat.

Consulte el cargo de una operación en usage.charged_credits. Un crédito equivale a 1.000.000 de microcréditos. Los límites de la clave son independientes de los créditos de la cuenta; ambos pueden impedir una solicitud. Revise el uso y configure los límites en Configuración → Claves de API.

Límites de la API
LímiteCapacidad permitida
Claves de API25 por cuenta
Solicitudes de chat y modificaciones de archivos simultáneas10 por clave
Cuerpo JSON de la solicitud de chat192 KiB
Mensajes por solicitud de chat1–20
Texto de los mensajes32.000 caracteres por mensaje; 64.000 en total
Adjuntos por solicitud de chat5 archivos distintos
Tamaño de documento10 MiB por archivo
Tamaño de imagen5 MiB por archivo
Almacenamiento de la Biblioteca5 GiB compartidos con la Biblioteca de la cuenta
Clave de idempotencia1–120 caracteres ASCII imprimibles, sin espacios
Ventana de repetición24 horas después de la liquidación

Siguen aplicándose los límites de contexto y visión del modelo aunque cada mensaje y adjunto cumpla los límites de la API. Los presupuestos de las claves se restablecen en períodos móviles diarios, semanales o mensuales, desde la creación de la clave o el cambio del período anterior.

Una solicitud que empieza con presupuesto puede superar ligeramente un pequeño saldo restante de la clave, porque el coste final se conoce tras la generación. Al alcanzar el límite se detienen nuevas solicitudes de chat y modificaciones de archivos. Las reservas evitan que solicitudes simultáneas gasten el mismo presupuesto disponible.

9. Reintentos seguros

Envíe un Idempotency-Key para cada solicitud de chat, carga, finalización de carga y eliminación. Es opcional, pero muy recomendable para evitar trabajo y cargos repetidos tras fallos de conexión.

HTTP · Cabecera de idempotencia
Idempotency-Key: a-unique-key-for-this-operation
  • Genere una clave única para cada operación nueva y guárdela junto a la solicitud original.
  • Reintente la operación con la misma clave de API, clave de idempotencia y entradas sin cambios. Una vez liquidada, el estado y la respuesta guardados pueden reproducirse durante 24 horas sin otra llamada al proveedor ni otro cargo.
  • Una repetición incluye X-Idempotent-Replayed: true. Reutilizar la clave con entradas diferentes o mientras la primera solicitud sigue en curso devuelve 409.
  • Los resultados guardados pueden incluir errores. Repetir la clave puede devolver el mismo fallo en lugar de ejecutar otra vez. Compruebe el resultado antes de iniciar una operación nueva.
  • Tras expirar la ventana de repetición, reutilizar una clave inicia una solicitud nueva que puede generar otro cargo.

Use esperas exponenciales ante fallos temporales de red, límites de frecuencia o servicio. Conserve la clave de idempotencia mientras resuelve una solicitud de resultado incierto. No reintente entradas inválidas, credenciales caducadas ni créditos agotados hasta corregir la causa.

Eliminar un archivo no borra una respuesta de chat o carga guardada durante su ventana de repetición. Repetir una carga tras eliminarla devuelve la respuesta original y no recrea el archivo.

10. Errores

Los errores usan una estructura JSON estable. Consulte error.code para gestionarlos y conserve request_id o la cabecera X-Request-Id al contactar con soporte.

JSON · Respuesta de error (ilustrativa)
{
  "error": {
    "type": "request_error",
    "code": "invalid_request",
    "message": "messages must contain 1 to 20 alternating user/assistant messages, end with a user message, and stay within 64,000 characters."
  },
  "request_id": "request-uuid"
}
Errores HTTP y recuperación
EstadoCódigos habitualesQué hacer
400invalid_requestRevise el JSON, los campos permitidos, los mensajes, las opciones del modelo y los ID de archivos.
401invalid_api_keyRevise la cabecera Bearer. Sustituya las claves caducadas, desactivadas o eliminadas.
402account_quota_exceeded, api_key_limit_exceededCompruebe los créditos de la cuenta y el límite de créditos de la clave.
403pro_required, legal_acceptance_requiredRestablezca el acceso Pro o pida al titular que acepte las políticas vigentes en Regunow.
404file_not_foundUse un archivo de la cuenta del titular de la clave.
409idempotency_conflict, request_in_progressUse una clave nueva si cambia las entradas. Si la solicitud sigue en curso, espere y reintente la operación original.
413request_too_largeReduzca el tamaño del mensaje o archivo. Use carga directa si el límite del cuerpo de la pasarela es la causa.
415unsupported_media_typeUse el Content-Type requerido por el endpoint y un cuerpo de solicitud sin comprimir.
429concurrency_limit_exceeded, upstream_rate_limitedReduzca la concurrencia y reintente con esperas exponenciales.
502–504upstream_unavailable, upstream_timeout, service_unavailable, usage_settlement_failedReintente fallos temporales con esperas crecientes y la misma clave de idempotencia. Un fallo guardado puede volver a reproducirse.