create_surface
Create a new surface inside a workspace. kind picks table, doc, html, files, or video. Optional slug (lowercase kebab-case, 3-64 chars); when omitted the server slugifies name and appends a numeric suffix on collision. Optional columns sets a table's starting columns; without it the table starts EMPTY and your first row write creates the columns its data needs. Ignored for other kinds. html surfaces start with an empty body — write content via update_html. files surfaces start empty; browse them with list_files / get_file / list_recent_files, and add files with upload_file (for a file on your own machine or over ~3 MB, call create_file_upload first). video surfaces hold one or more videos people flip through (variants, cuts): add each with add_video from an https URL (mp4, webm, mov or m4v); for a video on your own machine, get that URL with create_video_upload. Editor role required. Emits surface.created so live listeners on the workspace stream see the new surface without a refetch.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Surface kind. `table` for rows + columns, `doc` for TipTap body, `html` for a sandboxed HTML page, `files` for uploaded files + folders (put a local file in with `create_file_upload` then `upload_file`), `video` for a surface of videos people flip through (a local video goes in with `create_video_upload` then `add_video`). | |
| name | Yes | Display name of the surface. 1-64 chars. | |
| slug | Yes | The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace. | |
| columns | No | Optional initial columns for `table` kind. Same shape as get_workspace_schema returns. Omit for an empty table. | |
| surface_slug | No | Optional URL-friendly slug for the surface (lowercase kebab-case, 3-64 chars). Auto-derived from `name` when omitted. |