Skip to content

Blog endpoints

The blog API exposes two read-only endpoints: one for listing articles and one for loading a single article by path.

GET /v1/blog/list

This endpoint returns blog summaries. Results are ordered by date descending, so newer entries appear first.

Request

Send a GET request:

bash
curl -sS https://api.heo-systems.net/v1/blog/list

Success response (200 OK)

The response is a JSON array of article summaries.

json
[
  {
    "title": "Welcome to the New HEO Systems Blog",
    "description": "We are excited to announce the launch...",
    "path": "/blog/company-news/welcome-to-heo-systems-blog",
    "category": "Company News",
    "date": "2025-12-10",
    "author": "Hamza",
    "readTime": "1 min read",
    "cover": "/media/company/HEO_Systems_Banner.jpg"
  }
]

Error responses

This endpoint can return:

codebodywhen it happens
405textMethod is not GET
429textRate limit exceeded for client IP
500textContent source could not be loaded

GET /v1/blog/article

This endpoint returns one full blog article, including both Markdown body and rendered HTML.

Request

Provide the article path as a query parameter.

bash
curl -sS "https://api.heo-systems.net/v1/blog/article?path=/blog/company-news/welcome-to-heo-systems-blog"

Query parameters

namerequireddescription
pathYesFull content path beginning with /blog/

Success response (200 OK)

The response includes summary fields plus body and html.

json
{
  "title": "Welcome to the New HEO Systems Blog",
  "description": "We are excited to announce the launch...",
  "path": "/blog/company-news/welcome-to-heo-systems-blog",
  "category": "Company News",
  "date": "2025-12-10",
  "author": "Hamza",
  "readTime": "1 min read",
  "cover": "/media/company/HEO_Systems_Banner.jpg",
  "body": "We are excited to announce...",
  "html": "<p>We are excited to announce...</p>"
}

Error responses

This endpoint can return:

codebodywhen it happens
400textpath query parameter is missing
404textNo blog article matches the given path
405textMethod is not GET
429textRate limit exceeded for client IP
500textContent source could not be loaded