---
title: "network.menu-feeds@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/network.menu-feeds@1"
updated: null
---

# network.menu-feeds@1 · OpenVibe.Services

HTML: [network.menu-feeds@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/network.menu-feeds@1)

# NetworkMenuFeeds `network.menu-feeds@1`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

An older major, still in the catalog. The current one is [`network.menu-feeds@2`](/docs/contracts/network.menu-feeds).

- Version: 1.0.0
- Owner: network
- Visibility: public
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/network/menu-feeds.v1.json`](/docs/contracts/network.menu-feeds@1.json)

network.menu-feeds@1 (the menu's Choose your feeds, 2026-11-07): the sites' menu cards a person chose to show in the OpenVibe menu, in their order. It lives in the Network, not in the browser, because localStorage is per site and the choice follows the person across every domain. GET /api/v1/me/menu-feeds and PUT /api/v1/me/menu-feeds on OpenVibe.Network; a person who has never chosen gets { on: null } from the GET.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `on` | array of string | yes | The cards the person chose, in the order the menu shows them: up to four \`<site>:<cardId>\` ids. An empty array means they cleared the choice and the menu falls back to its own default cards. | - `maxItems 4`<br>- `items: pattern ^[a-z0-9-]{1,30}:[a-z0-9-]{1,30}$` |
| `updated_at` | string | yes | When the person last changed the choice. | - `format date-time` |

## Examples

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

The fixtures that ship with the package are the current major's.

## Validate

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