---
title: "actor.ask@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/actor.ask"
updated: null
---

# actor.ask@1 · OpenVibe.Services

HTML: [actor.ask@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/actor.ask)

# ActorAsk `actor.ask@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: actor
- Visibility: public
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/actor/ask.v1.json`](/docs/contracts/actor.ask.json)

One question or action waiting for the owner of a personal Actor. An answer never grants permission for a different action.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `id` | string | yes |  | - `pattern ^ask_[0-9A-HJKMNP-TV-Z]{26}$` |
| `actor` | string | yes |  | - `pattern ^act_[0-9A-HJKMNP-TV-Z]{26}$` |
| `goal` | string | yes |  | - `pattern ^agl_[0-9A-HJKMNP-TV-Z]{26}$` |
| `kind` | enum | yes |  | - `one of "approve_action", "answer_question", "do_yourself", "sign_in"` |
| `text` | string | yes |  | - `minLength 1`<br>- `maxLength 2000` |
| `options` | array of string | yes |  | - `maxItems 12`<br>- `unique items`<br>- `items: minLength 1`<br>- `items: maxLength 200` |
| `created` | string | yes |  | - `format date-time` |
| `answered` | one of | yes |  |  |
| `screen_url` | string \| null |  | The Actor page where its person can take over the screen; not a credential. | - `maxLength 2048` |
| `evidence` | object \| null |  |  |  |

## Examples

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

 Valid: answered

~~~~
{
  "id": "ask_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "actor": "act_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "goal": "agl_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "kind": "approve_action",
  "text": "Send this application?",
  "options": [
    "Approve",
    "Decline"
  ],
  "created": "2026-11-09T09:00:00.000Z",
  "answered": {
    "at": "2026-11-09T09:01:00.000Z",
    "decision": "answer",
    "text": "Approve"
  }
}
~~~~

Valid: pending

~~~~
{
  "id": "ask_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "actor": "act_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "goal": "agl_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "kind": "approve_action",
  "text": "Send this application?",
  "options": [
    "Approve",
    "Decline"
  ],
  "created": "2026-11-09T09:00:00.000Z",
  "answered": null
}
~~~~

Valid: sign-in

~~~~
{
  "id": "ask_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "actor": "act_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "goal": "agl_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "kind": "sign_in",
  "text": "Send this application?",
  "options": [
    "Sign in on its screen",
    "Done"
  ],
  "created": "2026-11-09T09:00:00.000Z",
  "answered": null,
  "screen_url": "/you?screen=1",
  "evidence": {
    "text": "Sign in to the site on your Actor’s screen."
  }
}
~~~~

Rejected: answer-without-time

~~~~
{
  "id": "ask_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "actor": "act_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "goal": "agl_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "kind": "approve_action",
  "text": "Send this application?",
  "options": [
    "Approve",
    "Decline"
  ],
  "created": "2026-11-09T09:00:00.000Z",
  "answered": {
    "decision": "answer"
  }
}
~~~~

Rejected: empty-text

~~~~
{
  "id": "ask_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "actor": "act_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "goal": "agl_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "kind": "approve_action",
  "text": "",
  "options": [
    "Approve",
    "Decline"
  ],
  "created": "2026-11-09T09:00:00.000Z",
  "answered": null
}
~~~~

Rejected: unknown-kind

~~~~
{
  "id": "ask_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "actor": "act_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "goal": "agl_01K6R3A1B2C3D4E5F6G7H8J9KF",
  "kind": "run_anything",
  "text": "Send this application?",
  "options": [
    "Approve",
    "Decline"
  ],
  "created": "2026-11-09T09:00:00.000Z",
  "answered": null
}
~~~~

## Validate

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