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
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes | ||
blog | object | yes | ||
blog.id | string | yes | ||
blog.handle | string | yes | ||
slug | string | yes | ||
url | string | yes | ||
state | string | yes | draft, scheduled, published, unpublished, deleted | |
visibility | enum | yes |
| |
author_subject | string | null | |||
title | string | null | yes | ||
summary | string | null | |||
revision | integer | null | yes | ||
published_revision | integer | null | yes | ||
first_published_at | string | null |
| ||
published_at | string | null |
| ||
tags | array | yes | ||
categories | array | yes | ||
series | object | null | |||
allow_comments | boolean | yes | ||
noindex | boolean | yes | ||
indexability | object | null | |||
entitlement_key | string | null | |||
body | string | null | |||
authorship | any | |||
review | any | |||
scheduled | array | |||
attachments | array | |||
citations | array |
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 }] }