Related services: ContentsServicelynkow.contents.getBySlug(), lynkow.contents.list() | TagsServicelynkow.tags.list()

Author

Interface

The author of a content item. Corresponds to the user who created the content in the admin dashboard.

Property

Type

Optional

Description

avatarUrl

string | null

No

Absolute URL to the author's avatar image, or null if no avatar is set.<br>When available, points to a Cloudflare R2-hosted image.<br>Use ImageVariants.avatar (128x128) for optimized display if available elsewhere.

fullName

string

No

The author's display name (e.g. 'Jane Doe').<br>This is the user's full name as set in their account profile.

id

number

No

Unique numeric user ID.<br>Stable across all content by the same author.


Content

Interface

Full content item with body, SEO metadata, structured data, and relations. Returned by single-content endpoints (GET /public/contents/:idOrSlug).

Extends ContentSummary with all the fields omitted from list responses.

Extends: ContentSummary

Property

Type

Optional

Description

author

Author | null

No

The content author, or null if no author is assigned.<br>Corresponds to the admin user who created the content.

body

string

No

The article body as an HTML string, converted server-side from the TipTap editor format.<br>Render with dangerouslySetInnerHTML (React) or v-html (Vue).<br><br>For structured content (when the content belongs to a 'structured' category),<br>this may be empty — use customData instead.

canonicalUrl

string | null

No

Override canonical URL for this content. Max 1000 characters. Must be a valid URL.<br>null if not set — in that case, the canonical URL is the content's own path.<br>Use this when the same content is syndicated from another source.

categories

Category[]

No

Categories this content belongs to. At least one category is required for published content.<br>The first category in the array is the "primary" category used for URL path generation in nested mode.<br>May contain multiple categories for cross-listing purposes.

createdAt

string

No

ISO 8601 datetime when the content was created (e.g. '2024-01-10T08:00:00.000+00:00').<br>Set automatically on initial creation and never changes.

customData

Record<string, any> | null

Yes

Custom field data for structured content.<br>Populated when the content belongs to a category with contentMode: 'structured'.<br>The keys and value types are defined by the category's schema.<br>Richtext fields are automatically converted to HTML strings by the API.<br>null for standard content (which uses body instead).

excerpt

string | null

No

Short summary text for previews and listing cards.<br>Either a manually written excerpt or auto-generated from the first ~160 characters of the body.<br>null if the content has no body text and no manual excerpt.<br>Plain text (no HTML).

featuredImage

string | null

No

Absolute URL to the original (full-resolution) featured image.<br>null if no featured image is set for this content.<br>Prefer featuredImageVariants for optimized, CDN-resized versions.

featuredImageVariants

ImageVariants

Yes

CDN-optimized image variants of the featured image at multiple preset sizes.<br>undefined when no featured image is set or the site has no image transformations configured.<br><br>Available presets: thumbnail (400x300), card (600x400), content (1200w),<br>medium (960w), hero (1920w), og (1200x630), full (2560w).<br><br>Use these instead of featuredImage for better performance and responsive layouts.

id

number

No

Unique numeric content ID. Auto-incremented.<br>Use this for API calls like GET /public/contents/:id.

keywords

string | null

No

Comma-separated SEO keywords (e.g. 'typescript, api, headless cms'). Max 500 characters.<br>null if not set. Used for <meta name="keywords"> tag.<br>Note: most search engines no longer use this for ranking, but it can be useful for internal search.

locale

string

No

BCP 47 locale code of this content (e.g. 'en', 'fr', 'es').<br>Matches one of the site's enabled locales.<br>When fetching content lists, this reflects the locale query parameter or the site's default locale.

metaDescription

string | null

No

Custom meta description for SEO. Max 500 characters.<br>null if not set — consider using excerpt as a fallback for <meta name="description">.<br>Recommended length: 150-160 characters for optimal search engine display.

metaTitle

string | null

No

Custom meta title for SEO. Max 255 characters.<br>null if not set — in that case, use title as a fallback for <title> and og:title.

ogImage

string | null

No

Absolute URL to the Open Graph image for social sharing.<br>null if not set — falls back to the featured image when sharing on social platforms.<br>Max 1000 characters. Must be a valid URL. Recommended size: 1200x630px.

ogImageVariants

