Ventura Content API

The Ventura Content API allows partner websites to fetch and display Ventura stories from KindJoe. This integration is read-only.

Endpoint status

Public read access. No write endpoints are exposed for partners.

Endpoint: list Ventura stories

GET /api/ventura/articles

Returns published Ventura-tagged stories, ordered newest first by publish timestamp.

Example request

curl "https://kindjoe.com/api/ventura/articles"

Example response

[
  {
    "id": "9c32b8e6-24e7-4f88-9b0f-8d3901f4e881",
    "slug": "ventura-housing-update",
    "title": "Ventura Housing Update",
    "excerpt": "What changed this week in Ventura County housing.",
    "category": "local-news",
    "coverImageUrl": "https://cdn.example.com/ventura.jpg",
    "publishedAt": "2026-04-20T15:40:00.000Z",
    "publishAt": null,
    "createdAt": "2026-04-20T14:55:00.000Z",
    "readingMinutes": 4,
    "authorAlias": "Joe Ventura",
    "authorName": "Joseph Smith",
    "authorAvatarUrl": "https://cdn.example.com/avatar.png"
  }
]

Endpoint: Ventura article detail by slug

GET /api/ventura/articles/:slug

Returns full article payload for rendering editorial pages.

Example request

curl "https://kindjoe.com/api/ventura/articles/ventura-housing-update"

Example response

{
  "id": "9c32b8e6-24e7-4f88-9b0f-8d3901f4e881",
  "slug": "ventura-housing-update",
  "title": "Ventura Housing Update",
  "excerpt": "What changed this week in Ventura County housing.",
  "coverImageUrl": "https://cdn.example.com/ventura.jpg",
  "category": "local-news",
  "authorId": "staff_123",
  "authorAlias": "Joe Ventura",
  "authorName": "Joseph Smith",
  "authorAvatar": "https://cdn.example.com/avatar.png",
  "contentMarkdown": "### LEDE\n\nFull editorial body in markdown...\n\n### THE OTHER SIDE\n\nOpposing view...",
  "contentHtml": "<p>...</p>",
  "content": {},
  "publishedAt": "2026-04-20T15:40:00.000Z",
  "publishAt": null,
  "createdAt": "2026-04-20T14:55:00.000Z",
  "updatedAt": "2026-04-20T15:41:00.000Z",
  "readingMinutes": 4,
  "categories": [{ "id": 1, "name": "Local News", "slug": "local-news" }],
  "tags": [{ "id": 12, "name": "Ventura County", "slug": "ventura-county" }],
  "linkedPrediction": null
}

Endpoint: related stories by slug

GET /api/articles/:slug/related

Returns related published stories for a specific source slug.

Example request

curl "https://kindjoe.com/api/articles/ventura-housing-update/related"

Example response

{
  "items": [
    {
      "id": "5724d7cc-24ce-4a5a-9ac5-ee9f9fe5a83d",
      "slug": "ventura-interest-rates",
      "title": "How Interest Rates Are Affecting Ventura",
      "excerpt": "A quick breakdown of this week's changes.",
      "coverImageUrl": "https://cdn.example.com/rates.jpg",
      "publishedAt": "2026-04-18T12:00:00.000Z",
      "publishAt": null,
      "readingMinutes": 3
    }
  ]
}

Availability and filtering

  • Only non-draft, non-deleted, published articles are returned.
  • Ventura list endpoint filters to posts tagged with `ventura-county`.
  • `GET /api/articles/ventura-county` remains available as a compatibility alias.
  • Author fields come from the current writer profile (`authorName` + `authorAlias`).
  • Related endpoint returns HTTP 404 if the source slug is not published.

Read-only policy

Partner integrations can only read and display content. No public create, update, or delete API methods are available for Ventura stories.

Integration checklist

  • Fetch from `GET /api/ventura/articles` for Ventura lists.
  • Fetch full editorial body from `GET /api/ventura/articles/:slug` using `contentMarkdown` (resolved from stored markdown with legacy jsonb/html fallback).
  • Link users to canonical story URLs using each article slug.
  • Cache API responses and avoid aggressive request polling.