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

/api/v1/post/author

Returns a public author profile for the given slug (routable URL) or id (contact external id). The author must own at least one publicly visible published post — otherwise returns an error envelope (contacts without published content have no public profile by design).

Lazy route backfill. The very first request per author triggers a route insert (one row per org locale, same slug across all locales — author names are language-independent). Every subsequent request is a plain read. No batch job is needed to populate profiles ahead of time.

Status flag. status: "active" when the contact is still an active member of the organisation; status: "former" when the member row is missing or blocked. Historical posts stay attributed regardless — news sites do not rewrite bylines — but bio and jobTitle are suppressed for former members because they no longer represent the person's current role. Consumer sites typically render a small "former contributor" badge on former profiles.

Backend-computed SEO. metaTitle = "{name} — {orgName}", metaDescription = bio || fallback "{jobTitle} v {orgName}. {postCount} článků." (truncated to 160 chars). Frontends should render these directly into <title> / <meta description> without applying their own fallback logic.

Article feed. Use /api/v1/post/feed?author=<slug-or-id> to fetch the paginated list of articles by this author — same shape as the main feed, just filtered.

postgetApiV1PostAuthor

Parameters

4 query

Query parameters

· 4
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

Routable author profile slug (e.g. jan-barasek). Preferred addressing mode for public URLs. Mutually exclusive with id.

Examplejan-barasek
idstringOptional

Contact shop__contact.external_id (16-char). Stable machine-safe identifier — use when you have the id from /post/post authors[].profileSlug and want to fetch the author profile without knowing the slug. Mutually exclusive with slug.

Example71E58E5SjdZN6ut3
localestringOptional

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

Response schema

1 status code documented

200Success
object | object
One of 2:
Variant 1
idstringRequired

Contact shop__contact.external_id (16-char). Stable across renames / slug changes.

Example71E58E5SjdZN6ut3
slugstringRequired

Routable profile slug — same across every org locale (author name is language-independent). Feed into your /autor/<slug> URL pattern.

Examplejan-barasek
namestringRequired

Display name (first_name last_name). Falls back to "Autor <id>" for nameless contacts.

ExampleJan Barášek
jobTitlestringOptional

Free-form job title from cas__organisation_member.job_title. Omitted for former members (status=former) — that title no longer reflects the person's current role.

ExamplesEditor in ChiefCyber Security Correspondent
biostringOptional

Public bio from cas__organisation_member.description_public. Omitted for former members.

ExampleNovinář se specializací na kyberbezpečnost a AI. 15 let v oboru…
avatarUrlstringOptional

Fully qualified avatar URL (from shop__contact.avatar_blob_id). Omitted when unset.

Examplehttps://storage.xhp.cz/avatar/…
status"active" | "former"Required

active when the contact is still an active (non-blocked) member of the organisation; former when the member row is missing or blocked. Historical posts stay attributed either way.

postCountnumberRequired

Count of publicly visible published posts main-authored by this contact in the organisation. Always ≥ 1 (the endpoint 404s when this would be 0).

Example42
lastPublishedDateDate | string | string | numberOptional

Publish date of the newest post main-authored by this contact.

One of 4:
Variant 1
Date

Publish date of the newest post main-authored by this contact.

Example2026-04-15T09:12:00.000Z
Variant 2
stringdate-time
Variant 3
stringdate
Variant 4
number
metaTitlestringRequired

Backend-computed SEO <title> for the profile page ("{name} — {orgName}"). Render directly into <title> — no client-side fallback needed.

ExampleJan Barášek — Czech Cyber TV
metaDescriptionstringRequired

Backend-computed SEO <meta description> — prefers author bio; falls back to a synthesized "{jobTitle} v {orgName}. {postCount} článků." string. Truncated to 160 chars at a word boundary.

ExampleNovinář se specializací na kyberbezpečnost a AI. 15 let v oboru…
routeobjectRequired
slugstringRequired
Examplejan-barasek
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. Same slug repeats across every org locale — the author's name is language-independent, so the URL is stable across languages.

Each array item:
slugstringRequired
Examplejan-barasek
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
Variant 2
state"error"Required
messagestringRequired
ExampleAuthor "jan-barasek" not found or has no published posts.
code"200"Required
hintstring | nullRequired
One of 2:
Variant 1
string
Variant 2
null

Response example

application/json
{
  "id": "71E58E5SjdZN6ut3",
  "slug": "jan-barasek",
  "name": "Jan Barášek",
  "jobTitle": "Editor in Chief",
  "bio": "Novinář se specializací na kyberbezpečnost a AI. 15 let v oboru…",
  "avatarUrl": "https://storage.xhp.cz/avatar/…",
  "postCount": 42,
  "lastPublishedDate": "2026-04-15T09:12:00.000Z",
  "metaTitle": "Jan Barášek — Czech Cyber TV",
  "metaDescription": "Novinář se specializací na kyberbezpečnost a AI. 15 let v oboru…",
  "route": {
    "slug": "jan-barasek",
    "locale": "cs",
    "canonical": false
  },
  "routes": [
    {
      "slug": "jan-barasek",
      "locale": "cs"
    }
  ]
}

Request example

GET /api/v1/post/author

get
curl -X GET "https://api.bizkithub.com/api/v1/post/author?apiKey=PRODPGrFxpGEtrOZfuWhnoJohUYBXuOE&slug=jan-barasek&id=71E58E5SjdZN6ut3&locale=cs" \
  -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