openvibers/openvibe.contracts Commits
Define shared daily quest contracts and step contribution (#369)
Changes
@@@ -1,5 +1,9 @@# Changelog++## 0.355.0 — 2026-11-09++++- Daily quest contracts and step contribution++## 0.354.0 — 2026-11-09- Vibe compare and Exchange chat export contracts (the Chat move)@@@ -8382,6 +8382,42 @@"status": "active","adr": "ADR-031"},++ {++ "id": "quest.daily",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "quest/daily.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "quest.daily-progress",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "quest/daily-progress.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "quest.step-type",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "quest/step-type.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "quest.step-type-request",++ "version": "1.0.0",++ "owner": "quest",++ "schema": "quest/step-type-request.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },{"id": "quest.app-quest-request","version": "1.0.0",nnew file mode 100644@@@ -0,0 +1,36 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/daily-progress.v1.json",++ "title": "QuestDailyProgress",++ "description": "quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.",++ "type": "object",++ "additionalProperties": false,++ "required": ["date", "title", "story", "steps", "source", "finished_today", "progress", "completed", "streak", "time_zone"],++ "properties": {++ "date": { "type": "string", "format": "date" },++ "title": { "type": "string", "minLength": 1, "maxLength": 80 },++ "story": { "type": "string", "minLength": 1, "maxLength": 180 },++ "steps": {++ "type": "array", "minItems": 3, "maxItems": 3,++ "items": {++ "type": "object", "additionalProperties": false,++ "required": ["id", "event_type", "site", "sentence", "href", "weight", "count", "verification", "status", "source", "progress", "done"],++ "properties": {++ "id": { "type": "string" }, "event_type": { "type": "string" }, "site": { "type": "string" },++ "sentence": { "type": "string" }, "href": { "type": "string", "format": "uri" },++ "weight": { "type": "integer" }, "count": { "type": "integer", "const": 1 },++ "verification": { "type": "string" }, "status": { "const": "approved" },++ "source": { "type": "string" }, "progress": { "type": "integer", "minimum": 0 },++ "done": { "type": "boolean" }++ }++ }++ },++ "source": { "enum": ["ai", "rotation"] },++ "finished_today": { "type": "integer", "minimum": 0 },++ "progress": { "type": "integer", "minimum": 0, "maximum": 3 },++ "completed": { "type": "boolean" },++ "completed_at": { "type": ["string", "null"], "format": "date-time" },++ "streak": { "type": "integer", "minimum": 0 },++ "time_zone": { "type": "string" }++ }++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/daily.v1.json",++ "title": "QuestDaily",++ "description": "quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.",++ "type": "object",++ "additionalProperties": false,++ "required": ["date", "title", "story", "steps", "source", "finished_today"],++ "properties": {++ "date": { "type": "string", "format": "date" },++ "title": { "type": "string", "minLength": 1, "maxLength": 80 },++ "story": { "type": "string", "minLength": 1, "maxLength": 180 },++ "steps": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "$ref": "step-type.v1.json" } },++ "source": { "enum": ["ai", "rotation"] },++ "finished_today": { "type": "integer", "minimum": 0 }++ }++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/step-type-request.v1.json",++ "title": "QuestStepTypeRequest",++ "description": "A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.",++ "type": "object",++ "additionalProperties": false,++ "required": ["id", "event_type", "site", "sentence", "href"],++ "properties": {++ "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,47}$" },++ "event_type": { "type": "string", "minLength": 3, "maxLength": 160 },++ "site": { "type": "string", "format": "hostname" },++ "sentence": { "type": "string", "minLength": 1, "maxLength": 120 },++ "href": { "type": "string", "format": "uri", "pattern": "^https://" },++ "weight": { "type": "integer", "minimum": 1, "maximum": 5 }++ }++}nnew file mode 100644@@@ -0,0 +1,24 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/step-type.v1.json",++ "title": "QuestStepType",++ "description": "quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.",++ "type": "object",++ "additionalProperties": false,++ "required": ["id", "event_type", "site", "sentence", "href", "weight", "status"],++ "properties": {++ "id": { "type": "string", "minLength": 2, "maxLength": 90 },++ "event_type": { "type": "string", "minLength": 3, "maxLength": 160 },++ "site": { "type": "string", "format": "hostname" },++ "sentence": { "type": "string", "minLength": 1, "maxLength": 120 },++ "href": { "type": "string", "format": "uri", "pattern": "^https://" },++ "weight": { "type": "integer", "minimum": 1, "maximum": 5 },++ "count": { "type": "integer", "const": 1 },++ "verification": { "type": "string" },++ "status": { "enum": ["pending", "approved", "rejected"] },++ "source": { "type": "string" },++ "project_id": { "type": "string" },++ "created_at": { "type": "string", "format": "date-time" },++ "reviewed_at": { "type": ["string", "null"], "format": "date-time" }++ }++}nnew file mode 100644@@@ -0,0 +1,56 @@++{++ "date": "2026-11-08",++ "title": "Around the network",++ "story": "Visit three places today.",++ "steps": [++ {++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Do something on openvibe.live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ },++ {++ "id": "chat",++ "event_type": "chat.room.message.created",++ "site": "openvibe.chat",++ "sentence": "Do something on openvibe.chat",++ "href": "https://openvibe.chat/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ },++ {++ "id": "wiki",++ "event_type": "wiki.revision.created",++ "site": "openvibe.wiki",++ "sentence": "Do something on openvibe.wiki",++ "href": "https://openvibe.wiki/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ }++ ],++ "source": "rotation",++ "finished_today": 3,++ "progress": 4,++ "completed": true,++ "completed_at": "2026-11-08T22:00:00Z",++ "streak": 1,++ "time_zone": "UTC"++}nnew file mode 100644@@@ -0,0 +1,56 @@++{++ "date": "2026-11-08",++ "title": "Around the network",++ "story": "Visit three places today.",++ "steps": [++ {++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Do something on openvibe.live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 1,++ "done": true++ },++ {++ "id": "chat",++ "event_type": "chat.room.message.created",++ "site": "openvibe.chat",++ "sentence": "Do something on openvibe.chat",++ "href": "https://openvibe.chat/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 0,++ "done": false++ },++ {++ "id": "wiki",++ "event_type": "wiki.revision.created",++ "site": "openvibe.wiki",++ "sentence": "Do something on openvibe.wiki",++ "href": "https://openvibe.wiki/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest",++ "progress": 0,++ "done": false++ }++ ],++ "source": "rotation",++ "finished_today": 3,++ "progress": 1,++ "completed": false,++ "completed_at": null,++ "streak": 0,++ "time_zone": "America/Los_Angeles"++}nnew file mode 100644@@@ -0,0 +1,33 @@++{++ "date": "2026-11-08",++ "title": "Around the network",++ "story": "Visit three places today.",++ "steps": [++ {++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Do something on openvibe.live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest"++ },++ {++ "id": "chat",++ "event_type": "chat.room.message.created",++ "site": "openvibe.chat",++ "sentence": "Do something on openvibe.chat",++ "href": "https://openvibe.chat/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest"++ }++ ],++ "source": "rotation",++ "finished_today": 3++}nnew file mode 100644@@@ -0,0 +1,45 @@++{++ "date": "2026-11-08",++ "title": "Around the network",++ "story": "Visit three places today.",++ "steps": [++ {++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Do something on openvibe.live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest"++ },++ {++ "id": "chat",++ "event_type": "chat.room.message.created",++ "site": "openvibe.chat",++ "sentence": "Do something on openvibe.chat",++ "href": "https://openvibe.chat/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest"++ },++ {++ "id": "wiki",++ "event_type": "wiki.revision.created",++ "site": "openvibe.wiki",++ "sentence": "Do something on openvibe.wiki",++ "href": "https://openvibe.wiki/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest"++ }++ ],++ "source": "rotation",++ "finished_today": 3++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "stream",++ "event_type": "",++ "site": "openvibe.live",++ "sentence": "Go live",++ "href": "https://openvibe.live/",++ "weight": 1++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Go live",++ "href": "https://openvibe.live/",++ "weight": 1++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "broken",++ "site": "openvibe.live",++ "sentence": "Go live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "status": "pending"++}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "id": "stream",++ "event_type": "live.stream.started",++ "site": "openvibe.live",++ "sentence": "Do something on openvibe.live",++ "href": "https://openvibe.live/",++ "weight": 1,++ "count": 1,++ "verification": "event subject, count within the person's local day",++ "status": "approved",++ "source": "quest"++}@@@ -93538,6 +93538,332 @@}}},++ "quest.daily": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/daily.v1.json",++ "title": "QuestDaily",++ "description": "quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "date",++ "title",++ "story",++ "steps",++ "source",++ "finished_today"++ ],++ "properties": {++ "date": {++ "type": "string",++ "format": "date"++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "story": {++ "type": "string",++ "minLength": 1,++ "maxLength": 180++ },++ "steps": {++ "type": "array",++ "minItems": 3,++ "maxItems": 3,++ "items": {++ "$ref": "step-type.v1.json"++ }++ },++ "source": {++ "enum": [++ "ai",++ "rotation"++ ]++ },++ "finished_today": {++ "type": "integer",++ "minimum": 0++ }++ }++ }++ },++ "quest.daily-progress": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/daily-progress.v1.json",++ "title": "QuestDailyProgress",++ "description": "quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "date",++ "title",++ "story",++ "steps",++ "source",++ "finished_today",++ "progress",++ "completed",++ "streak",++ "time_zone"++ ],++ "properties": {++ "date": {++ "type": "string",++ "format": "date"++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "story": {++ "type": "string",++ "minLength": 1,++ "maxLength": 180++ },++ "steps": {++ "type": "array",++ "minItems": 3,++ "maxItems": 3,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "event_type",++ "site",++ "sentence",++ "href",++ "weight",++ "count",++ "verification",++ "status",++ "source",++ "progress",++ "done"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "event_type": {++ "type": "string"++ },++ "site": {++ "type": "string"++ },++ "sentence": {++ "type": "string"++ },++ "href": {++ "type": "string",++ "format": "uri"++ },++ "weight": {++ "type": "integer"++ },++ "count": {++ "type": "integer",++ "const": 1++ },++ "verification": {++ "type": "string"++ },++ "status": {++ "const": "approved"++ },++ "source": {++ "type": "string"++ },++ "progress": {++ "type": "integer",++ "minimum": 0++ },++ "done": {++ "type": "boolean"++ }++ }++ }++ },++ "source": {++ "enum": [++ "ai",++ "rotation"++ ]++ },++ "finished_today": {++ "type": "integer",++ "minimum": 0++ },++ "progress": {++ "type": "integer",++ "minimum": 0,++ "maximum": 3++ },++ "completed": {++ "type": "boolean"++ },++ "completed_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "streak": {++ "type": "integer",++ "minimum": 0++ },++ "time_zone": {++ "type": "string"++ }++ }++ }++ },++ "quest.step-type": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/step-type.v1.json",++ "title": "QuestStepType",++ "description": "quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "event_type",++ "site",++ "sentence",++ "href",++ "weight",++ "status"++ ],++ "properties": {++ "id": {++ "type": "string",++ "minLength": 2,++ "maxLength": 90++ },++ "event_type": {++ "type": "string",++ "minLength": 3,++ "maxLength": 160++ },++ "site": {++ "type": "string",++ "format": "hostname"++ },++ "sentence": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "weight": {++ "type": "integer",++ "minimum": 1,++ "maximum": 5++ },++ "count": {++ "type": "integer",++ "const": 1++ },++ "verification": {++ "type": "string"++ },++ "status": {++ "enum": [++ "pending",++ "approved",++ "rejected"++ ]++ },++ "source": {++ "type": "string"++ },++ "project_id": {++ "type": "string"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "reviewed_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ }++ }++ }++ },++ "quest.step-type-request": {++ "version": "1.0.0",++ "owner": "quest",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/quest/step-type-request.v1.json",++ "title": "QuestStepTypeRequest",++ "description": "A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "event_type",++ "site",++ "sentence",++ "href"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9-]{1,47}$"++ },++ "event_type": {++ "type": "string",++ "minLength": 3,++ "maxLength": 160++ },++ "site": {++ "type": "string",++ "format": "hostname"++ },++ "sentence": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "weight": {++ "type": "integer",++ "minimum": 1,++ "maximum": 5++ }++ }++ }++ },"quest.app-quest-request": {"version": "1.0.0","owner": "quest",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.354.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.Exchange API",-- "version": "0.354.0",-- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.355.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"@@@ -201,8 +201,8 @@"service": "quest","name": "OpenVibe.Quest","origin": "https://openvibe.quest",-- "operations": 3,-- "capabilities": 1++ "operations": 9,++ "capabilities": 6},{"service": "report",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.354.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.Mail API",-- "version": "0.354.0",-- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.355.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"@@@ -389,6 +389,313 @@}}}++ },++ "/api/v1/daily": {++ "get": {++ "operationId": "get_api_v1_daily",++ "summary": "Read today's shared daily quest or a past day's quest and its public completion count.",++ "description": "**quest.daily.read** (public): Read today's shared daily quest or a past day's quest and its public completion count.",++ "tags": [++ "quest.daily"++ ],++ "x-openvibe-capabilities": [++ "quest.daily.read"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "quest-read",++ "security": [++ {++ "openvibeToken": [++ "quest.daily.read"++ ]++ },++ {}++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/quest.daily.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/daily/{date}": {++ "get": {++ "operationId": "get_api_v1_daily_date",++ "summary": "Read today's shared daily quest or a past day's quest and its public completion count.",++ "description": "**quest.daily.read** (public): Read today's shared daily quest or a past day's quest and its public completion count.",++ "tags": [++ "quest.daily"++ ],++ "x-openvibe-capabilities": [++ "quest.daily.read"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "quest-read",++ "security": [++ {++ "openvibeToken": [++ "quest.daily.read"++ ]++ },++ {}++ ],++ "parameters": [++ {++ "name": "date",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/quest.daily.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/me/daily": {++ "get": {++ "operationId": "get_api_v1_me_daily",++ "summary": "Read the signed-in person's daily checklist, completion and streak, verified from Events in their time zone.",++ "description": "**quest.daily_progress.read** (first-party): Read the signed-in person's daily checklist, completion and streak, verified from Events in their time zone.",++ "tags": [++ "quest.daily_progress"++ ],++ "x-openvibe-capabilities": [++ "quest.daily_progress.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "quest-read",++ "security": [++ {++ "openvibeToken": [++ "quest.daily_progress.read"++ ]++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/quest.daily-progress.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/step-types": {++ "get": {++ "operationId": "get_api_v1_step_types",++ "summary": "List approved daily step types, each bound to an event topic and its verification rule.",++ "description": "**quest.step_types.read** (public): List approved daily step types, each bound to an event topic and its verification rule.",++ "tags": [++ "quest.step_types"++ ],++ "x-openvibe-capabilities": [++ "quest.step_types.read"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "quest-read",++ "security": [++ {++ "openvibeToken": [++ "quest.step_types.read"++ ]++ },++ {}++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/quest.step-type.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ },++ "post": {++ "operationId": "post_api_v1_step_types",++ "summary": "Suggest a step type on a known OpenVibe.Events topic.",++ "description": "**quest.steps.contribute** (public): Suggest a step type on a known OpenVibe.Events topic. A developer app's proposal remains pending until staff review.",++ "tags": [++ "quest.steps"++ ],++ "x-openvibe-capabilities": [++ "quest.steps.contribute"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "quest-step-write",++ "security": [++ {++ "openvibeToken": [++ "quest.steps.contribute"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/quest.step-type-request.v1"++ }++ }++ }++ },++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/quest.step-type.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/step-types/{id}/review": {++ "post": {++ "operationId": "post_api_v1_step_types_id_review",++ "summary": "Staff service review of a contributed daily step type; approved types may enter the generator's registry.",++ "description": "**quest.steps.review** (internal): Staff service review of a contributed daily step type; approved types may enter the generator's registry.",++ "tags": [++ "quest.steps"++ ],++ "x-openvibe-capabilities": [++ "quest.steps.review"++ ],++ "x-openvibe-visibility": [++ "internal"++ ],++ "x-openvibe-quota-class": "quest-step-review",++ "security": [++ {++ "openvibeToken": [++ "quest.steps.review"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/quest.step-type.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }}},"components": {@@@ -670,6 +977,304 @@"minimum": 0}}++ },++ "quest.daily-progress.v1": {++ "title": "QuestDailyProgress",++ "description": "quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "date",++ "title",++ "story",++ "steps",++ "source",++ "finished_today",++ "progress",++ "completed",++ "streak",++ "time_zone"++ ],++ "properties": {++ "date": {++ "type": "string",++ "format": "date"++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "story": {++ "type": "string",++ "minLength": 1,++ "maxLength": 180++ },++ "steps": {++ "type": "array",++ "minItems": 3,++ "maxItems": 3,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "event_type",++ "site",++ "sentence",++ "href",++ "weight",++ "count",++ "verification",++ "status",++ "source",++ "progress",++ "done"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "event_type": {++ "type": "string"++ },++ "site": {++ "type": "string"++ },++ "sentence": {++ "type": "string"++ },++ "href": {++ "type": "string",++ "format": "uri"++ },++ "weight": {++ "type": "integer"++ },++ "count": {++ "type": "integer",++ "const": 1++ },++ "verification": {++ "type": "string"++ },++ "status": {++ "const": "approved"++ },++ "source": {++ "type": "string"++ },++ "progress": {++ "type": "integer",++ "minimum": 0++ },++ "done": {++ "type": "boolean"++ }++ }++ }++ },++ "source": {++ "enum": [++ "ai",++ "rotation"++ ]++ },++ "finished_today": {++ "type": "integer",++ "minimum": 0++ },++ "progress": {++ "type": "integer",++ "minimum": 0,++ "maximum": 3++ },++ "completed": {++ "type": "boolean"++ },++ "completed_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "streak": {++ "type": "integer",++ "minimum": 0++ },++ "time_zone": {++ "type": "string"++ }++ }++ },++ "quest.daily.v1": {++ "title": "QuestDaily",++ "description": "quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "date",++ "title",++ "story",++ "steps",++ "source",++ "finished_today"++ ],++ "properties": {++ "date": {++ "type": "string",++ "format": "date"++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80++ },++ "story": {++ "type": "string",++ "minLength": 1,++ "maxLength": 180++ },++ "steps": {++ "type": "array",++ "minItems": 3,++ "maxItems": 3,++ "items": {++ "$ref": "#/components/schemas/quest.step-type.v1"++ }++ },++ "source": {++ "enum": [++ "ai",++ "rotation"++ ]++ },++ "finished_today": {++ "type": "integer",++ "minimum": 0++ }++ }++ },++ "quest.step-type-request.v1": {++ "title": "QuestStepTypeRequest",++ "description": "A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "event_type",++ "site",++ "sentence",++ "href"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9-]{1,47}$"++ },++ "event_type": {++ "type": "string",++ "minLength": 3,++ "maxLength": 160++ },++ "site": {++ "type": "string",++ "format": "hostname"++ },++ "sentence": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "weight": {++ "type": "integer",++ "minimum": 1,++ "maximum": 5++ }++ }++ },++ "quest.step-type.v1": {++ "title": "QuestStepType",++ "description": "quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "event_type",++ "site",++ "sentence",++ "href",++ "weight",++ "status"++ ],++ "properties": {++ "id": {++ "type": "string",++ "minLength": 2,++ "maxLength": 90++ },++ "event_type": {++ "type": "string",++ "minLength": 3,++ "maxLength": 160++ },++ "site": {++ "type": "string",++ "format": "hostname"++ },++ "sentence": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "weight": {++ "type": "integer",++ "minimum": 1,++ "maximum": 5++ },++ "count": {++ "type": "integer",++ "const": 1++ },++ "verification": {++ "type": "string"++ },++ "status": {++ "enum": [++ "pending",++ "approved",++ "rejected"++ ]++ },++ "source": {++ "type": "string"++ },++ "project_id": {++ "type": "string"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "reviewed_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ }++ }}},"securitySchemes": {@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Report API",-- "version": "0.354.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.355.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"@@@ -274496,6 +274496,121 @@ export interface AccessKeyList {keys: AccessKey[];}++/** [email protected] (owner: quest) */++/**++ * quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.++ */++export interface QuestDaily {++ date: string;++ title: string;++ story: string;++ /**++ * @minItems 3++ * @maxItems 3++ */++ steps: [QuestStepType, QuestStepType, QuestStepType];++ source: "ai" | "rotation";++ finished_today: number;++}++++/** [email protected] (owner: quest) */++/**++ * quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.++ */++export interface QuestDailyProgress {++ date: string;++ title: string;++ story: string;++ /**++ * @minItems 3++ * @maxItems 3++ */++ steps: [++ {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight: number;++ count: 1;++ verification: string;++ status: "approved";++ source: string;++ progress: number;++ done: boolean;++ },++ {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight: number;++ count: 1;++ verification: string;++ status: "approved";++ source: string;++ progress: number;++ done: boolean;++ },++ {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight: number;++ count: 1;++ verification: string;++ status: "approved";++ source: string;++ progress: number;++ done: boolean;++ }++ ];++ source: "ai" | "rotation";++ finished_today: number;++ progress: number;++ completed: boolean;++ completed_at?: string | null;++ streak: number;++ time_zone: string;++}++++/** [email protected] (owner: quest) */++/**++ * quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.++ */++export interface QuestStepType {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight: number;++ count?: 1;++ verification?: string;++ status: "pending" | "approved" | "rejected";++ source?: string;++ project_id?: string;++ created_at?: string;++ reviewed_at?: string | null;++}++++/** [email protected] (owner: quest) */++/**++ * A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.++ */++export interface QuestStepTypeRequest {++ id: string;++ event_type: string;++ site: string;++ sentence: string;++ href: string;++ weight?: number;++}++/** [email protected] (owner: quest) *//*** quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "quest.daily.read", "version": "1.0", "owner": "quest", "status": "active", "visibility": "public",++ "description": "Read today's shared daily quest or a past day's quest and its public completion count.",++ "inputSchema": "common.no-body@1", "outputSchema": "quest.daily@1", "permissions": ["none"],++ "resourceConstraints": [], "quotaClass": "quest-read", "events": [],++ "implementedBy": ["GET /api/v1/daily", "GET /api/v1/daily/:date"]++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "quest.daily_progress.read", "version": "1.0", "owner": "quest", "status": "active", "visibility": "first-party",++ "description": "Read the signed-in person's daily checklist, completion and streak, verified from Events in their time zone.",++ "inputSchema": "common.no-body@1", "outputSchema": "quest.daily-progress@1", "permissions": ["quest:daily:read-own"],++ "resourceConstraints": ["owner"], "quotaClass": "quest-read", "events": [],++ "implementedBy": ["GET /api/v1/me/daily"]++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "quest.step_types.read", "version": "1.0", "owner": "quest", "status": "active", "visibility": "public",++ "description": "List approved daily step types, each bound to an event topic and its verification rule.",++ "inputSchema": "common.no-body@1", "outputSchema": "quest.step-type@1", "permissions": ["none"],++ "resourceConstraints": [], "quotaClass": "quest-read", "events": [],++ "implementedBy": ["GET /api/v1/step-types"]++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "quest.steps.contribute", "version": "1.0", "owner": "quest", "status": "active", "visibility": "public",++ "description": "Suggest a step type on a known OpenVibe.Events topic. A developer app's proposal remains pending until staff review.",++ "inputSchema": "quest.step-type-request@1", "outputSchema": "quest.step-type@1", "permissions": ["quest:steps:contribute"],++ "resourceConstraints": ["project"], "quotaClass": "quest-step-write", "events": [],++ "implementedBy": ["POST /api/v1/step-types"]++}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "id": "quest.steps.review", "version": "1.0", "owner": "quest", "status": "active", "visibility": "internal",++ "description": "Staff service review of a contributed daily step type; approved types may enter the generator's registry.",++ "inputSchema": "common.no-body@1", "outputSchema": "quest.step-type@1", "permissions": ["quest:steps:review"],++ "resourceConstraints": [], "quotaClass": "quest-step-review", "events": [],++ "implementedBy": ["POST /api/v1/step-types/:id/review"]++}@@@ -16,7 +16,12 @@"publicSite": "service"},"capabilities": [-- "quest.app_quest.manage"++ "quest.app_quest.manage",++ "quest.daily.read",++ "quest.daily_progress.read",++ "quest.step_types.read",++ "quest.steps.contribute",++ "quest.steps.review"],"eventsProduced": ["quest.index_document.upserted",@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.354.0",++ "version": "0.355.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.354.0",++ "version": "0.355.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.354.0",++ "version": "0.355.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,9 @@
@@ -1,5 +1,9 @@
# Changelog
# Changelog
+## 0.355.0 — 2026-11-09
+
+- Daily quest contracts and step contribution
+
## 0.354.0 — 2026-11-09
## 0.354.0 — 2026-11-09
- Vibe compare and Exchange chat export contracts (the Chat move)
- Vibe compare and Exchange chat export contracts (the Chat move)
@@ -8382,6 +8382,42 @@
@@ -8382,6 +8382,42 @@
"status": "active",
"status": "active",
"adr": "ADR-031"
"adr": "ADR-031"
},
},
+ {
+ "id": "quest.daily",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "quest/daily.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "quest.daily-progress",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "quest/daily-progress.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "quest.step-type",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "quest/step-type.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "quest.step-type-request",
+ "version": "1.0.0",
+ "owner": "quest",
+ "schema": "quest/step-type-request.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
{
{
"id": "quest.app-quest-request",
"id": "quest.app-quest-request",
"version": "1.0.0",
"version": "1.0.0",
new file mode 100644
new file mode 100644
@@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/daily-progress.v1.json",
+ "title": "QuestDailyProgress",
+ "description": "quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["date", "title", "story", "steps", "source", "finished_today", "progress", "completed", "streak", "time_zone"],
+ "properties": {
+ "date": { "type": "string", "format": "date" },
+ "title": { "type": "string", "minLength": 1, "maxLength": 80 },
+ "story": { "type": "string", "minLength": 1, "maxLength": 180 },
+ "steps": {
+ "type": "array", "minItems": 3, "maxItems": 3,
+ "items": {
+ "type": "object", "additionalProperties": false,
+ "required": ["id", "event_type", "site", "sentence", "href", "weight", "count", "verification", "status", "source", "progress", "done"],
+ "properties": {
+ "id": { "type": "string" }, "event_type": { "type": "string" }, "site": { "type": "string" },
+ "sentence": { "type": "string" }, "href": { "type": "string", "format": "uri" },
+ "weight": { "type": "integer" }, "count": { "type": "integer", "const": 1 },
+ "verification": { "type": "string" }, "status": { "const": "approved" },
+ "source": { "type": "string" }, "progress": { "type": "integer", "minimum": 0 },
+ "done": { "type": "boolean" }
+ }
+ }
+ },
+ "source": { "enum": ["ai", "rotation"] },
+ "finished_today": { "type": "integer", "minimum": 0 },
+ "progress": { "type": "integer", "minimum": 0, "maximum": 3 },
+ "completed": { "type": "boolean" },
+ "completed_at": { "type": ["string", "null"], "format": "date-time" },
+ "streak": { "type": "integer", "minimum": 0 },
+ "time_zone": { "type": "string" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/daily.v1.json",
+ "title": "QuestDaily",
+ "description": "quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["date", "title", "story", "steps", "source", "finished_today"],
+ "properties": {
+ "date": { "type": "string", "format": "date" },
+ "title": { "type": "string", "minLength": 1, "maxLength": 80 },
+ "story": { "type": "string", "minLength": 1, "maxLength": 180 },
+ "steps": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "$ref": "step-type.v1.json" } },
+ "source": { "enum": ["ai", "rotation"] },
+ "finished_today": { "type": "integer", "minimum": 0 }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/step-type-request.v1.json",
+ "title": "QuestStepTypeRequest",
+ "description": "A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "event_type", "site", "sentence", "href"],
+ "properties": {
+ "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,47}$" },
+ "event_type": { "type": "string", "minLength": 3, "maxLength": 160 },
+ "site": { "type": "string", "format": "hostname" },
+ "sentence": { "type": "string", "minLength": 1, "maxLength": 120 },
+ "href": { "type": "string", "format": "uri", "pattern": "^https://" },
+ "weight": { "type": "integer", "minimum": 1, "maximum": 5 }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/step-type.v1.json",
+ "title": "QuestStepType",
+ "description": "quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "event_type", "site", "sentence", "href", "weight", "status"],
+ "properties": {
+ "id": { "type": "string", "minLength": 2, "maxLength": 90 },
+ "event_type": { "type": "string", "minLength": 3, "maxLength": 160 },
+ "site": { "type": "string", "format": "hostname" },
+ "sentence": { "type": "string", "minLength": 1, "maxLength": 120 },
+ "href": { "type": "string", "format": "uri", "pattern": "^https://" },
+ "weight": { "type": "integer", "minimum": 1, "maximum": 5 },
+ "count": { "type": "integer", "const": 1 },
+ "verification": { "type": "string" },
+ "status": { "enum": ["pending", "approved", "rejected"] },
+ "source": { "type": "string" },
+ "project_id": { "type": "string" },
+ "created_at": { "type": "string", "format": "date-time" },
+ "reviewed_at": { "type": ["string", "null"], "format": "date-time" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
+{
+ "date": "2026-11-08",
+ "title": "Around the network",
+ "story": "Visit three places today.",
+ "steps": [
+ {
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Do something on openvibe.live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ },
+ {
+ "id": "chat",
+ "event_type": "chat.room.message.created",
+ "site": "openvibe.chat",
+ "sentence": "Do something on openvibe.chat",
+ "href": "https://openvibe.chat/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ },
+ {
+ "id": "wiki",
+ "event_type": "wiki.revision.created",
+ "site": "openvibe.wiki",
+ "sentence": "Do something on openvibe.wiki",
+ "href": "https://openvibe.wiki/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ }
+ ],
+ "source": "rotation",
+ "finished_today": 3,
+ "progress": 4,
+ "completed": true,
+ "completed_at": "2026-11-08T22:00:00Z",
+ "streak": 1,
+ "time_zone": "UTC"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
+{
+ "date": "2026-11-08",
+ "title": "Around the network",
+ "story": "Visit three places today.",
+ "steps": [
+ {
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Do something on openvibe.live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 1,
+ "done": true
+ },
+ {
+ "id": "chat",
+ "event_type": "chat.room.message.created",
+ "site": "openvibe.chat",
+ "sentence": "Do something on openvibe.chat",
+ "href": "https://openvibe.chat/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 0,
+ "done": false
+ },
+ {
+ "id": "wiki",
+ "event_type": "wiki.revision.created",
+ "site": "openvibe.wiki",
+ "sentence": "Do something on openvibe.wiki",
+ "href": "https://openvibe.wiki/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest",
+ "progress": 0,
+ "done": false
+ }
+ ],
+ "source": "rotation",
+ "finished_today": 3,
+ "progress": 1,
+ "completed": false,
+ "completed_at": null,
+ "streak": 0,
+ "time_zone": "America/Los_Angeles"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
+{
+ "date": "2026-11-08",
+ "title": "Around the network",
+ "story": "Visit three places today.",
+ "steps": [
+ {
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Do something on openvibe.live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest"
+ },
+ {
+ "id": "chat",
+ "event_type": "chat.room.message.created",
+ "site": "openvibe.chat",
+ "sentence": "Do something on openvibe.chat",
+ "href": "https://openvibe.chat/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest"
+ }
+ ],
+ "source": "rotation",
+ "finished_today": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
+{
+ "date": "2026-11-08",
+ "title": "Around the network",
+ "story": "Visit three places today.",
+ "steps": [
+ {
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Do something on openvibe.live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest"
+ },
+ {
+ "id": "chat",
+ "event_type": "chat.room.message.created",
+ "site": "openvibe.chat",
+ "sentence": "Do something on openvibe.chat",
+ "href": "https://openvibe.chat/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest"
+ },
+ {
+ "id": "wiki",
+ "event_type": "wiki.revision.created",
+ "site": "openvibe.wiki",
+ "sentence": "Do something on openvibe.wiki",
+ "href": "https://openvibe.wiki/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest"
+ }
+ ],
+ "source": "rotation",
+ "finished_today": 3
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "stream",
+ "event_type": "",
+ "site": "openvibe.live",
+ "sentence": "Go live",
+ "href": "https://openvibe.live/",
+ "weight": 1
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Go live",
+ "href": "https://openvibe.live/",
+ "weight": 1
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "broken",
+ "site": "openvibe.live",
+ "sentence": "Go live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "status": "pending"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "id": "stream",
+ "event_type": "live.stream.started",
+ "site": "openvibe.live",
+ "sentence": "Do something on openvibe.live",
+ "href": "https://openvibe.live/",
+ "weight": 1,
+ "count": 1,
+ "verification": "event subject, count within the person's local day",
+ "status": "approved",
+ "source": "quest"
+}
@@ -93538,6 +93538,332 @@
@@ -93538,6 +93538,332 @@
}
}
}
}
},
},
+ "quest.daily": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/daily.v1.json",
+ "title": "QuestDaily",
+ "description": "quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "date",
+ "title",
+ "story",
+ "steps",
+ "source",
+ "finished_today"
+ ],
+ "properties": {
+ "date": {
+ "type": "string",
+ "format": "date"
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "story": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 180
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 3,
+ "maxItems": 3,
+ "items": {
+ "$ref": "step-type.v1.json"
+ }
+ },
+ "source": {
+ "enum": [
+ "ai",
+ "rotation"
+ ]
+ },
+ "finished_today": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ }
+ },
+ "quest.daily-progress": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/daily-progress.v1.json",
+ "title": "QuestDailyProgress",
+ "description": "quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "date",
+ "title",
+ "story",
+ "steps",
+ "source",
+ "finished_today",
+ "progress",
+ "completed",
+ "streak",
+ "time_zone"
+ ],
+ "properties": {
+ "date": {
+ "type": "string",
+ "format": "date"
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "story": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 180
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 3,
+ "maxItems": 3,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "event_type",
+ "site",
+ "sentence",
+ "href",
+ "weight",
+ "count",
+ "verification",
+ "status",
+ "source",
+ "progress",
+ "done"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "event_type": {
+ "type": "string"
+ },
+ "site": {
+ "type": "string"
+ },
+ "sentence": {
+ "type": "string"
+ },
+ "href": {
+ "type": "string",
+ "format": "uri"
+ },
+ "weight": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer",
+ "const": 1
+ },
+ "verification": {
+ "type": "string"
+ },
+ "status": {
+ "const": "approved"
+ },
+ "source": {
+ "type": "string"
+ },
+ "progress": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "done": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "source": {
+ "enum": [
+ "ai",
+ "rotation"
+ ]
+ },
+ "finished_today": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "progress": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 3
+ },
+ "completed": {
+ "type": "boolean"
+ },
+ "completed_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "streak": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "time_zone": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "quest.step-type": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/step-type.v1.json",
+ "title": "QuestStepType",
+ "description": "quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "event_type",
+ "site",
+ "sentence",
+ "href",
+ "weight",
+ "status"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 90
+ },
+ "event_type": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 160
+ },
+ "site": {
+ "type": "string",
+ "format": "hostname"
+ },
+ "sentence": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "weight": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 5
+ },
+ "count": {
+ "type": "integer",
+ "const": 1
+ },
+ "verification": {
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "source": {
+ "type": "string"
+ },
+ "project_id": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "reviewed_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "quest.step-type-request": {
+ "version": "1.0.0",
+ "owner": "quest",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/quest/step-type-request.v1.json",
+ "title": "QuestStepTypeRequest",
+ "description": "A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "event_type",
+ "site",
+ "sentence",
+ "href"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9-]{1,47}$"
+ },
+ "event_type": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 160
+ },
+ "site": {
+ "type": "string",
+ "format": "hostname"
+ },
+ "sentence": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "weight": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 5
+ }
+ }
+ }
+ },
"quest.app-quest-request": {
"quest.app-quest-request": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "quest",
"owner": "quest",
@@ -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.354.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.Exchange API",
"title": "OpenVibe.Exchange API",
- "version": "0.354.0",
- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.355.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"
@@ -201,8 +201,8 @@
@@ -201,8 +201,8 @@
"service": "quest",
"service": "quest",
"name": "OpenVibe.Quest",
"name": "OpenVibe.Quest",
"origin": "https://openvibe.quest",
"origin": "https://openvibe.quest",
- "operations": 3,
- "capabilities": 1
+ "operations": 9,
+ "capabilities": 6
},
},
{
{
"service": "report",
"service": "report",
@@ -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.354.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.Mail API",
"title": "OpenVibe.Mail API",
- "version": "0.354.0",
- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.355.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"
@@ -389,6 +389,313 @@
@@ -389,6 +389,313 @@
}
}
}
}
}
}
+ },
+ "/api/v1/daily": {
+ "get": {
+ "operationId": "get_api_v1_daily",
+ "summary": "Read today's shared daily quest or a past day's quest and its public completion count.",
+ "description": "**quest.daily.read** (public): Read today's shared daily quest or a past day's quest and its public completion count.",
+ "tags": [
+ "quest.daily"
+ ],
+ "x-openvibe-capabilities": [
+ "quest.daily.read"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "quest-read",
+ "security": [
+ {
+ "openvibeToken": [
+ "quest.daily.read"
+ ]
+ },
+ {}
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/quest.daily.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/daily/{date}": {
+ "get": {
+ "operationId": "get_api_v1_daily_date",
+ "summary": "Read today's shared daily quest or a past day's quest and its public completion count.",
+ "description": "**quest.daily.read** (public): Read today's shared daily quest or a past day's quest and its public completion count.",
+ "tags": [
+ "quest.daily"
+ ],
+ "x-openvibe-capabilities": [
+ "quest.daily.read"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "quest-read",
+ "security": [
+ {
+ "openvibeToken": [
+ "quest.daily.read"
+ ]
+ },
+ {}
+ ],
+ "parameters": [
+ {
+ "name": "date",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/quest.daily.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/me/daily": {
+ "get": {
+ "operationId": "get_api_v1_me_daily",
+ "summary": "Read the signed-in person's daily checklist, completion and streak, verified from Events in their time zone.",
+ "description": "**quest.daily_progress.read** (first-party): Read the signed-in person's daily checklist, completion and streak, verified from Events in their time zone.",
+ "tags": [
+ "quest.daily_progress"
+ ],
+ "x-openvibe-capabilities": [
+ "quest.daily_progress.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "quest-read",
+ "security": [
+ {
+ "openvibeToken": [
+ "quest.daily_progress.read"
+ ]
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/quest.daily-progress.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/step-types": {
+ "get": {
+ "operationId": "get_api_v1_step_types",
+ "summary": "List approved daily step types, each bound to an event topic and its verification rule.",
+ "description": "**quest.step_types.read** (public): List approved daily step types, each bound to an event topic and its verification rule.",
+ "tags": [
+ "quest.step_types"
+ ],
+ "x-openvibe-capabilities": [
+ "quest.step_types.read"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "quest-read",
+ "security": [
+ {
+ "openvibeToken": [
+ "quest.step_types.read"
+ ]
+ },
+ {}
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/quest.step-type.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "operationId": "post_api_v1_step_types",
+ "summary": "Suggest a step type on a known OpenVibe.Events topic.",
+ "description": "**quest.steps.contribute** (public): Suggest a step type on a known OpenVibe.Events topic. A developer app's proposal remains pending until staff review.",
+ "tags": [
+ "quest.steps"
+ ],
+ "x-openvibe-capabilities": [
+ "quest.steps.contribute"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "quest-step-write",
+ "security": [
+ {
+ "openvibeToken": [
+ "quest.steps.contribute"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/quest.step-type-request.v1"
+ }
+ }
+ }
+ },
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/quest.step-type.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/step-types/{id}/review": {
+ "post": {
+ "operationId": "post_api_v1_step_types_id_review",
+ "summary": "Staff service review of a contributed daily step type; approved types may enter the generator's registry.",
+ "description": "**quest.steps.review** (internal): Staff service review of a contributed daily step type; approved types may enter the generator's registry.",
+ "tags": [
+ "quest.steps"
+ ],
+ "x-openvibe-capabilities": [
+ "quest.steps.review"
+ ],
+ "x-openvibe-visibility": [
+ "internal"
+ ],
+ "x-openvibe-quota-class": "quest-step-review",
+ "security": [
+ {
+ "openvibeToken": [
+ "quest.steps.review"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/quest.step-type.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
}
}
},
},
"components": {
"components": {
@@ -670,6 +977,304 @@
@@ -670,6 +977,304 @@
"minimum": 0
"minimum": 0
}
}
}
}
+ },
+ "quest.daily-progress.v1": {
+ "title": "QuestDailyProgress",
+ "description": "quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "date",
+ "title",
+ "story",
+ "steps",
+ "source",
+ "finished_today",
+ "progress",
+ "completed",
+ "streak",
+ "time_zone"
+ ],
+ "properties": {
+ "date": {
+ "type": "string",
+ "format": "date"
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "story": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 180
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 3,
+ "maxItems": 3,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "event_type",
+ "site",
+ "sentence",
+ "href",
+ "weight",
+ "count",
+ "verification",
+ "status",
+ "source",
+ "progress",
+ "done"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "event_type": {
+ "type": "string"
+ },
+ "site": {
+ "type": "string"
+ },
+ "sentence": {
+ "type": "string"
+ },
+ "href": {
+ "type": "string",
+ "format": "uri"
+ },
+ "weight": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer",
+ "const": 1
+ },
+ "verification": {
+ "type": "string"
+ },
+ "status": {
+ "const": "approved"
+ },
+ "source": {
+ "type": "string"
+ },
+ "progress": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "done": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "source": {
+ "enum": [
+ "ai",
+ "rotation"
+ ]
+ },
+ "finished_today": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "progress": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 3
+ },
+ "completed": {
+ "type": "boolean"
+ },
+ "completed_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "streak": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "time_zone": {
+ "type": "string"
+ }
+ }
+ },
+ "quest.daily.v1": {
+ "title": "QuestDaily",
+ "description": "quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "date",
+ "title",
+ "story",
+ "steps",
+ "source",
+ "finished_today"
+ ],
+ "properties": {
+ "date": {
+ "type": "string",
+ "format": "date"
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "story": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 180
+ },
+ "steps": {
+ "type": "array",
+ "minItems": 3,
+ "maxItems": 3,
+ "items": {
+ "$ref": "#/components/schemas/quest.step-type.v1"
+ }
+ },
+ "source": {
+ "enum": [
+ "ai",
+ "rotation"
+ ]
+ },
+ "finished_today": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "quest.step-type-request.v1": {
+ "title": "QuestStepTypeRequest",
+ "description": "A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "event_type",
+ "site",
+ "sentence",
+ "href"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9-]{1,47}$"
+ },
+ "event_type": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 160
+ },
+ "site": {
+ "type": "string",
+ "format": "hostname"
+ },
+ "sentence": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "weight": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 5
+ }
+ }
+ },
+ "quest.step-type.v1": {
+ "title": "QuestStepType",
+ "description": "quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "event_type",
+ "site",
+ "sentence",
+ "href",
+ "weight",
+ "status"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "minLength": 2,
+ "maxLength": 90
+ },
+ "event_type": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 160
+ },
+ "site": {
+ "type": "string",
+ "format": "hostname"
+ },
+ "sentence": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "weight": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 5
+ },
+ "count": {
+ "type": "integer",
+ "const": 1
+ },
+ "verification": {
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "source": {
+ "type": "string"
+ },
+ "project_id": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "reviewed_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ }
+ }
}
}
},
},
"securitySchemes": {
"securitySchemes": {
@@ -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.354.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.355.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.354.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.354.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.355.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.355.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"
@@ -274496,6 +274496,121 @@ export interface AccessKeyList {
@@ -274496,6 +274496,121 @@ export interface AccessKeyList {
keys: AccessKey[];
keys: AccessKey[];
}
}
+/** [email protected] (owner: quest) */
+/**
+ * quest.daily@1: one quest shared by everyone on this UTC date. Progress is private and is not in this answer.
+ */
+export interface QuestDaily {
+ date: string;
+ title: string;
+ story: string;
+ /**
+ * @minItems 3
+ * @maxItems 3
+ */
+ steps: [QuestStepType, QuestStepType, QuestStepType];
+ source: "ai" | "rotation";
+ finished_today: number;
+}
+
+/** [email protected] (owner: quest) */
+/**
+ * quest.daily-progress@1: the caller's own progress, counted from Events in their IANA time zone.
+ */
+export interface QuestDailyProgress {
+ date: string;
+ title: string;
+ story: string;
+ /**
+ * @minItems 3
+ * @maxItems 3
+ */
+ steps: [
+ {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight: number;
+ count: 1;
+ verification: string;
+ status: "approved";
+ source: string;
+ progress: number;
+ done: boolean;
+ },
+ {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight: number;
+ count: 1;
+ verification: string;
+ status: "approved";
+ source: string;
+ progress: number;
+ done: boolean;
+ },
+ {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight: number;
+ count: 1;
+ verification: string;
+ status: "approved";
+ source: string;
+ progress: number;
+ done: boolean;
+ }
+ ];
+ source: "ai" | "rotation";
+ finished_today: number;
+ progress: number;
+ completed: boolean;
+ completed_at?: string | null;
+ streak: number;
+ time_zone: string;
+}
+
+/** [email protected] (owner: quest) */
+/**
+ * quest.step-type@1: a verified Events action that may be selected for a daily quest. A contributed type stays pending until staff review.
+ */
+export interface QuestStepType {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight: number;
+ count?: 1;
+ verification?: string;
+ status: "pending" | "approved" | "rejected";
+ source?: string;
+ project_id?: string;
+ created_at?: string;
+ reviewed_at?: string | null;
+}
+
+/** [email protected] (owner: quest) */
+/**
+ * A developer app's proposed daily step. Quest accepts only topics in its known Events catalog, verifies the site's host and queues the proposal for staff review.
+ */
+export interface QuestStepTypeRequest {
+ id: string;
+ event_type: string;
+ site: string;
+ sentence: string;
+ href: string;
+ weight?: number;
+}
+
/** [email protected] (owner: quest) */
/** [email protected] (owner: quest) */
/**
/**
* quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).
* quest.app-quest-request@1: PUT /api/v1/app-quests/:slug on OpenVibe.Quest with an app token (capability quest.app_quest.manage). A developer app defines a quest on its own project's events: each step counts events of type app.<project_key>.<name> whose envelope actor is a person (the app publishing on_behalf_of them). The badge is the only reward: app quests never pay OpenCoins. Only production apps' events are counted (Events never hands sandbox events to first-party consumers).
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "quest.daily.read", "version": "1.0", "owner": "quest", "status": "active", "visibility": "public",
+ "description": "Read today's shared daily quest or a past day's quest and its public completion count.",
+ "inputSchema": "common.no-body@1", "outputSchema": "quest.daily@1", "permissions": ["none"],
+ "resourceConstraints": [], "quotaClass": "quest-read", "events": [],
+ "implementedBy": ["GET /api/v1/daily", "GET /api/v1/daily/:date"]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "quest.daily_progress.read", "version": "1.0", "owner": "quest", "status": "active", "visibility": "first-party",
+ "description": "Read the signed-in person's daily checklist, completion and streak, verified from Events in their time zone.",
+ "inputSchema": "common.no-body@1", "outputSchema": "quest.daily-progress@1", "permissions": ["quest:daily:read-own"],
+ "resourceConstraints": ["owner"], "quotaClass": "quest-read", "events": [],
+ "implementedBy": ["GET /api/v1/me/daily"]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "quest.step_types.read", "version": "1.0", "owner": "quest", "status": "active", "visibility": "public",
+ "description": "List approved daily step types, each bound to an event topic and its verification rule.",
+ "inputSchema": "common.no-body@1", "outputSchema": "quest.step-type@1", "permissions": ["none"],
+ "resourceConstraints": [], "quotaClass": "quest-read", "events": [],
+ "implementedBy": ["GET /api/v1/step-types"]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "quest.steps.contribute", "version": "1.0", "owner": "quest", "status": "active", "visibility": "public",
+ "description": "Suggest a step type on a known OpenVibe.Events topic. A developer app's proposal remains pending until staff review.",
+ "inputSchema": "quest.step-type-request@1", "outputSchema": "quest.step-type@1", "permissions": ["quest:steps:contribute"],
+ "resourceConstraints": ["project"], "quotaClass": "quest-step-write", "events": [],
+ "implementedBy": ["POST /api/v1/step-types"]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "id": "quest.steps.review", "version": "1.0", "owner": "quest", "status": "active", "visibility": "internal",
+ "description": "Staff service review of a contributed daily step type; approved types may enter the generator's registry.",
+ "inputSchema": "common.no-body@1", "outputSchema": "quest.step-type@1", "permissions": ["quest:steps:review"],
+ "resourceConstraints": [], "quotaClass": "quest-step-review", "events": [],
+ "implementedBy": ["POST /api/v1/step-types/:id/review"]
+}
@@ -16,7 +16,12 @@
@@ -16,7 +16,12 @@
"publicSite": "service"
"publicSite": "service"
},
},
"capabilities": [
"capabilities": [
- "quest.app_quest.manage"
+ "quest.app_quest.manage",
+ "quest.daily.read",
+ "quest.daily_progress.read",
+ "quest.step_types.read",
+ "quest.steps.contribute",
+ "quest.steps.review"
],
],
"eventsProduced": [
"eventsProduced": [
"quest.index_document.upserted",
"quest.index_document.upserted",
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.354.0",
+ "version": "0.355.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.354.0",
+ "version": "0.355.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.354.0",
+ "version": "0.355.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",