BizKitHub
DocsAPI ReferencePost/api/v1/post/post
getPostPublic API v1

/api/v1/post/post

Returns the full detail of a post, including title, markdown content, routes, breadcrumbs, related posts and tags. Returns an error object (state: "error") if the post does not exist or if neither slug nor id was supplied.

Two addressing modes:

  • slug — canonical URL slug in the requested locale. Use for blog / marketing articles.
  • id — post external id (16-char string). Use for posts that have no canonical URL, notably branch documents: obtain the postId from GET /api/v1/branch/detail?apiKey=…&slug=<branch>&locale=<loc> under documents.<termsOfBusiness|reclaim|gdpr|operatingRules>.postId, then call GET /api/v1/post/post?apiKey=…&id=<postId>&locale=<loc> to fetch the body.

For posts without a route/main-category (branch docs), route.slug is empty, mainCategory is omitted, and breadcrumb / related are empty arrays — the rest of the response mirrors the slug-based fetch exactly, so a single renderer can handle both.

The response also carries wordCount and readingTimeMinutes derived from the HTML body (tags stripped, ~200 words per minute — Medium's convention); both are 0 for empty posts.

postgetApiV1PostPost

Parameters

6 query

Query parameters

· 6
apiKeystringRequired

Your BizKitHub API key (passed as GET parameter).

Key format: A 32-character string matching: ^(PROD|DEV_|ROOT)[A-Za-z0-9]{28}$
Prefixes: PROD (production key), DEV_ (individual developer), ROOT (system key with no limits). Learn more

ExamplePRODPGrFxpGEtrOZfuWhnoJohUYBXuOE
slugstringOptional

Canonical URL slug of the article in the requested locale (e.g. "about"). Preferred addressing mode for regular blog posts. Mutually exclusive with id.

Exampleabout
idstringOptional

Post external id (16-char string). Optional alternative to slug — pass this to fetch a post that has no canonical route, most notably a branch document (VOP / GDPR / provozní řád / reklamace) whose postId came from /api/v1/branch/detail.documents.<slot>.postId. Exactly one of slug or id must be supplied.

Example58714l4gSh9jZOLU
localestringRequired

Communication locale code — controls the language of textual data (product names, descriptions, articles, storefront UI, transactional e-mails).

Preferred format: BCP 47 language tag — language[-Script][-REGION]. Use the full tag whenever the script or region matters:

  • en-GB vs. en-US (British vs. American spelling)
  • pt-PT vs. pt-BR (European vs. Brazilian Portuguese)
  • zh-Hans vs. zh-Hant (Simplified vs. Traditional Chinese)
  • sr-Latn vs. sr-Cyrl (Latin vs. Cyrillic Serbian)

Backwards-compatible fallback: the bare two-letter ISO 639-1 code (cs, en, pl, …) is accepted indefinitely — legacy clients that only send the language subtag continue to work unchanged.

Resolution algorithm (server-side): the input is resolved against the supported locale list via the [RFC 4647 Lookup] progressive-fallback strategy — trailing subtags are stripped one by one until a supported locale is found. Example: en-GB-oxendicten-GBen (matched). If no subtag combination is supported, the request is rejected.

Currently supported locales: cs, en, fr, it, pl, de, sk, sv, es, zh, ja, uk, da, hu, ro, nl, pt, fi, nb, hr. Region-specific variants (e.g. en-GB, pt-BR) are accepted and resolved to their base language when the exact variant is not registered separately.

Length: 235
Examplecs
identityIdstringOptional

Logged user identity (from your frontend cookies). Learn more

ExampleZ9CPkS2o3UV163VQn5OUv0T8BQi8Fvdg
sortDirectionstringOptional
Exampleasc

Response schema

1 status code documented

200Success
object | object
One of 2:
Variant 1
idstringRequired
Example6IU2SWgP76FO2UXw
authorobjectRequired
namestringRequired
ExampleJan Barášek
profileSlugstringRequired
Example71E58E5SjdZN6ut3
isStarbooleanOptional

True if the post is starred/pinned. Omitted when false.

mainImageUrlstringOptional
Examplehttps://storage.xhp.cz/...
titlestringOptional
ExampleKYBER CENA ROKU 2025: největší večer české kyberbezpečnosti letošního roku.
contentstringRequired
Example<p>Žijeme ve světě, kde je normální řídit...</p>
wordCountnumberRequired

Number of words in the post body (HTML tags stripped). 0 for empty posts.

Example842
readingTimeMinutesnumberRequired

Estimated reading time in minutes at ~200 words per minute (Medium's convention). Minimum 1 for non-empty bodies, 0 for empty.

Example5
kindstringOptional

Post kind code from content__post_kind (post for articles, branch for branch-owned documents). Only populated when the post was fetched by id; slug-based fetches omit it because the endpoint filters to post and the field would be redundant.

Examplespostbranch
routeobjectRequired
slugstringRequired

Canonical URL slug of the post in the returned locale. Empty string when the post has no route (branch documents) — treat empty as "no public URL".

Examplekyber-cena-roku-2025-nejvetsi-vecer-ceske-kyberbezpecnosti-letos
localestringRequired

Communication locale code — controls the language of textual data (product names, descriptions, articles, storefront UI, transactional e-mails).

Preferred format: BCP 47 language tag — language[-Script][-REGION]. Use the full tag whenever the script or region matters:

  • en-GB vs. en-US (British vs. American spelling)
  • pt-PT vs. pt-BR (European vs. Brazilian Portuguese)
  • zh-Hans vs. zh-Hant (Simplified vs. Traditional Chinese)
  • sr-Latn vs. sr-Cyrl (Latin vs. Cyrillic Serbian)

Backwards-compatible fallback: the bare two-letter ISO 639-1 code (cs, en, pl, …) is accepted indefinitely — legacy clients that only send the language subtag continue to work unchanged.

Resolution algorithm (server-side): the input is resolved against the supported locale list via the [RFC 4647 Lookup] progressive-fallback strategy — trailing subtags are stripped one by one until a supported locale is found. Example: en-GB-oxendicten-GBen (matched). If no subtag combination is supported, the request is rejected.

Currently supported locales: cs, en, fr, it, pl, de, sk, sv, es, zh, ja, uk, da, hu, ro, nl, pt, fi, nb, hr. Region-specific variants (e.g. en-GB, pt-BR) are accepted and resolved to their base language when the exact variant is not registered separately.

Length: 235
Examplescsenen-GBpt-BRzh-Hans
canonicalbooleanRequired
routesobject[]Required

Cross-locale canonical routes for hreflang / sitemap. Empty array when the post has no routes (branch documents).

Each array item:
slugstringRequired
Examplekyber-cena-roku-2025-nejvetsi-vecer-ceske-kyberbezpecnosti-letos
localestringRequired

Communication locale code — controls the language of textual data (product names, descriptions, articles, storefront UI, transactional e-mails).

Preferred format: BCP 47 language tag — language[-Script][-REGION]. Use the full tag whenever the script or region matters:

  • en-GB vs. en-US (British vs. American spelling)
  • pt-PT vs. pt-BR (European vs. Brazilian Portuguese)
  • zh-Hans vs. zh-Hant (Simplified vs. Traditional Chinese)
  • sr-Latn vs. sr-Cyrl (Latin vs. Cyrillic Serbian)

Backwards-compatible fallback: the bare two-letter ISO 639-1 code (cs, en, pl, …) is accepted indefinitely — legacy clients that only send the language subtag continue to work unchanged.

Resolution algorithm (server-side): the input is resolved against the supported locale list via the [RFC 4647 Lookup] progressive-fallback strategy — trailing subtags are stripped one by one until a supported locale is found. Example: en-GB-oxendicten-GBen (matched). If no subtag combination is supported, the request is rejected.

Currently supported locales: cs, en, fr, it, pl, de, sk, sv, es, zh, ja, uk, da, hu, ro, nl, pt, fi, nb, hr. Region-specific variants (e.g. en-GB, pt-BR) are accepted and resolved to their base language when the exact variant is not registered separately.

Length: 235
Examplescsenen-GBpt-BRzh-Hans
anchorListobjectRequired
perexstringRequired
metaDescriptionstringRequired
publishedDateDate | string | string | numberOptional
One of 4:
Variant 1
Date
Variant 2
stringdate-time
Variant 3
stringdate
Variant 4
number
updatedDateDate | string | string | numberOptional

Timestamp of the last update to the parent post. Populated on id-based fetches (useful for branch-doc revalidation); omitted on legacy slug-based fetches for backwards compatibility.

One of 4:
Variant 1
Date

Timestamp of the last update to the parent post. Populated on id-based fetches (useful for branch-doc revalidation); omitted on legacy slug-based fetches for backwards compatibility.

Variant 2
stringdate-time
Variant 3
stringdate
Variant 4
number
mainCategoryobjectOptional

Main category of the post. Omitted for posts with no category (e.g. branch documents).

idnumberRequired
namestringRequired
slugstringRequired
breadcrumbobject[]Required
Each array item:
namestringOptional
slugstringRequired
childrenany[]Required
relatedobject[]Required
Each array item:
titlestringRequired
slugstringOptional
tagListobject[]Required

Array of tags assigned to this post. Only active tags are included.

Each array item:

Tag associated with the post.

slugstringRequired

URL-friendly code/slug of the tag.

Examplebezpecnost
namestringRequired

Human-readable display name of the tag.

ExampleBezpečnost
colorstringOptional

Hex color code for the tag.

Example#3B82F6
attachmentsobject[]Required

Array of attachments linked to the post, ordered by upload date (oldest first). Empty array when the post has no attachments.

Each array item:

Attachment (e.g. original SPC PDF) linked to the post.

idstringRequired

Blob token — stable identifier for the attachment (32-char string).

Example3e43IKfVwc4Bl2D40y5r0x7Uu3x0h9SS
filenamestringRequired

Human-readable filename of the attachment.

ExampleSPC-Ticagrelor.pdf
downloadUrlstringRequired

Public URL from which the attachment can be downloaded / streamed.

Examplehttps://storage.xhp.cz/...
sizenumberRequired

Attachment size in bytes.

Example524288
contentTypestringRequired

MIME type of the attachment.

Exampleapplication/pdf
Variant 2
state"error"Required
messagestringRequired
ExamplePost "about" does not exist.
code"200"Required
hintstring | nullRequired
One of 2:
Variant 1
string
Variant 2
null

Response example

application/json
{
  "id": "6IU2SWgP76FO2UXw",
  "author": {
    "name": "Jan Barášek",
    "profileSlug": "71E58E5SjdZN6ut3"
  },
  "isStar": false,
  "mainImageUrl": "https://storage.xhp.cz/...",
  "title": "KYBER CENA ROKU 2025: největší večer české kyberbezpečnosti letošního roku.",
  "content": "<p>Žijeme ve světě, kde je normální řídit...</p>",
  "wordCount": 842,
  "readingTimeMinutes": 5,
  "kind": "post",
  "route": {
    "slug": "kyber-cena-roku-2025-nejvetsi-vecer-ceske-kyberbezpecnosti-letos",
    "locale": "cs",
    "canonical": false
  },
  "routes": [
    {
      "slug": "kyber-cena-roku-2025-nejvetsi-vecer-ceske-kyberbezpecnosti-letos",
      "locale": "cs"
    }
  ],
  "anchorList": {},
  "perex": "example_perex",
  "metaDescription": "example_metaDescription",
  "mainCategory": {
    "id": 0,
    "name": "example_name",
    "slug": "example_slug"
  },
  "breadcrumb": [
    {
      "name": "example_name",
      "slug": "example_slug",
      "children": []
    }
  ],
  "related": [
    {
      "title": "example_title",
      "slug": "example_slug"
    }
  ],
  "tagList": [
    {
      "slug": "bezpecnost",
      "name": "Bezpečnost",
      "color": "#3B82F6"
    }
  ],
  "attachments": [
    {
      "id": "3e43IKfVwc4Bl2D40y5r0x7Uu3x0h9SS",
      "filename": "SPC-Ticagrelor.pdf",
      "downloadUrl": "https://storage.xhp.cz/...",
      "size": 524288,
      "contentType": "application/pdf"
    }
  ]
}

Request example

GET /api/v1/post/post

get
curl -X GET "https://api.bizkithub.com/api/v1/post/post?apiKey=PRODPGrFxpGEtrOZfuWhnoJohUYBXuOE&slug=about&id=58714l4gSh9jZOLU&locale=cs&identityId=Z9CPkS2o3UV163VQn5OUv0T8BQi8Fvdg&sortDirection=asc" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY"

Need an API key?

All BizKitHub public API endpoints require authentication via API key.

Get API Key