BlogPostCreateRequest blog.post-create-request@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-create-request.v1.json

blog.post-create-request@1: the body of POST /api/v1/blogs/:handle/posts on OpenVibe.Blog (blog.post.create; a member who may write, or a service acting for one; X-OV-Origin: ai makes an AI draft that needs a person's review). A new draft at revision 1: title required. Unknown fields are ignored; refusals are problem+json (post.invalid_title, post.too_long, post.invalid_visibility, post.invalid_slug, post.too_many_tags, post.invalid_series, …).

Fields

FieldTypeRequiredDescriptionConstraints
titlestringyesWhitespace collapsed; required, at most 200 characters.
  • minLength 1
  • maxLength 200
bodystringMarkdown.
  • maxLength 200000
summarystring | null
visibilityenumDefault public; members gates it behind the blog's VIP entitlement (OpenVibe.VIP decides).
  • one of "public", "unlisted", "members", "private"
entitlement_keystringmembers only: informational, default vip:<handle>.
  • pattern ^[a-z][a-z0-9_.:-]{0,127}$
slugstringDefault from the title; lowercase letters, digits and dashes (a taken one gets a number).
allow_commentsboolean | integer | string
noindexboolean | integer | string
tagsone ofAt most 20 tags of at most 50 characters.
categoriesone ofCategory paths (Parent > Child), at most 10.
seriesanyA series id (ser_…), a new series title, or { title }; null or empty leaves the series.
series_idstring | null
series_positioninteger | string | null
citationsarray of objectSources: a URL (with retrieved_at) or an OpenVibe.Sources item id; a quote may be text or { text }. At most 100 are kept.
  • maxItems 100
citations[].urlstring | null
citations[].source_item_idstring | null
citations[].titlestring | null
citations[].retrieved_atstring | null
citations[].quoteany
citations[].license_notestring | null
messagestring | null
authorshipobjecthybrid or imported authorship details; an AI service (X-OV-Origin: ai) writes AI drafts that need review.

Examples

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

Valid: draft
{
  "title": "My restream setup",
  "body": "One encoder, three platforms. Here is how.",
  "summary": "One encoder, three platforms.",
  "tags": "obs, restream",
  "visibility": "public",
  "citations": [
    {
      "url": "https://openre.stream/docs",
      "retrieved_at": "2026-09-24T09:00:00Z"
    }
  ]
}
Rejected: no-title
{
  "body": "no title"
}

Validate

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