Non-hierarchical content labels. Tags provide a flat taxonomy for cross-cutting categorization. Unlike categories, tags have no parent/child relationships.
7 endpoints
GET /tags
List tags
Returns all tags for your site with content counts.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | number | No | Number |
| query | number | No | Number <= 100 |
| query | string | No | Full-text search query |
| query | "created_at" | "updated_at" | "name" | "slug" | No | One of: created_at, updated_at, name, slug |
| query | "asc" | "desc" | No | One of: asc, desc |
| query | string | No | Filter from date (ISO 8601) |
| query | string | No | Filter until date (ISO 8601) |
| query | string | No | URL-friendly identifier, unique per site and locale |
| query | string[] | No | Array of strings |
| query | string[] | No | Array of strings |
| query | string[] | No | Array of strings |
Responses
Status | Description |
|---|---|
| Successful response |
| Unauthorized — invalid or missing API token |
| Forbidden — insufficient permissions |
Examples
curl https://api.lynkow.com/v1/tags \
-H "Authorization: Bearer $API_TOKEN"Response Example
{
"data": [
{
"id": 1,
"name": "JavaScript",
"slug": "javascript",
"locale": "en",
"contentCount": 15,
"createdAt": "2025-01-08T10:00:00.000Z"
},
{
"id": 2,
"name": "Tutorial",
"slug": "tutorial",
"locale": "en",
"contentCount": 23,
"createdAt": "2025-01-08T10:05:00.000Z"
},
{
"id": 3,
"name": "API",
"slug": "api",
"locale": "en",
"contentCount": 9,
"createdAt": "2025-01-15T14:30:00.000Z"
}
],
"meta": {
"total": 18,
"perPage": 15,
"currentPage": 1,
"lastPage": 2
}
}POST /tags
Create a tag
Creates a new tag. The slug is auto-generated from the name if not provided. Tag names must be unique per site and locale.
Request Body
Content-Type: application/json
Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Required. Display name. 1-255 characters |
| string | Yes | Required. URL-friendly identifier, unique per site and locale. 1-255 characters |
| string | No | BCP 47 locale code (e.g. "en", "fr") |
Responses
Status | Description |
|---|---|
| Successful response |
| Unauthorized — invalid or missing API token |
| Forbidden — insufficient permissions |
| Validation error |
Examples
curl -X POST https://api.lynkow.com/v1/tags \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "TypeScript",
"description": "Articles about TypeScript"
}'Response Example
{
"data": {
"id": 10,
"name": "TypeScript",
"slug": "typescript",
"description": "Articles about TypeScript",
"locale": "en",
"contentCount": 0,
"createdAt": "2025-04-06T12:00:00.000Z",
"updatedAt": "2025-04-06T12:00:00.000Z"
}
}GET /tags/:id
Get a tag
Returns a single tag with its content count.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Unique identifier |
Responses
Status | Description |
|---|---|
| Successful response |
| Unauthorized — invalid or missing API token |
| Forbidden — insufficient permissions |
| Not found |
Examples
curl https://api.lynkow.com/v1/tags/1 \
-H "Authorization: Bearer $API_TOKEN"Response Example
{
"data": {
"id": 1,
"name": "JavaScript",
"slug": "javascript",
"description": null,
"locale": "en",
"contentCount": 15,
"createdAt": "2025-01-08T10:00:00.000Z",
"updatedAt": "2025-01-08T10:00:00.000Z"
}
}PUT /tags/:id
Update a tag
Updates a tag's name, slug, or description.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Unique identifier |
Request Body
Content-Type: application/json
Field | Type | Required | Description |
|---|---|---|---|
| string | No | Display name. 1-255 characters |
| string | No | URL-friendly identifier, unique per site and locale. 1-255 characters |
Responses
Status | Description |
|---|---|
| Successful response |
| Unauthorized — invalid or missing API token |
| Forbidden — insufficient permissions |
| Not found |
| Validation error |
Examples
curl -X PUT https://api.lynkow.com/v1/tags/1 \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "JS / JavaScript"}'Response Example
{
"data": {
"id": 1,
"name": "JS / JavaScript",
"slug": "javascript",
"locale": "en",
"contentCount": 15,
"createdAt": "2025-01-08T10:00:00.000Z",
"updatedAt": "2025-04-06T16:00:00.000Z"
}
}DELETE /tags/:id
Delete a tag
Deletes a tag. Contents are not affected — they lose the tag association.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Unique identifier |
Responses
Status | Description |
|---|---|
| Successful response |
| Unauthorized — invalid or missing API token |
| Forbidden — insufficient permissions |
| Not found |
Examples
curl -X DELETE https://api.lynkow.com/v1/tags/10 \
-H "Authorization: Bearer $API_TOKEN"Response Example
{
"message": "Tag deleted"
}GET /tags/:id/translations
Get tag translation status
Returns the translation status for this tag across all enabled locales.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Unique identifier |
Responses
Status | Description |
|---|---|
| Successful response |
| Unauthorized — invalid or missing API token |
| Forbidden — insufficient permissions |
| Not found |
Examples
curl https://api.lynkow.com/v1/tags/1/translations \
-H "Authorization: Bearer $API_TOKEN"Response Example
{
"data": {
"en": {
"status": "complete"
},
"fr": {
"status": "missing"
},
"es": {
"status": "partial"
}
}
}POST /tags/:id/copy-to-locale
Copy tag to another locale
Creates a translated copy of this tag in the target locale.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Unique identifier |
Request Body
Content-Type: application/json
Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Required |
Responses
Status | Description |
|---|---|
| Successful response |
| Unauthorized — invalid or missing API token |
| Forbidden — insufficient permissions |
| Not found |
| Validation error |
Examples
curl -X POST https://api.lynkow.com/v1/tags/1/copy-to-locale \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locale": "fr"}'Response Example
{
"data": {
"id": 50,
"name": "JavaScript",
"slug": "javascript",
"locale": "fr",
"contentCount": 0,
"createdAt": "2025-04-06T15:00:00.000Z",
"updatedAt": "2025-04-06T15:00:00.000Z"
}
}