@portpowered/reference-data 0.4.5 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/generated/capabilities.json +135 -4
  2. package/generated/guides.json +2 -2
  3. package/generated/openapi.json +225 -14
  4. package/generated/public/docs/for-ai/api-catalog.md +123 -0
  5. package/generated/public/docs/for-ai/capability-interfaces/brightness/1.0.md +1 -0
  6. package/generated/public/docs/for-ai/capability-interfaces/media-player/1.0.md +2 -1
  7. package/generated/public/docs/for-ai/guides/lighting.md +18 -2
  8. package/generated/public/docs/for-ai/guides/using-the-api.md +19 -1
  9. package/generated/public/docs/for-ai/index.md +1 -0
  10. package/generated/public/docs/for-ai/operations/endpointQuery.md +52 -7
  11. package/generated/public/docs/for-ai/schemas/b-1.md +1 -0
  12. package/generated/public/docs/for-ai/schemas/m-1.md +2 -2
  13. package/generated/public/docs/for-ai/schemas/m-2.md +2 -0
  14. package/generated/public/docs/for-ai/schemas.md +3 -3
  15. package/generated/public/docs/references/authorization.json +6 -1
  16. package/generated/public/docs/references/authorization.yaml +3 -0
  17. package/generated/public/docs/references/capability-interfaces/brightness/1.0/messages/adjust-brightness.yaml +12 -0
  18. package/generated/public/docs/references/capability-interfaces/brightness/1.0.yaml +18 -0
  19. package/generated/public/docs/references/capability-interfaces/brightness.yaml +18 -0
  20. package/generated/public/docs/references/capability-interfaces/keypad-input/1.0/configuration.yaml +1 -0
  21. package/generated/public/docs/references/capability-interfaces/keypad-input/1.0/messages/send-key.yaml +1 -0
  22. package/generated/public/docs/references/capability-interfaces/keypad-input/1.0.yaml +2 -0
  23. package/generated/public/docs/references/capability-interfaces/keypad-input.yaml +2 -0
  24. package/generated/public/docs/references/capability-interfaces/media-player/1.0/configuration.yaml +40 -0
  25. package/generated/public/docs/references/capability-interfaces/media-player/1.0/messages/fast-forward.yaml +5 -0
  26. package/generated/public/docs/references/capability-interfaces/media-player/1.0/messages/search-and-play.yaml +39 -1
  27. package/generated/public/docs/references/capability-interfaces/media-player/1.0.yaml +89 -2
  28. package/generated/public/docs/references/capability-interfaces/media-player.yaml +89 -2
  29. package/generated/public/docs/references/capability-interfaces/speech-synthesizer/1.0/configuration.yaml +14 -0
  30. package/generated/public/docs/references/capability-interfaces/speech-synthesizer/1.0/messages/speak.yaml +7 -0
  31. package/generated/public/docs/references/capability-interfaces/speech-synthesizer/1.0.yaml +22 -1
  32. package/generated/public/docs/references/capability-interfaces/speech-synthesizer.yaml +22 -1
  33. package/generated/public/docs/references/manifest.json +253 -77
  34. package/generated/public/docs/references/openapi.yaml +215 -9
  35. package/generated/public/docs/references/schemas/BrightnessInterfaceAdjustBrightnessMessage.json +21 -0
  36. package/generated/public/docs/references/schemas/EndpointQueryRequest.json +32 -4
  37. package/generated/public/docs/references/schemas/KeypadInputInterfaceConfiguration.json +1 -0
  38. package/generated/public/docs/references/schemas/KeypadInputInterfaceSendKeyMessage.json +1 -0
  39. package/generated/public/docs/references/schemas/MediaPlayerInterfaceConfiguration.json +24 -0
  40. package/generated/public/docs/references/schemas/MediaPlayerInterfaceFastForwardMessage.json +11 -0
  41. package/generated/public/docs/references/schemas/MediaPlayerInterfaceSearchAndPlayMessage.json +23 -1
  42. package/generated/public/docs/references/schemas/MediaProvider.json +37 -0
  43. package/generated/public/docs/references/schemas/SpeechInput.json +7 -1
  44. package/generated/public/docs/references/schemas/SpeechSynthesizerInterfaceConfiguration.json +13 -0
  45. package/generated/public/docs/references/schemas/index.json +18 -0
  46. package/generated/resources/brightness/message-adjust-brightness.json +15 -0
  47. package/generated/resources/keypad-input/configuration.json +1 -0
  48. package/generated/resources/keypad-input/message-send-key.json +1 -0
  49. package/generated/resources/media-player/configuration.json +41 -0
  50. package/generated/resources/media-player/message-fast-forward.json +5 -0
  51. package/generated/resources/media-player/message-search-and-play.json +36 -1
  52. package/generated/resources/speech-synthesizer/configuration.json +18 -1
  53. package/generated/resources/speech-synthesizer/message-speak.json +7 -1
  54. package/package.json +1 -1
