Skip to main content
Columns are the top-level structural units of a NodeForgeCMS site. Every piece of content lives inside a column, which maps directly to a navigational section — think “Blog”, “About Us”, or “Products”. Each column has its own URL key, language setting, display order, and SEO metadata, making them the primary way you organise and expose content to visitors. Before you can publish articles, you need at least one column to assign them to.

List Columns

Returns all columns for the site. This is a public endpoint — no authentication is required.
GET /api/columns

Response

{
  "code": 200,
  "data": [
    {
      "id": 1,
      "name": "About Us",
      "urlkey": "about",
      "sort": 1,
      "lang": "en",
      "seoTitle": "About Our Company",
      "seoDescription": "Learn about our team and mission"
    }
  ],
  "message": "success"
}
FieldTypeDescription
idnumberUnique column identifier
namestringDisplay name shown in navigation
urlkeystringURL-safe path segment (e.g. about)
sortnumberDisplay order — lower numbers appear first
langstringLanguage code (e.g. en, zh)
seoTitlestringSEO meta title for the column page
seoDescriptionstringSEO meta description for the column page

Get Column by URL Key

Returns a single column identified by its unique URL key. This is a public endpoint — no authentication is required.
GET /api/columns/about

Path Parameters

urlkey
string
required
The column’s unique URL key (e.g. about, blog). This is the same value set in the urlkey field when the column was created.

Response

{
  "code": 200,
  "data": {
    "id": 1,
    "name": "About Us",
    "urlkey": "about",
    "sort": 1,
    "lang": "en",
    "seoTitle": "About Our Company",
    "seoDescription": "Learn about our team and mission"
  },
  "message": "success"
}

Create Column

Creates a new column. Requires a valid Bearer token.
POST /api/columns
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "name": "Blog",
  "urlkey": "blog",
  "lang": "en",
  "sort": 5,
  "seoTitle": "Our Blog",
  "seoDescription": "Latest news and updates"
}

Request Body

name
string
required
Display name for the column. Shown in navigation menus and column listings.
urlkey
string
required
URL-safe path segment used to identify the column in routes (e.g. blog, about-us). Must be unique across all columns.
lang
string
required
Language code for this column (e.g. en, zh, fr). Used to serve locale-specific content.
sort
number
Display order relative to other columns. Lower numbers appear first. Defaults to the end of the list if omitted.
seoTitle
string
SEO meta title rendered in <title> for the column’s landing page.
seoDescription
string
SEO meta description rendered in <meta name="description"> for the column’s landing page.

Response

{
  "code": 200,
  "data": {
    "id": 5,
    "name": "Blog",
    "urlkey": "blog",
    "sort": 5,
    "lang": "en",
    "seoTitle": "Our Blog",
    "seoDescription": "Latest news and updates"
  },
  "message": "success"
}

Update Column

Updates an existing column by its numeric ID. Requires a valid Bearer token.
PUT /api/columns/5
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "name": "Company Blog",
  "urlkey": "blog",
  "lang": "en",
  "sort": 3,
  "seoTitle": "NodeForgeCMS Blog",
  "seoDescription": "Tips, updates, and deep dives from our team"
}

Path Parameters

id
number
required
The numeric ID of the column to update.

Request Body

Accepts the same fields as Create Column. Supply only the fields you want to change — all fields will be replaced with the values provided.

Response

{
  "code": 200,
  "data": {
    "id": 5,
    "name": "Company Blog",
    "urlkey": "blog",
    "sort": 3,
    "lang": "en",
    "seoTitle": "NodeForgeCMS Blog",
    "seoDescription": "Tips, updates, and deep dives from our team"
  },
  "message": "success"
}

Delete Column

Permanently deletes a column by its numeric ID. Requires a valid Bearer token.
DELETE /api/columns/5
Authorization: Bearer YOUR_TOKEN

Path Parameters

id
number
required
The numeric ID of the column to delete.

Response

{
  "code": 200,
  "data": null,
  "message": "success"
}
Deleting a column does not delete the articles assigned to it. Those articles remain in the database but become unassigned — they will no longer appear in column-filtered queries until reassigned to another column via the Articles API. Review and reassign orphaned articles before deleting a column in production.