Card table steps
June 17, 2026 · View on GitHub
Endpoints:
Get steps in a card
Steps are returned unpaginated as part of the Get a card endpoint payload.
Create a step
POST /card_tables/cards/2/steps.jsoncreates a step within the card with ID2.
Required parameters: title of the step.
Optional parameters:
due_on- due date (ISO 8601) of the step.assignee_ids- an array of people ids that will be assigned to this step. Please see the Get people endpoints to retrieve them.assignees- a comma separated list of people ids (legacy format, preferassignee_ids).
This endpoint will return 201 Created with the current JSON representation of the step if the creation was a success. See the step property of the Get a card endpoint for more info on the payload.
Example JSON Request
{
"title": "Inspiration",
"due_on": "2021-01-01",
"assignee_ids": [30068628, 270913789]
}
Copy as cURL
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \
-d '{"title": "Inspiration", "due_on": "2021-01-01", "assignee_ids": [30068628, 270913789]}' \
https://3.basecampapi.com/$ACCOUNT_ID/card_tables/cards/2/steps.json
Update a step
PUT /card_tables/steps/2.jsonallows changing of the step with an ID of2.
Optional parameters:
title- of the card.due_on- due date (ISO 8601) of the step.assignee_ids- an array of people ids that will be assigned to this step. Please see the Get people endpoints to retrieve them.assignees- a comma separated list of people ids (legacy format, preferassignee_ids).
This endpoint will return 200 OK with the current JSON representation of the step if the update was a success. See the step property of the Get a card endpoint for more info on the payload.
Example JSON Request
{
"title": "Updated inspiration"
}
Copy as cURL
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \
-d '{"title": "Updated inspiration"}' -X PUT \
https://3.basecampapi.com/$ACCOUNT_ID/card_tables/steps/2.json
Change step completion status
PUT /card_tables/steps/2/completions.jsonwill mark the step with an ID of2as completed or uncompleted depending on the completion parameter.
Required parameters:
completion– Set to "on" to mark the step as completed and to "off" to mark the step as uncompleted.
This endpoint will return 200 OK with the current JSON representation of the step if the update was a success. See the step property of the Get a card endpoint for more info on the payload.
Example JSON Request
{
"completion": "on"
}
Copy as cURL
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \
-d '{"completion": "on"}' -X PUT \
https://3.basecampapi.com/$ACCOUNT_ID/card_tables/steps/2/completions.json
Reposition a step
POST /card_tables/cards/2/positions.jsonallows changing the position of the step with an ID ofsource_idin the card with id2.
Required parameters:
source_id– the step id. Step ids can be found via the Get a card endpoint.position– Zero indexed.
This endpoint will return 204 No Content if successful.
Example JSON Request
{
"source_id": 3,
"position": 4
}
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" \
-d '{"source_id": 3, "position": 4}' -X POST \
https://3.basecampapi.com/$ACCOUNT_ID/card_tables/cards/2/positions.json
Legacy project-scoped routes
The following project-scoped routes are still supported and will remain available, but flat routes above are the canonical form for new integrations.
POST /buckets/1/card_tables/cards/2/steps.json→ Create a stepPUT /buckets/1/card_tables/steps/2.json→ Update a stepPUT /buckets/1/card_tables/steps/2/completions.json→ Change step completion statusPOST /buckets/1/card_tables/cards/2/positions.json→ Reposition a step