Skip to content

Schema reference

This page documents every field of the takuhon.json schema: each section, its type, whether it is required, its constraints, and what it is for. For a gentler introduction to the document as a whole, see The takuhon.json file.

The tables below are generated from the canonical schema (version 1.4.0). Field descriptions are reproduced verbatim from the schema, which is maintained in English as the canonical contract.

FieldTypeRequiredConstraintsDescription
schemaVersionstringYespattern ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?$Semantic version of the takuhon schema this document conforms to.
profileProfileYes——
linksarray of LinkNo≤ 100 items—
careersarray of CareerNo≤ 50 items—
projectsarray of ProjectNo≤ 100 items—
skillsarray of SkillNo≤ 200 items—
certificationsarray of CertificationNo≤ 50 items—
membershipsarray of MembershipNo≤ 50 items—
volunteeringarray of VolunteeringNo≤ 50 items—
honorsarray of HonorNo≤ 50 items—
educationarray of EducationNo≤ 30 items—
publicationsarray of PublicationNo≤ 100 items—
languagesarray of LanguageNo≤ 30 items—
coursesarray of CourseNo≤ 100 items—
patentsarray of PatentNo≤ 50 items—
testScoresarray of TestScoreNo≤ 30 items—
recommendationsarray of RecommendationNo≤ 50 items—
highlightsarray of HighlightNo≤ 50 items—
contactContactYes——
settingsSettingsYes——
metaMetaYes——

No additional properties beyond those listed.

BCP-47 language tag (e.g., ‘en’, ‘ja’, ‘zh-Hant’, ‘pt-BR’).

  • Type: string
  • Constraints: pattern ^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$; 2–35 chars

ISO 3166-1 alpha-2 country code (uppercase, two letters).

  • Type: string
  • Constraints: pattern ^[A-Z]{2}$

Year-month in ‘YYYY-MM’ format (Gregorian calendar).

  • Type: string
  • Constraints: pattern ^[0-9]{4}-(0[1-9]|1[0-2])$

ISO 8601 date-time (e.g., 2026-05-11T12:34:56Z).

  • Type: string
  • Constraints: format date-time
  • Type: string
  • Constraints: format uri; ≤ 2048 chars
  • Type: string
  • Constraints: format email; ≤ 254 chars

URL-safe identifier (lowercase alphanumerics and hyphens, must start with alphanumeric).

  • Type: string
  • Constraints: pattern ^[a-z0-9][a-z0-9-]*$; 1–64 chars

Per-item public visibility (added in 0.7.0). ‘private’ removes the item from every public surface via applyPublicPrivacyFilter; an absent value or ‘public’ keeps the item public.

  • Type: string
  • Constraints: one of: public, private

Map of BCP-47 locale tag to short title-like string (max 200 chars per value). Each value must contain at least one non-whitespace character.

  • Type: object (map)
  • Keys: pattern ^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$
  • Values: string (pattern \S; 1–200 chars)
  • Constraints: at least 1 entry

Map of BCP-47 locale tag to body-length string (max 5000 chars per value). Each value must contain at least one non-whitespace character.

  • Type: object (map)
  • Keys: pattern ^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$
  • Values: string (pattern \S; 1–5000 chars)
  • Constraints: at least 1 entry

Identifies the kind of link. ‘custom’ requires iconUrl.

  • Type: string
  • Constraints: one of: website, blog, github, gitlab, linkedin, x, mastodon, bluesky, instagram, youtube, threads, facebook, email, rss, custom
FieldTypeRequiredConstraintsDescription
displayNameLocalizedTitleYes——
taglineLocalizedTitleNo——
bioLocalizedBodyNo——
avatarAvatarNo——
locationAddressNo——

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
urlstringYesformat uri-reference; ≤ 2048 charsURL or path to the avatar image.
altLocalizedTitleNo——

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
countryIso3166Alpha2No——
regionstringNo≤ 100 chars—
localityLocalizedTitleNo——
displayLocalizedTitleNo——

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
typeLinkTypeYes——
labelLocalizedTitleNo——
urlUrlYes——
featuredbooleanNo——
orderintegerNo≥ 0—
iconUrlUrlNo——

