LiveChannelPointsPage live.channel-points-page@1

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

Version
1.0.0
Owner
live
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/live/channel-points-page.v1.json

live.channel-points-page@1: the answer of GET /internal/channel-points/changes?network_user_id=&since_id=&streamer_id=&limit= on OpenVibe.Live (live.channel_points.read, Network service token, loopback): one channel's points moves for the person behind the Network account, oldest first, from Live's own channel_points_log. moves carry the ledger's id, the streamer, the ISO time, the signed delta and the raw reason; balance is that channel's points (null without streamer_id); cursor is the newest move seen, next_since pages when more exist (null on the last). 400 without network_user_id or with a bad streamer_id, 404 for an unlinked account.

Fields

FieldTypeRequiredDescriptionConstraints
okconstyes
  • = true
user_idintegeryes
  • minimum 1
streamer_idinteger | nullyes
  • minimum 1
balanceinteger | nullyes
movesarray of objectyes
  • maxItems 501
moves[].idintegeryes
  • minimum 1
moves[].streamer_idintegeryes
  • minimum 1
moves[].atstringyes
moves[].deltaintegeryes
moves[].reasonstring | nullyes
cursorintegeryes
  • minimum 0
next_sinceinteger | nullyes
  • minimum 0

Examples

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

Valid: page
{
  "ok": true,
  "user_id": 7,
  "streamer_id": 3,
  "balance": 70,
  "moves": [
    {
      "id": 11,
      "streamer_id": 3,
      "at": "2026-11-11T10:00:00Z",
      "delta": 100,
      "reason": "watch"
    },
    {
      "id": 12,
      "streamer_id": 3,
      "at": "2026-11-11T11:00:00Z",
      "delta": -30,
      "reason": "redeem reward 9"
    }
  ],
  "cursor": 12,
  "next_since": null
}
Rejected: delta-string
{
  "ok": true,
  "user_id": 7,
  "streamer_id": 3,
  "balance": 70,
  "moves": [
    {
      "id": 11,
      "streamer_id": 3,
      "at": "2026-11-11T10:00:00Z",
      "delta": "100",
      "reason": "watch"
    }
  ],
  "cursor": 11,
  "next_since": null
}

Validate

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