Skip to main content
GET
Get blog post by slug

Authorizations

Authorization
string
header
required

API Key Authentication

Use your API key in the Authorization header:

Key Types:

Secret Keys (Server-Side Only):

  • Format: tybrite_sk_live_* (production) or tybrite_sk_test_* (sandbox)
  • Full read/write access to all endpoints
  • ⚠️ NEVER expose in client-side code or public repositories
  • Required for: every write a shopper does not make for themselves, authentication, payment verification, AI recommendations

Publishable Keys (Client-Safe):

  • Format: tybrite_pk_live_* (production) or tybrite_pk_test_* (sandbox)
  • Catalogue reads, plus the actions a shopper takes for themselves
  • ✅ Safe for client-side JavaScript, mobile apps, and public code
  • Allowed for: browsing products, search, CMS content, pricing queries, cart and wishlist, reviews, storefront events, and the Agent API's quotes, cart drafts and checkout intents

Endpoint-Specific Requirements:

  • Authentication endpoints (/v1/auth/*): Secret key required
  • Payment verification (POST /v1/payments/verify): Secret key required
  • AI Recommendations (POST /v1/recommendations): Secret key required
  • Semantic Search (POST /v1/search): Both key types allowed (read-only operation)
  • Shopper actions (cart, wishlist, reviews, storefront events, Agent API quotes, cart drafts and checkout intents): Both key types allowed
  • All other write operations: Secret key required
  • All read operations: Both key types allowed

Using a publishable key for restricted operations returns 403 Forbidden.

Headers

x-visitor-id
string

Header form of visitor_id. Takes precedence over the query parameter when both are sent.

x-session-id
string

Header form of session_id. Takes precedence over the query parameter when both are sent.

Path Parameters

slug
string
required

Query Parameters

fields
string

Comma-separated list of fields to include in the response.

Allowed Fields:

  • id, title, slug, excerpt, content, featured_image, video
  • category_id, category_name, category_slug, category_icon
  • author_name, author_avatar, status, published_at
  • view_count, product_count, seo_title, seo_description
  • created_at, updated_at, products, lookbooks
visitor_id
string

Identifies the shopper viewing the post, so the view is attributed to them in your content analytics. Send the same value you use for other storefront analytics calls. When omitted, the view is attributed to a coarse fallback derived from the request, so repeat views by one shopper may not group together.

The x-visitor-id header carries the same value and takes precedence.

session_id
string

Groups this view into a browsing session. When omitted, a session is derived from the visitor identity.

The x-session-id header carries the same value and takes precedence.

Response

Success

id
string<uuid>
title
string
slug
string
excerpt
string
content
object | null

The article body, or null for a post with no body. See PostContent.

video
string<uri> | null

Optional URL of a short video for this banner (MP4, H.264 with AAC audio). Null when none is set. featured_image stays the poster and the fallback, so a storefront that shows only images keeps working unchanged.

category_id
string<uuid>
category_name
string
category_slug
string
category_icon
string
author_name
string
author_avatar
string
status
enum<string>
Available options:
published,
draft,
archived
published_at
string<date-time>
view_count
integer
product_count
integer
seo_title
string
seo_description
string
seo_keywords
string[] | null

Search keywords the author chose for the post, for a page's meta tags. Returned by getPost.

created_at
string<date-time>

When the post was first created.

updated_at
string<date-time>

When the post was last edited, in any way and by anyone — the merchant in their admin, or an automated change such as a regenerated cover image. Use it to show a "last updated" date on an article; it is always set, and on a post that has never been revised it matches created_at.

products
object[]

Products embedded in the post body, in the order the author placed them. Match an entry to a productEmbed block in content on product_id (the block's productId). block_id is the id of the content block an embed is anchored to and is null for embeds placed in the post editor. display_type is how the author chose to show it. Each entry arrives with the product already resolved, and an embed whose product is no longer available is omitted, so a post can return fewer products than were authored.

lookbooks
object[]

Lookbooks embedded in the post, each with the lookbook it points to already resolved.