Skip to content
NeuralRepo
Get Support

Tags

Tags categorize and filter ideas. Each tag has a name, an optional colour, and — on the list endpoint — a count of ideas using it. Tag names are unique per account, and tags are created implicitly whenever you attach an unknown name to an idea.

GET /api/v1/tags

Returns every tag on the account, most-used first, then alphabetically. There is no pagination.

Terminal window
curl https://neuralrepo.com/api/v1/tags \
-H "X-API-Key: nrp_YOUR_KEY"

Response 200 OK

{
"tags": [
{
"id": 1,
"user_id": "3f2a91c47b0e4d5aa8c61e0f2b7d4c93",
"name": "feature-request",
"color": "#4f46e5",
"vectorize_id": "tag_1",
"created_at": "2026-02-01 09:00:00",
"idea_count": 12
},
{
"id": 2,
"user_id": "3f2a91c47b0e4d5aa8c61e0f2b7d4c93",
"name": "bug",
"color": null,
"vectorize_id": null,
"created_at": "2026-02-03 11:20:00",
"idea_count": 5
}
]
}

idea_count counts unarchived ideas only, so archiving ideas lowers it and a tag can sit at zero without being deleted. vectorize_id is null until the tag’s embedding is generated in the background — until then it cannot appear in similarity results.

GET /api/v1/tags/similar

Finds tags whose embeddings are close to a given tag’s. Useful for spotting near-duplicate tags (ui vs frontend) before they fragment your organization.

ParameterTypeRequiredDescription
tagstringYesTag name (not id) to compare against
limitnumberNoMax results (default 5, clamped to 20)
Terminal window
curl "https://neuralrepo.com/api/v1/tags/similar?tag=frontend&limit=5" \
-H "X-API-Key: nrp_YOUR_KEY"

Response 200 OK

{
"similar": [
{ "name": "ui", "idea_count": 8, "similarity": 0.82 },
{ "name": "react", "idea_count": 5, "similarity": 0.76 },
{ "name": "css", "idea_count": 3, "similarity": 0.71 }
]
}
SituationResponse
Tag name not found on your account404 { "error": "Tag \"frontend\" not found" }
Tag exists but has no embedding yet200 { "similar": [], "message": "Tag has no embedding yet" }
tag parameter omitted400 { "error": "Missing \"tag\" query parameter" }

There is no score floor — every neighbour the index returns is listed, so a small account with unrelated tags still gets results with low similarity values. Judge by the number, not by presence in the list.

POST /api/v1/tags

FieldTypeRequiredDescription
namestringYes1–50 characters, unique within your account
colorstringNoHex colour, exactly #rrggbb (six digits, #f00 is rejected)
Terminal window
curl -X POST https://neuralrepo.com/api/v1/tags \
-H "X-API-Key: nrp_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "backend", "color": "#059669"}'

Response 201 Created

{
"tag": {
"id": 3,
"user_id": "3f2a91c47b0e4d5aa8c61e0f2b7d4c93",
"name": "backend",
"color": "#059669",
"vectorize_id": null,
"created_at": "2026-03-24 09:00:00"
}
}

Creating a tag that already exists returns 409 { "error": "Tag name already exists" }. You rarely need this endpoint — attaching an unknown tag name to an idea creates it for you.

PATCH /api/v1/tags/:id

Update the name, colour, or both. Only provided fields change. Takes the tag id, not its name.

FieldTypeRequiredDescription
namestringNo1–50 characters
colorstringNoHex colour in #rrggbb format
Terminal window
curl -X PATCH https://neuralrepo.com/api/v1/tags/3 \
-H "X-API-Key: nrp_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"color": "#0ea5e9"}'

Response 200 OK

{
"tag": {
"id": 3,
"user_id": "3f2a91c47b0e4d5aa8c61e0f2b7d4c93",
"name": "backend",
"color": "#0ea5e9",
"vectorize_id": null,
"created_at": "2026-03-24 09:00:00"
}
}

Renaming a tag does not re-embed it, so GET /tags/similar keeps comparing against the old name’s embedding until the tag is re-embedded in the background.

DELETE /api/v1/tags/:id

Deletes the tag and detaches it from every idea. The ideas themselves are untouched — no bodies, statuses, or other tags change.

Terminal window
curl -X DELETE https://neuralrepo.com/api/v1/tags/3 \
-H "X-API-Key: nrp_YOUR_KEY"

Response 200 OK

{
"success": true
}

Deleting a tag that is not yours or does not exist returns 404. There is no undo — recreating the tag does not restore its associations.

FieldTypeDescription
idnumberUnique tag identifier
user_idstringOwning account
namestringDisplay name, unique per account
colorstring | nullHex colour code
vectorize_idstring | nullEmbedding id; null until the tag has been embedded
created_atstringUTC YYYY-MM-DD HH:MM:SS
idea_countnumberUnarchived ideas using this tag — list endpoint only
StatusMeaning
200 OKSuccessful read, update, or delete
201 CreatedTag created
400 Bad RequestValidation error (name length, colour format, non-numeric id, missing tag param)
401 UnauthorizedMissing or invalid auth
404 Not FoundTag not found, or not yours
409 ConflictPOST only — a tag with that name already exists
500 Internal Server ErrorPATCH only — the new name collides with an existing tag