Saltar al contenido principal

Tarjetas Kanban

Gestioná tarjetas personalizadas en los tableros Kanban. Listá, recuperá, creá, actualizá y mové tarjetas entre columnas.

Requisitos previos

Todos los endpoints de esta página requieren un token JWT válido, una clave de API y el encabezado tenant. Consultá Autenticación para más detalles.


Listar tarjetas​

Recuperá una lista paginada de tarjetas para un tablero específico.

GET/apidev/v1/kanban/boards/{id}/cards
PermisoAPICLI_KANBAN_READ
Límite de solicitudes30 req/min (ventana deslizante)
Caché15s

Encabezados de la solicitud​

Every request to a protected endpoint requires these headers:

HeaderRequiredDescription
AuthorizationYesBearer token obtained from the Login endpoint. Format: Bearer <token>
X-API-KeyYesCompany integration key provided during onboarding. Format: gtk_xxx...
tenantYesYour assigned tenant domain (default: geotareas.com) — always send your assigned tenant
Content-TypeConditionalapplication/json — required for POST and PUT requests

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíIdentificador único del tablero (BigInt)

Parámetros de consulta​

ParámetroTipoObligatorioPor defectoRestriccionesDescripción
limitintegerNo100Mín 1, Máx 100Registros por página
offsetintegerNo0≥ 0Registros a omitir
column_idstringNo—Longitud máxima 30Filtrar por ID de columna (BigInt)
prioritystringNo—NONE, LOW, MEDIUM, HIGH, URGENTFiltrar por prioridad
assignee_idstringNo—Longitud máxima 30Filtrar por ID del responsable (BigInt)
searchstringNo—Longitud máxima 120Buscar por título de tarjeta
archivedbooleanNofalse—true devuelve solo las tarjetas archivadas. Omitido o false devuelve solo las activas
archived cambia el listado, no lo amplía

No hay forma de traer archivadas y activas en una sola llamada: archived=true devuelve el archivo, cualquier otro valor devuelve el tablero activo. Si necesitás las dos cosas, hacé dos llamadas.

Las tarjetas eliminadas nunca se devuelven, mandes el valor que mandes.

Hasta el 2026-08-16 este parámetro se aceptaba pero se ignoraba — toda llamada volvía con las tarjetas activas. Si tu integración mandaba archived=true y leía el resultado como el archivo, en realidad estaba leyendo tarjetas activas.

Respuesta​

CampoTipoDescripción
idstringIdentificador único de la tarjeta (BigInt)
board_idstringID del tablero padre (BigInt)
column_idstringID de la columna actual (BigInt)
column_namestringNombre de la columna actual
titlestringTítulo de la tarjeta
descriptionstring | nullDescripción de la tarjeta
prioritystringNivel de prioridad
colorstring | nullCódigo de color hexadecimal de la tarjeta
due_datestring | nullFecha de vencimiento (ISO 8601)
labelsarrayObjetos de etiqueta con name y color
checklist_totalintegerTotal de ítems de la lista de control
checklist_completedintegerÍtems completados de la lista de control
assigneeobject | null{id, name} del responsable
comments_countintegerCantidad de comentarios
orderintegerPosición dentro de la columna
archivedbooleanSi la tarjeta está archivada
created_atstringMarca de tiempo ISO 8601
updated_atstringMarca de tiempo ISO 8601

Ejemplos de código​

curl -s -X GET "$TENANT_URL/apidev/v1/kanban/boards/8391728491728491/cards?limit=20&priority=HIGH" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"

Ejemplo de respuesta​

{
"success": true,
"data": [
{
"id": "4200000000000001",
"board_id": "8391728491728491",
"column_id": "9100000000000002",
"column_name": "In Progress",
"title": "Review Q1 fleet maintenance schedule",
"description": "Verify all units have scheduled maintenance before April.",
"priority": "HIGH",
"color": "#EF4444",
"due_date": "2026-03-25T18:00:00",
"labels": [{"name": "maintenance", "color": "#F59E0B"}],
"checklist_total": 5,
"checklist_completed": 3,
"assignee": {"id": "1100000000000001", "name": "Carlos Mendoza"},
"comments_count": 3,
"order": 1,
"archived": false,
"created_at": "2026-03-10T09:00:00",
"updated_at": "2026-03-18T14:30:00"
}
],
"meta": {
"total": 8,
"limit": 20,
"offset": 0
}
}

