---
title: "Exporta una Función IA como manifiesto JSON versionable (contrato + dependencias descritas). Nunca lleva credenciales."
method: GET
path: "/workspaces/{workspaceId}/functions/{functionId}/export"
tags: ["Functions"]
---

# Exporta una Función IA como manifiesto JSON versionable (contrato + dependencias descritas). Nunca lleva credenciales.

`GET /workspaces/{workspaceId}/functions/{functionId}/export`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/workspaces/{workspaceId}/functions/{functionId}/export`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Devuelve la Función como manifiesto versionable, con las dependencias descritas en vez de referenciadas por id, para poder importarla en otro workspace. **Nunca incluye credenciales**, así que el manifiesto se puede guardar en un repositorio.

## Path parameters

- `workspaceId` number, required
- `functionId` number, required

## Response `200`

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` FunctionPortableDocDto, required
    - `content_hash` string, required: Hash del JSON canónico de `{ function, dependencies }` — para detectar cambios.
    - `dependencies` FunctionDependencyDto[], required
      - `kind` 'workspace_variable' | 'flow', required
      - `name` string, required: Nombre humano con el que se resuelve en el workspace destino.
      - `origin_id` object, nullable, required: ID en el workspace de ORIGEN. Informativo; el destino resuelve por nombre.
      - `purpose` string, required: Para qué la usa la Función. Lo lee la persona que importa para saber qué tiene que crear antes.
      - `ref` string, required
    - `exported_at` string, required
    - `function` FunctionPortableBodyDto, required
      - `activo` boolean, required: Si la Función debería quedar activa. Al importar creando una Función NUEVA se fuerza a `false` — nada que llega en un documento empieza a atender clientes sin que una persona lo mire, mismo criterio que el flujo importado que aterriza como draft.
      - `descripcion` string, required
      - `flow_ref` string, nullable, required: `null` cuando el handler es HTTP. Cuando es un flujo, acá va el **marcador** de la dependencia (`@snapshot:flow:<ref>`), no el UUID de origen: el UUID no existe en el workspace destino.
      - `function_prompt` string, required
      - `http` FunctionHttpConfigDto, required
        - `auth_workspace_variable` string: Nombre de la variable del workspace que guarda el Bearer token. El token en sí no se devuelve nunca.
        - `headers` object: Headers estáticos **no sensibles**. `Content-Type` lo pone Meteor solo si hay cuerpo JSON.
        - `last_probe` FunctionProbeResultDto
          - `checked_at` string, required
          - `code` string, nullable, required: Código de máquina del hallazgo, en inglés. `null` cuando todo salió bien.
          - `duration_ms` number, required
          - `http_status` number, nullable, required: Status HTTP de la respuesta. `null` si no hubo respuesta.
          - `message` string, required: Qué pasó, en español, para el developer.
          - `method` string, nullable, required: Método HTTP que se usó. `null` si no se llegó a mandar nada.
          - `mode` 'safe' | 'invoke' | 'off', required: Modo con el que se probó. Ver `FunctionHttpConfigDto.probe`.
          - `status` 'ok' | 'warning' | 'unreachable' | 'blocked' | 'skipped', required
        - `method` 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'
        - `probe` 'safe' | 'invoke' | 'off': Qué tan lejos puede llegar la **prueba de humo** que Meteor corre al registrar o cambiar el endpoint. - `safe` (default): `HEAD` y, si hace falta, `OPTIONS`. Sin cuerpo, así que tu handler no recibe ningún argumento sobre el que actuar. Es lo único seguro contra un endpoint del que Meteor no sabe nada. - `invoke`: manda tu método configurado con el cuerpo `{"__met_probe":true}` y el header `X-Met-Probe: 1`. **Elígelo solo si tu endpoint es idempotente o reconoce esa marca**: si no, la prueba ejecuta tu lógica de verdad. - `off`: no se prueba nada.
        - `sign_secret_variable` string: Nombre de la variable del workspace con el secreto que firma `X-Met-Signature`. El secreto en sí no se devuelve nunca. Omitirla **no** deja la llamada sin firmar: Meteor firma igual, con el secreto administrado del workspace (variable `MET_TOOL_SIGN_SECRET`, que crea sola la primera vez). Este campo solo sirve para elegir otro secreto.
        - `timeout_ms` number: Timeout de la llamada, en milisegundos. Default 30 000, tope 60 000.
        - `url` string, required: Endpoint del cliente que se invoca cuando el Met usa la tool.
      - `nombre` string, required
      - `parameters` FunctionParameterDto[], required
        - `description` string, required: Qué es el parámetro. El Met lo lee para saber qué recolectar.
        - `enum_values` string[], nullable, required: Valores permitidos (enum del JSON schema). `null` = valor libre.
        - `memory` boolean, required: Flag "Memoria" heredado de uChat. Se persiste; reservado para uso futuro.
        - `name` string, required: Nombre EN INGLÉS — entra al JSON schema de la tool como propiedad.
        - `required` boolean, required: `true` = el Met no puede invocar la tool sin este valor.
        - `save_to` string, nullable, required: `field_key` del contacto (o `workspace.<nombre>`) donde persistir el valor que el Met recolectó. `null` = no se guarda en ningún lado.
        - `type` 'string' | 'number' | 'boolean', required: Tipo del parámetro en el JSON schema de la tool.
      - `ref` string, required
      - `required_tools` string[], required
      - `version` number, required: Versión del contrato invocable en el origen. Ver `FunctionResponseDto.version`.
    - `kind` 'meteor.function', required
    - `schema_version` number, required
    - `source` FunctionPortableSourceDto, required
      - `function_ref` string, required
      - `workspace_id` number, required

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/5d9ca294295c?raw)