ImageVariants

Yes

CDN-optimized variants of the Open Graph image at multiple preset sizes.<br>undefined when no OG image is set.<br>Use the og variant (1200x630) for social sharing meta tags.

path

string

No

Full URL path including locale prefix, blog prefix, and category hierarchy.<br>Format depends on site configuration:<br>- Mono-language flat: '/blog/my-article'<br>- Multi-language flat: '/en/blog/my-article'<br>- Multi-language nested: '/en/blog/parent-category/child-category/my-article'<br><br>Use this to build links to the content on your frontend.<br>Does not include the domain — prepend your site's base URL.

publishedAt

string

No

ISO 8601 datetime when the content was published (e.g. '2024-03-15T10:30:00.000+00:00').<br>Set when the content transitions from draft to published status.<br>Can also be manually set by editors to backdate or schedule content.

slug

string

No

URL-friendly slug, unique within the site for this locale.<br>Lowercase, hyphenated (e.g. 'my-article-title'). Max 500 characters.<br>Can be used instead of id in API calls: GET /public/contents/:slug.

status

"published"

No

Publication status. Always 'published' via the public API.<br>Draft, scheduled, and archived content is never returned by public endpoints.

structuredData

StructuredData | null

No

Pre-generated structured data including Article JSON-LD, FAQ JSON-LD, and alternate language links.<br>null if structured data generation is disabled for this site or failed.<br><br>Inject each jsonLd object as a <script type="application/ld+json"> tag in <head>.

tags

Tag[]

No

Tags associated with this content. Can be empty.<br>Tags are flat labels (no hierarchy) used for filtering and grouping content.

title

string

No

The content title in the requested locale.<br>Max 500 characters. Always non-empty for published content.

updatedAt

string

No

ISO 8601 datetime of the last modification (e.g. '2024-06-01T14:00:00.000+00:00').<br>Updated whenever the content is saved, including metadata-only changes.


ContentBody

TypeAlias

Content body as an HTML string.

The API converts the TipTap editor's JSON content tree to HTML server-side, so you receive a ready-to-render HTML string. This includes all formatting, images, tables, code blocks, and FAQ blocks.

Security note: This HTML is generated server-side from the TipTap editor and is safe to render. No user-submitted raw HTML is passed through.

TypeScript
type ContentBody = string

ContentSummary

Interface

Lightweight content representation returned in paginated list endpoints (GET /public/contents).

Omits the full body, SEO fields, and relations to minimize payload size. Use Content (from GET /public/contents/:idOrSlug) for the complete data.

Property

Type

Optional

Description

createdAt

string

No

ISO 8601 datetime when the content was created (e.g. '2024-01-10T08:00:00.000+00:00').<br>Set automatically on initial creation and never changes.

excerpt

string | null

No

Short summary text for previews and listing cards.<br>Either a manually written excerpt or auto-generated from the first ~160 characters of the body.<br>null if the content has no body text and no manual excerpt.<br>Plain text (no HTML).

featuredImage

string | null

No

Absolute URL to the original (full-resolution) featured image.<br>null if no featured image is set for this content.<br>Prefer featuredImageVariants for optimized, CDN-resized versions.

featuredImageVariants

ImageVariants

Yes

CDN-optimized image variants of the featured image at multiple preset sizes.<br>undefined when no featured image is set or the site has no image transformations configured.<br><br>Available presets: thumbnail (400x300), card (600x400), content (1200w),<br>medium (960w), hero (1920w), og (1200x630), full (2560w).<br><br>Use these instead of featuredImage for better performance and responsive layouts.

id

number

No

Unique numeric content ID. Auto-incremented.<br>Use this for API calls like GET /public/contents/:id.

locale

string

No

BCP 47 locale code of this content (e.g. 'en', 'fr', 'es').<br>Matches one of the site's enabled locales.<br>When fetching content lists, this reflects the locale query parameter or the site's default locale.

path

string

No

Full URL path including locale prefix, blog prefix, and category hierarchy.<br>Format depends on site configuration:<br>- Mono-language flat: '/blog/my-article'<br>- Multi-language flat: '/en/blog/my-article'<br>- Multi-language nested: '/en/blog/parent-category/child-category/my-article'<br><br>Use this to build links to the content on your frontend.<br>Does not include the domain — prepend your site's base URL.

