These practical examples demonstrate how to interact with the Teamhood Open API using JavaScript and PowerShell. Each scenario shows how to authenticate and use key API endpoints to manage your workspaces, boards, items, and more.
Teamhood is a multi-tenant application. This means each organization (tenant) has its own API subdomain.
Use the following pattern for all API requests:
https://api-YOURTENANT.teamhood.com
For example, if your tenant is acme, your API calls should go to:
https://api-acme.teamhood.comYou can find open API key in your integration settings page, inside Teamhood web application.

All requests require an API key in the X-ApiKey header.
⚠️ Replace the following placeholders in examples:
| Placeholder | Description |
|---|---|
YOURTENANT | Your Teamhood tenant name (e.g., acme) |
YOUR_API_KEY | Your API key |
YOUR_WORKSPACE_ID | The ID of your workspace |
YOUR_BOARD_ID | The ID of the board |
YOUR_ROW_ID | The ID of the row |
YOUR_STATUS_ID | The ID of the status |
This request fetches the list of workspaces available to your API key.
# javascript
fetch('https://api-YOURTENANT.teamhood.com/api/v1/workspaces', {
method: 'GET',
headers: {
'X-ApiKey': 'YOUR_API_KEY'
}
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
# powershell
Invoke-RestMethod -Method Get `
-Uri "https://api-YOURTENANT.teamhood.com/api/v1/workspaces" `
-Headers @{ "X-ApiKey" = "YOUR_API_KEY" }
Use this to retrieve all boards under a specific workspace.
# javascript
const workspaceId = 'YOUR_WORKSPACE_ID';
fetch(`https://api-YOURTENANT.teamhood.com/api/v1/workspaces/${workspaceId}/boards`, {
method: 'GET',
headers: {
'X-ApiKey': 'YOUR_API_KEY'
}
})
.then(res => res.json())
.then(data => console.log(data));
# powershell
$workspaceId = "YOUR_WORKSPACE_ID"
Invoke-RestMethod -Method Get `
-Uri "https://api-YOURTENANT.teamhood.com/api/v1/workspaces/$workspaceId/boards" `
-Headers @{ "X-ApiKey" = "YOUR_API_KEY" }
Rows represent horizontal groupings in a board (e.g. “Development”, “QA”).
# javascript
const boardId = 'YOUR_BOARD_ID';
fetch(`https://api-YOURTENANT.teamhood.com/api/v1/boards/${boardId}/rows`, {
method: 'GET',
headers: {
'X-ApiKey': 'YOUR_API_KEY'
}
})
.then(res => res.json())
.then(data => console.log(data));
# powershell
$boardId = "YOUR_BOARD_ID"
Invoke-RestMethod -Method Get `
-Uri "https://api-YOURTENANT.teamhood.com/api/v1/boards/$boardId/rows" `
-Headers @{ "X-ApiKey" = "YOUR_API_KEY" }
Creates a new task or item with custom fields.
# javascript
const payload = {
title: "Sample Task",
description: "Created via API",
budget: 25.5,
workspaceId: "YOUR_WORKSPACE_ID",
boardId: "YOUR_BOARD_ID",
rowId: "YOUR_ROW_ID",
statusId: "YOUR_STATUS_ID",
customFields: [
{ name: "Material", value: "PVC" },
{ name: "Length (m)", value: "3.3" }
]
};
fetch('https://api-YOURTENANT.teamhood.com/api/v1/items', {
method: 'POST',
headers: {
'X-ApiKey': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
})
.then(res => res.json())
.then(data => console.log(data));
# powershell
$body = @{
title = "Sample Task"
description = "Created via API"
budget = 25.5
workspaceId = "YOUR_WORKSPACE_ID"
boardId = "YOUR_BOARD_ID"
rowId = "YOUR_ROW_ID"
statusId = "YOUR_STATUS_ID"
customFields = @(
@{ name = "Material"; value = "PVC" },
@{ name = "Length (m)"; value = "3.3" }
)
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Method Post `
-Uri "https://api-YOURTENANT.teamhood.com/api/v1/items" `
-Headers @{ "X-ApiKey" = "YOUR_API_KEY"; "Content-Type" = "application/json" } `
-Body $body
Use query parameters to find all items under a workspace and board.
# javascript
const workspaceId = "YOUR_WORKSPACE_ID";
const boardId = "YOUR_BOARD_ID";
fetch(`https://api-YOURTENANT.teamhood.com/api/v1/items?workspaceId=${workspaceId}&boardId=${boardId}`, {
method: 'GET',
headers: {
'X-ApiKey': 'YOUR_API_KEY'
}
})
.then(res => res.json())
.then(data => console.log(data));
# powershell
$workspaceId = "YOUR_WORKSPACE_ID"
$boardId = "YOUR_BOARD_ID"
Invoke-RestMethod -Method Get `
-Uri "https://api-YOURTENANT.teamhood.com/api/v1/items?workspaceId=$workspaceId&boardId=$boardId" `
-Headers @{ "X-ApiKey" = "YOUR_API_KEY" }
Lists all users available under your organization.
# javascript
fetch('https://api-YOURTENANT.teamhood.com/api/v1/users', {
method: 'GET',
headers: {
'X-ApiKey': 'YOUR_API_KEY'
}
})
.then(res => res.json())
.then(data => console.log(data));
# powershell
Invoke-RestMethod -Method Get `
-Uri "https://api-YOURTENANT.teamhood.com/api/v1/users" `
-Headers @{ "X-ApiKey" = "YOUR_API_KEY" }
A complete categorized list of Teamhood API endpoints.
GET /api/v1/attachments/{id}PUT /api/v1/attachments/{id}DELETE /api/v1/attachments/{id}GET /api/v1/attachments/{id}/contentPOST /api/v1/attachmentsGET /api/v1/boards/{boardId}/rowsGET /api/v1/boards/{boardId}/statusesPOST /api/v1/boardsGET /api/v1/itemsPOST /api/v1/itemsGET /api/v1/items/{itemId}PUT /api/v1/items/{itemId}DELETE /api/v1/items/{itemId}GET /api/v1/items/{itemId}/attachmentsPOST /api/v1/rowsGET /api/v1/templates/workspaceGET /api/v1/templates/boardPOST /api/v1/timelogsGET /api/v1/usersGET /api/v1/workspacesPOST /api/v1/workspacesGET /api/v1/workspaces/{workspaceId}PUT /api/v1/workspaces/{workspaceId}/users/{userId}GET /api/v1/workspaces/{workspaceId}/boards