Encabezados del límite de solicitudes​

Every response includes rate limit information in the headers:

HeaderDescription
X-RateLimit-LimitMaximum number of requests allowed in the current window
X-RateLimit-RemainingNumber of requests remaining in the current window
X-RateLimit-ResetUnix timestamp (seconds) when the current window resets
Retry-AfterSeconds to wait before retrying (only present on 429 responses)
X-Request-IdUnique request identifier for debugging and support tickets

Detalle de la tarjeta​

Recuperá los detalles completos de una única tarjeta, incluyendo los ítems de la lista de control y los campos personalizados.

GET/apidev/v1/kanban/cards/{id}
PermisoAPICLI_KANBAN_READ
Límite de solicitudes30 req/min (ventana deslizante)
Caché15s

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíIdentificador único de la tarjeta (BigInt)

Respuesta​

Devuelve todos los campos del endpoint de listado, más:

CampoTipoDescripción
checklistarrayÍtems de la lista de control [{text, checked}]
custom_fieldsarrayValores de campos personalizados [{field_id, name, type, value}]
created_byobject{id, name} del creador
comments_count y created_by.name traen valores reales

Los dos se resuelven contra la base en cada lectura: comments_count es la cantidad real de comentarios activos de la tarjeta, y created_by.name es el nombre de usuario de quien la creó.

Hasta el 2026-08-16 este endpoint devolvía comments_count: 0 y created_by.name: null en todas las tarjetas, sin importar el dato real. Si armaste algún rodeo por eso — por ejemplo llamar al endpoint de comentarios solo para contarlos — ya podés sacar esa llamada extra.

Ejemplos de código​

curl -s -X GET "$TENANT_URL/apidev/v1/kanban/cards/4200000000000001" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"

Ejemplo de respuesta​

{
"success": true,
"data": {
"id": "4200000000000001",
"board_id": "8391728491728491",
"column_id": "9100000000000002",
"column_name": "In Progress",
"title": "Review Q1 fleet maintenance schedule",
"description": "Verify all units have scheduled maintenance before April.",
"priority": "HIGH",
"color": "#EF4444",
"due_date": "2026-03-25T18:00:00",
"labels": [{"name": "maintenance", "color": "#F59E0B"}],
"checklist": [
{"text": "Check unit 01 schedule", "checked": true},
{"text": "Check unit 02 schedule", "checked": true},
{"text": "Check unit 03 schedule", "checked": true},
{"text": "Order replacement parts", "checked": false},
{"text": "Confirm technician availability", "checked": false}
],
"assignee": {"id": "1100000000000001", "name": "Carlos Mendoza"},
"custom_fields": [
{"field_id": "6200000000000001", "name": "Region", "type": "select", "value": "North"}
],
"comments_count": 3,
"created_by": {"id": "1100000000000002", "name": "Admin User"},
"created_at": "2026-03-10T09:00:00",
"updated_at": "2026-03-18T14:30:00",
"archived": false
},
"meta": {}
}

Crear tarjeta​

Creá una nueva tarjeta en un tablero. Devuelve HTTP 201.

POST/apidev/v1/kanban/cards
PermisoAPICLI_KANBAN_WRITE
Límite de solicitudes10 req/min (ventana deslizante)

Cuerpo de la solicitud​

CampoTipoObligatorioRestriccionesDescripción
board_idstringSíLongitud máxima 30ID del tablero destino (BigInt)
column_idstringSíLongitud máxima 30ID de la columna destino (BigInt)
titlestringSíLongitud máxima 500Título de la tarjeta
descriptionstringNoLongitud máxima 5000Descripción de la tarjeta
prioritystringNoLongitud máxima 10NONE, LOW, MEDIUM, HIGH, URGENT
colorstringNoLongitud máxima 10Código de color hexadecimal
due_datestringNoLongitud máxima 30Fecha ISO 8601
labelsarrayNo—[{name (obligatorio, máx 50), color (máx 10)}]
checklistarrayNo—[{text (obligatorio, máx 500), checked (boolean)}]
assignee_idstringNoLongitud máxima 30ID del usuario responsable (BigInt)
custom_fieldsarrayNo—[{field_id (obligatorio, máx 30), value (máx 500)}]