@@ -0,0 +1,123 @@
1
+ # Port OS API catalog: compact reference
2
+
3
+ For a new connection, read [authentication and DCR/CIMD](/docs/for-ai/guides/authentication-and-dcr.md), then [the REST quickstart](/docs/for-ai/guides/quickstart.md). Registration grants no device access. Discover the issuer and endpoints; choose REST or MCP before consent, use PKCE, validate the callback, then exchange its code. REST uses the issuer as its OAuth resource; MCP uses its /mcp resource.
4
+
5
+ Operation scopes and resource permissions both apply. [Authorization rules](/docs/for-ai/guides/authorization-rules.md) explain consent, sharing, evaluation and denial. Bearer-session alternatives describe signed-in user sessions; they do not bypass delegated-token scopes.
6
+
7
+ This index lists public operations, parameter names and top-level JSON keys. Required, conditional and nested fields remain in each linked operation/schema contract. Read only the contract needed for your next request. [Capability index](/docs/for-ai/capability-interfaces.md).
8
+
9
+ To request the complete rendered catalog, fetch `/api/?full=1` with an HTML-compatible Accept header. [Full OpenAPI YAML](/docs/references/openapi.yaml) is available for comprehensive lookup and SDK generation.
10
+
11
+ | Operation contract | OAuth scopes / conditional scopes | Parameters | Top-level JSON body keys |
12
+ | --- | --- | --- | --- |
13
+ | [GET /.well-known/jwks.json](/docs/for-ai/operations/getJWKS.md) | Public | — | — |
14
+ | [GET /.well-known/oauth-authorization-server](/docs/for-ai/operations/getOAuthAuthorizationServerMetadata.md) | Public | — | — |
15
+ | [GET /.well-known/oauth-protected-resource](/docs/for-ai/operations/getOAuthProtectedResourceMetadata.md) | Public | — | — |
16
+ | [GET /.well-known/oauth-protected-resource/mcp](/docs/for-ai/operations/getMCPOAuthProtectedResourceMetadata.md) | Public | — | — |
17
+ | [GET /.well-known/openid-configuration](/docs/for-ai/operations/getOpenIDConfiguration.md) | Public | — | — |
18
+ | [DELETE /{namespace}/{principalType}/{principalId}](/docs/for-ai/operations/deletePrincipal.md) | OAuth (no scope) | path:namespace (required), path:principalType (required), path:principalId (required) | — |
19
+ | [DELETE /{namespace}/{principalType}/{principalId}/access-control-rules/{ruleId}](/docs/for-ai/operations/deleteAccessControlRule.md) | OAuth (no scope) | path:namespace (required), path:principalType (required), path:principalId (required), path:ruleId (required) | — |
20
+ | [GET /{namespace}/{principalType}/{principalId}/endpoint-groups/{groupId}](/docs/for-ai/operations/getEndpointGroup.md) | group:read | path:namespace (required), path:principalType (required), path:principalId (required), path:groupId (required), query:expand, query:forceDeviceAttributeQuery | — |
21
+ | [DELETE /{namespace}/{principalType}/{principalId}/endpoint-groups/{groupId}](/docs/for-ai/operations/deleteEndpointGroup.md) | group:manage | path:namespace (required), path:principalType (required), path:principalId (required), path:groupId (required), header:If-Match (required) | — |
22
+ | [POST /{namespace}/{principalType}/{principalId}/endpoint-groups/{groupId}/add-members](/docs/for-ai/operations/addEndpointGroupMembers.md) | group:manage | path:namespace (required), path:principalType (required), path:principalId (required), path:groupId (required), header:If-Match (required) | memberEndpointIds |
23
+ | [POST /{namespace}/{principalType}/{principalId}/endpoint-groups/{groupId}/remove-members](/docs/for-ai/operations/removeEndpointGroupMembers.md) | group:manage | path:namespace (required), path:principalType (required), path:principalId (required), path:groupId (required), header:If-Match (required) | memberEndpointIds |
24
+ | [POST /{namespace}/{principalType}/{principalId}/endpoint-groups/{groupId}/set-name](/docs/for-ai/operations/setEndpointGroupName.md) | group:manage | path:namespace (required), path:principalType (required), path:principalId (required), path:groupId (required), header:If-Match (required) | name |
25
+ | [DELETE /{namespace}/{principalType}/{principalId}/flow-runs/{runId}](/docs/for-ai/operations/deleteFlowRun.md) | See session/security contract | path:namespace (required), path:principalType (required), path:principalId (required), path:runId (required) | — |
26
+ | [GET /{namespace}/{principalType}/{principalId}/flows/{flowId}/runs](/docs/for-ai/operations/queryFlowRuns.md) | See session/security contract | path:namespace (required), path:principalType (required), path:principalId (required), path:flowId (required), query:pageToken, query:maxResults, query:expand, query:nextToken | — |
27
+ | [POST /{namespace}/{principalType}/{principalId}/flows/{flowId}/runs](/docs/for-ai/operations/createFlowRun.md) | See session/security contract | path:namespace (required), path:principalType (required), path:principalId (required), path:flowId (required) | flowRun |
28
+ | [POST /{namespace}/{principalType}/{principalId}/flows/{flowId}/runs/{runId}/messages](/docs/for-ai/operations/upsertFlowRunMessage.md) | See session/security contract | path:namespace (required), path:principalType (required), path:principalId (required), path:flowId (required), path:runId (required) | message, target |
29
+ | [POST /{namespace}/{principalType}/{principalId}/flows/{flowId}/runs/{runId}/set-status](/docs/for-ai/operations/setFlowRunStatus.md) | See session/security contract | path:namespace (required), path:principalType (required), path:principalId (required), path:flowId (required), path:runId (required) | status |
30
+ | [DELETE /{namespace}/{principalType}/{principalId}/group-routes/{groupId}](/docs/for-ai/operations/deleteGroupRoute.md) | group:manage | path:namespace (required), path:principalType (required), path:principalId (required), path:groupId (required) | — |
31
+ | [GET /{namespace}/{principalType}/{principalId}/subscriptions/{subscriptionId}](/docs/for-ai/operations/getSubscription.md) | subscription:read | path:namespace (required), path:principalType (required), path:principalId (required), path:subscriptionId (required), query:expand | — |
32
+ | [PATCH /{namespace}/{principalType}/{principalId}/subscriptions/{subscriptionId}](/docs/for-ai/operations/patchSubscription.md) | subscription:write | path:namespace (required), path:principalType (required), path:principalId (required), path:subscriptionId (required) | name |
33
+ | [DELETE /{namespace}/{principalType}/{principalId}/subscriptions/{subscriptionId}](/docs/for-ai/operations/deleteSubscription.md) | subscription:write | path:namespace (required), path:principalType (required), path:principalId (required), path:subscriptionId (required) | — |
34
+ | [DELETE /{namespace}/{principalType}/{principalId}/tokens/{tokenId}](/docs/for-ai/operations/invalidateToken.md) | OAuth (no scope) | path:tokenId (required), path:namespace (required), path:principalType (required), path:principalId (required) | — |
35
+ | [GET /{namespace}/{principalType}/{principalId}/views/{viewId}](/docs/for-ai/operations/getView.md) | OAuth (no scope) | path:namespace (required), path:principalType (required), path:principalId (required), path:viewId (required), query:expand | — |
36
+ | [PUT /{namespace}/{principalType}/{principalId}/views/{viewId}](/docs/for-ai/operations/updateView.md) | OAuth (no scope) | path:namespace (required), path:principalType (required), path:principalId (required), path:viewId (required) | positions, schemaVersion, title, widgets |
37
+ | [DELETE /{namespace}/{principalType}/{principalId}/views/{viewId}](/docs/for-ai/operations/deleteView.md) | OAuth (no scope) | path:namespace (required), path:principalType (required), path:principalId (required), path:viewId (required) | — |
38
+ | [DELETE /{principalType}/{principalId}/flows/{flowId}](/docs/for-ai/operations/deleteFlow.md) | See session/security contract | path:principalType (required), path:principalId (required), path:flowId (required) | — |
39
+ | [GET /access-control-rules](/docs/for-ai/operations/getAccessControlRules.md) | OAuth (no scope) | query:owner (required), query:nextToken, query:maxResults, query:expand | — |
40
+ | [POST /access-control-rules](/docs/for-ai/operations/upsertAccessControlRule.md) | OAuth (no scope) | — | effect, id, identity, operation, resource |
41
+ | [POST /access-control-rules/evaluate](/docs/for-ai/operations/evaluateAccessControlRule.md) | OAuth (no scope) | — | entities, operation, requesterContext, resourceContext |
42
+ | [GET /auth-links](/docs/for-ai/operations/enumerateAuthLinks.md) | OAuth (no scope) | query:expand, query:nextToken, query:maxResults | — |
43
+ | [POST /auth-links](/docs/for-ai/operations/upsertAuthLink.md) | OAuth (no scope) | — | authLink |
44
+ | [DELETE /auth-links](/docs/for-ai/operations/deleteAuthLink.md) | OAuth (no scope) | — | id |
45
+ | [POST /auth-links/establish](/docs/for-ai/operations/establishAuthLink.md) | See session/security contract | — | apiKey, applePushNotificationDeviceToken, authLinkId, oauthTokens, pluginId, usernamePassword |
46
+ | [POST /auth-links/refresh](/docs/for-ai/operations/refreshAuthLinkToken.md) | See session/security contract | — | authLinkId |
47
+ | [POST /auth/callback](/docs/for-ai/operations/handleOAuthCallback.md) | Public | — | code, id_token, state, user |
48
+ | [POST /auth/device-authorization](/docs/for-ai/operations/deviceAuthorize.md) | See session/security contract | — | client_id, scope |
49
+ | [POST /auth/raise](/docs/for-ai/operations/raiseAnonymousPrincipal.md) | Public | — | anonymous_refresh_token, subject_token, subject_token_type |
50
+ | [POST /auth/revoke](/docs/for-ai/operations/revokeOAuthGrant.md) | Public | — | client_id, token |
51
+ | [POST /auth/token](/docs/for-ai/operations/generateToken.md) | Public | — | client_id, client_secret, code, code_verifier, grant_type, redirect_uri, refresh_token, resource, scope |
52
+ | [POST /discovery](/docs/for-ai/operations/synchronizeRoutes.md) | See session/security contract | — | authLinkIdentity, groupRoutes, pluginIdentity, relationships, routes |
53
+ | [GET /endpoint-groups](/docs/for-ai/operations/enumerateEndpointGroups.md) | group:read | query:enablement, query:owner (required), query:nextToken, query:maxResults, query:expand, query:forceDeviceAttributeQuery | — |
54
+ | [POST /endpoint-groups](/docs/for-ai/operations/createEndpointGroup.md) | group:manage | — | item |
55
+ | [POST /endpoint-groups-manage](/docs/for-ai/operations/endpointGroupsManage.md) | group:manage | header:Idempotency-Key (required) | operations, validateOnly |
56
+ | [POST /endpoint-query](/docs/for-ai/operations/endpointQuery.md) | endpoint:read; groupId: group:read | — | expand, forceDeviceQuery, paginationContext, query |
57
+ | [GET /endpoint-simulators](/docs/for-ai/operations/enumerateSimulators.md) | See session/security contract | query:owner, query:maxResults, query:nextToken, query:expand | — |
58
+ | [POST /endpoint-simulators](/docs/for-ai/operations/upsertSimulator.md) | See session/security contract | — | configuration, device_type, id, name, state |
59
+ | [DELETE /endpoint-simulators](/docs/for-ai/operations/deleteSimulator.md) | See session/security contract | — | id |
60
+ | [GET /endpoints](/docs/for-ai/operations/enumerateEndpoints.md) | endpoint:read | query:enablement, query:owner, query:id, query:type, query:serialNumber, query:nextToken, query:maxResults, query:expand, query:forceDeviceAttributeQuery | — |
61
+ | [POST /endpoints](/docs/for-ai/operations/upsertEndpoint.md) | endpoint:write | — | id, name, type |
62
+ | [PATCH /endpoints](/docs/for-ai/operations/modifyEndpoint.md) | endpoint:write | — | enablement, id, mergeInto, name, type |
63
+ | [DELETE /endpoints](/docs/for-ai/operations/deleteEndpoint.md) | endpoint:write | — | id |
64
+ | [GET /event-dead-letters](/docs/for-ai/operations/enumerateEventDeadLetters.md) | See session/security contract | query:nextToken, query:maxResults, query:query, query:expand | — |
65
+ | [GET /event-dead-letters/{id}](/docs/for-ai/operations/getEventDeadLetter.md) | See session/security contract | path:id (required), query:expand | — |
66
+ | [DELETE /event-dead-letters/{id}](/docs/for-ai/operations/deleteEventDeadLetter.md) | See session/security contract | path:id (required) | — |
67
+ | [POST /event-dead-letters/{id}/redrives](/docs/for-ai/operations/redriveEventDeadLetter.md) | See session/security contract | path:id (required) | — |
68
+ | [POST /events](/docs/for-ai/operations/createSyntheticEvent.md) | See session/security contract | — | body, endpoint, header, requestId |
69
+ | [GET /events/receipts/{receiptId}](/docs/for-ai/operations/getEventReceipt.md) | See session/security contract | path:receiptId (required), query:expand | — |
70
+ | [GET /flow-node-specifications](/docs/for-ai/operations/enumerateFlowNodeSpecifications.md) | See session/security contract | query:nextToken, query:maxResults, query:expand | — |
71
+ | [GET /flow-nodes](/docs/for-ai/operations/enumerateFlowNodes.md) | See session/security contract | query:expand, query:nextToken, query:maxResults | — |
72
+ | [POST /flow-nodes](/docs/for-ai/operations/createFlowNode.md) | See session/security contract | — | flow |
73
+ | [DELETE /flow-nodes](/docs/for-ai/operations/deleteFlowNode.md) | See session/security contract | — | id |
74
+ | [GET /flows](/docs/for-ai/operations/queryFlows.md) | See session/security contract | query:owner, query:id, query:nextToken, query:maxResults, query:expand | — |
75
+ | [POST /flows](/docs/for-ai/operations/upsertFlow.md) | See session/security contract | — | flow |
76
+ | [POST /flows/trigger](/docs/for-ai/operations/triggerFlow.md) | See session/security contract | — | flow, triggers |
77
+ | [GET /group-relationships](/docs/for-ai/operations/enumerateGroupRelationships.md) | group:read | query:owner (required), query:groupId, query:routeId, query:endpointId, query:nextToken, query:maxResults, query:expand | — |
78
+ | [GET /group-routes](/docs/for-ai/operations/enumerateGroupRoutes.md) | group:read | query:owner (required), query:nextToken, query:maxResults, query:expand | — |
79
+ | [POST /integration-requests](/docs/for-ai/operations/requestFutureIntegration.md) | Public | — | consent, email, pluginId |
80
+ | [POST /messages](/docs/for-ai/operations/sendMessage.md) | message:send | — | message, responseType, target |
81
+ | [POST /messages-gateway](/docs/for-ai/operations/pushToMessageGateway.md) | OAuth (no scope) | — | auth-token, body, context, correlationToken, endpoint, header, ownerId, secrets, target, type |
82
+ | [POST /messages/send](/docs/for-ai/operations/sendMessageLegacyAlias.md) | message:send | — | message, responseType, target |
83
+ | [GET /metrics](/docs/for-ai/operations/getMetrics.md) | Public | — | — |
84
+ | [GET /oauth-clients](/docs/for-ai/operations/enumerateOAuthClients.md) | OAuth (no scope) | query:nextToken, query:maxResults, query:expand | — |
85
+ | [POST /oauth-clients](/docs/for-ai/operations/createOAuthClient.md) | OAuth (no scope) | — | allowedOrigins, clientName, clientUri, clientUriLocalized, contacts, grantTypes, jwks, jwksUri, logoUri, logoUriLocalized, policyUri, policyUriLocalized, redirectUris, responseTypes, scope, scopes, softwareId, softwareVersion, tokenEndpointAuthMethod, tokenEndpointAuthSigningAlg, tosUri, tosUriLocalized |
86
+ | [GET /oauth/authorization-request](/docs/for-ai/operations/getPendingOAuthConsent.md) | See session/security contract | query:request_id (required) | — |
87
+ | [GET /oauth/authorize](/docs/for-ai/operations/beginOAuthAuthorization.md) | Public | query:client_id (required), query:redirect_uri (required), query:response_type (required), query:scope (required), query:state (required), query:resource (required), query:code_challenge (required), query:code_challenge_method (required) | — |
88
+ | [POST /oauth/authorize](/docs/for-ai/operations/completeOAuthConsent.md) | See session/security contract | — | approved, request_id, scope |
89
+ | [POST /oauth/authorize-device](/docs/for-ai/operations/authorizeDevice.md) | OAuth (no scope) | — | scopes, user_code |
90
+ | [POST /oauth/generate-code](/docs/for-ai/operations/generateOAuthCode.md) | OAuth (no scope) | — | client_id, code_challenge, code_challenge_method, redirect_uri, scopes, state |
91
+ | [POST /oauth/register](/docs/for-ai/operations/registerDynamicOAuthClient.md) | Public | — | client_name, client_uri, grant_types, redirect_uris, response_types, scope, software_id, software_statement, software_version, token_endpoint_auth_method |
92
+ | [POST /oauth/validate-request](/docs/for-ai/operations/validateOAuthRequest.md) | See session/security contract | — | client_id, code_challenge, code_challenge_method, redirect_uri, scopes |
93
+ | [GET /oauth/verify-device](/docs/for-ai/operations/verifyDevice.md) | Public | query:user_code (required) | — |
94
+ | [GET /ping](/docs/for-ai/operations/ping.md) | Public | — | — |
95
+ | [POST /plugin-auth-code-exchange](/docs/for-ai/operations/pluginAuthCodeExchange.md) | OAuth (no scope) | — | pluginAuthenticationData, pluginId, principalId |
96
+ | [POST /plugin-auth-code-link](/docs/for-ai/operations/pluginAuthCodeLink.md) | OAuth (no scope) | — | pluginId, principalId |
97
+ | [POST /plugin-auth-multifactor-exchange](/docs/for-ai/operations/pluginAuthMultifactorExchange.md) | OAuth (no scope) | — | pluginAuthenticationData, pluginId, principalId |
98
+ | [GET /plugins](/docs/for-ai/operations/enumeratePlugins.md) | OAuth (no scope) | query:expand, query:id, query:nextToken, query:maxResults | — |
99
+ | [POST /plugins](/docs/for-ai/operations/upsertPluginRequest.md) | OAuth (no scope) | — | applePushNotificationSecret, plugin, secretReferenceId |
100
+ | [DELETE /plugins](/docs/for-ai/operations/deletePlugin.md) | OAuth (no scope) | — | id |
101
+ | [POST /plugins/establish](/docs/for-ai/operations/establishPlugin.md) | See session/security contract | — | plugin |
102
+ | [GET /port1/{principalType}/{principalId}/oauth-clients/{clientId}](/docs/for-ai/operations/getOAuthClient.md) | OAuth (no scope) | path:principalType (required), path:principalId (required), path:clientId (required), query:expand | — |
103
+ | [PUT /port1/{principalType}/{principalId}/oauth-clients/{clientId}](/docs/for-ai/operations/updateOAuthClient.md) | OAuth (no scope) | path:principalType (required), path:principalId (required), path:clientId (required) | allowedOrigins, clientName, clientUri, clientUriLocalized, contacts, grantTypes, jwks, jwksUri, logoUri, logoUriLocalized, policyUri, policyUriLocalized, redirectUris, responseTypes, scope, scopes, softwareId, softwareVersion, tokenEndpointAuthMethod, tokenEndpointAuthSigningAlg, tosUri, tosUriLocalized |
104
+ | [DELETE /port1/{principalType}/{principalId}/oauth-clients/{clientId}](/docs/for-ai/operations/deleteOAuthClient.md) | OAuth (no scope) | path:principalType (required), path:principalId (required), path:clientId (required) | — |
105
+ | [DELETE /port1/{principalType}/{principalId}/secrets/{secretId}](/docs/for-ai/operations/deleteSecret.md) | OAuth (no scope) | path:principalType (required), path:principalId (required), path:secretId (required) | — |
106
+ | [GET /principals](/docs/for-ai/operations/enumeratePrincipals.md) | OAuth (no scope) | query:expand, query:nextToken, query:maxResults | — |
107
+ | [POST /principals](/docs/for-ai/operations/upsertPrincipal.md) | OAuth (no scope) | — | item |
108
+ | [GET /routes](/docs/for-ai/operations/getRoutes.md) | endpoint:read | query:expand, query:nextToken, query:maxResults | — |
109
+ | [POST /routes](/docs/for-ai/operations/upsertRoute.md) | endpoint:write | — | endpointId, id, interfaces, metadata, pluginId |
110
+ | [DELETE /routes](/docs/for-ai/operations/deleteRoute.md) | endpoint:write | — | id |
111
+ | [GET /secrets](/docs/for-ai/operations/enumerateSecrets.md) | OAuth (no scope) | query:id, query:owner, query:nextToken, query:maxResults, query:expand | — |
112
+ | [POST /secrets](/docs/for-ai/operations/upsertSecret.md) | OAuth (no scope) | — | secret |
113
+ | [GET /subscriptions](/docs/for-ai/operations/enumerateSubscriptions.md) | subscription:read | query:expand, query:nextToken, query:maxResults | — |
114
+ | [POST /subscriptions](/docs/for-ai/operations/upsertSubscription.md) | subscription:write | — | subscription |
115
+ | [GET /tokens](/docs/for-ai/operations/enumerateTokens.md) | OAuth (no scope) | query:nextToken, query:maxResults, query:expand | — |
116
+ | [POST /tokens](/docs/for-ai/operations/createToken.md) | OAuth (no scope) | — | expires_in, label, scope, subject |
117
+ | [POST /tuya/qrcode](/docs/for-ai/operations/generateTuyaQrCode.md) | Public | — | accessCode, authenticationUrl, clientId, schema |
118
+ | [POST /tuya/validatetoken](/docs/for-ai/operations/validateTuyaLoginCode.md) | Public | — | authenticationUrl, clientId, loginCode, userCode |
119
+ | [GET /views](/docs/for-ai/operations/enumerateViews.md) | OAuth (no scope) | query:nextToken, query:maxResults, query:expand | — |
120
+ | [POST /views](/docs/for-ai/operations/createView.md) | OAuth (no scope) | — | positions, schemaVersion, title, widgets |
121
+ | [POST /webhooks/github](/docs/for-ai/operations/handleGitHubWebhook.md) | Public | header:X-Hub-Signature-256 (required), header:X-GitHub-Delivery, header:X-GitHub-Event | — |
122
+ | [POST /webhooks/google-cloud-scheduler](/docs/for-ai/operations/handleGoogleCloudSchedulerWebhook.md) | See session/security contract | — | flow_id, node_id |
123
+ | [POST /webhooks/smartthings](/docs/for-ai/operations/handleSmartThingsWebhook.md) | OAuth (no scope) | — | — |
@@ -10,6 +10,7 @@ Read scopes: endpoint:read. Inbound control scope: message:send. Resource permis
10
10
 
