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_dateyexternal_id. external_idvuelve 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 aoperationpara 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.