Skip to content
ver .md sin procesar

Crea tareas desde una lista en una sola llamada

Importa hasta 100 tareas de Dailybot por solicitud con el endpoint en lote: Idempotency-Key, una simulación previa, resultados por elemento y claves de tarea consecutivas.

Beta

Plan está en beta. Todo lo que está bajo /plan en la aplicación web, los comandos del CLI y de la agent skill para proyectos, objetivos, tableros y tareas, y la API pública /v1/plan/ puede cambiar antes de la disponibilidad general. ¿Quieres probarlo con tu equipo? Escribe a [email protected].

Importar una lista (una hoja de cálculo, un checklist, el resultado de una sesión de planeación) no debería costar una solicitud por fila, y un reintento no debería crear todo dos veces. POST /v1/plan/tasks/bulk/ crea hasta 100 tareas por llamada, exige un Idempotency-Key e informa el resultado de cada elemento por separado.

1. Revisa antes con una simulación

?dry_run=true ejecuta la llamada completa y la revierte, así ves lo que pasaría sin escribir nada (no necesitas clave de idempotencia):

curl -sS -X POST "https://api.dailybot.com/v1/plan/tasks/bulk/?dry_run=true" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "create",
    "board": "00000000-0000-4000-8000-000000000002",
    "items": [
      { "title": "Write the migration guide", "external_id": "row-1" },
      { "title": "Record the demo", "external_id": "row-2", "priority": 2 }
    ]
  }'

La simulación responde con consequence (una frase para mostrarle a una persona), items con los cambios que haría cada elemento y refused con los elementos que fallarían y el motivo.

2. Crea las tareas

Envía el mismo cuerpo sin dry_run y con un Idempotency-Key:

curl -sS -X POST "https://api.dailybot.com/v1/plan/tasks/bulk/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: import-2026-09-25-batch-1" \
  -d '{
    "operation": "create",
    "board": "00000000-0000-4000-8000-000000000002",
    "items": [
      { "title": "Write the migration guide", "external_id": "row-1" },
      { "title": "Record the demo", "external_id": "row-2", "priority": 2 }
    ]
  }'
{
  "succeeded": 2,
  "failed": 0,
  "results": [
    { "task": "00000000-0000-4000-8000-000000000105", "key": "ENG-150", "external_id": "row-1", "status": "ok", "version": 1 },
    { "task": "00000000-0000-4000-8000-000000000106", "key": "ENG-151", "external_id": "row-2", "status": "ok", "version": 1 }
  ]
}
  • Los elementos llevan un title (hasta 512 caracteres) y, de forma opcional, description, state, owner, priority, estimate, start_date, due_date y external_id.
  • external_id vuelve en cada resultado, así puedes relacionar los resultados con tus filas y conciliar después de un reintento.
  • Las claves se asignan como un bloque consecutivo, en el orden en que enviaste los elementos, así la importación se lee en orden después (ENG-150, ENG-151, …).
  • Por defecto, las tareas nuevas quedan al final de cada columna. Agrega "position": "start" junto a operation para ponerlas arriba, en el orden de tus elementos.

Desde el CLI:

dailybot plan task bulk --operation create --board 00000000-0000-4000-8000-000000000002 -f tasks.json --dry-run
dailybot plan task bulk --operation create --board 00000000-0000-4000-8000-000000000002 -f tasks.json

3. Lee los resultados por elemento

La llamada responde 200 aunque algunos elementos fallen: el estado HTTP indica que el lote fue aceptado, no que cada elemento tuvo éxito. Revisa failed y el status de cada resultado; un elemento fallido trae code, detail y, a veces, extra:

{ "task": "ENG-9", "status": "error", "code": "version_conflict", "detail": "This task changed since you loaded it.", "extra": { "current_version": 4 } }

4. Reintenta sin riesgo

Si se cae la conexión, envía el mismo cuerpo con el mismo Idempotency-Key. Recibes la primera respuesta de nuevo (con Idempotency-Replayed: true) y nada se crea dos veces. Las claves se recuerdan durante 24 horas. Un cuerpo distinto con la misma clave devuelve 409 idempotency_key_payload_mismatch; usa una clave nueva para cada lote nuevo.

Más de 100 filas

Divide la lista en lotes de hasta 100 elementos, con una clave por lote (por ejemplo, import-2026-09-25-batch-1, -batch-2, …). Más de 100 elementos en una llamada devuelve 400 too_many_items. Las llamadas en lote cuentan contra un límite de 30 por minuto por actor.

Otras operaciones en lote

El mismo endpoint aplica una operación a hasta 100 tareas existentes, identificadas por uuid o clave: move, update, archive, restore y set_labels (que reemplaza todo el conjunto de etiquetas). set_owner, set_priority, set_due_date y set_parent son alias de update, y delete es un alias de archive. Un payload que nombra una tarea de otra organización se rechaza completo, antes de escribir nada.

Referencia