---
title: "Importa un flujo desde JSON portable. Aterriza como draft. Body: { doc, bindings?, target_flow_id? }. Con target_flow_id actualiza ese flujo en vez de crear uno nuevo (idempotente)."
method: POST
path: "/workspaces/{workspaceId}/flows/import"
tags: ["Flows"]
---

# Importa un flujo desde JSON portable. Aterriza como draft. Body: { doc, bindings?, target_flow_id? }. Con target_flow_id actualiza ese flujo en vez de crear uno nuevo (idempotente).

`POST /workspaces/{workspaceId}/flows/import`

## Request

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

Aterriza siempre como **borrador**: importar no publica. Con `target_flow_id` sobrescribe ese flujo en lugar de crear uno nuevo, que es lo que hace repetible el despliegue desde un repositorio — la misma llamada dos veces deja el mismo flujo, no dos. Los `bindings` resuelven las dependencias que `import/preview` haya listado.

## Path parameters

- `workspaceId` number, required

## Response `201`

- 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` FlowImportResultResponseDto, required
    - `flow` FlowResponseDto, required
      - `created_at` string, required
      - `created_by` number, nullable, required: Usuario que lo creó. `null` si lo creó el sistema o una key de API.
      - `description` string, nullable, required
      - `draft_definition` FlowDefinitionDto, required
        - `edges` FlowEdgeDto[], required
          - `id` string, required
          - `source` string, required: `id` del nodo origen.
          - `sourceHandle` string, nullable: Handle de salida del origen — relevante en condición (sí/no) y en bifurcaciones.
          - `target` string, required: `id` del nodo destino.
          - `targetHandle` string, nullable
        - `nodes` FlowNodeDto[], required
          - `data` object, required: Config del nodo. Su forma depende del `type`: los campos válidos de cada uno están declarados en `GET /node-registry` (`fields[]`).
          - `id` string, required: UUID generado por el cliente al arrastrar el nodo a la paleta.
          - `position` FlowNodePositionDto, required
            - `x` number, required
            - `y` number, required
          - `type` string, required: Tipo declarado en el node-registry (`GET /node-registry`).
      - `id` string, required: UUID del flujo.
      - `is_system` boolean: Flujo de sistema (el Flujo principal): no se puede archivar ni borrar.
      - `name` string, required
      - `published_at` string, nullable, required: Cuándo se publicó por última vez. `null` si nunca se publicó.
      - `published_definition` FlowDefinitionDto, required
        - `edges` FlowEdgeDto[], required
          - `id` string, required
          - `source` string, required: `id` del nodo origen.
          - `sourceHandle` string, nullable: Handle de salida del origen — relevante en condición (sí/no) y en bifurcaciones.
          - `target` string, required: `id` del nodo destino.
          - `targetHandle` string, nullable
        - `nodes` FlowNodeDto[], required
          - `data` object, required: Config del nodo. Su forma depende del `type`: los campos válidos de cada uno están declarados en `GET /node-registry` (`fields[]`).
          - `id` string, required: UUID generado por el cliente al arrastrar el nodo a la paleta.
          - `position` FlowNodePositionDto, required
            - `x` number, required
            - `y` number, required
          - `type` string, required: Tipo declarado en el node-registry (`GET /node-registry`).
      - `slug` string, nullable, required: Identificador legible, único por workspace. `null` si no se le puso uno.
      - `status` 'draft' | 'published' | 'archived', required
      - `updated_at` string, required
      - `workspace_id` number, required
    - `mode` 'created' | 'updated', required: `updated` cuando se mandó `target_flow_id`; `created` en caso contrario.
    - `warnings` FlowLintWarningDto[], required
      - `code` 'unresolved_ref' | 'dropped_reference' | 'possible_secret' | 'skipped_entity' | 'missing_variable', required
      - `message` string, required
      - `where` string: Ubicación aproximada: ref de la entidad + ruta del campo.

## 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.
- `409`: La operación entra en conflicto con el estado actual o con un Idempotency-Key en uso. No reintentes con el mismo key y un body distinto.
- `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/fc6d3aad75de?raw)