11
11
  ## Messages
12
12
 
13
+ - [adjust-brightness](/docs/references/capability-interfaces/brightness/1.0/messages/adjust-brightness.yaml) (in): Adjust brightness by a signed number of percentage points. The endpoint must advertise this message separately from set-brightness.
13
14
  - [set-brightness](/docs/references/capability-interfaces/brightness/1.0/messages/set-brightness.yaml) (in): Use this exact payload schema.
14
15
 
15
16
  ## State attributes
@@ -12,6 +12,7 @@ Read scopes: endpoint:read. Inbound control scope: message:send. Resource permis
12
12
 
13
13
  - [audio](/docs/references/capability-interfaces/media-player/1.0/messages/audio.yaml) (out): Use this exact payload schema.
14
14
  - [audio-stream](/docs/references/capability-interfaces/media-player/1.0/messages/audio-stream.yaml) (out): Use this exact payload schema.
15
+ - [fast-forward](/docs/references/capability-interfaces/media-player/1.0/messages/fast-forward.yaml) (in): Begin provider-defined fast-forward playback. This does not seek by a specific duration; use skip-forward or seek for a known position change.
15
16
  - [next](/docs/references/capability-interfaces/media-player/1.0/messages/next.yaml) (in): Use this exact payload schema.
16
17
  - [pause](/docs/references/capability-interfaces/media-player/1.0/messages/pause.yaml) (in): Use this exact payload schema.