If type is custom, then iconUrl must be set. No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
organizationLocalizedTitleYes——
roleLocalizedTitleYes——
descriptionLocalizedBodyNo——
startDateYearMonthYes——
endDateYearMonth or nullNo——
isCurrentbooleanNo——
urlUrlNo——
locationAddressNo——
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
titleLocalizedTitleYes——
roleLocalizedTitleNo—The owner’s role/relationship on this project (added in 1.4.0), e.g. “Author & lead maintainer”, “Contributor”, “Product owner”. Rendered as a short line under the project title. Localized, like the section-entry roles in Career/Membership/Volunteering.
descriptionLocalizedBodyNo——
urlUrlNo——
tagsarray of stringNo≤ 30 items; items: 1–50 chars—
relatedCareerIdSlugNo——
startDateYearMonthNo——
endDateYearMonth or nullNo——
highlightedbooleanNo——
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
labelstring or LocalizedTitleYes—Skill name. A plain string is locale-independent; a localized map (added in 1.4.0) resolves per request locale. Existing single-string labels stay valid — the map form is purely additive.
categorystringNo1–64 charsRecommended values (extensible): programming, design, business, communication, language, music, art, sports, other.
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idstringYes1–64 charsMatches the category value on the skills that belong to this group.
labelLocalizedTitleYes—Localized display heading for the group.

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
emailEmailNo——
showEmailbooleanNodefault false—
formUrlUrlNo——

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
defaultLocaleLocaleTagYes——
fallbackLocaleLocaleTagNo——
availableLocalesarray of LocaleTagYes1–50 items; unique items—
themestringNo1–64 charsUI theme identifier. ‘default’ is the built-in theme; adapters may add more.
showPoweredBybooleanNodefault trueDisplay the ‘Powered by takuhon’ attribution in the rendered profile.
enableJsonLdbooleanNodefault trueEmit Schema.org JSON-LD on the rendered profile page.
enableApibooleanNodefault trueExpose the public read API endpoints (GET /api/profile, /api/jsonld, /api/schema, /takuhon.json).
enableAnalyticsbooleanNodefault falseOpt-in flag for first-party analytics. Default is false to keep takuhon privacy-respecting by default.
activityActivitySettingsNo——
publicVisibilityPublicVisibilityNo——
contactContactSettingsNo——
appearanceAppearanceSettingsNo——
skillCategoriesarray of SkillCategoryNo≤ 50 itemsOrdered skill-category display groups (added in 1.3.0). When present, the rendered profile groups skills by their category under these localized headings, in array order; absent = the flat skill list. A skill whose category is not listed here (or which has none) renders in a trailing group so nothing is dropped.
sectionOrderarray of anyNo≤ 18 items; unique items; items: one of: about, careers, projects, volunteering, skills, activity, education, certifications, publications, honors, memberships, courses, patents, testScores, languages, recommendations, highlights, contactExplicit section display order (added in 1.4.0). A partial list is allowed — any renderable section not named here follows, in the default order. Absent = the default order.
sectionLabelsSectionLabelOverridesNo——
highlightsIntroLocalizedTitleNo—Optional localized intro line shown under the highlights section heading (added in 1.4.0). Absent = no intro line.

No additional properties beyond those listed.

Localized overrides for section headings and chrome labels (added in 1.4.0). Each present key retitles that label; the renderer merges these over its built-in locale pack. Absent keys keep the built-in label.

FieldTypeRequiredConstraintsDescription
aboutLocalizedTitleNo——
careersLocalizedTitleNo——
projectsLocalizedTitleNo——
volunteeringLocalizedTitleNo——
skillsLocalizedTitleNo——
activityLocalizedTitleNo——
educationLocalizedTitleNo——
certificationsLocalizedTitleNo——
publicationsLocalizedTitleNo——
honorsLocalizedTitleNo——
membershipsLocalizedTitleNo——
coursesLocalizedTitleNo——
patentsLocalizedTitleNo——
testScoresLocalizedTitleNo——
languagesLocalizedTitleNo——
recommendationsLocalizedTitleNo——
highlightsLocalizedTitleNo——
contactLocalizedTitleNo——
skipLinkLocalizedTitleNo——
localeNavLocalizedTitleNo——
featuredLinksLocalizedTitleNo——
otherLinksLocalizedTitleNo——
poweredByLocalizedTitleNo——

No additional properties beyond those listed.

Opt-in design tokens for the rendered profile (added in 1.2.0). A declarative re-skin seam: owners override the standard renderer’s built-in color and font defaults. This is a token map only, not arbitrary CSS — every value is length- and pattern-constrained so it cannot break out of the inline

