---
title: "ai.layout.suggest · OpenVibe.Services"
canonical: "https://openvibe.services/docs/capabilities/ai.layout.suggest"
updated: null
---

# ai.layout.suggest · OpenVibe.Services

HTML: [ai.layout.suggest · OpenVibe.Services](https://openvibe.services/docs/capabilities/ai.layout.suggest)

# `ai.layout.suggest`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

Not grantable to apps (active, first-party).

Turn a person's words into a ui.layout@1 for one surface, using only the parts its ui.surface@1 catalog has. The answer is checked by openvibe-sdk/ui-layout against the same catalog; an invalid answer gets one retry with the validator's reasons, then the task says plainly that it could not do it. The suggestion is previewed, never applied. Runs on the cheap structured-output route with the per-person limits every AI run uses, and its receipt names the model. POST /api/v1/ui/layout/suggest with a service token; OpenVibe.Network calls it for the signed-in person and names them in X-OV-Subject.

- Owner: ai (token audience `openvibe.ai`)
- Version: 1.0
- Status: active
- Visibility: first-party
- Resource constraints: owner
- Quota class: ai-run
- Permissions: ai:layout
- Input: [ui.layout-request@1](/docs/contracts/ui.layout-request)
- Output: ui.layout-suggestion@1
- Events: —
- Implemented by: - `POST /api/v1/ui/layout/suggest`

[These routes in the API explorer](/docs/api/ai#cap-ai.layout.suggest)
