---
title: "bot.watch-link-request@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/bot.watch-link-request"
updated: null
---

# bot.watch-link-request@1 · OpenVibe.Services

HTML: [bot.watch-link-request@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/bot.watch-link-request)

# BotWatchLinkRequest `bot.watch-link-request@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).

- Version: 1.0.0
- Owner: bot
- Visibility: first-party
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/bot/watch-link-request.v1.json`](/docs/contracts/bot.watch-link-request.json)

bot.watch-link-request@1: the watch link an agent asks for on a person's own machine (plan L55). The desk is one an agent works on — the private desk or an agent task's own desk (desk-<name>), never the owner's own screen — and the link lives for minutes, not days.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `desk` | string | yes | The desk the link shows: private, or the agent task's desk-<name>. The owner's own screen (main) is never an agent's to link. | - `pattern ^(private\|desk-[a-z0-9][a-z0-9-]{0,23})$` |
| `control` | boolean |  | true: the holders may use the mouse and keyboard too, at the level the owner set on the machine. Absent: they may only watch. |  |
| `minutes` | integer |  | How long the link lives. Absent: 60 minutes. | - `minimum 5`<br>- `maximum 240` |
| `label` | string |  | Where the owner put the link ("the chat"). | - `maxLength 80` |

## Examples

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

 Valid: task-desk

~~~~
{
  "desk": "desk-task-a",
  "minutes": 30
}
~~~~

Valid: watch-only

~~~~
{
  "desk": "desk-research"
}
~~~~

Valid: with-control

~~~~
{
  "desk": "private",
  "control": true,
  "minutes": 60,
  "label": "the chat"
}
~~~~

Rejected: bad-desk

~~~~
{
  "desk": "desk-../x"
}
~~~~

Rejected: no-desk

~~~~
{
  "minutes": 30
}
~~~~

Rejected: owners-screen

~~~~
{
  "desk": "main",
  "minutes": 30
}
~~~~

Rejected: too-short

~~~~
{
  "minutes": 2
}
~~~~

## Validate

~~~~
const contracts = require('openvibe-contracts');
contracts.validate('bot.watch-link-request@1', value);   // { valid, errors: [{ path, message }] }
~~~~