FieldTypeRequiredConstraintsDescription
fontFamilystringNopattern ^[A-Za-z0-9\s,'"._-]+$; 1–256 charsCSS font-family stack for the page body, e.g. “Inter, system-ui, sans-serif”. Quotes and commas are allowed; CSS-structural characters (; { } < >) are not.
colorsAppearanceColorsNo—Light-mode (:root) color overrides.
colorsDarkAppearanceColorsNo—Dark-mode (prefers-color-scheme: dark) color overrides. Note: until the standard renderer ships a default dark palette, only the keys set here change in dark mode.

No additional properties beyond those listed.

A set of overridable color tokens. Each value is a CSS color (hex, rgb()/rgba(), hsl()/hsla(), or a named color); CSS-structural characters (; { } < > ” ’ ) are disallowed so a value cannot escape the inline

FieldTypeRequiredConstraintsDescription
bgCssColorNo—Page background.
surfaceCssColorNo—Raised surfaces such as skill/tag chips.
textCssColorNo—Primary body text.
textMutedCssColorNo—Secondary/muted text (taglines, meta, captions).
borderCssColorNo—Hairline borders and rules.
accentCssColorNo—Accent color for emphasis and focus affordances.
primaryCssColorNo—Primary interactive color, e.g. links.
primaryContrastCssColorNo—Foreground color used on top of the primary color.
headingCssColorNo—Heading color for the “About” section’s Markdown sub-headings (##/###).

No additional properties beyond those listed.

A CSS color value, restricted to a safe allowlist: a hex color (#rgb/#rgba/#rrggbb/#rrggbbaa), a bare keyword (named colors, currentColor, transparent), or a color function (rgb/rgba/hsl/hsla/hwb/lab/lch/oklab/oklch/color). url(), image-set(), var(), and other fetch- or reference-bearing functions are intentionally excluded so a value can never trigger an external request or escape the inline

  • Type: string
  • Constraints: pattern ^(?:#[0-9A-Fa-f]{3,8}|[A-Za-z]+|(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color)\([A-Za-z0-9.,%/\s-]*\))$; 1–64 chars

Opt-in contact form configuration (added in 1.1.0). Only public values live here; the Turnstile site key is safe to embed in the page. The Turnstile secret, the recipient address, and the From label are provisioned out of band as environment configuration and are never stored in takuhon.json. Adapters that support the form mount the widget and a POST endpoint when ‘enabled’ is true.

FieldTypeRequiredConstraintsDescription
enabledbooleanNodefault falseMaster switch. When false (the default), no contact form is mounted even if a site key is present.
turnstileSiteKeystringNo1–128 charsPublic Cloudflare Turnstile site key, safe to embed in the page. Without it the widget is not mounted.
endpointstringNo1–2048 charsOverride the POST endpoint the widget submits to. Defaults to /api/contact on the same origin.
subjectPrefixstringNo1–128 charsSubject prefix for the delivered email, e.g. ‘[example.com contact]’.

No additional properties beyond those listed.

Per-section public visibility (added in 0.6.0). Each key is a content section; setting it to false hides that whole section from every public surface (GET /, /api/profile, /api/jsonld, /takuhon.json, MCP, and the derived CV) via the shared applyPublicPrivacyFilter. An absent key — or an absent object — means the section is public, so the default is all-visible and omitting this block is fully backwards-compatible. The profile identity (profile.displayName, …) is always public and is intentionally not a key here. Field-level controls (contact.showEmail, meta.privacy.*) still apply within a visible section: visibility is the AND of the feature toggle, this section flag, and the field flag.

FieldTypeRequiredConstraintsDescription
linksbooleanNo—Default true. When false, links[] is emitted empty on public surfaces.
careersbooleanNo—Default true. When false, careers[] is emitted empty on public surfaces.
projectsbooleanNo—Default true. When false, projects[] is emitted empty on public surfaces.
skillsbooleanNo—Default true. When false, skills[] is emitted empty on public surfaces.
certificationsbooleanNo—Default true. When false, certifications[] is emitted empty on public surfaces.
membershipsbooleanNo—Default true. When false, memberships[] is emitted empty on public surfaces.
volunteeringbooleanNo—Default true. When false, volunteering[] is emitted empty on public surfaces.
honorsbooleanNo—Default true. When false, honors[] is emitted empty on public surfaces.
educationbooleanNo—Default true. When false, education[] is emitted empty on public surfaces.
publicationsbooleanNo—Default true. When false, publications[] is emitted empty on public surfaces.
languagesbooleanNo—Default true. When false, languages[] is emitted empty on public surfaces.
coursesbooleanNo—Default true. When false, courses[] is emitted empty on public surfaces.
patentsbooleanNo—Default true. When false, patents[] is emitted empty on public surfaces.
testScoresbooleanNo—Default true. When false, testScores[] is emitted empty on public surfaces.
recommendationsbooleanNo—Default true. When false, recommendations[] is emitted empty on public surfaces.
highlightsbooleanNo—Default true. When false, highlights[] is emitted empty on public surfaces.
contactbooleanNo—Default true. When false, the contact section (email, formUrl) is emitted empty on public surfaces.

No additional properties beyond those listed.

Opt-in developer-activity dashboard configuration (GitHub / WakaTime). Only the owner-curated settings live here; secrets are provisioned out of band and the synced metrics are stored in a separate document, never in takuhon.json.

FieldTypeRequiredConstraintsDescription
enabledbooleanNodefault falseMaster switch. When false (the default), the activity section is not rendered even if a snapshot exists.
githubobjectNo——
wakatimeobjectNo——
showRankbooleanNodefault trueDisplay the derived activity rank / badge.
refreshHintHoursintegerNo1–168Advisory refresh cadence in hours. The real cadence is how often the sync step (CLI command or scheduled job) runs.

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
usernamestringYes1–39 charsGitHub login whose public activity is summarized.
showLanguagesbooleanNodefault true—
showContributionsbooleanNodefault true—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
usernamestringYes1–255 charsWakaTime username whose coding-time stats are summarized.
showCodingTimebooleanNodefault true—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
createdAtIsoDateTimeNo——
updatedAtIsoDateTimeNo——
generatorstringNo1–100 charsTool that produced this document (e.g. ‘Takuhon’, ‘create-takuhon@0.1.0’).
contentLicenseContentLicenseYes——
privacyMetaPrivacyNo——

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
spdxIdstringYes1–64 charsSPDX identifier (e.g., ‘CC-BY-4.0’, ‘CC0-1.0’) or ‘Proprietary’. No default; the profile owner must choose explicitly.
urlUrlNo——
attributionobjectNo——
rightsstringNo1–1000 charsFree-form rights statement (used when spdxId=‘Proprietary’ or for additional notices).

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
namestringNo1–200 chars—
urlUrlNo——

No additional properties beyond those listed.

Opt-out flags that strip personally identifying fields from public API output (GET /api/profile, /api/jsonld, /takuhon.json). Admin endpoints (PUT /api/admin/*, GET /api/admin/export) ignore these flags. Privacy-by-default: omitting the object or individual flags is equivalent to true.

FieldTypeRequiredConstraintsDescription
hideCredentialIdsbooleanNodefault trueWhen true (default), strip certifications[*].credentialId from public responses.
hideEducationGradesbooleanNodefault trueWhen true (default), strip education[*].grade from public responses.

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
titleLocalizedTitleYes——
issuingOrganizationLocalizedTitleYes——
issueDateYearMonthYes——
expirationDateYearMonth or nullNo—null = explicitly ‘no expiration’. Omit if unknown/unstated.
credentialIdstringNo1–100 charsLicense or certificate number. Public exposure controlled by meta.privacy.hideCredentialIds.
urlUrlNo——
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
organizationLocalizedTitleYes——
roleLocalizedTitleNo——
descriptionLocalizedBodyNo——
startDateYearMonthYes——
endDateYearMonth or nullNo—null = ongoing. Omit if unknown.
isCurrentbooleanNo——
urlUrlNo——
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
organizationLocalizedTitleYes——
roleLocalizedTitleYes——
causeLocalizedTitleNo——
descriptionLocalizedBodyNo——
startDateYearMonthYes——
endDateYearMonth or nullNo——
isCurrentbooleanNo——
urlUrlNo——
secondaryLinkSecondaryLinkNo—An optional second link for this entry (added in 1.4.0), rendered as a small pill beside the description — e.g. the organization’s GitHub org page next to its main site. The brand glyph is resolved from the URL host; no vendor name is hard-coded.
orderintegerNo≥ 0—

No additional properties beyond those listed.

A supplementary link with an optional localized label (added in 1.4.0). When the label is absent the renderer shows the URL host. The brand glyph is resolved from the URL host.

FieldTypeRequiredConstraintsDescription
urlUrlYes—The link target.
labelLocalizedTitleNo—Localized display label. When absent, the renderer derives a label from the URL host.

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
titleLocalizedTitleYes——
issuerLocalizedTitleYes——
descriptionLocalizedBodyNo——
dateYearMonthYes——
urlUrlNo——
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
institutionLocalizedTitleYes——
degreeLocalizedTitleNo——
fieldOfStudyLocalizedTitleNo——
descriptionLocalizedBodyNo——
gradestringNo1–50 charsFree-form grade / class / GPA. Public exposure controlled by meta.privacy.hideEducationGrades.
startDateYearMonthYes——
endDateYearMonth or nullNo—null = currently enrolled.
isCurrentbooleanNo——
urlUrlNo——
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
titleLocalizedTitleYes——
publisherLocalizedTitleNo——
descriptionLocalizedBodyNo——
dateYearMonthYes——
urlUrlNo——
doistringNo1–200 charsDOI identifier (e.g. ‘10.1145/3548643.3548644’). The full URL goes in ‘url’.
coAuthorsarray of stringNo≤ 50 items; items: 1–100 charsCo-author names in original script. Excludes the profile owner.
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
languageLocaleTagYes——
displayNameLocalizedTitleNo——
proficiencystringYesone of: native, fluent, professional, intermediate, basicLinkedIn-compatible 5-level proficiency.
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
titleLocalizedTitleYes——
providerLocalizedTitleNo——
courseNumberstringNo1–50 chars—
descriptionLocalizedBodyNo——
completionDateYearMonthNo——
certificateUrlUrlNo——
relatedEducationIdSlugNo—Optional reference to an education[].id (e.g. for university coursework).
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
titleLocalizedTitleYes——
patentNumberstringYes1–100 chars—
officestringNo≤ 100 charsPatent office name (e.g. ‘USPTO’, ‘JPO’, ‘EPO’).
statusstringYesone of: pending, issued, expired, abandoned—
descriptionLocalizedBodyNo——
filingDateYearMonthNo——
grantDateYearMonthNo——
urlUrlNo——
coInventorsarray of stringNo≤ 20 items; items: 1–100 chars—
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
titleLocalizedTitleYes——
scorestringYes1–50 charsFree-form score string (e.g. ‘112 / 120’, ‘330’, ‘N1 Pass’, or a percentile). The validator does not interpret its contents.
dateYearMonthYes——
relatedEducationIdSlugNo—Optional reference to an education[].id (e.g. for a university course exam).
descriptionLocalizedBodyNo——
urlUrlNo——
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
bodyLocalizedBodyYes——
authorRecommendationAuthorYes——
relationshipLocalizedTitleNo—How the recommender relates to the profile owner (e.g. ‘managed directly’, ‘worked together’).
dateYearMonthNo——
relatedCareerIdSlugNo—Optional reference to a careers[].id (the position the recommendation pertains to).
relatedEducationIdSlugNo—Optional reference to an education[].id (e.g. a recommendation from a professor).
orderintegerNo≥ 0—

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
namestringYes1–100 charsRecommender’s name, in its original script. Owner-curated; takuhon does not verify it.
headlineLocalizedTitleNo—Recommender’s title / role / organization at the time of the recommendation.
urlUrlNo—Link to the recommender’s profile, for external verification by the reader.

No additional properties beyond those listed.

One curated “selected post” (added in 1.4.0), rendered as a card in the highlights carousel. A hand-picked link to an off-site post (Instagram, X, a blog, a talk, …) with a self-hosted thumbnail — deliberately not an automated social feed. Appears on the public page, /api/profile, /takuhon.json, and MCP; it is intentionally omitted from JSON-LD and the derived CV (no natural vocabulary/résumé slot).

FieldTypeRequiredConstraintsDescription
idSlugYes——
visibilityVisibilityNo——
platformstringYes1–64 charsFree-form source platform (e.g. ‘instagram’, ‘x’, ‘github’, ‘blog’, ‘event’). A value with a matching brand glyph renders a badge icon; others fall back to a text badge. Not an enum, so new platforms need no schema change.
urlUrlYes—Permalink to the original post; the card links here.
imagestringYesformat uri-reference; ≤ 2048 charsSelf-hosted thumbnail, as an absolute URL or a root-relative path (like avatar). Serving the asset is the deployment’s responsibility (a static build does not copy it; a Cloudflare deploy serves it via its assets binding / /assets/*). Do not point at a third-party CDN URL — those can be signed/expiring and leak visitor data.
altLocalizedTitleYes—Required alt text for the thumbnail — the card must not depend on the image alone.
titleLocalizedTitleYes—Localized card title / caption.
descriptionLocalizedBodyNo—Optional localized supporting text shown under the title.
postedAtstringNoformat date; pattern ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$Optional post date, ISO ‘YYYY-MM-DD’ (full date, unlike the YYYY-MM dates used elsewhere — a post has a specific day).
tagsarray of stringNo≤ 30 items; items: 1–50 chars—
orderintegerNo≥ 0—

No additional properties beyond those listed.