Suggest a roadmap item
curl --request POST \
--url https://api.plazza.ca/v1/roadmapBoards/{board}/items \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Swap shifts between employees",
"body": "Let employees trade shifts, with a manager approving the swap.",
"kind": "FEATURE",
"tags": [
"Scheduling"
],
"plans": [
"Pro"
],
"area": "Scheduling",
"followLanguageCode": "fr",
"displayName": "Camille Tremblay"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Swap shifts between employees',
body: JSON.stringify('Let employees trade shifts, with a manager approving the swap.'),
kind: 'FEATURE',
tags: ['Scheduling'],
plans: ['Pro'],
area: 'Scheduling',
followLanguageCode: 'fr',
displayName: 'Camille Tremblay'
})
};
fetch('https://api.plazza.ca/v1/roadmapBoards/{board}/items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.plazza.ca/v1/roadmapBoards/{board}/items"
payload = {
"title": "Swap shifts between employees",
"body": "Let employees trade shifts, with a manager approving the swap.",
"kind": "FEATURE",
"tags": ["Scheduling"],
"plans": ["Pro"],
"area": "Scheduling",
"followLanguageCode": "fr",
"displayName": "Camille Tremblay"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"name": "roadmapBoards/hire/items/019a7c2e-4b1d-7c3a-9d4e-5f6a7b8c9d0e",
"source": "PLAZZA",
"slug": "swap-shifts-between-employees",
"title": "Swap shifts between employees",
"body": "Let employees trade shifts, with a manager approving the swap.",
"kind": "FEATURE",
"tags": [
"Scheduling",
"Mobile"
],
"plans": [
"Pro"
],
"area": "Scheduling",
"status": "PLANNED",
"shipTime": "2026-11-04T14:32:08.512Z",
"state": "PUBLISHED",
"mergedInto": null,
"author": {
"displayName": "Camille Tremblay",
"staff": false
},
"voteCount": 42,
"commentCount": 7,
"etag": "\"3\"",
"createTime": "2026-11-04T14:32:08.512Z",
"updateTime": "2026-11-04T14:32:08.512Z",
"deleteTime": "2026-11-04T14:32:08.512Z"
}{
"error": {
"code": 401,
"message": "Unauthorized",
"status": "UNAUTHENTICATED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "MISSING_CREDENTIALS",
"domain": "api.plazza.ca"
},
{
"@type": "type.googleapis.com/google.rpc.LocalizedMessage",
"locale": "en",
"message": "Sign in to continue."
}
]
}
}Roadmap
Suggest a roadmap item
Published at once, in the backlog, with your vote. Your first post or comment needs a displayName.
POST
/
v1
/
roadmapBoards
/
{board}
/
items
Suggest a roadmap item
curl --request POST \
--url https://api.plazza.ca/v1/roadmapBoards/{board}/items \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Swap shifts between employees",
"body": "Let employees trade shifts, with a manager approving the swap.",
"kind": "FEATURE",
"tags": [
"Scheduling"
],
"plans": [
"Pro"
],
"area": "Scheduling",
"followLanguageCode": "fr",
"displayName": "Camille Tremblay"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Swap shifts between employees',
body: JSON.stringify('Let employees trade shifts, with a manager approving the swap.'),
kind: 'FEATURE',
tags: ['Scheduling'],
plans: ['Pro'],
area: 'Scheduling',
followLanguageCode: 'fr',
displayName: 'Camille Tremblay'
})
};
fetch('https://api.plazza.ca/v1/roadmapBoards/{board}/items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.plazza.ca/v1/roadmapBoards/{board}/items"
payload = {
"title": "Swap shifts between employees",
"body": "Let employees trade shifts, with a manager approving the swap.",
"kind": "FEATURE",
"tags": ["Scheduling"],
"plans": ["Pro"],
"area": "Scheduling",
"followLanguageCode": "fr",
"displayName": "Camille Tremblay"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"name": "roadmapBoards/hire/items/019a7c2e-4b1d-7c3a-9d4e-5f6a7b8c9d0e",
"source": "PLAZZA",
"slug": "swap-shifts-between-employees",
"title": "Swap shifts between employees",
"body": "Let employees trade shifts, with a manager approving the swap.",
"kind": "FEATURE",
"tags": [
"Scheduling",
"Mobile"
],
"plans": [
"Pro"
],
"area": "Scheduling",
"status": "PLANNED",
"shipTime": "2026-11-04T14:32:08.512Z",
"state": "PUBLISHED",
"mergedInto": null,
"author": {
"displayName": "Camille Tremblay",
"staff": false
},
"voteCount": 42,
"commentCount": 7,
"etag": "\"3\"",
"createTime": "2026-11-04T14:32:08.512Z",
"updateTime": "2026-11-04T14:32:08.512Z",
"deleteTime": "2026-11-04T14:32:08.512Z"
}{
"error": {
"code": 401,
"message": "Unauthorized",
"status": "UNAUTHENTICATED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "MISSING_CREDENTIALS",
"domain": "api.plazza.ca"
},
{
"@type": "type.googleapis.com/google.rpc.LocalizedMessage",
"locale": "en",
"message": "Sign in to continue."
}
]
}
}Authorizations
Path Parameters
Query Parameters
Makes a retry safe: a request with the same id and content returns the resource the first one created.
Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Example:
"0f5e8c1e-7a8b-4c2d-9e1f-2a3b4c5d6e7f"
Body
application/json
A suggestion for the roadmap.
Response
A suggestion or a planned change on a roadmap board.
A suggestion or a planned change on a roadmap board.
PUBLISHED items are listed. Staff can UNPUBLISH one, its author can withdraw it, which erases its text but keeps the discussion, and staff can merge a duplicate into another item. The Linear sync SUSPENDED one while its issue can’t be read or left the Roadmap team.
Available options:
PUBLISHED, UNPUBLISHED, SUSPENDED, WITHDRAWN, MERGED Example:
"PUBLISHED"