openvibers/openvibe.contracts Commits
Contracts 0.329.0: mail.mask, mail.burner, mail.agent-inbox and mail.message-summary (#337)
Changes
@@@ -1,5 +1,13 @@# Changelog++## 0.329.0 — 2026-11-07++++- Add `mail.mask@1`: a per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. It carries the `msk_…` id, the owner's Network subject, the `<words>.<four characters>@<mask domain>` address, the person's label and purpose, whether it is enabled (a disabled mask leaves the SQL directory Stalwart reads, so it bounces) and when it was made. M1 is receive-only, so this is metadata: no body, no forwarding target.++- Add `mail.burner@1`: a throwaway receive-only address with its `bnr_…` id, an owner (null for the ten-minute burner made without an account), the eight-character address on a rotating burner domain, the expiry, `first_message_only` and the creation time. The one-time read token a create call returns is deliberately not part of the resource.++- Add `mail.agent-inbox@1`: an agent's address `<agent>.<user>@openvibe.email`, its `agi_…` id, the owner, the cleaned agent id and the creation time. The mail lands in the person's mailbox; one agent has one inbox.++- Add `mail.message-summary@1`: the one shape a list API returns for a message — id, sender addresses, subject and received time. `additionalProperties` is false, so a `body`, `preview` or `html` field fails the contract rather than leaking into an API; the body is read only by the verification-code endpoint, in memory.++- All four are new contracts, not changes to existing ones, and the minor is expand-only. Valid and invalid fixtures cover a disabled mask, a guessed address, an anonymous and a one-message burner, a bad owner or agent id, a non-address, and a summary that carries a body.++## 0.328.0 — 2026-11-07- Add `actor.assignment@1`: one node of the tree of delegated work (plan §12) — id, root, parent, depth, origin (`person`, `routine`, `outside`), mode (`work`, `consult`, `notify`), reply (`resume`, `poll`, `none`), the agent and task it runs as, the node's level and effective level, the root's budget (limit, spent and remaining), state and timestamps. A node is one hand-off: a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. The effective level is the higher of the agent's own and the one inherited along a person's or routine's line; outside work never passes a level down. A cancel cascades down the tree, and a root's budget stops its children when spent. `GET /api/v1/assignments/:id` answers the node and its children and `POST /api/v1/assignments/:id/cancel` cancels the subtree; both are owner-only and another person gets 404. An existing task gets a root lazily.@@@ -9975,6 +9975,42 @@"visibility": "public","compatibility": "backward","status": "active"++ },++ {++ "id": "mail.mask",++ "version": "1.0.0",++ "owner": "mail",++ "schema": "mail/mask.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "mail.burner",++ "version": "1.0.0",++ "owner": "mail",++ "schema": "mail/burner.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "mail.agent-inbox",++ "version": "1.0.0",++ "owner": "mail",++ "schema": "mail/agent-inbox.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "mail.message-summary",++ "version": "1.0.0",++ "owner": "mail",++ "schema": "mail/message-summary.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,39 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/agent-inbox.v1.json",++ "title": "MailAgentInbox",++ "description": "An address an agent can read, on the person's own domain: <agent>.<user>@openvibe.email. The mail lands in the person's mailbox, like every other address OpenVibe.Mail hands out; what makes it an agent's inbox is that the service reads it back for the agent acting for that person. One agent has one inbox: asking twice returns the same resource.",++ "type": "object",++ "required": ["id", "owner", "agent_id", "address", "created_at"],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^agi_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The inbox id. Opaque outside OpenVibe.Mail."++ },++ "owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Network subject id of the person whose mailbox receives the agent's mail."++ },++ "agent_id": {++ "type": "string",++ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$",++ "maxLength": 32,++ "description": "The agent's name in the address, lowercased and cleaned (letters, digits and hyphens)."++ },++ "address": {++ "type": "string",++ "format": "email",++ "pattern": "^[a-z0-9-]+\\.[a-z0-9-]+@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",++ "maxLength": 254,++ "description": "The agent's address. In M1 the user part is the person's Network username, falling back to their mailbox local when that readable address is already taken."++ },++ "created_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the inbox was made, ISO 8601 UTC."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,42 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/burner.v1.json",++ "title": "MailBurner",++ "description": "A throwaway receive-only address on OpenVibe.Mail. It expires after ten minutes, an hour, a day or a week, or after the first message when first_message_only is set. When it expires its mail is deleted and the address bounces. A ten-minute burner may be made without an account (owner is null) and is then read with the one-time token the create call returns; the token is deliberately not part of this resource.",++ "type": "object",++ "required": ["id", "owner", "address", "expires_at", "first_message_only", "created_at"],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^bnr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The burner id. Opaque outside OpenVibe.Mail."++ },++ "owner": {++ "type": ["string", "null"],++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Network subject id of the person who made the burner, or null for a ten-minute burner made without an account."++ },++ "address": {++ "type": "string",++ "format": "email",++ "pattern": "^[a-z0-9]{8}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",++ "maxLength": 254,++ "description": "The burner address: eight unguessable characters on one of the rotating burner domains."++ },++ "expires_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the address stops resolving and its mail is due for deletion, ISO 8601 UTC."++ },++ "first_message_only": {++ "type": "boolean",++ "description": "When true the burner accepts one message and then stops resolving."++ },++ "created_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the burner was made, ISO 8601 UTC."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,47 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/mask.v1.json",++ "title": "MailMask",++ "description": "A per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. Turning it off makes the address bounce: it leaves the SQL directory Stalwart reads, so a new message is refused. The address is <words>.<four characters>@<mask domain>; the four characters keep two people from guessing each other's mask. The contract is metadata only: it never carries a message body.",++ "type": "object",++ "required": ["id", "owner", "address", "label", "purpose", "enabled", "created_at"],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^msk_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The mask id. Opaque outside OpenVibe.Mail; never a database integer."++ },++ "owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Network subject id of the person whose mailbox receives the mask's mail. A mask never forwards outside OpenVibe."++ },++ "address": {++ "type": "string",++ "format": "email",++ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?\\.[a-z0-9]{4}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",++ "maxLength": 254,++ "description": "The mask address: the words the person chose, a dot, four unguessable characters, and the mask domain (mask.openvibe.email in M1)."++ },++ "label": {++ "type": ["string", "null"],++ "maxLength": 120,++ "description": "The person's name for the mask, e.g. \"Amazon\". Free text; never interpreted as an address."++ },++ "purpose": {++ "type": ["string", "null"],++ "maxLength": 120,++ "description": "What the mask is for, e.g. \"shopping\". Optional metadata for the person's own list."++ },++ "enabled": {++ "type": "boolean",++ "description": "Whether the mask resolves. When false the SQL directory has no row for the address, so the mail server refuses it."++ },++ "created_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the mask was made, ISO 8601 UTC."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,37 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/message-summary.v1.json",++ "title": "MailMessageSummary",++ "description": "One message in a mask, burner or agent inbox, as OpenVibe.Mail's list API returns it: the id, the senders, the subject and the time. It deliberately has no preview and no body: a message body is read only by the verification-code endpoint, in memory, and is never part of a list, an event or a database row. additionalProperties is false so a field like body, preview or html fails the contract rather than leaking into an API.",++ "type": "object",++ "required": ["id", "from", "subject", "received_at"],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 512,++ "description": "The mail server's message id (a JMAP Email id). Opaque outside OpenVibe.Mail."++ },++ "from": {++ "type": "array",++ "maxItems": 100,++ "items": {++ "type": "string",++ "format": "email",++ "maxLength": 254++ },++ "description": "The sender addresses, as the mail server parsed them. An address list, not a display name."++ },++ "subject": {++ "type": ["string", "null"],++ "maxLength": 2000,++ "description": "The subject line, or null when the message had none."++ },++ "received_at": {++ "type": ["string", "null"],++ "format": "date-time",++ "description": "When the mail server received the message, ISO 8601 UTC, or null when it did not record a time."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "agi_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "agent_id": "Helper!",++ "address": "[email protected]",++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "agi_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "agent_id": "helper",++ "address": "helper",++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "agi_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "agent_id": "helper",++ "address": "[email protected]",++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": null,++ "address": "[email protected]",++ "expires_at": "2026-11-07T12:10:00Z",++ "first_message_only": false,++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": "someone",++ "address": "[email protected]",++ "expires_at": "2026-11-07T12:10:00Z",++ "first_message_only": false,++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": null,++ "address": "[email protected]",++ "expires_at": "2026-11-07T12:10:00Z",++ "first_message_only": false,++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPR",++ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "address": "[email protected]",++ "expires_at": "2026-11-08T12:00:00Z",++ "first_message_only": true,++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": "alice",++ "address": "[email protected]",++ "label": "Amazon",++ "purpose": null,++ "enabled": true,++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "address": "[email protected]",++ "label": "Amazon",++ "purpose": null,++ "enabled": true,++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "address": "[email protected]",++ "label": "Amazon",++ "purpose": "shopping",++ "enabled": true,++ "created_at": "2026-11-07T12:00:00Z"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPR",++ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "address": "[email protected]",++ "label": null,++ "purpose": null,++ "enabled": false,++ "created_at": "2026-11-07T12:01:00Z"++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "maaaaad",++ "from": ["[email protected]"],++ "subject": "Your verification code",++ "received_at": "2026-11-07T12:00:00Z",++ "body": "Your verification code is 918273"++}nnew file mode 100644@@@ -0,0 +1,6 @@++{++ "id": "maaaaad",++ "from": ["[email protected]"],++ "subject": "Your verification code",++ "received_at": "2026-11-07T12:00:00Z"++}@@@ -109339,6 +109339,232 @@}}}++ },++ "mail.mask": {++ "version": "1.0.0",++ "owner": "mail",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/mask.v1.json",++ "title": "MailMask",++ "description": "A per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. Turning it off makes the address bounce: it leaves the SQL directory Stalwart reads, so a new message is refused. The address is <words>.<four characters>@<mask domain>; the four characters keep two people from guessing each other's mask. The contract is metadata only: it never carries a message body.",++ "type": "object",++ "required": [++ "id",++ "owner",++ "address",++ "label",++ "purpose",++ "enabled",++ "created_at"++ ],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^msk_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The mask id. Opaque outside OpenVibe.Mail; never a database integer."++ },++ "owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Network subject id of the person whose mailbox receives the mask's mail. A mask never forwards outside OpenVibe."++ },++ "address": {++ "type": "string",++ "format": "email",++ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?\\.[a-z0-9]{4}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",++ "maxLength": 254,++ "description": "The mask address: the words the person chose, a dot, four unguessable characters, and the mask domain (mask.openvibe.email in M1)."++ },++ "label": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 120,++ "description": "The person's name for the mask, e.g. \"Amazon\". Free text; never interpreted as an address."++ },++ "purpose": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 120,++ "description": "What the mask is for, e.g. \"shopping\". Optional metadata for the person's own list."++ },++ "enabled": {++ "type": "boolean",++ "description": "Whether the mask resolves. When false the SQL directory has no row for the address, so the mail server refuses it."++ },++ "created_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the mask was made, ISO 8601 UTC."++ }++ }++ }++ },++ "mail.burner": {++ "version": "1.0.0",++ "owner": "mail",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/burner.v1.json",++ "title": "MailBurner",++ "description": "A throwaway receive-only address on OpenVibe.Mail. It expires after ten minutes, an hour, a day or a week, or after the first message when first_message_only is set. When it expires its mail is deleted and the address bounces. A ten-minute burner may be made without an account (owner is null) and is then read with the one-time token the create call returns; the token is deliberately not part of this resource.",++ "type": "object",++ "required": [++ "id",++ "owner",++ "address",++ "expires_at",++ "first_message_only",++ "created_at"++ ],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^bnr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The burner id. Opaque outside OpenVibe.Mail."++ },++ "owner": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Network subject id of the person who made the burner, or null for a ten-minute burner made without an account."++ },++ "address": {++ "type": "string",++ "format": "email",++ "pattern": "^[a-z0-9]{8}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",++ "maxLength": 254,++ "description": "The burner address: eight unguessable characters on one of the rotating burner domains."++ },++ "expires_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the address stops resolving and its mail is due for deletion, ISO 8601 UTC."++ },++ "first_message_only": {++ "type": "boolean",++ "description": "When true the burner accepts one message and then stops resolving."++ },++ "created_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the burner was made, ISO 8601 UTC."++ }++ }++ }++ },++ "mail.agent-inbox": {++ "version": "1.0.0",++ "owner": "mail",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/agent-inbox.v1.json",++ "title": "MailAgentInbox",++ "description": "An address an agent can read, on the person's own domain: <agent>.<user>@openvibe.email. The mail lands in the person's mailbox, like every other address OpenVibe.Mail hands out; what makes it an agent's inbox is that the service reads it back for the agent acting for that person. One agent has one inbox: asking twice returns the same resource.",++ "type": "object",++ "required": [++ "id",++ "owner",++ "agent_id",++ "address",++ "created_at"++ ],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^agi_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The inbox id. Opaque outside OpenVibe.Mail."++ },++ "owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Network subject id of the person whose mailbox receives the agent's mail."++ },++ "agent_id": {++ "type": "string",++ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$",++ "maxLength": 32,++ "description": "The agent's name in the address, lowercased and cleaned (letters, digits and hyphens)."++ },++ "address": {++ "type": "string",++ "format": "email",++ "pattern": "^[a-z0-9-]+\\.[a-z0-9-]+@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",++ "maxLength": 254,++ "description": "The agent's address. In M1 the user part is the person's Network username, falling back to their mailbox local when that readable address is already taken."++ },++ "created_at": {++ "type": "string",++ "format": "date-time",++ "description": "When the inbox was made, ISO 8601 UTC."++ }++ }++ }++ },++ "mail.message-summary": {++ "version": "1.0.0",++ "owner": "mail",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/mail/message-summary.v1.json",++ "title": "MailMessageSummary",++ "description": "One message in a mask, burner or agent inbox, as OpenVibe.Mail's list API returns it: the id, the senders, the subject and the time. It deliberately has no preview and no body: a message body is read only by the verification-code endpoint, in memory, and is never part of a list, an event or a database row. additionalProperties is false so a field like body, preview or html fails the contract rather than leaking into an API.",++ "type": "object",++ "required": [++ "id",++ "from",++ "subject",++ "received_at"++ ],++ "additionalProperties": false,++ "properties": {++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 512,++ "description": "The mail server's message id (a JMAP Email id). Opaque outside OpenVibe.Mail."++ },++ "from": {++ "type": "array",++ "maxItems": 100,++ "items": {++ "type": "string",++ "format": "email",++ "maxLength": 254++ },++ "description": "The sender addresses, as the mail server parsed them. An address list, not a display name."++ },++ "subject": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 2000,++ "description": "The subject line, or null when the message had none."++ },++ "received_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time",++ "description": "When the mail server received the message, ISO 8601 UTC, or null when it did not record a time."++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bench API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Codes API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe Connect API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Design API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Domains API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.328.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Play API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Quest API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Report API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Today API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Vision API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Zone API",-- "version": "0.328.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.329.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -301911,3 +301911,121 @@ export interface NetworkMenuFeeds {*/updated_at: string;}++++/** [email protected] (owner: mail) */++/**++ * A per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. Turning it off makes the address bounce: it leaves the SQL directory Stalwart reads, so a new message is refused. The address is <words>.<four characters>@<mask domain>; the four characters keep two people from guessing each other's mask. The contract is metadata only: it never carries a message body.++ */++export interface MailMask {++ /**++ * The mask id. Opaque outside OpenVibe.Mail; never a database integer.++ */++ id: string;++ /**++ * The Network subject id of the person whose mailbox receives the mask's mail. A mask never forwards outside OpenVibe.++ */++ owner: string;++ /**++ * The mask address: the words the person chose, a dot, four unguessable characters, and the mask domain (mask.openvibe.email in M1).++ */++ address: string;++ /**++ * The person's name for the mask, e.g. "Amazon". Free text; never interpreted as an address.++ */++ label: string | null;++ /**++ * What the mask is for, e.g. "shopping". Optional metadata for the person's own list.++ */++ purpose: string | null;++ /**++ * Whether the mask resolves. When false the SQL directory has no row for the address, so the mail server refuses it.++ */++ enabled: boolean;++ /**++ * When the mask was made, ISO 8601 UTC.++ */++ created_at: string;++}++++/** [email protected] (owner: mail) */++/**++ * A throwaway receive-only address on OpenVibe.Mail. It expires after ten minutes, an hour, a day or a week, or after the first message when first_message_only is set. When it expires its mail is deleted and the address bounces. A ten-minute burner may be made without an account (owner is null) and is then read with the one-time token the create call returns; the token is deliberately not part of this resource.++ */++export interface MailBurner {++ /**++ * The burner id. Opaque outside OpenVibe.Mail.++ */++ id: string;++ /**++ * The Network subject id of the person who made the burner, or null for a ten-minute burner made without an account.++ */++ owner: string | null;++ /**++ * The burner address: eight unguessable characters on one of the rotating burner domains.++ */++ address: string;++ /**++ * When the address stops resolving and its mail is due for deletion, ISO 8601 UTC.++ */++ expires_at: string;++ /**++ * When true the burner accepts one message and then stops resolving.++ */++ first_message_only: boolean;++ /**++ * When the burner was made, ISO 8601 UTC.++ */++ created_at: string;++}++++/** [email protected] (owner: mail) */++/**++ * An address an agent can read, on the person's own domain: <agent>.<user>@openvibe.email. The mail lands in the person's mailbox, like every other address OpenVibe.Mail hands out; what makes it an agent's inbox is that the service reads it back for the agent acting for that person. One agent has one inbox: asking twice returns the same resource.++ */++export interface MailAgentInbox {++ /**++ * The inbox id. Opaque outside OpenVibe.Mail.++ */++ id: string;++ /**++ * The Network subject id of the person whose mailbox receives the agent's mail.++ */++ owner: string;++ /**++ * The agent's name in the address, lowercased and cleaned (letters, digits and hyphens).++ */++ agent_id: string;++ /**++ * The agent's address. In M1 the user part is the person's Network username, falling back to their mailbox local when that readable address is already taken.++ */++ address: string;++ /**++ * When the inbox was made, ISO 8601 UTC.++ */++ created_at: string;++}++++/** [email protected] (owner: mail) */++/**++ * One message in a mask, burner or agent inbox, as OpenVibe.Mail's list API returns it: the id, the senders, the subject and the time. It deliberately has no preview and no body: a message body is read only by the verification-code endpoint, in memory, and is never part of a list, an event or a database row. additionalProperties is false so a field like body, preview or html fails the contract rather than leaking into an API.++ */++export interface MailMessageSummary {++ /**++ * The mail server's message id (a JMAP Email id). Opaque outside OpenVibe.Mail.++ */++ id: string;++ /**++ * The sender addresses, as the mail server parsed them. An address list, not a display name.++ *++ * @maxItems 100++ */++ from: string[];++ /**++ * The subject line, or null when the message had none.++ */++ subject: string | null;++ /**++ * When the mail server received the message, ISO 8601 UTC, or null when it did not record a time.++ */++ received_at: string | null;++}@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.328.0",++ "version": "0.329.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.328.0",++ "version": "0.329.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.328.0",++ "version": "0.329.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
@@ -1,5 +1,13 @@
@@ -1,5 +1,13 @@
# Changelog
# Changelog
+## 0.329.0 — 2026-11-07
+
+- Add `mail.mask@1`: a per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. It carries the `msk_…` id, the owner's Network subject, the `<words>.<four characters>@<mask domain>` address, the person's label and purpose, whether it is enabled (a disabled mask leaves the SQL directory Stalwart reads, so it bounces) and when it was made. M1 is receive-only, so this is metadata: no body, no forwarding target.
+- Add `mail.burner@1`: a throwaway receive-only address with its `bnr_…` id, an owner (null for the ten-minute burner made without an account), the eight-character address on a rotating burner domain, the expiry, `first_message_only` and the creation time. The one-time read token a create call returns is deliberately not part of the resource.
+- Add `mail.agent-inbox@1`: an agent's address `<agent>.<user>@openvibe.email`, its `agi_…` id, the owner, the cleaned agent id and the creation time. The mail lands in the person's mailbox; one agent has one inbox.
+- Add `mail.message-summary@1`: the one shape a list API returns for a message — id, sender addresses, subject and received time. `additionalProperties` is false, so a `body`, `preview` or `html` field fails the contract rather than leaking into an API; the body is read only by the verification-code endpoint, in memory.
+- All four are new contracts, not changes to existing ones, and the minor is expand-only. Valid and invalid fixtures cover a disabled mask, a guessed address, an anonymous and a one-message burner, a bad owner or agent id, a non-address, and a summary that carries a body.
+
## 0.328.0 — 2026-11-07
## 0.328.0 — 2026-11-07
- Add `actor.assignment@1`: one node of the tree of delegated work (plan §12) — id, root, parent, depth, origin (`person`, `routine`, `outside`), mode (`work`, `consult`, `notify`), reply (`resume`, `poll`, `none`), the agent and task it runs as, the node's level and effective level, the root's budget (limit, spent and remaining), state and timestamps. A node is one hand-off: a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. The effective level is the higher of the agent's own and the one inherited along a person's or routine's line; outside work never passes a level down. A cancel cascades down the tree, and a root's budget stops its children when spent. `GET /api/v1/assignments/:id` answers the node and its children and `POST /api/v1/assignments/:id/cancel` cancels the subtree; both are owner-only and another person gets 404. An existing task gets a root lazily.
- Add `actor.assignment@1`: one node of the tree of delegated work (plan §12) — id, root, parent, depth, origin (`person`, `routine`, `outside`), mode (`work`, `consult`, `notify`), reply (`resume`, `poll`, `none`), the agent and task it runs as, the node's level and effective level, the root's budget (limit, spent and remaining), state and timestamps. A node is one hand-off: a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. The effective level is the higher of the agent's own and the one inherited along a person's or routine's line; outside work never passes a level down. A cancel cascades down the tree, and a root's budget stops its children when spent. `GET /api/v1/assignments/:id` answers the node and its children and `POST /api/v1/assignments/:id/cancel` cancels the subtree; both are owner-only and another person gets 404. An existing task gets a root lazily.
@@ -9975,6 +9975,42 @@
@@ -9975,6 +9975,42 @@
"visibility": "public",
"visibility": "public",
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
+ },
+ {
+ "id": "mail.mask",
+ "version": "1.0.0",
+ "owner": "mail",
+ "schema": "mail/mask.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "mail.burner",
+ "version": "1.0.0",
+ "owner": "mail",
+ "schema": "mail/burner.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "mail.agent-inbox",
+ "version": "1.0.0",
+ "owner": "mail",
+ "schema": "mail/agent-inbox.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "mail.message-summary",
+ "version": "1.0.0",
+ "owner": "mail",
+ "schema": "mail/message-summary.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/agent-inbox.v1.json",
+ "title": "MailAgentInbox",
+ "description": "An address an agent can read, on the person's own domain: <agent>.<user>@openvibe.email. The mail lands in the person's mailbox, like every other address OpenVibe.Mail hands out; what makes it an agent's inbox is that the service reads it back for the agent acting for that person. One agent has one inbox: asking twice returns the same resource.",
+ "type": "object",
+ "required": ["id", "owner", "agent_id", "address", "created_at"],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^agi_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The inbox id. Opaque outside OpenVibe.Mail."
+ },
+ "owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Network subject id of the person whose mailbox receives the agent's mail."
+ },
+ "agent_id": {
+ "type": "string",
+ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$",
+ "maxLength": 32,
+ "description": "The agent's name in the address, lowercased and cleaned (letters, digits and hyphens)."
+ },
+ "address": {
+ "type": "string",
+ "format": "email",
+ "pattern": "^[a-z0-9-]+\\.[a-z0-9-]+@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",
+ "maxLength": 254,
+ "description": "The agent's address. In M1 the user part is the person's Network username, falling back to their mailbox local when that readable address is already taken."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the inbox was made, ISO 8601 UTC."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/burner.v1.json",
+ "title": "MailBurner",
+ "description": "A throwaway receive-only address on OpenVibe.Mail. It expires after ten minutes, an hour, a day or a week, or after the first message when first_message_only is set. When it expires its mail is deleted and the address bounces. A ten-minute burner may be made without an account (owner is null) and is then read with the one-time token the create call returns; the token is deliberately not part of this resource.",
+ "type": "object",
+ "required": ["id", "owner", "address", "expires_at", "first_message_only", "created_at"],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^bnr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The burner id. Opaque outside OpenVibe.Mail."
+ },
+ "owner": {
+ "type": ["string", "null"],
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Network subject id of the person who made the burner, or null for a ten-minute burner made without an account."
+ },
+ "address": {
+ "type": "string",
+ "format": "email",
+ "pattern": "^[a-z0-9]{8}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",
+ "maxLength": 254,
+ "description": "The burner address: eight unguessable characters on one of the rotating burner domains."
+ },
+ "expires_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the address stops resolving and its mail is due for deletion, ISO 8601 UTC."
+ },
+ "first_message_only": {
+ "type": "boolean",
+ "description": "When true the burner accepts one message and then stops resolving."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the burner was made, ISO 8601 UTC."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/mask.v1.json",
+ "title": "MailMask",
+ "description": "A per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. Turning it off makes the address bounce: it leaves the SQL directory Stalwart reads, so a new message is refused. The address is <words>.<four characters>@<mask domain>; the four characters keep two people from guessing each other's mask. The contract is metadata only: it never carries a message body.",
+ "type": "object",
+ "required": ["id", "owner", "address", "label", "purpose", "enabled", "created_at"],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^msk_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The mask id. Opaque outside OpenVibe.Mail; never a database integer."
+ },
+ "owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Network subject id of the person whose mailbox receives the mask's mail. A mask never forwards outside OpenVibe."
+ },
+ "address": {
+ "type": "string",
+ "format": "email",
+ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?\\.[a-z0-9]{4}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",
+ "maxLength": 254,
+ "description": "The mask address: the words the person chose, a dot, four unguessable characters, and the mask domain (mask.openvibe.email in M1)."
+ },
+ "label": {
+ "type": ["string", "null"],
+ "maxLength": 120,
+ "description": "The person's name for the mask, e.g. \"Amazon\". Free text; never interpreted as an address."
+ },
+ "purpose": {
+ "type": ["string", "null"],
+ "maxLength": 120,
+ "description": "What the mask is for, e.g. \"shopping\". Optional metadata for the person's own list."
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Whether the mask resolves. When false the SQL directory has no row for the address, so the mail server refuses it."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the mask was made, ISO 8601 UTC."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/message-summary.v1.json",
+ "title": "MailMessageSummary",
+ "description": "One message in a mask, burner or agent inbox, as OpenVibe.Mail's list API returns it: the id, the senders, the subject and the time. It deliberately has no preview and no body: a message body is read only by the verification-code endpoint, in memory, and is never part of a list, an event or a database row. additionalProperties is false so a field like body, preview or html fails the contract rather than leaking into an API.",
+ "type": "object",
+ "required": ["id", "from", "subject", "received_at"],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "description": "The mail server's message id (a JMAP Email id). Opaque outside OpenVibe.Mail."
+ },
+ "from": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "type": "string",
+ "format": "email",
+ "maxLength": 254
+ },
+ "description": "The sender addresses, as the mail server parsed them. An address list, not a display name."
+ },
+ "subject": {
+ "type": ["string", "null"],
+ "maxLength": 2000,
+ "description": "The subject line, or null when the message had none."
+ },
+ "received_at": {
+ "type": ["string", "null"],
+ "format": "date-time",
+ "description": "When the mail server received the message, ISO 8601 UTC, or null when it did not record a time."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "agi_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "agent_id": "Helper!",
+ "address": "[email protected]",
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "agi_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "agent_id": "helper",
+ "address": "helper",
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "agi_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "agent_id": "helper",
+ "address": "[email protected]",
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": null,
+ "address": "[email protected]",
+ "expires_at": "2026-11-07T12:10:00Z",
+ "first_message_only": false,
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": "someone",
+ "address": "[email protected]",
+ "expires_at": "2026-11-07T12:10:00Z",
+ "first_message_only": false,
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": null,
+ "address": "[email protected]",
+ "expires_at": "2026-11-07T12:10:00Z",
+ "first_message_only": false,
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "bnr_01JAB2C3D4E5F6G7H8J9K0MNPR",
+ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "address": "[email protected]",
+ "expires_at": "2026-11-08T12:00:00Z",
+ "first_message_only": true,
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": "alice",
+ "address": "[email protected]",
+ "label": "Amazon",
+ "purpose": null,
+ "enabled": true,
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "address": "[email protected]",
+ "label": "Amazon",
+ "purpose": null,
+ "enabled": true,
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "address": "[email protected]",
+ "label": "Amazon",
+ "purpose": "shopping",
+ "enabled": true,
+ "created_at": "2026-11-07T12:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "id": "msk_01JAB2C3D4E5F6G7H8J9K0MNPR",
+ "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "address": "[email protected]",
+ "label": null,
+ "purpose": null,
+ "enabled": false,
+ "created_at": "2026-11-07T12:01:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "maaaaad",
+ "from": ["[email protected]"],
+ "subject": "Your verification code",
+ "received_at": "2026-11-07T12:00:00Z",
+ "body": "Your verification code is 918273"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
+{
+ "id": "maaaaad",
+ "from": ["[email protected]"],
+ "subject": "Your verification code",
+ "received_at": "2026-11-07T12:00:00Z"
+}
@@ -109339,6 +109339,232 @@
@@ -109339,6 +109339,232 @@
}
}
}
}
}
}
+ },
+ "mail.mask": {
+ "version": "1.0.0",
+ "owner": "mail",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/mask.v1.json",
+ "title": "MailMask",
+ "description": "A per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. Turning it off makes the address bounce: it leaves the SQL directory Stalwart reads, so a new message is refused. The address is <words>.<four characters>@<mask domain>; the four characters keep two people from guessing each other's mask. The contract is metadata only: it never carries a message body.",
+ "type": "object",
+ "required": [
+ "id",
+ "owner",
+ "address",
+ "label",
+ "purpose",
+ "enabled",
+ "created_at"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^msk_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The mask id. Opaque outside OpenVibe.Mail; never a database integer."
+ },
+ "owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Network subject id of the person whose mailbox receives the mask's mail. A mask never forwards outside OpenVibe."
+ },
+ "address": {
+ "type": "string",
+ "format": "email",
+ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?\\.[a-z0-9]{4}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",
+ "maxLength": 254,
+ "description": "The mask address: the words the person chose, a dot, four unguessable characters, and the mask domain (mask.openvibe.email in M1)."
+ },
+ "label": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 120,
+ "description": "The person's name for the mask, e.g. \"Amazon\". Free text; never interpreted as an address."
+ },
+ "purpose": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 120,
+ "description": "What the mask is for, e.g. \"shopping\". Optional metadata for the person's own list."
+ },
+ "enabled": {
+ "type": "boolean",
+ "description": "Whether the mask resolves. When false the SQL directory has no row for the address, so the mail server refuses it."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the mask was made, ISO 8601 UTC."
+ }
+ }
+ }
+ },
+ "mail.burner": {
+ "version": "1.0.0",
+ "owner": "mail",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/burner.v1.json",
+ "title": "MailBurner",
+ "description": "A throwaway receive-only address on OpenVibe.Mail. It expires after ten minutes, an hour, a day or a week, or after the first message when first_message_only is set. When it expires its mail is deleted and the address bounces. A ten-minute burner may be made without an account (owner is null) and is then read with the one-time token the create call returns; the token is deliberately not part of this resource.",
+ "type": "object",
+ "required": [
+ "id",
+ "owner",
+ "address",
+ "expires_at",
+ "first_message_only",
+ "created_at"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^bnr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The burner id. Opaque outside OpenVibe.Mail."
+ },
+ "owner": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Network subject id of the person who made the burner, or null for a ten-minute burner made without an account."
+ },
+ "address": {
+ "type": "string",
+ "format": "email",
+ "pattern": "^[a-z0-9]{8}@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",
+ "maxLength": 254,
+ "description": "The burner address: eight unguessable characters on one of the rotating burner domains."
+ },
+ "expires_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the address stops resolving and its mail is due for deletion, ISO 8601 UTC."
+ },
+ "first_message_only": {
+ "type": "boolean",
+ "description": "When true the burner accepts one message and then stops resolving."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the burner was made, ISO 8601 UTC."
+ }
+ }
+ }
+ },
+ "mail.agent-inbox": {
+ "version": "1.0.0",
+ "owner": "mail",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/agent-inbox.v1.json",
+ "title": "MailAgentInbox",
+ "description": "An address an agent can read, on the person's own domain: <agent>.<user>@openvibe.email. The mail lands in the person's mailbox, like every other address OpenVibe.Mail hands out; what makes it an agent's inbox is that the service reads it back for the agent acting for that person. One agent has one inbox: asking twice returns the same resource.",
+ "type": "object",
+ "required": [
+ "id",
+ "owner",
+ "agent_id",
+ "address",
+ "created_at"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^agi_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The inbox id. Opaque outside OpenVibe.Mail."
+ },
+ "owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Network subject id of the person whose mailbox receives the agent's mail."
+ },
+ "agent_id": {
+ "type": "string",
+ "pattern": "^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$",
+ "maxLength": 32,
+ "description": "The agent's name in the address, lowercased and cleaned (letters, digits and hyphens)."
+ },
+ "address": {
+ "type": "string",
+ "format": "email",
+ "pattern": "^[a-z0-9-]+\\.[a-z0-9-]+@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$",
+ "maxLength": 254,
+ "description": "The agent's address. In M1 the user part is the person's Network username, falling back to their mailbox local when that readable address is already taken."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "When the inbox was made, ISO 8601 UTC."
+ }
+ }
+ }
+ },
+ "mail.message-summary": {
+ "version": "1.0.0",
+ "owner": "mail",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/mail/message-summary.v1.json",
+ "title": "MailMessageSummary",
+ "description": "One message in a mask, burner or agent inbox, as OpenVibe.Mail's list API returns it: the id, the senders, the subject and the time. It deliberately has no preview and no body: a message body is read only by the verification-code endpoint, in memory, and is never part of a list, an event or a database row. additionalProperties is false so a field like body, preview or html fails the contract rather than leaking into an API.",
+ "type": "object",
+ "required": [
+ "id",
+ "from",
+ "subject",
+ "received_at"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512,
+ "description": "The mail server's message id (a JMAP Email id). Opaque outside OpenVibe.Mail."
+ },
+ "from": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "type": "string",
+ "format": "email",
+ "maxLength": 254
+ },
+ "description": "The sender addresses, as the mail server parsed them. An address list, not a display name."
+ },
+ "subject": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 2000,
+ "description": "The subject line, or null when the message had none."
+ },
+ "received_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "description": "When the mail server received the message, ISO 8601 UTC, or null when it did not record a time."
+ }
+ }
+ }
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"title": "OpenVibe.Bench API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe Connect API",
"title": "OpenVibe Connect API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Design API",
"title": "OpenVibe.Design API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.328.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"title": "OpenVibe.Quest API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Report API",
"title": "OpenVibe.Report API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Today API",
"title": "OpenVibe.Today API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.328.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.329.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.329.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -301911,3 +301911,121 @@ export interface NetworkMenuFeeds {
@@ -301911,3 +301911,121 @@ export interface NetworkMenuFeeds {
*/
*/
updated_at: string;
updated_at: string;
}
}
+
+/** [email protected] (owner: mail) */
+/**
+ * A per-site address on OpenVibe.Mail that delivers into its owner's OpenVibe mailbox and nowhere else. Turning it off makes the address bounce: it leaves the SQL directory Stalwart reads, so a new message is refused. The address is <words>.<four characters>@<mask domain>; the four characters keep two people from guessing each other's mask. The contract is metadata only: it never carries a message body.
+ */
+export interface MailMask {
+ /**
+ * The mask id. Opaque outside OpenVibe.Mail; never a database integer.
+ */
+ id: string;
+ /**
+ * The Network subject id of the person whose mailbox receives the mask's mail. A mask never forwards outside OpenVibe.
+ */
+ owner: string;
+ /**
+ * The mask address: the words the person chose, a dot, four unguessable characters, and the mask domain (mask.openvibe.email in M1).
+ */
+ address: string;
+ /**
+ * The person's name for the mask, e.g. "Amazon". Free text; never interpreted as an address.
+ */
+ label: string | null;
+ /**
+ * What the mask is for, e.g. "shopping". Optional metadata for the person's own list.
+ */
+ purpose: string | null;
+ /**
+ * Whether the mask resolves. When false the SQL directory has no row for the address, so the mail server refuses it.
+ */
+ enabled: boolean;
+ /**
+ * When the mask was made, ISO 8601 UTC.
+ */
+ created_at: string;
+}
+
+/** [email protected] (owner: mail) */
+/**
+ * A throwaway receive-only address on OpenVibe.Mail. It expires after ten minutes, an hour, a day or a week, or after the first message when first_message_only is set. When it expires its mail is deleted and the address bounces. A ten-minute burner may be made without an account (owner is null) and is then read with the one-time token the create call returns; the token is deliberately not part of this resource.
+ */
+export interface MailBurner {
+ /**
+ * The burner id. Opaque outside OpenVibe.Mail.
+ */
+ id: string;
+ /**
+ * The Network subject id of the person who made the burner, or null for a ten-minute burner made without an account.
+ */
+ owner: string | null;
+ /**
+ * The burner address: eight unguessable characters on one of the rotating burner domains.
+ */
+ address: string;
+ /**
+ * When the address stops resolving and its mail is due for deletion, ISO 8601 UTC.
+ */
+ expires_at: string;
+ /**
+ * When true the burner accepts one message and then stops resolving.
+ */
+ first_message_only: boolean;
+ /**
+ * When the burner was made, ISO 8601 UTC.
+ */
+ created_at: string;
+}
+
+/** [email protected] (owner: mail) */
+/**
+ * An address an agent can read, on the person's own domain: <agent>.<user>@openvibe.email. The mail lands in the person's mailbox, like every other address OpenVibe.Mail hands out; what makes it an agent's inbox is that the service reads it back for the agent acting for that person. One agent has one inbox: asking twice returns the same resource.
+ */
+export interface MailAgentInbox {
+ /**
+ * The inbox id. Opaque outside OpenVibe.Mail.
+ */
+ id: string;
+ /**
+ * The Network subject id of the person whose mailbox receives the agent's mail.
+ */
+ owner: string;
+ /**
+ * The agent's name in the address, lowercased and cleaned (letters, digits and hyphens).
+ */
+ agent_id: string;
+ /**
+ * The agent's address. In M1 the user part is the person's Network username, falling back to their mailbox local when that readable address is already taken.
+ */
+ address: string;
+ /**
+ * When the inbox was made, ISO 8601 UTC.
+ */
+ created_at: string;
+}
+
+/** [email protected] (owner: mail) */
+/**
+ * One message in a mask, burner or agent inbox, as OpenVibe.Mail's list API returns it: the id, the senders, the subject and the time. It deliberately has no preview and no body: a message body is read only by the verification-code endpoint, in memory, and is never part of a list, an event or a database row. additionalProperties is false so a field like body, preview or html fails the contract rather than leaking into an API.
+ */
+export interface MailMessageSummary {
+ /**
+ * The mail server's message id (a JMAP Email id). Opaque outside OpenVibe.Mail.
+ */
+ id: string;
+ /**
+ * The sender addresses, as the mail server parsed them. An address list, not a display name.
+ *
+ * @maxItems 100
+ */
+ from: string[];
+ /**
+ * The subject line, or null when the message had none.
+ */
+ subject: string | null;
+ /**
+ * When the mail server received the message, ISO 8601 UTC, or null when it did not record a time.
+ */
+ received_at: string | null;
+}
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.328.0",
+ "version": "0.329.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.328.0",
+ "version": "0.329.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.328.0",
+ "version": "0.329.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",