17
18
  - [play-audio](/docs/references/capability-interfaces/media-player/1.0/messages/play-audio.yaml) (in): Play a base64 encoded audio object on the endpoint. Requires audio output support; RTSP or SDP alone does not establish playback support.
@@ -20,7 +21,7 @@ Read scopes: endpoint:read. Inbound control scope: message:send. Resource permis
20
21
  - [play-uri](/docs/references/capability-interfaces/media-player/1.0/messages/play-uri.yaml) (in): Use this exact payload schema.
21
22
  - [previous](/docs/references/capability-interfaces/media-player/1.0/messages/previous.yaml) (in): Use this exact payload schema.
22
23
  - [rewind](/docs/references/capability-interfaces/media-player/1.0/messages/rewind.yaml) (in): Use this exact payload schema.
23
- - [search-and-play](/docs/references/capability-interfaces/media-player/1.0/messages/search-and-play.yaml) (in): Use this exact payload schema.
24
+ - [search-and-play](/docs/references/capability-interfaces/media-player/1.0/messages/search-and-play.yaml) (in): Search for and play media by title or query using a service advertised by the endpoint. Omitting mediaType retains audio search behavior; video-only endpoints may default to video.
24
25
  - [seek](/docs/references/capability-interfaces/media-player/1.0/messages/seek.yaml) (in): Use this exact payload schema.
