> ## Documentation Index
> Fetch the complete documentation index at: https://learn.nexudus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Articles

> Returns a paginated list of published articles with optional filtering by category, keyword, and featured status.

# List Articles

Returns a paginated list of published articles for the current location. Supports filtering by category, keyword search, and featured flag.

## Authentication

No authentication required.

## Query Parameters

<ParamField query="page" type="number" required>
  1-based page number.
</ParamField>

<ParamField query="top" type="number" required>
  Number of posts per page.
</ParamField>

<ParamField query="categoryId" type="number">
  Filter to posts belonging to a specific category. Omit to return posts across all categories.
</ParamField>

<ParamField query="search" type="string">
  Keyword filter applied to post title and body. URL-encoded.
</ParamField>

<ParamField query="featured" type="boolean">
  When `true`, returns only articles marked as featured by the operator.
</ParamField>

<ParamField query="_shape" type="string">
  Comma-separated list of field paths to include in the response. When provided, only the
  specified fields are returned — useful for reducing payload size. Supports nested paths
  using dot notation. Example: `_shape=BlogPosts.Records.Title,BlogPosts.Records.SummaryText,BlogPosts.Records.PublishDate`.
</ParamField>

## Response

Returns a `BlogPostList` object containing paginated articles, available categories, and the currently selected category.

<ResponseField name="BlogPosts" type="ApiListResult<BlogPost>">
  Paginated wrapper containing article records.
</ResponseField>

<ResponseField name="BlogPosts.Records" type="BlogPost[]">
  Array of article summaries for the current page.
</ResponseField>

<ResponseField name="BlogPosts.CurrentPage" type="number">
  Current page number.
</ResponseField>

<ResponseField name="BlogPosts.TotalItems" type="number">
  Total number of matching posts.
</ResponseField>

<ResponseField name="BlogPosts.TotalPages" type="number">
  Total number of pages.
</ResponseField>

<ResponseField name="BlogPosts.HasNextPage" type="boolean">
  Whether there are more pages after the current one.
</ResponseField>

<ResponseField name="Categories" type="BlogCategory[]">
  Array of all available article categories.
</ResponseField>

<ResponseField name="Category" type="BlogCategory">
  The currently selected category (when filtering by `categoryId`).
</ResponseField>

## Examples

### Fetch first page of posts

```http theme={null}
GET /api/public/blogPosts?page=1&top=10
```

## TypeScript Integration

```typescript theme={null}
import endpoints from '@/api/endpoints'

const { resource: posts } = useTypedData(
  httpClient,
  endpoints.blog.blogPosts({
    page: 1,
    top: 10,
    featured: true,
  }),
)
```
