BlogPost blog.post@1

Generated at from openvibe-contracts v0.53.0 and openvibe-sdk v0.11.0.

Version
1.0.0
Owner
blog
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/blog/post.v1.json

blog.post@1: one post as OpenVibe.Blog's API shows it (server/http/api.js postDto): its state, visibility, the fields of the revision shown (the published one, or the head for editors), terms, series and the indexability decision. Editors and staff also get the body, authorship, review, scheduled jobs, attachments and citations; readers of a members-only post they may not open get a 403 teaser instead.

Fields

FieldTypeRequiredDescriptionConstraints
idstringyes
blogobjectyes
blog.idstringyes
blog.handlestringyes
slugstringyes
urlstringyes
statestringyesdraft, scheduled, published, unpublished, deleted
visibilityenumyes
  • one of "public", "unlisted", "members", "private"
author_subjectstring | null
titlestring | nullyes
summarystring | null
revisioninteger | nullyes
published_revisioninteger | nullyes
first_published_atstring | null
  • format date-time
published_atstring | null
  • format date-time
tagsarrayyes
categoriesarrayyes
seriesobject | null
allow_commentsbooleanyes
noindexbooleanyes
indexabilityobject | null
entitlement_keystring | null
bodystring | null
authorshipany
reviewany
scheduledarray
attachmentsarray
citationsarray

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: published
{
  "id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "blog": {
    "id": "blg_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "handle": "alice"
  },
  "slug": "my-restream-setup",
  "url": "https://openvibe.blog/@alice/my-restream-setup",
  "state": "published",
  "visibility": "public",
  "author_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "title": "My restream setup",
  "summary": "One encoder, three platforms.",
  "revision": 2,
  "published_revision": 2,
  "first_published_at": "2026-09-24T10:00:00.000Z",
  "published_at": "2026-09-25T10:00:00.000Z",
  "tags": [
    "obs",
    "restream"
  ],
  "categories": [],
  "series": null,
  "allow_comments": true,
  "noindex": false,
  "indexability": {
    "indexable": true,
    "robots": "index,follow",
    "reasons": []
  }
}
Rejected: bad-visibility
{
  "id": "pst_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "blog": {
    "id": "blg_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "handle": "alice"
  },
  "slug": "my-restream-setup",
  "url": "https://openvibe.blog/@alice/my-restream-setup",
  "state": "published",
  "visibility": "friends",
  "author_subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "title": "My restream setup",
  "summary": "One encoder, three platforms.",
  "revision": 2,
  "published_revision": 2,
  "first_published_at": "2026-09-24T10:00:00.000Z",
  "published_at": "2026-09-25T10:00:00.000Z",
  "tags": [
    "obs",
    "restream"
  ],
  "categories": [],
  "series": null,
  "allow_comments": true,
  "noindex": false,
  "indexability": {
    "indexable": true,
    "robots": "index,follow",
    "reasons": []
  }
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('blog.post@1', value);   // { valid, errors: [{ path, message }] }