25
26
  - [skip-backward](/docs/references/capability-interfaces/media-player/1.0/messages/skip-backward.yaml) (in): Use this exact payload schema.
26
27
  - [skip-forward](/docs/references/capability-interfaces/media-player/1.0/messages/skip-forward.yaml) (in): Use this exact payload schema.
@@ -4,6 +4,22 @@ Start with authorized endpoint discovery and inspect capability declarations. A
4
4
 
5
5
  For one bulb, read its power/brightness/color message schemas in [the capability directory](/docs/for-ai/capability-interfaces.md). Use the exact namespace, version, message name, units and constraints returned. [The quickstart](/docs/for-ai/guides/quickstart.md) shows the generic dispatch envelope.
6
6
 
7
- For “all lights,” include explicitly authorized shared lights and the user-requested home/group scope. Complete pagination, exclude disabled/unavailable unsupported targets as documented and deduplicate nested groups. Do not broaden the set to every power-capable endpoint. Use the existing query/dispatch contract if it supports the selection; otherwise enumerate the fixed target set and report each result.
7
+ For “all lights,” use [endpointQuery](/docs/for-ai/operations/endpointQuery.md): POST /endpoint-query with endpoint:read. Its results include readable shared endpoints from other owners. Start with the LIGHT and LIGHTBULB types below, then limit the results to the user's requested home or group.
8
8
 
9
- A batch can partially succeed. Report selected, accepted, failed and unresolved targets separately. Read fresh state before claiming all lights changed. A lost response does not justify repeating relative brightness adjustments. See [authorization rules](/docs/for-ai/guides/authorization-rules.md).
9
+ ```json
10
+ {
11
+ "query": {
12
+ "or": [
13
+ {"match": {"key": "type", "value": "LIGHT"}},
14
+ {"match": {"key": "type", "value": "LIGHTBULB"}}
15
+ ]
16
+ },
17
+ "paginationContext": {"maxResults": 25}
18
+ }
19
+ ```
20
+
21
+ For a room, first resolve its full group ID using [group discovery](/docs/for-ai/guides/managing-groups.md). Intersect the type predicate with `{"match":{"key":"groupId","value":"<resolved-full-group-id>"}}` inside query.and. This additionally requires group:read and permission to read that group. A group filter uses its returned member endpoints; resolve the requested nested groups as needed and deduplicate full endpoint IDs. Reading a group does not grant control of its members.
22
+
23
+ Repeat the same query, page size and authenticated grant with paginationContext.nextToken from each response. Continue until that token is absent, including after an empty page. Disabled endpoints are excluded by default. Inspect declared capabilities for the selected endpoints and exclude unsupported targets; do not broaden the selection to every power-capable plug or switch. Freeze the discovered target set before dispatch and report each result.
24
+
25
+ A batch can partially succeed. Report selected, accepted, failed and unresolved targets separately. For fresh readback, repeat endpointQuery with expand:["interfaces.attributes"] and forceDeviceQuery:true. Inspect observation sample times and response errors before claiming all lights changed. A lost response does not justify repeating relative brightness adjustments. See [authorization rules](/docs/for-ai/guides/authorization-rules.md).
@@ -1,9 +1,27 @@
1
1
  # Using the REST API
2
2
 
