NetworkFollowListResult network.follow-list-result@1

Generated at from openvibe-contracts v0.76.0 and openvibe-sdk v0.20.1.

Version
1.0.0
Owner
network
Visibility
first-party
Status
active
Compatibility
backward
Decision
ADR-030
Schema
https://openvibe.network/contracts/network/follow-list-result.v1.json

network.follow-list-result@1 (ADR-030): a page of follows on OpenVibe.Network, newest first. GET /api/v1/me/follows (what the caller follows), GET /api/v1/follows/:type/:target/followers (who follows a target: the target's owner, or a service with network.follows.read). Lists are never public; counts are.

Fields

FieldTypeRequiredDescriptionConstraints
itemsarray of objectyes
  • maxItems 500
  • items: no other fields
items[].followerstringyes
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
items[].target_typeenumyes
  • one of "channel"
items[].target_idstringyes
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
items[].notify_emailboolean
items[].notify_pushboolean
items[].created_atstringyes
  • format date-time
next_cursorstring | nullyes
  • maxLength 200

Examples

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

Valid: page
{
  "items": [
    {
      "follower": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
      "target_type": "channel",
      "target_id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
      "notify_email": true,
      "notify_push": true,
      "created_at": "2026-09-20T10:00:00Z"
    }
  ],
  "next_cursor": null
}
Rejected: leaks-username
{
  "items": [
    {
      "follower": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
      "target_type": "channel",
      "target_id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
      "created_at": "2026-09-20T10:00:00Z",
      "username": "alice"
    }
  ],
  "next_cursor": null
}

Validate

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