Requisitos previos
- Un token de API y el nombre de host de Zylon. Consulta Gestión de tokens de Workspace.
- Envía
Authorization: Bearer {API_TOKEN}yx-org: {org_slug}en las peticiones de Workspace. - Envía
Content-Type: application/jsonpara cuerpos JSON. Deja que tu cliente HTTP establezca el delimitador de las peticiones multipart.
https://{BASE_URL}/api/v1.
Rutas de artefactos
Sustituye el prefijo de artefactos del proyecto o de la organización por/app/artifact. Indica explícitamente el proyecto para asignar la propiedad o filtrar cuando corresponda.
Parametros del endpoint
Parametros del endpoint
x-org, no envíes también organization_id. Sin x-org, especificar organization_id requiere Operator o SuperAdmin. Crear artefactos de organización requiere AppAdmin o superior; los artefactos Link requieren un proyecto.
Cuerpos de creación
El campo JSON actualcontent contiene bytes de archivo o texto codificados en Base64. Sustituye al antiguo campo de texto raw_content. Por ejemplo, el texto UTF-8 Hello se convierte en SGVsbG8=.
- Petición 1.57
- Petición 1.58
POST /app/project/{projectID}/artifactCambios en el cuerpo
Cambios en el cuerpo
Cuerpos de actualización
El antiguocontent de actualización contenía estado binario del editor codificado en Base64. El content JSON actual contiene texto UTF-8, como Markdown. Exporta el documento del editor a Markdown; decodificar sus bytes Base64 no produce texto del documento.
- Petición 1.57
- Petición 1.58
PUT /app/project/{projectID}/artifact/{artifactID}{BASE64_EDITOR_STATE} representa tu documento del editor ya codificado.artifacts[].update de las actualizaciones en lote. Las entradas siguen usando artifactId y update. Elimina plain_text_content: era un texto de búsqueda separado y ahora se deriva del documento. Para sustituir un archivo, usa file_data multipart en la ruta actual de actualización. Consulta actualizar un artefacto.
Qué peticiones antiguas siguen siendo compatibles
- La creación, validación y reintento con JSON aceptan
raw_content; la creación multipart también acepta bytes de archivo. La creación antigua obtiene el proyecto de la URL y rechazaproject_id,organization_idy el nuevocontentJSON en el cuerpo. - Las actualizaciones JSON antiguas convierten el estado del editor de Base64 a Markdown antes de guardar. El servicio de conversión de documentos de la instalación debe estar disponible. Se puede enviar contenido binario con o sin
plain_text_content; este último campo por sí solo no sustituye el contenido. - La actualización, validación de actualización y actualización en lote antiguas solo aceptan JSON. Usa el endpoint actual para sustituir archivos con multipart.
- Se rechaza una creación que combine
raw_contenty un archivo: no se pueden conservar ambos en el único campo de contenido actual. Envía una sola representación del contenido. - Se rechazan campos desconocidos y tipos de datos no válidos. La creación en una organización solo acepta ámbitos de esa organización.
Respuestas y selección de artefactos
Las respuestas antiguas conservanhas_content, siempre false: este campo describía el contenido binario del editor, no la existencia de un archivo. Los bytes originales del editor no se pueden reconstruir, por lo que content es nulo/se omite.
En las consultas de detalle de artefactos por la URL antigua, añade include_content=true para recibir el texto UTF-8 disponible como raw_content. El valor por defecto es false; los listados y las respuestas de escritura no incluyen texto. Se conservan los espacios y el texto vacío. Los archivos no textuales y el UTF-8 inválido no generan raw_content. Se aplican los permisos actuales de descarga: si están desactivadas, devuelve 403; si falta el archivo almacenado, devuelve el error actual de descarga.
Campos de contenido antiguos (respuesta parcial)
Campos de contenido antiguos (respuesta parcial)
content binario del editor en Base64 a partir del texto./app/artifact/{artifactID}/download para obtener el contenido almacenado. /app/artifact/{artifactID}/parsed-content devuelve texto extraído y requiere un índice vectorial inicializado. La descarga devuelve una URL prefirmada por defecto; con Content-Disposition: attachment devuelve los bytes del archivo. Las URLs antiguas de descarga también admiten ambos modos.
created_by ahora representa una cuenta. Actualiza el código que lee los datos del creador o compara sus IDs; consulta IDs de cuenta y campos renombrados.
scopes[].ws_auto_select y scopes[].enabled ya existían en las versiones publicadas de 1.57 y siguen siendo compatibles, incluido enabled: false. El campo anterior ws_auto_select de nivel superior no se acepta. Las skills siguen usando file_data; no hay una migración independiente de su cuerpo. Consulta los ámbitos de artefactos.
Miembros del espacio de trabajo
Los datos de usuario se unifican en la cuenta: la identidad, el nombre, el correo y la imagen de perfil pertenecen a la cuenta. El antiguo usuario pasa a ser una membresía del espacio de trabajo, que mantiene los roles, permisos y estado activo/inactivo de esa cuenta dentro del espacio. Sustituye/app/user por /app/member. Los IDs de estas rutas siguen siendo IDs de miembro del espacio de trabajo, no IDs de cuenta.
/app/user al listar, consultar, crear, cambiar el rol, activar o desactivar un miembro conservan name, email y profile_picture (si está disponible) en el primer nivel, tomados del perfil actual de la cuenta. Se mantienen id, org_id, account_id, state, roles y created_at de la membresía. Los datos eliminados del puesto de trabajo no se pueden recuperar y son nulos/se omiten. Estos campos de respuesta no restauran las actualizaciones de perfil mediante la ruta antigua del miembro.
GET /app/me conserva su URL, pero también devuelve el nuevo modelo de miembro. El nombre, el correo y la imagen de perfil son datos de la cuenta y ya no son campos de primer nivel del miembro. Solicita include=Account al listar miembros, consultar un miembro o llamar a /app/me para recibir la cuenta anidada.
Parametros del endpoint
Parametros del endpoint
AppGuest, AppMember, AppAdmin, AppOwner.POST /account/{accountId} (me permite actualizar tu propia cuenta), en lugar del endpoint de miembros. Los antiguos campos job_position_name y job_position_description se eliminan del miembro; no forman parte del modelo de cuenta.
Respuesta actual de miembro
Respuesta actual de miembro
IDs de cuenta y campos renombrados
Migrar IDs de usuario guardados
Si tu cliente guardóuserId a partir del campo id de una respuesta /app/user de 1.57, ese valor es un ID de miembro del espacio de trabajo. No sustituyas todos los userId por accountId: identifican registros distintos. Una cuenta puede tener IDs de miembro diferentes en distintas organizaciones.
- Conserva el ID de miembro guardado y su organización. Usa el endpoint actual de miembros para leer el ID de cuenta asociado:
Parametros del endpoint
Parametros del endpoint
Respuesta de mapeo de IDs (campos seleccionados)
Respuesta de mapeo de IDs (campos seleccionados)
account_id se devuelve sin un parámetro include. Añade include=Account si también necesitas el perfil de cuenta; consulta la respuesta completa de miembro.- Guarda ambos IDs con nombres distintos. Usa
account_idpara comparar concreated_by.idde artefactos, hilos, interacciones e incidencias, y para los filtroscreated_byde artefactos o incidencias. Conserva elidde miembro para/app/member/{wsMemberId}, miembros de proyecto, transferencia de propiedad ymetadata.ws_member_iddel chat. - Actualiza las llamadas afectadas a las rutas actuales y nombres canónicos, y comprueba tus relaciones y filtros guardados. Por ejemplo, un filtro de creador de artefactos debe usar
created_by={accountId}; una petición de miembro de proyecto sigue usandows_member_id: "{wsMemberId}".
GET /api/v1/app/me devuelve la misma distinción entre id y account_id. Para migrar un directorio, pagina /app/member por separado en cada organización y crea un mapeo de IDs de miembro a IDs de cuenta. Si tu aplicación necesita un ID de miembro para la cuenta de un creador, resuelve su membresía en la organización seleccionada; un ID de cuenta por sí solo no identifica una membresía concreta.
Qué conservan los alias antiguos
Las lecturas de/app/user antiguo pueden restaurar campos de perfil seleccionados, como name y email, pero id sigue siendo un ID de miembro y account_id sigue siendo un ID de cuenta. Los objetos de creador de artefactos antiguos ya usan IDs de cuenta. include=User en las consultas de creador compatibles selecciona datos de cuenta; no restaura el antiguo objeto de usuario del espacio de trabajo ni convierte IDs de creador.
Usa los alias antiguos solo como puente temporal para los formatos de petición documentados en esta guía. Si tu integración necesita las relaciones antiguas de IDs de usuario, filtros de creador o comportamiento de actualización de perfil, migra a la API actual y al modelo de cuenta/miembro descrito arriba. Cambiar solo la URL o el nombre de campo no basta.
Usar nombres de campo canónicos
Los alias temporales siguientes aceptan ciertos nombres de entrada antiguos. Las respuestas mantienen el modelo y los nombres de campo actuales; los alias no convierten IDs de miembro en IDs de cuenta.Chats e hilos
Mover el chat de proyecto a la ruta unificada
SustituyePOST /app/project/{projectID}/chat por POST /app/chat y mueve el selector de proyecto al cuerpo. Usa una petición de mensajes envuelta en pgpt (private_gpt sigue siendo un alias de entrada). La ruta actual también acepta una petición antigua sin envolver para contexto del espacio de trabajo, pero los selectores de proyecto y artefactos requieren el cuerpo envuelto. /app/chat/validate recibe la petición de mensajes sin envolver.
Parametros del endpoint
Parametros del endpoint
artifacts.document, artifacts.connector, artifacts.skill o artifacts.agent_flow. Cada campo es un array de selectores con scope (organization o project), all_artifacts opcional y artifacts_ids opcional (observa el plural). Por ejemplo:
pgpt y, para el ámbito de proyecto, project_id. No envíes los campos de los ejemplos antiguos de referencia artifact_ids o all_artifacts en el nivel superior: los campos desconocidos se ignoran y no seleccionan artefactos. Una categoría no puede repetir el mismo ámbito ni combinar all_artifacts: true con artifacts_ids no vacío. Consulta peticiones de chat.
Archivos de hilo y estado de lectura
1.58 añade la escritura de archivos sin multipart conPUT /app/thread/{threadID}/put-file/{path...}. Envía los bytes en el cuerpo. POST /app/thread/{threadID}/upload-file sigue usando el campo multipart file y ahora acepta path y namespace opcionales. Las subidas multipart, escrituras sin multipart y descargas seleccionan session (por defecto), artifacts o skills mediante namespace; la descarga también acepta disposition=attachment (por defecto) o inline. Consulta archivos de hilo para subida, descarga y conversión de artefactos MDX.
En los listados de hilos del proyecto, solicita include=ReadState para recibir read_state.last_read_at y read_state.has_unread_response. Un hilo nuevo creado por otra cuenta también puede contar como no leído. Listar interacciones con GET /app/thread/{threadID}/interaction ahora avanza el punto de lectura del solicitante hasta las respuestas completadas devueltas. Los clientes que consultan este endpoint periódicamente pueden marcar así el contenido como leído; tenlo en cuenta en la lógica de notificaciones y sondeo.
Peticiones de filesystem
Cuerpo de la petición
Cuerpo de la petición
/ingest y project_id en el cuerpo, como se describe arriba.
Bloques de herramientas de servidor
En 1.57, cada llamada a herramienta de un mensaje se devolvía como un bloquetool_use seguido de un bloque tool_result, tanto si la ejecutaba Zylon como si la ejecutaba tu aplicación. En 1.58, las herramientas que Zylon ejecuta en el servidor usan el formato de herramientas de servidor de la API de Mensajes de Anthropic. Las herramientas que ejecuta tu aplicación (herramientas personalizadas) no cambian y siguen usando tool_use y tool_result.
Esto afecta al contenido de los mensajes en los eventos en streaming, en las interacciones guardadas de los hilos y en las respuestas de /messages. Actualiza cualquier código que detecte llamadas a herramientas comprobando type == "tool_use" o type == "tool_result".
server_tool_use.namees elnamede la herramienta en la solicitud. Los chats del Workspace envían la herramienta web fetch comoweb_extract, así que sus llamadas aparecen comoweb_extract; los clientes de la ZylonGPT API ven el nombre que enviaron (web_extractoweb_fetch). Identifica el resultado por el tipo de bloque (web_fetch_tool_result) en lugar del nombre.- Los IDs de las llamadas a herramientas de servidor empiezan por
srvtoolu_, y los de herramientas de cliente, portool_. Eltool_use_iddel resultado hace referencia al ID de la llamada, como antes. - Zylon ya ha ejecutado las herramientas de servidor, así que no envíes un resultado para ellas.
stop_reason: "tool_use"sigue aplicándose solo a las herramientas que ejecuta tu aplicación. - Los bloques siguen el formato de herramientas de servidor de Anthropic, por lo que los SDKs de Anthropic pueden leerlos directamente. Ignora los campos que no reconozcas, porque Zylon puede añadir campos adicionales.
Reglas de migración
- Herramientas de servidor genéricas (
server_tool_result): solo cambian los valores detypede los bloques y el prefijo del ID.contenteis_errorfuncionan como antes, así que puedes reutilizar tu parser de 1.57. - Herramientas web y de ejecución de código:
contentes ahora un objeto tipado (o una lista de objetos tipados en la búsqueda web) en lugar de una lista de bloquestext. Estos bloques no tienen campois_error. Para detectar un fallo, comprueba sicontent.typetermina en_errory leecontent.error_code. - Fallos que 1.57 devolvía como texto: en 1.57, las herramientas del editor de texto devolvían los fallos como un
tool_resultcorrecto cuyo texto empezaba porError:. En 1.58 devuelven un objeto de error. - Códigos de salida distintos de cero: un comando bash que termina con un código distinto de cero no es un error en ninguna de las dos versiones. En 1.58, lee
return_codeen lugar de extraerexit_code:del texto.
Ejemplos de migración por herramienta
Cada ejemplo muestra el bloque de llamada y el bloque de resultado de una llamada correcta y de una llamada fallida. Los IDs, las entradas y los textos de resultado son solo ejemplos.web_search
web_search
- 1.57
- 1.58
- 1.58 con extensión de Zylon
web_extract (web fetch)
web_extract (web fetch)
- 1.57
- 1.58
- 1.58 con extensión de Zylon
bash → bash_code_execution
bash → bash_code_execution
- 1.57
- 1.58
- 1.58 con extensión de Zylon
view, create, str_replace, insert → text_editor_code_execution
view, create, str_replace, insert → text_editor_code_execution
text_editor_code_execution y la operación se indica en input.command. El resto de campos de entrada mantienen su nombre. En insert, 1.58 acepta tanto insert_text como new_str.- 1.57
- 1.58
- 1.58 con extensión de Zylon
view:create:str_replace:insert:Error::semantic_search
semantic_search
- 1.57
- 1.58
summarize
summarize
- 1.57
- 1.58
tabular_analysis
tabular_analysis
- 1.57
- 1.58
database_query
database_query
- 1.57
- 1.58
present_files
present_files
- 1.57
- 1.58
present_server
present_server
- 1.57
- 1.58
Herramientas de skills (load_skill, unload_skill, list_skills)
Herramientas de skills (load_skill, unload_skill, list_skills)
error en el JSON y mantiene is_error: false.- 1.57
- 1.58
Herramientas MCP
Herramientas MCP
- 1.57
- 1.58
Herramientas personalizadas (sin cambios)
Herramientas personalizadas (sin cambios)
stop_reason: "tool_use", tu aplicación ejecuta la herramienta y envía de vuelta un bloque tool_result, como en 1.57.Peticiones con la extensión de Zylon activada
Si una petición activa la extensión de Zylon (system.extensions incluye zylon):
- Los resultados de
web_searchyweb_fetchse devuelven como un bloquetool_resultnormal, como muestran los ejemplos anteriores. El bloque de llamada sigue siendoserver_tool_usey el ID de la llamada sigue empezando porsrvtoolu_. - Los objetos de error de
bash_code_execution_tool_resultytext_editor_code_execution_tool_resultincluyen un campodetailcon el error original. - Los bloques específicos de Zylon, como
source, se conservan en el contenido deserver_tool_result.
Envío del historial de conversación
Puedes enviar de vuelta enmessages los bloques server_tool_use y los resultados de herramientas de servidor tal como los recibiste. Zylon los convierte internamente, así que no necesitas cambios si reenvías sin modificar los turnos anteriores del asistente. El historial con los bloques tool_use y tool_result de 1.57 se sigue aceptando.
Antes de actualizar tu cliente
- Sustituye las URLs obsoletas y mueve el selector de proyecto a la consulta o al cuerpo correspondiente.
- Usa bytes Base64 para crear artefactos con JSON, texto para actualizarlos y
file_datapara archivos multipart. - Adapta la lectura de respuestas a la separación entre cuenta y miembro y a la eliminación del contenido inline de artefactos. Revisa los IDs de usuario/cuenta almacenados, relaciones, comparaciones y filtros aunque las llamadas sigan funcionando.
- Usa IDs de cuenta en los filtros de creador y los nombres canónicos de campos e inclusiones.
- Adapta el procesado de mensajes a
server_tool_usey a los bloques de resultado de herramientas de servidor, y devuelvetool_resultsolo para tus herramientas personalizadas. - Adapta los cuerpos de chat, selectores de artefactos por ámbito, SSE, archivos de hilo y sondeo del estado de lectura.
- Prueba con 1.58, incluidos permisos, validación, conversión de contenido y validación de filesystem. Las URLs antiguas usan la autorización, las respuestas y el comportamiento de servicio actuales; no reproducen todos los comportamientos de 1.57.