3
- Discover authorization metadata, then use [OAuth setup](/docs/for-ai/guides/authentication-and-dcr.md). Obtain exact REST paths and schemas from [OpenAPI](/docs/references/openapi.yaml) or [small operation pages](/docs/for-ai/operations/index.md).
3
+ Discover authorization metadata, then use [OAuth setup](/docs/for-ai/guides/authentication-and-dcr.md).
4
+ Start with the [compact API catalog](/docs/for-ai/api-catalog.md). It
5
+ contains auth context, public operation links, parameter names and top-level JSON
6
+ keys. Obtain exact REST paths from its links or the [small operation index](/docs/for-ai/operations/index.md).
7
+ Follow one operation's linked schemas for required/conditional fields and
8
+ nested payloads. It does not inline all schemas or examples.
9
+
10
+ For SDK generation or a comprehensive contract download, request the
11
+ [full OpenAPI document](/docs/references/openapi.yaml).
12
+
13
+ The website's `/api/` route serves this compact Markdown when the request puts
14
+ `text/markdown` first in `Accept` (for example,
15
+ `text/markdown, text/plain;q=0.9, text/html;q=0.8`). Browser HTML requests keep the
16
+ interactive reference. Add `?full=1` to explicitly retrieve the complete HTML
17
+ catalog; keep HTML in your accepted formats for that request. Both variants
18
+ include `Vary: Accept` for caches. The direct compact Markdown URL works on both
19
+ the website and API host and does not depend on negotiation.
4
20
 
5
21
  Enumerate endpoints with endpoint:read. Follow returned pagination links/tokens exactly and stop only when continuation is absent. Inspect declared capabilities and versions; retrieve one message/attribute schema as needed. Send messages through POST /messages (the existing /messages/send alias also works). Never invent target IDs or message fields.
6
22
 
23
+ For filtered inventory including readable shared endpoints, use [POST /endpoint-query](/docs/for-ai/operations/endpointQuery.md). Its query accepts exact match and nested and/or/not predicates; read the request schema's supported fields rather than inventing comparisons or text search. A groupId predicate additionally needs group:read and access to that group. Keep the query, page size, expansions, forceDeviceQuery setting and grant unchanged while following paginationContext.nextToken. Empty pages can have a continuation. Cursors expire after fifteen minutes; restart without nextToken on a 400 cursor error.
24
+
7
25
  REST dispatch and subsequent physical observation are separate facts. A 202 describes unfinished work. A timeout can mean the operation already acted; inspect existing results/state before repeating. IR/Bluetooth fire-and-forget and long-delay devices may never provide immediate confirmation. Use bounded polling and report unresolved state. An endpoint edit marked committed with cleanup pending must not be repeated as though it failed.
8
26
 
9
27
  Use documented idempotency/correlation and version preconditions only where the operation guarantees them. Setting a value and incrementing it have different replay risks. On an ambiguous lost relative-command response, report unknown or read back rather than blindly send again.
@@ -13,6 +13,7 @@ Use [the shared connection guide](/docs/for-ai/guides/connect-agent.md) to selec
13
13
  ## Documentation tree: look up what you need
14
14
 
15
15
  - [Task/component guide directory](/docs/for-ai/guides/index.md): alternatives, not a required reading checklist
16
+ - [Compact API catalog](/docs/for-ai/api-catalog.md): auth context and parameter/key index
16
17
  - [REST operation directory](/docs/for-ai/operations/index.md): individual operations and their scopes
17
18
  - [Small REST schema files](/docs/for-ai/schemas.md): linked request/response components
18
19
  - [Capability directory](/docs/for-ai/capability-interfaces.md): match the discovered namespace and version
@@ -4,7 +4,7 @@ POST `/endpoint-query`
4
4
 
5
5
 
6
6
 
7
- Query for endpoints
7
+ Return a bounded page of authorized endpoints matching the shared Query expression, including endpoints shared by other owners. Read permission is evaluated before filtering, pagination and state expansion. See the request schema for supported fields and operators. Use groupId to select members of a readable room/group, then intersect type or declared interfaces to select lights. Group predicates additionally require group:read for delegated OAuth. Repeat the complete query settings and grant when following nextToken; cursors expire after fifteen minutes. Device attributes are returned only when expanded. Report per-target command acceptance and observed state separately; querying a group does not grant permission to control its members.
8
8
 
9
9
  ## Authorization
10
10
 
@@ -19,6 +19,9 @@ security:
19
19
  - bearerAuth: []
20
20
  delegated: true
21
21
  resourcePermissionRequired: true