Respuesta​

CampoTipoDescripción
idstringID de la tarjeta creada (BigInt)
board_idstringID del tablero (BigInt)
column_idstringID de la columna (BigInt)
titlestringTítulo de la tarjeta

Ejemplos de código​

curl -s -X POST "$TENANT_URL/apidev/v1/kanban/cards" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{
"board_id": "8391728491728491",
"column_id": "9100000000000001",
"title": "Schedule maintenance for unit #12",
"priority": "MEDIUM",
"labels": [{"name": "maintenance", "color": "#F59E0B"}],
"checklist": [{"text": "Confirm schedule", "checked": false}],
"due_date": "2026-04-01T12:00:00"
}'

Ejemplo de respuesta​

{
"success": true,
"data": {
"id": "4200000000000002",
"board_id": "8391728491728491",
"column_id": "9100000000000001",
"title": "Schedule maintenance for unit #12"
},
"meta": {}
}

Actualizar tarjeta​

Actualizá una tarjeta existente. Solo se modifican los campos proporcionados (actualización parcial).

PUT/apidev/v1/kanban/cards/{id}
PermisoAPICLI_KANBAN_WRITE
Límite de solicitudes10 req/min (ventana deslizante)

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíIdentificador único de la tarjeta (BigInt)

Cuerpo de la solicitud​

Los mismos campos que en Crear tarjeta. Todos los campos son opcionales.

Respuesta​

CampoTipoDescripción
idstringID de la tarjeta (BigInt)
updated_fieldsstring[]Lista de los campos que se modificaron

Ejemplos de código​

curl -s -X PUT "$TENANT_URL/apidev/v1/kanban/cards/4200000000000001" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{
"priority": "URGENT",
"assignee_id": "1100000000000003"
}'

Ejemplo de respuesta​

{
"success": true,
"data": {
"id": "4200000000000001",
"updated_fields": ["priority", "assignee_id"]
},
"meta": {}
}

Mover tarjeta​

Mové una tarjeta a una columna diferente o cambiá su posición.

PUT/apidev/v1/kanban/cards/{id}/move
PermisoAPICLI_KANBAN_WRITE
Límite de solicitudes10 req/min (ventana deslizante)

Parámetros de ruta​

ParámetroTipoObligatorioDescripción
idstringSíIdentificador único de la tarjeta (BigInt)

Cuerpo de la solicitud​

CampoTipoObligatorioRestriccionesDescripción
target_column_idstringSíLongitud máxima 30ID de la columna destino (BigInt)
positionintegerNo≥ 0Posición destino dentro de la columna. Por defecto: agregada al final

Respuesta​

CampoTipoDescripción
idstringID de la tarjeta (BigInt)
previous_column_idstringID de la columna anterior (BigInt)
new_column_idstringID de la nueva columna (BigInt)
positionintegerNueva posición dentro de la columna

Ejemplos de código​

curl -s -X PUT "$TENANT_URL/apidev/v1/kanban/cards/4200000000000001/move" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{
"target_column_id": "9100000000000003",
"position": 0
}'

Ejemplo de respuesta​

{
"success": true,
"data": {
"id": "4200000000000001",
"previous_column_id": "9100000000000002",
"new_column_id": "9100000000000003",
"position": 0
},
"meta": {}
}

Errores​

CódigoHTTPDescripción
VALIDATION_ERROR400Parámetros inválidos
UNAUTHORIZED401tenant / Authorization / X-API-Key ausente, inválido o expirado
FORBIDDEN403El usuario no tiene el permiso requerido
NOT_FOUND404Recurso no encontrado
RATE_LIMITED429Se superó el límite de solicitudes
INTERNAL_ERROR500Error inesperado del servidor