Articles

Use these endpoints to fetch published content. Responses include structuredContent as content, plus basic SEO metadata.

Schemas

Looking for copy/paste response types? See Schemas.


GET /api/v1/public/articles

List published articles for your organization (API key scoped).

Query params

  • product (optional): product slug
  • territory (optional): territory code (e.g. US)
  • limit (default 20, max 100)
  • offset (default 0)

Example

curl -H "Authorization: Bearer trident_pk_..." \
  "https://app.tridentseo.ai/api/v1/public/articles?product=my-product&territory=US&limit=20&offset=0"

Response

Returns a paginated list. Note: this endpoint currently includes the full content payload per article (which may be large).

{
  "data": [
    {
      "id": "...",
      "title": "...",
      "slug": "...",
      "excerpt": "...",
      "content": { /* structuredContent JSON */ },
      "seo": {
        "title": "...",
        "metaDescription": "...",
        "targetKeyword": "...",
        "secondaryKeywords": []
      },
      "publishedAt": "2026-01-01T00:00:00.000Z",
      "product": { "name": "...", "slug": "..." },
      "territory": { "code": "US", "languageCode": "en", "locale": "en-US" }
    }
  ],
  "pagination": { "total": 123, "limit": 20, "offset": 0, "hasMore": true }
}

Schema

TypeScript shape (see full definitions in Schemas):

type PublicArticlesListResponse = {
  data: PublicArticleSummary[];
  pagination: {
    total: number;
    limit: number;
    offset: number;
    hasMore: boolean;
  };
};

PublicArticleSummary

FieldTypeNotes
idstringArticle UUID
titlestringArticle title
slugstringURL slug
excerptstring | nullShort summary (may be null)
contentStructuredArticleContent | LegacyStructuredArticleContent | nullArticle structuredContent JSON
seoobjectSee below
publishedAtstring | nullISO datetime
productobjectProduct summary
territoryobjectTerritory summary

seo

FieldTypeNotes
titlestringSEO title (currently equals article title)
metaDescriptionstring | nullCurrently sourced from excerpt
targetKeywordstring | nullPrimary keyword (nullable)
secondaryKeywordsstring[]Additional keywords

GET /api/v1/public/articles/:slug

Fetch a single published article by slug.

Query params

  • product (optional): product slug (useful if you want to be explicit)

Example

curl -H "Authorization: Bearer trident_pk_..." \
  "https://app.tridentseo.ai/api/v1/public/articles/my-article-slug?product=my-product"

Response

Includes schema markup and citation sources.

{
  "data": {
    "id": "...",
    "title": "...",
    "slug": "...",
    "excerpt": "...",
    "content": { /* structuredContent JSON */ },
    "seo": {
      "title": "...",
      "metaDescription": "...",
      "targetKeyword": "...",
      "secondaryKeywords": [],
      "schemaMarkup": { /* JSON-LD or other schema */ }
    },
    "wordCount": 1234,
    "publishedAt": "2026-01-01T00:00:00.000Z",
    "updatedAt": "2026-01-02T00:00:00.000Z",
    "product": { "name": "...", "slug": "..." },
    "territory": { "code": "US", "name": "United States", "languageCode": "en", "locale": "en-US" },
    "sources": [
      { "title": "Source title", "url": "https://example.com", "citationIndex": 1 }
    ]
  }
}

Schema

TypeScript shape (see full definitions in Schemas):

type PublicArticleDetailResponse = {
  data: PublicArticleDetail;
};

Content schema

The content field is the article’s structuredContent JSON. It may be the rich schema or the legacy schema, depending on when the article was generated. See Schemas for the full definitions and recommended union type.