Create a tag
Add a new org-scoped tag. Returns the new tag id.
Creates a new tag for the authenticated organization. Tags are org-scoped — every board in the org can use the new tag once it exists.
Endpoint
POST https://api.productbridge.io/api/external/v1/tags/create
Arguments
Your organization's public API key. See Authentication.
The display name of the tag. 1–512 characters.
Optional hex color string for the tag's badge in the dashboard (e.g. "#10B981"). Max 512 characters.
Whether this tag appears in feedback views. Defaults to true.
Whether this tag appears in roadmap views. Defaults to true.
Returns
A JSON object with the new tag's id.
{ "id": "773c3ef8-b8cd-cd15-01ba-tag00000003" }
Example request
curl -X POST https://api.productbridge.io/api/external/v1/tags/create \
-H 'Content-Type: application/json' \
-d '{
"api_key": "pb_YOUR_PUBLIC_API_KEY",
"name": "regression",
"color": "#EF4444"
}'
const res = await fetch(
"https://api.productbridge.io/api/external/v1/tags/create",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
api_key: process.env.PRODUCTBRIDGE_API_KEY,
name: "regression",
color: "#EF4444",
}),
}
);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { id } = await res.json();
import os, httpx
resp = httpx.post(
"https://api.productbridge.io/api/external/v1/tags/create",
json={
"api_key": os.environ["PRODUCTBRIDGE_API_KEY"],
"name": "regression",
"color": "#EF4444",
},
)
resp.raise_for_status()
new_id = resp.json()["id"]
Example response
{
"id": "773c3ef8-b8cd-cd15-01ba-tag00000003"
}
Errors
| Status | Body | Cause |
|---|---|---|
401 | {"detail":{"error":"invalid api_key"}} | Missing / unknown / inactive api_key. |
422 | Validation error envelope | Missing name, name longer than 512 chars, or another field has the wrong type. |
See Errors for the full envelope shape.