22
+ conditionalScopes:
23
+ groupId:
24
+ - group:read
22
25
  ```
23
26
 
24
27
  ## Complete operation contract
@@ -29,7 +32,19 @@ post:
29
32
  operationId: endpointQuery
30
33
  tags:
31
34
  - Endpoints
32
- description: Query for endpoints
35
+ description: >-
36
+ Return a bounded page of authorized endpoints matching the shared Query expression, including
37
+ endpoints shared by other owners. Read permission is evaluated before filtering, pagination and
38
+ state expansion. See the request schema for supported fields and operators. Use groupId to
39
+ select members of a readable room/group, then intersect type or declared interfaces to select
40
+ lights. Group predicates additionally require group:read for delegated OAuth. Repeat the
41
+ complete query settings and grant when following nextToken; cursors expire after fifteen
42
+ minutes. Device attributes are returned only when expanded. Report per-target command acceptance
43
+ and observed state separately; querying a group does not grant permission to control its
44
+ members.
45
+ x-portos-conditional-scopes:
46
+ groupId:
47
+ - group:read
33
48
  requestBody:
34
49
  required: true
35
50
  content:
@@ -39,8 +54,10 @@ post:
39
54
  example:
40
55
  query:
41
56
  match:
42
- key: name
43
- value: test
57
+ key: type
58
+ value: LIGHT
59
+ paginationContext:
60
+ maxResults: 10
44
61
  responses:
45
62
  '200':
46
63
  description: Endpoints retrieved successfully
@@ -50,10 +67,8 @@ post:
50
67
  $ref: /docs/references/schemas/EndpointQueryResponse.json
51
68
  example:
52
69
  results: []
53
- paginationContext:
54
- nextToken: abc123
55
70
  '400':
56
- description: Bad request - missing required parameters
71
+ description: Invalid query, unsupported expansion, or invalid/expired/mismatched cursor.
57
72
  content:
58
73
  application/json:
59
74
  schema:
@@ -72,6 +87,36 @@ post:
72
87
  message: Unauthorized - invalid or missing authentication token
73
88
  code: UNAUTHORIZED
74
89
  family: AUTHENTICATION
90
+ '403':
91
+ description: Missing conditional OAuth scope or permission to read a referenced group.
92
+ content:
93
+ application/json:
94
+ schema:
95
+ $ref: /docs/references/schemas/Error.json
96
+ example:
97
+ message: Permission to read the requested group is required.
98
+ code: FORBIDDEN
99
+ family: FORBIDDEN
100
+ '404':
101
+ description: A referenced group does not exist.
102
+ content:
103
+ application/json:
104
+ schema:
105
+ $ref: /docs/references/schemas/Error.json
106
+ example:
107
+ message: Requested group was not found.
108
+ code: NOT_FOUND
109
+ family: NOT_FOUND
110
+ '409':
111
+ description: A selected disabled endpoint cannot be forcibly refreshed.
112
+ content:
113
+ application/json:
114
+ schema:
115
+ $ref: /docs/references/schemas/Error.json
116
+ example:
117
+ message: endpoint messaging is disabled
118
+ code: ENDPOINT_DISABLED
119
+ family: CONFLICT
75
120
  '500':
76
121
  description: Internal server error
77
122
  content:
@@ -17,6 +17,7 @@
17
17
  - [BatteryInterfaceBatteryAttribute](/docs/references/schemas/BatteryInterfaceBatteryAttribute.json) (schemas)
18
18
  - [BatteryInterfaceConfiguration](/docs/references/schemas/BatteryInterfaceConfiguration.json) (schemas)
19
19
  - [BrandingInformation](/docs/references/schemas/BrandingInformation.json) (schemas)
20
+ - [BrightnessInterfaceAdjustBrightnessMessage](/docs/references/schemas/BrightnessInterfaceAdjustBrightnessMessage.json) (schemas)
20
21
  - [BrightnessInterfaceBrightnessAttribute](/docs/references/schemas/BrightnessInterfaceBrightnessAttribute.json) (schemas)
21
22
  - [BrightnessInterfaceConfiguration](/docs/references/schemas/BrightnessInterfaceConfiguration.json) (schemas)
22
23
  - [BrightnessInterfaceSetBrightnessMessage](/docs/references/schemas/BrightnessInterfaceSetBrightnessMessage.json) (schemas)
@@ -9,6 +9,7 @@
9
9
  - [MediaPlayerInterfaceAudioMessage](/docs/references/schemas/MediaPlayerInterfaceAudioMessage.json) (schemas)
10
10
  - [MediaPlayerInterfaceAudioStreamMessage](/docs/references/schemas/MediaPlayerInterfaceAudioStreamMessage.json) (schemas)
11
11
  - [MediaPlayerInterfaceConfiguration](/docs/references/schemas/MediaPlayerInterfaceConfiguration.json) (schemas)
12
+ - [MediaPlayerInterfaceFastForwardMessage](/docs/references/schemas/MediaPlayerInterfaceFastForwardMessage.json) (schemas)
12
13
  - [MediaPlayerInterfaceNextMessage](/docs/references/schemas/MediaPlayerInterfaceNextMessage.json) (schemas)
13
14
  - [MediaPlayerInterfacePauseMessage](/docs/references/schemas/MediaPlayerInterfacePauseMessage.json) (schemas)
14
15
  - [MediaPlayerInterfacePlayAudioMessage](/docs/references/schemas/MediaPlayerInterfacePlayAudioMessage.json) (schemas)
@@ -32,6 +33,7 @@
32
33
  - [MediaPlaylistInterfacePlayPlaylistMessage](/docs/references/schemas/MediaPlaylistInterfacePlayPlaylistMessage.json) (schemas)
33
34
  - [MediaPlaylistInterfaceRemoveFromPlaylistMessage](/docs/references/schemas/MediaPlaylistInterfaceRemoveFromPlaylistMessage.json) (schemas)
34
35
  - [MediaPlaylistInterfaceShufflePlaylistMessage](/docs/references/schemas/MediaPlaylistInterfaceShufflePlaylistMessage.json) (schemas)
36
+ - [MediaProvider](/docs/references/schemas/MediaProvider.json) (schemas)
35
37
  - [MediaSearchCapabilityInterfaceConfiguration](/docs/references/schemas/MediaSearchCapabilityInterfaceConfiguration.json) (schemas)
36
38
  - [MediaSearchInterfaceAudioMediaResultsMessage](/docs/references/schemas/MediaSearchInterfaceAudioMediaResultsMessage.json) (schemas)
37
39
  - [MediaSearchInterfaceSearchMediaMessage](/docs/references/schemas/MediaSearchInterfaceSearchMediaMessage.json) (schemas)
@@ -40,5 +42,3 @@
40
42
  - [MessageContext](/docs/references/schemas/MessageContext.json) (schemas)
41
43
  - [MessageEndpoint](/docs/references/schemas/MessageEndpoint.json) (schemas)
42
44
  - [MessageHeader](/docs/references/schemas/MessageHeader.json) (schemas)
43
- - [MessageInterfaceConfiguration](/docs/references/schemas/MessageInterfaceConfiguration.json) (schemas)
44
- - [MessageSourceNodeConfiguration](/docs/references/schemas/MessageSourceNodeConfiguration.json) (schemas)
@@ -2,6 +2,8 @@
2
2
 
3
3
  [Schema directory](/docs/for-ai/schemas.md). Follow only the components linked by your operation.
4
4
 
5
+ - [MessageInterfaceConfiguration](/docs/references/schemas/MessageInterfaceConfiguration.json) (schemas)
6
+ - [MessageSourceNodeConfiguration](/docs/references/schemas/MessageSourceNodeConfiguration.json) (schemas)
5
7
  - [MessageTarget](/docs/references/schemas/MessageTarget.json) (schemas)
6
8
  - [MessageTargetGroupRoute](/docs/references/schemas/MessageTargetGroupRoute.json) (schemas)
7
9
  - [MessageTargetGroupRouteReference](/docs/references/schemas/MessageTargetGroupRouteReference.json) (schemas)
@@ -6,7 +6,7 @@ Start with [the REST operation directory](/docs/for-ai/operations/index.md) and
6
6
 
7
7
  - [AccessControlEntity – AuthorizationInterfaceAuthorizationUpdateReportMessage](/docs/for-ai/schemas/a-1.md) (40 components)
8
8
  - [AuthorizationInterfaceConfiguration – AuthResourceType](/docs/for-ai/schemas/a-2.md) (5 components)
9
- - [BarrierControlInterfaceBarrierPositionAttribute – BrightnessInterfaceSetBrightnessMessage](/docs/for-ai/schemas/b-1.md) (18 components)
9
+ - [BarrierControlInterfaceBarrierPositionAttribute – BrightnessInterfaceSetBrightnessMessage](/docs/for-ai/schemas/b-1.md) (19 components)
10
10
  - [CalendarEvent – ColorTemperatureInterfaceSetColorTemperatureMessage](/docs/for-ai/schemas/c-1.md) (40 components)
11
11
  - [ConductivityInterfaceMeasuredValueAttribute – CooktopInterfaceOperationalStateAttribute](/docs/for-ai/schemas/c-2.md) (40 components)
12
12
  - [CreateEndpointGroupItem – CustomPluginSecret](/docs/for-ai/schemas/c-3.md) (12 components)
@@ -20,8 +20,8 @@ Start with [the REST operation directory](/docs/for-ai/operations/index.md) and
20
20
  - [InferenceNodeConfiguration – IfMatch](/docs/for-ai/schemas/i-1.md) (9 components)
21
21
  - [KeypadInputInterfaceConfiguration – KeypadInputInterfaceSendKeyMessage](/docs/for-ai/schemas/k-1.md) (2 components)
22
22
  - [LaundryDryerInterfaceConfiguration – LockInterfaceUnlockMessage](/docs/for-ai/schemas/l-1.md) (18 components)
23
- - [MeasurementRange – MessageSourceNodeConfiguration](/docs/for-ai/schemas/m-1.md) (40 components)
24
- - [MessageTarget – MovementInstruction](/docs/for-ai/schemas/m-2.md) (12 components)
23
+ - [MeasurementRange – MessageHeader](/docs/for-ai/schemas/m-1.md) (40 components)
24
+ - [MessageInterfaceConfiguration – MovementInstruction](/docs/for-ai/schemas/m-2.md) (14 components)
25
25
  - [NO2ConcMeasInterfaceConfiguration – NotificationTimeWindow](/docs/for-ai/schemas/n-1.md) (11 components)
26
26
  - [O3ConcMeasInterfaceConfiguration – OvenInterfaceTemperatureAttribute](/docs/for-ai/schemas/o-1.md) (16 components)
27
27
  - [PaginationContext – PluginType](/docs/for-ai/schemas/p-1.md) (40 components)
@@ -160,7 +160,12 @@
160
160
  }
161
161
  ],
162
162
  "delegated": true,
163
- "resourcePermissionRequired": true
163
+ "resourcePermissionRequired": true,
164
+ "conditionalScopes": {
165
+ "groupId": [
166
+ "group:read"
167
+ ]
168
+ }
164
169
  },
165
170
  {
166
171
  "path": "/events",
@@ -123,6 +123,9 @@ operations:
123
123
  - bearerAuth: []
124
124
  delegated: true
125
125
  resourcePermissionRequired: true
126
+ conditionalScopes:
127
+ groupId:
128
+ - group:read
126
129
  - path: /events
127
130
  runtimePath: /events
128
131
  method: POST
@@ -0,0 +1,12 @@
1
+ description: >-
2
+ Adjust brightness by a signed number of percentage points. The endpoint must
3
+ advertise this message separately from set-brightness.
4
+ type: object
5
+ properties:
6
+ brightnessDelta:
7
+ type: integer
8
+ minimum: -100
9
+ maximum: 100
10
+ required:
11
+ - brightnessDelta
12
+ additionalProperties: false
@@ -5,6 +5,24 @@ description: >-
5
5
  Brightness sets how bright a connected device should be and reports its current level. Use it to
6
6
  dim a light for the evening or restore a brighter setting for work.
7
7
  messages:
8
+ - name: adjust-brightness
9
+ description: >-
10
+ Adjust brightness by a signed number of percentage points. The endpoint must advertise this
11
+ message separately from set-brightness.
12
+ directionality: in
13
+ schema:
14
+ description: >-
15
+ Adjust brightness by a signed number of percentage points. The endpoint must advertise this
16
+ message separately from set-brightness.
17
+ type: object
18
+ properties:
19
+ brightnessDelta:
20
+ type: integer
21
+ minimum: -100
22
+ maximum: 100
23
+ required:
24
+ - brightnessDelta
25
+ additionalProperties: false
8
26
  - name: set-brightness
9
27
  description: null
10
28
  directionality: in
@@ -5,6 +5,24 @@ description: >-
5
5
  Brightness sets how bright a connected device should be and reports its current level. Use it to
6
6
  dim a light for the evening or restore a brighter setting for work.
7
7
  messages:
8
+ - name: adjust-brightness
9
+ description: >-
10
+ Adjust brightness by a signed number of percentage points. The endpoint must advertise this
11
+ message separately from set-brightness.
12
+ directionality: in
13
+ schema:
14
+ description: >-
15
+ Adjust brightness by a signed number of percentage points. The endpoint must advertise this
16
+ message separately from set-brightness.
17
+ type: object
18
+ properties:
19
+ brightnessDelta:
20
+ type: integer
21
+ minimum: -100
22
+ maximum: 100
23
+ required:
24
+ - brightnessDelta
25
+ additionalProperties: false
8
26
  - name: set-brightness
9
27
  description: null
10
28
  directionality: in
@@ -20,6 +20,7 @@ properties:
20
20
  - LEFT
21
21
  - RIGHT
22
22
  - SELECT
23
+ - HOME
23
24
  - BACK
24
25
  - EXIT
25
26
  - MENU
@@ -18,6 +18,7 @@ properties:
18
18
  - LEFT
19
19
  - RIGHT
20
20
  - SELECT
21
+ - HOME
21
22
  - BACK
22
23
  - EXIT
23
24
  - MENU
@@ -29,6 +29,7 @@ messages:
29
29
  - LEFT
30
30
  - RIGHT
31
31
  - SELECT
32
+ - HOME
32
33
  - BACK
33
34
  - EXIT
34
35
  - MENU
@@ -82,6 +83,7 @@ configuration:
82
83
  - LEFT
83
84
  - RIGHT
84
85
  - SELECT
86
+ - HOME
85
87
  - BACK
86
88
  - EXIT
87
89
  - MENU
@@ -29,6 +29,7 @@ messages:
29
29
  - LEFT
30
30
  - RIGHT
31
31
  - SELECT
32
+ - HOME
32
33
  - BACK
33
34
  - EXIT
34
35
  - MENU
@@ -82,6 +83,7 @@ configuration:
82
83
  - LEFT
83
84
  - RIGHT
84
85
  - SELECT
86
+ - HOME
85
87
  - BACK
86
88
  - EXIT
87
89
  - MENU
@@ -3,6 +3,46 @@ description: >-
3
3
  playback. Read playback state and use only the commands supported by the connected player.
4
4
  type: object
5
5
  properties:
6
+ supportedAudioProviders:
7
+ type: array
8
+ uniqueItems: true
9
+ description: >-
10
+ Audio services accepted by search-and-play on this endpoint. These describe command support,
11
+ not active subscriptions.
12
+ items:
13
+ type: string
14
+ description: >-
15
+ Media service identifier. A provider enum value does not imply that every endpoint supports
16
+ that service; use the endpoint's advertised provider lists.
17
+ enum:
18
+ - SPOTIFY
19
+ - AMAZON_MUSIC
20
+ - APPLE_MUSIC
21
+ - AUDIBLE
22
+ - TUNE_IN
23
+ - PANDORA
24
+ - IHEART_RADIO
25
+ - SIRIUSXM
26
+ - DEEZER
27
+ - TIDAL
28
+ - YOUTUBE
29
+ - NETFLIX
30
+ - PRIME_VIDEO
31
+ - DAILYMOTION
32
+ supportedVideoProviders:
33
+ type: array
34
+ uniqueItems: true
35
+ description: >-
36
+ Video services accepted by search-and-play on this endpoint. These describe command support,
37
+ not installed applications or active subscriptions.
38
+ items:
39
+ $ref: '#/properties/supportedAudioProviders/items'
40
+ defaultAudioProvider:
41
+ $ref: '#/properties/supportedAudioProviders/items'
42
+ description: Default service for an audio search. Must be in supportedAudioProviders.
43
+ defaultVideoProvider:
44
+ $ref: '#/properties/supportedAudioProviders/items'
45
+ description: Default service for a video search. Must be in supportedVideoProviders.
6
46
  supportedPlaybackStates:
7
47
  type: array
8
48
  items:
@@ -0,0 +1,5 @@
1
+ description: >-
2
+ Begin provider-defined fast-forward playback. This does not seek by a specific
3
+ duration; use skip-forward or seek for a known position change.
4
+ type: object
5
+ additionalProperties: false