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

# List Blog Posts

> Paginated, filterable feed of all published NGN Market blog posts.

Returns a paginated, date-descending feed of published posts. Each page contains up to 20 posts, and each post includes a canonical `url` linking to the full article on [ngnmarket.com/blog](https://ngnmarket.com/blog).

You can filter the feed using any combination of `category`, `company`, and `tag`. For example, `?category=markets&company=DANGCEM` returns posts in the **markets** category that are also tagged to **DANGCEM**. For the rich author profile, named taxonomies, and content preview, call [`GET /blog/posts/{slug}`](/api-reference/blog/post-detail).

## Available categories

<Accordion title="View all 7 category slugs">
  Pass one of these slugs to the `category` query param.

  | Slug               | Name             |
  | :----------------- | :--------------- |
  | `markets`          | Markets          |
  | `corporate-news`   | Corporate News   |
  | `economy`          | Economy          |
  | `industries`       | Industries       |
  | `technology`       | Technology       |
  | `personal-finance` | Personal Finance |
  | `product-updates`  | Product Updates  |
</Accordion>

## Available tags

<Accordion title="View all 13 tag slugs">
  Pass one of these slugs to the `tag` query param.

  | Slug            | Name          |
  | :-------------- | :------------ |
  | `stocks`        | Stocks        |
  | `crypto`        | Crypto        |
  | `exchange-rate` | Exchange Rate |
  | `inflation`     | Inflation     |
  | `cbn`           | CBN           |
  | `earnings`      | Earnings      |
  | `energy`        | Energy        |
  | `banking`       | Banking       |
  | `fintech`       | Fintech       |
  | `t-bills`       | T-Bills       |
  | `fg`            | FG            |
  | `dividends`     | Dividends     |
  | `ngn-market`    | NGN Market    |
</Accordion>

## Filtering by company

The `company` param takes the NGX stock ticker symbol of a listed company. For example, use `DANGCEM` for Dangote Cement, `MTNN` for MTN Nigeria, `GTCO` for Guaranty Trust, or `BUACEMENT` for BUA Cement. The lookup is case-insensitive, so `dangcem` and `DANGCEM` return the same posts.

If you are not sure what a company's ticker is, you can fetch the full list of valid symbols from [`GET /companies/identifiers`](/api-reference/companies/identifiers).

## Combining filters

Filters compose, so you can ask for posts in the **markets** category that are also tagged to **DANGCEM**:

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.ngnmarket.com/v1/blog/posts?category=markets&company=DANGCEM" \
    -H "Authorization: Bearer ngm_live_YOUR_KEY"
  ```

  ```javascript JavaScript theme={null}
  const url = new URL('https://api.ngnmarket.com/v1/blog/posts');
  url.searchParams.set('category', 'markets');
  url.searchParams.set('company', 'DANGCEM');

  const res = await fetch(url, {
    headers: { Authorization: 'Bearer ngm_live_YOUR_KEY' },
  });
  const { data } = await res.json();
  ```

  ```python Python theme={null}
  import requests

  res = requests.get(
      'https://api.ngnmarket.com/v1/blog/posts',
      params={'category': 'markets', 'company': 'DANGCEM'},
      headers={'Authorization': 'Bearer ngm_live_YOUR_KEY'},
  )
  data = res.json()['data']
  ```
</CodeGroup>


## OpenAPI

````yaml GET /blog/posts
openapi: 3.1.0
info:
  title: NGN Market API
  version: '1.0'
  description: >
    The NGN Market API provides programmatic access to Nigerian Exchange Group
    (NGX) market data, including equities, forex rates, company profiles,
    indices, bonds, and financial news.


    ## Base URL


    All endpoints are served from:


    ```

    https://api.ngnmarket.com/v1

    ```


    ## Authentication


    Every request requires a Bearer token in the `Authorization` header:


    ```

    Authorization: Bearer ngm_live_YOUR_KEY

    ```


    Generate and manage your API keys from the [developer
    dashboard](https://ngnmarket.com/developer).


    ## Plans & Quotas


    | Plan | Monthly Calls | Requests/min | Price |

    | :--- | ---: | ---: | :--- |

    | Free | 3,000 | 30 | Free |

    | Hobby | 10,000 | 60 | ₦15,000/mo |

    | Starter | 100,000 | 120 | ₦50,000/mo |

    | Growth | 500,000 | 200 | ₦200,000/mo |

    | Business | 2,000,000 | 300 | ₦700,000/mo |

    | Enterprise | Unlimited | Unlimited | Custom |


    Every response includes a `meta` object showing your current usage and
    remaining quota. Exceeding the per-minute rate limit returns `429
    RATE_LIMITED`. Exceeding the monthly quota returns `429 QUOTA_EXCEEDED`.


    ## Response Envelope


    All responses use a consistent JSON envelope:


    ```json

    {
      "success": true,
      "data": { ... },
      "meta": {
        "plan": "starter",
        "calls_used": 4821,
        "calls_remaining": 95179,
        "reset_at": "2026-05-01T00:00:00.000Z"
      }
    }

    ```
  contact:
    name: NGN Market Support
    email: support@ngnmarket.com
    url: https://ngnmarket.com
  license:
    name: Proprietary
servers:
  - url: https://api.ngnmarket.com/v1
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Market
    description: >-
      Daily market snapshots, top trades, movers, market breadth, sectors, and
      YTD performers.
  - name: Companies
    description: >-
      Browse, search, and retrieve profiles, price charts, and financial
      statements for NGX-listed companies.
  - name: Forex
    description: Current and historical NGN exchange rates against major currencies.
  - name: Indices
    description: >-
      All NGX market indices, including list, detail with constituents, and
      historical chart data.
  - name: ETFs
    description: >-
      NGX-listed Exchange Traded Funds and ETPs — list, full fund detail, and
      historical daily price data.
  - name: Bonds
    description: >-
      NGX-listed bond instruments with issuer details, coupon rates, and
      maturity dates.
  - name: Disclosures
    description: >-
      Official corporate filings from NGX-listed companies (financial
      statements, AGM notices, board meetings, director dealings, earnings
      forecasts). Sourced from NGX Group and updated twice daily.
  - name: Blog
    description: >-
      Published NGN Market blog posts. List, search, and filter by category or
      company.
  - name: Dividends
    description: >-
      Market-wide NGX dividend calendar. Browse upcoming and recently paid
      dividends across all listed companies with optional search and pagination.
  - name: Account
    description: >-
      Quota status, 30-day request analytics, and paginated request logs for the
      authenticated user.
paths:
  /blog/posts:
    get:
      tags:
        - Blog
      summary: Paginated blog post list
      description: >
        Returns a paginated list of published NGN Market blog posts sorted by
        publication date (newest first). Each page contains up to 20 posts.


        Filter the feed using any combination of `category`, `company`, and
        `tag` query parameters. All filters are optional and combinable (e.g.
        `?category=markets&company=DANGCEM`).


        **Plan required:** Free
      operationId: getBlogPosts
      parameters:
        - name: page
          in: query
          description: Page number. Defaults to `1`.
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
        - name: category
          in: query
          description: >
            Filter by category slug. One of: `markets`, `corporate-news`,
            `economy`, `industries`, `technology`, `personal-finance`,
            `product-updates`.
          required: false
          schema:
            type: string
            enum:
              - markets
              - corporate-news
              - economy
              - industries
              - technology
              - personal-finance
              - product-updates
            example: markets
        - name: company
          in: query
          description: >
            Filter by an NGX-listed company's stock ticker symbol, for example
            `DANGCEM` for Dangote Cement, `MTNN` for MTN Nigeria, or `GTCO` for
            Guaranty Trust. The lookup is case-insensitive and matches the
            post's `companies` field exactly, so there is no fuzzy matching. You
            can fetch the full list of valid symbols from `GET
            /companies/identifiers`.
          required: false
          schema:
            type: string
            example: DANGCEM
        - name: tag
          in: query
          description: >
            Filter by tag slug. One of: `stocks`, `crypto`, `exchange-rate`,
            `inflation`, `cbn`, `earnings`, `energy`, `banking`, `fintech`,
            `t-bills`, `fg`, `dividends`, `ngn-market`.
          required: false
          schema:
            type: string
            enum:
              - stocks
              - crypto
              - exchange-rate
              - inflation
              - cbn
              - earnings
              - energy
              - banking
              - fintech
              - t-bills
              - fg
              - dividends
              - ngn-market
            example: banking
      responses:
        '200':
          description: Blog posts retrieved successfully.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessEnvelope'
                  - type: object
                    properties:
                      data:
                        type: object
                        properties:
                          data:
                            type: array
                            items:
                              $ref: '#/components/schemas/BlogPost'
                          pagination:
                            $ref: '#/components/schemas/PaginationExtended'
              examples:
                blogPosts:
                  summary: First page of blog posts
                  value:
                    success: true
                    data:
                      data:
                        - slug: fgn-bond-market-outlook-2026
                          title: FGN Bond Market Outlook for 2026
                          excerpt: >-
                            An in-depth look at Federal Government bond yields
                            and what investors can expect through the rest of
                            2026.
                          cover_image: >-
                            https://ngnmarket.com/images/blog/fgn-bond-outlook.jpg
                          published_date: '2026-04-10'
                          categories:
                            - economy
                            - fixed-income
                          tags:
                            - bonds
                            - fg
                          companies: []
                          url: >-
                            https://ngnmarket.com/blog/fgn-bond-market-outlook-2026
                        - slug: dangote-cement-q1-analysis
                          title: 'Dangote Cement Q1 2026 Results: What the Numbers Say'
                          excerpt: >-
                            A breakdown of Dangote Cement's Q1 2026 financial
                            results and what they mean for shareholders.
                          cover_image: >-
                            https://ngnmarket.com/images/blog/dangote-cement-q1.jpg
                          published_date: '2026-04-07'
                          categories:
                            - corporate-news
                          tags:
                            - earnings
                          companies:
                            - DANGCEM
                          url: >-
                            https://ngnmarket.com/blog/dangote-cement-q1-analysis
                      pagination:
                        page: 1
                        limit: 20
                        total: 42
                        pages: 3
                        has_next: true
                        has_prev: false
                    meta:
                      plan: free
                      calls_used: 312
                      calls_remaining: 9688
                      reset_at: '2026-05-01T00:00:00.000Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/QuotaExceeded'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  schemas:
    SuccessEnvelope:
      type: object
      required:
        - success
      properties:
        success:
          type: boolean
          const: true
        meta:
          $ref: '#/components/schemas/Meta'
    BlogPost:
      type: object
      description: Standard post card returned by the blog list endpoint.
      properties:
        slug:
          type: string
        title:
          type: string
        excerpt:
          type: string
        cover_image:
          type: string
          description: URL of the cover image, or empty string if none.
        published_date:
          type: string
          format: date
        categories:
          type: array
          items:
            type: string
          description: Category slugs for this post.
        tags:
          type: array
          items:
            type: string
        companies:
          type: array
          items:
            type: string
          description: NGX ticker symbols explicitly tagged to this post.
        url:
          type: string
          description: Canonical URL of the post on ngnmarket.com.
    PaginationExtended:
      type: object
      properties:
        page:
          type: integer
          example: 1
        limit:
          type: integer
          example: 20
        total:
          type: integer
          example: 42
        pages:
          type: integer
          example: 3
        has_next:
          type: boolean
          example: true
        has_prev:
          type: boolean
          example: false
    Meta:
      type: object
      description: Quota and plan metadata included on every authenticated response.
      properties:
        plan:
          type: string
          description: Current plan name.
          enum:
            - free
            - starter
            - growth
            - business
            - enterprise
          example: starter
        calls_used:
          type: integer
          description: Total calls made this calendar month across all your keys.
          example: 4821
        calls_remaining:
          type: integer
          description: Calls remaining before your quota is exhausted.
          example: 95179
        reset_at:
          type: string
          format: date-time
          description: ISO 8601 UTC timestamp of your next quota reset (1st of next month).
          example: '2026-05-01T00:00:00.000Z'
    ErrorEnvelope:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Machine-readable error identifier.
              example: NOT_FOUND
            message:
              type: string
              description: Human-readable error description.
              example: Resource not found.
            required_plan:
              type: string
              description: _(PLAN_REQUIRED only)_ Minimum plan needed.
            current_plan:
              type: string
              description: _(PLAN_REQUIRED only)_ Your current plan.
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          examples:
            missingKey:
              summary: Missing Authorization header
              value:
                success: false
                error:
                  code: MISSING_API_KEY
                  message: 'Provide your API key via: Authorization: Bearer <key>'
            invalidKey:
              summary: Invalid or revoked key
              value:
                success: false
                error:
                  code: INVALID_API_KEY
                  message: API key not found or revoked.
    QuotaExceeded:
      description: Monthly call limit reached.
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ErrorEnvelope'
              - type: object
                properties:
                  meta:
                    $ref: '#/components/schemas/Meta'
          example:
            success: false
            error:
              code: QUOTA_EXCEEDED
              message: >-
                Monthly call limit of 100,000 reached. Resets on
                2026-05-01T00:00:00.000Z.
            meta:
              plan: starter
              calls_used: 100000
              calls_remaining: 0
              reset_at: '2026-05-01T00:00:00.000Z'
    ServerError:
      description: Unexpected server-side failure. Safe to retry with backoff.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            success: false
            error:
              code: SERVER_ERROR
              message: Something went wrong on our end. Please try again.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: ngm_live_*
      description: >
        Pass your API key as a Bearer token: `Authorization: Bearer
        ngm_live_YOUR_KEY`.

        Generate keys at
        [ngnmarket.com/dashboard/developer](https://ngnmarket.com/developer).

````