Skip to main content

Kanban Comments

List and create threaded comments on Kanban cards for team collaboration.

Prerequisites

All endpoints on this page require a valid JWT token, API key, and tenant header. See Authentication for details.


List Comments​

Retrieve a paginated list of comments for a specific card, ordered by creation date (newest first).

GET/apidev/v1/kanban/cards/{id}/comments
PermissionAPICLI_KANBAN_READ
Rate Limit30 req/min (sliding window)
Cache15s

Request Headers​

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

Path Parameters​

ParameterTypeRequiredDescription
idstringYesCard unique identifier (BigInt)

Query Parameters​

ParameterTypeRequiredDefaultConstraintsDescription
limitintegerNo25Min 1, Max 100Records per page
offsetintegerNo0≥ 0Records to skip

Response​

FieldTypeDescription
idstringComment unique identifier (BigInt)
textstringComment text content
authorobject{id, name} of the author
mentionsarray[{id, name}] mentioned users
created_atstringISO 8601 timestamp
updated_atstringISO 8601 timestamp

Code Examples​

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

Example Response​

{
"success": true,
"data": [
{
"id": "5500000000000001",
"text": "Device installed successfully. Waiting for signal confirmation.",
"author": {"id": "1100000000000001", "name": "Carlos Mendoza"},
"mentions": [],
"created_at": "2026-03-18T15:30:00",
"updated_at": "2026-03-18T15:30:00"
},
{
"id": "5500000000000002",
"text": "Please prioritize this — client escalated. @Maria please review.",
"author": {"id": "1100000000000002", "name": "Admin User"},
"mentions": [{"id": "1100000000000003", "name": "Maria Lopez"}],
"created_at": "2026-03-17T10:00:00",
"updated_at": "2026-03-17T10:00:00"
}
],
"meta": {
"total": 3,
"limit": 10,
"offset": 0
}
}

Rate Limit Headers​

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

Create Comment​

Add a new comment to a card. Returns HTTP 201.

POST/apidev/v1/kanban/cards/{id}/comments
PermissionAPICLI_KANBAN_WRITE
Rate Limit10 req/min (sliding window)

Path Parameters​

ParameterTypeRequiredDescription
idstringYesCard unique identifier (BigInt)

Request Body​

FieldTypeRequiredConstraintsDescription
textstringYesMax length 5000Comment text content

Response​

FieldTypeDescription
idstringComment unique identifier (BigInt)
textstringComment text content
authorobject{id, name} of the author (from JWT)
created_atstringISO 8601 timestamp

Code Examples​

curl -s -X POST "$TENANT_URL/apidev/v1/kanban/cards/4200000000000001/comments" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{
"text": "Signal confirmed. Closing this card."
}'

Example Response​

{
"success": true,
"data": {
"id": "5500000000000003",
"text": "Signal confirmed. Closing this card.",
"author": {"id": "1100000000000001", "name": "Carlos Mendoza"},
"created_at": "2026-03-19T17:00:00"
},
"meta": {}
}

Errors​

CodeHTTPDescription
VALIDATION_ERROR400Invalid parameters
UNAUTHORIZED401Missing, invalid, or expired tenant / Authorization / X-API-Key
FORBIDDEN403User lacks required permission
NOT_FOUND404Resource not found
RATE_LIMITED429Exceeded rate limit
INTERNAL_ERROR500Unexpected server error