---
title: "Crea un paso"
method: POST
path: "/tasks/{taskId}/steps"
tags: ["Tasks"]
---

# Crea un paso

`POST /tasks/{taskId}/steps`

## Request

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

Queda al final del checklist: `step_order` se asigna solo. Con `after_step_id` entra justo debajo de ese paso y los siguientes corren una posición.

## Path parameters

- `taskId` string, required

## Request body

- CreateStepDto
  - `after_step_id` string: Inserta el paso justo debajo de este otro (id de un step de la MISMA tarea): los que venían después corren una posición. Sin él —o si ese step no existe— el paso va al final. Es lo que usa el checklist cuando das Enter parado en una subtarea del medio.
  - `assigned_to_user_id` number, nullable: Persona asignada al paso: quien tiene que hacerlo. Un paso no se asigna a un Met — el checklist es de personas.
  - `description` string
  - `name` string, required
  - `result_content` unknown[]: Bloques con el resultado del step (donde Met o el humano deja el output tangible). Validados por BlockValidatorService. Sustituye el array completo.
    - unknown
  - `status` string: Estado del paso: `pending` o `completed`. Aceptado solo en update — al crear queda en pending. Es como la persona asignada marca su paso hecho.

## 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` TaskStepResponseDto, required
    - `assigned_to_user_id` number, nullable: Persona que tiene que hacer el paso. Un paso no se asigna a un Met.
    - `created_at` string, nullable
    - `description` string, nullable
    - `id` string, required
    - `name` string, required
    - `result_content` TaskStepResultBlockDto[]: Resultado del paso como bloques de contenido. Viene hidratado (las referencias traen su `__hydrated`) cuando la respuesta sale de un endpoint que lo tocó.
      - `created_at` string, required
      - `data` object, required
      - `id` string, required
      - `type` 'text' | 'heading' | 'image' | 'task' | 'file' | 'collection_ref' | 'item_ref' | 'contact_ref' | 'page_ref' | 'web_fields_ref', required
      - `updated_at` string, required
    - `status` 'pending' | 'completed': Un paso está hecho o no lo está. Las tareas creadas antes del retiro del ejecutor pueden conservar `running`, `failed` o `cancelled`; nadie los escribe ya.
    - `step_order` number, required: Posición dentro del checklist, 1-based. El orden lo fija `POST /steps/reorder`.
    - `task_id` string, required
    - `updated_at` string, nullable

## 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/5d9ca294295c?raw)