publishedAt

string

No

ISO 8601 datetime when the content was published (e.g. '2024-03-15T10:30:00.000+00:00').<br>Set when the content transitions from draft to published status.<br>Can also be manually set by editors to backdate or schedule content.

slug

string

No

URL-friendly slug, unique within the site for this locale.<br>Lowercase, hyphenated (e.g. 'my-article-title'). Max 500 characters.<br>Can be used instead of id in API calls: GET /public/contents/:slug.

title

string

No

The content title in the requested locale.<br>Max 500 characters. Always non-empty for published content.


Tag

Interface

A content tag used for cross-category classification and filtering.

Tags provide a flat (non-hierarchical) labeling system for content articles. Unlike categories, tags have no parent-child relationships and are primarily used for filtering and discovery. Use contents.list({ tag: 'slug' }) to fetch all articles with a specific tag.

Property

Type

Optional

Description

id

number

No

Auto-incremented unique identifier.<br>Stable across locales -- the same tag has the same ID in all locale versions.

locale

string

No

Locale code for this tag instance (e.g. 'en', 'fr').<br>Tags are returned in the locale matching the request.<br>The same logical tag may have different name and slug values in each locale.

name

string

No

Display name of the tag (e.g. 'JavaScript', 'Getting Started').<br>Localized -- the value changes depending on the requested locale.

slug

string

No

URL-friendly slug derived from the tag name (e.g. 'javascript', 'getting-started').<br>Used as the filter value in contents.list({ tag: slug }).<br>Unique within a site + locale combination.<br>Localized -- each locale can have a different slug for the same tag.


TipTapMark

Interface

A TipTap inline mark (bold, italic, link, etc.) applied to text nodes. Marks modify the visual presentation or semantics of text within a TipTap node.

You typically don't need to process these directly since the public API returns pre-rendered HTML via Content.body. These types are provided for advanced use cases like custom rendering pipelines.

Property

Type

Optional

Description

attrs

Record<string, unknown>

Yes

Mark-specific attributes. For example:<br>- link: { href: 'https://...', target: '_blank' }<br>- textStyle: { color: '#ff0000' }<br><br>undefined for simple marks like bold or italic that have no attributes.

type

string

No

The mark type. Common built-in types include 'bold', 'italic', 'link',<br>'code', 'strike', 'underline'. Custom mark types may also appear as plain strings.


TipTapNode

Interface

A TipTap editor node representing a block or inline element in the content tree.

The public API returns pre-rendered HTML in Content.body, so you typically don't need to process these nodes directly. These types are provided for advanced use cases like:

  • Building a custom renderer (e.g. for React Native or email templates)

  • Extracting specific content blocks (e.g. all images, all headings)

  • Content analysis or transformation pipelines

Property

Type

Optional

Description

attrs

Record<string, unknown>

Yes

Node-specific attributes. Examples:<br>- heading: { level: 2 } (1-6)<br>- image: { src: '...', alt: '...', title: '...' }<br>- codeBlock: { language: 'typescript' }<br>- tableCell: { colspan: 1, rowspan: 1 }<br><br>undefined for nodes that carry no attributes (e.g. paragraph, listItem).

content

TipTapNode[]

Yes

Ordered child nodes forming the content tree.<br>Block-level nodes (paragraphs, headings, lists) contain other nodes.<br>Leaf nodes like 'text' and 'horizontalRule' have no children.

marks

TipTapMark[]

Yes

Inline marks applied to this text node (bold, italic, link, etc.).<br>Only meaningful on 'text' type nodes. Multiple marks can be combined<br>(e.g. bold + italic + link).

text

string

Yes

Text content, present only on 'text' type nodes.<br>For all other node types, the textual content is in child content nodes.

type

string

No

The node type. Determines the semantic meaning and rendering behavior.<br>Common types: 'doc' (root), 'paragraph', 'heading', 'text', 'image',<br>'bulletList', 'orderedList', 'listItem', 'blockquote', 'codeBlock',<br>'horizontalRule', 'table'/'tableRow'/'tableCell'/'tableHeader',<br>'faqBlock'/'faqItem'/'faqQuestion'/'faqAnswer'.<br>Custom node types may also appear as plain strings.