Views
Manage saved app views (layouts, filters, sorting, field display, grouping)
6 tools
Get App Views
POST /v1/tools/tape/getAppViews
Get all saved views for a Tape app (preview shape: view_id, name, is_default, layout, private). Use tape_getView(view_id) for full detail — filters, sorting, field display settings, and split_by grouping — and tape_listRecords(view_id) to fetch the records a view matches.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
app_id | number | required | The app ID to get views for (from getApp, listApps, or platform context). |
Request
curl -X POST https://api.syncello.io/v1/tools/tape/getAppViews \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
-d '{
"app_id": "123"
}'Response
{
"views": [
{
"id": 810450,
"view_id": 810450,
"name": null,
"app_id": 500123,
"is_default": true,
"layout": "table",
"private": false
},
{
"id": 810451,
"view_id": 810451,
"name": "Open Deals",
"app_id": 500123,
"is_default": false,
"layout": "table",
"private": false
}
],
"total": 2
} Try It
Try it
Sign in to execute this tool
Sign InGet View
POST /v1/tools/tape/getView
Get a single Tape view in full detail: layout, filters, sort_by/sort_desc, per-field display settings (hidden/width keyed by field_id — every app field gets an entry, defaulting to visible, not only ones a user customized), and split_by grouping. Get view_id from tape_getAppViews. ALWAYS call this before tape_updateView when changing filters or fields — those collections are replaced wholesale on update. Use tape_listRecords(view_id) to fetch the records the view matches.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
view_id | number | required | The view ID to retrieve (from tape_getAppViews). |
Request
curl -X POST https://api.syncello.io/v1/tools/tape/getView \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
-d '{
"view_id": "123"
}'Response
{
"view": {
"id": 810451,
"view_id": 810451,
"name": "Open Deals",
"app_id": 500123,
"is_default": false,
"layout": "table",
"private": false,
"sort_by": 1234567,
"sort_desc": true,
"filters": [
{
"field_id": 1234568,
"field_type": "single_category",
"type": "category",
"match_type": "any",
"values": [
{
"value": 3
}
]
}
],
"fields": {
"1234567": {
"hidden": false,
"width": 240
},
"1234568": {
"hidden": false
},
"1234569": {
"hidden": true
}
},
"split_by": {
"field_id": 1234568,
"period": "month",
"sorting": "label_asc",
"limit": 100
}
}
} Try It
Try it
Sign in to execute this tool
Sign InCreate View
POST /v1/tools/tape/createView
Create a saved view on a Tape app. PREREQUISITE when using filters, fields, or split_by: call tape_getApp(app_id) first for field_ids, field_types, and category option_ids. LAYOUTS: "table" (all fields visible by default), "list" and "board" (only the title field visible by default). FILTERS use the same schema as tape_filterRecords ({field_id, field_type, match_type, values: [{value}]} — "type" derived automatically; field_label accepted instead of field_id and resolved by Syncello), with view-specific rules: field filters ONLY (no system-date created_on/last_modified_on meta filters), max 100 filters, AND-combined. SELF-UPDATING DATE FILTERS: relative tokens like "-7d" are rejected (a saved view would freeze the literal value), but Tape re-evaluates its OWN relative modes on every visit — set relative_date_type to "today", "yesterday" or "tomorrow" for a view that stays current, or "exact_date" (default) with an absolute "YYYY-MM-DD HH:MM:SS" value. Those four are the ONLY valid modes; "this_week"/"last_month"/"num_days_before" etc. are rejected. Omit relative_date_type on empty/not_empty filters. ASSIGNED-TO-ME: add include_active_user: true to a user-field filter to also match records assigned to the CALLING user — {field_id, field_type: "multi_user", match_type: "any", include_active_user: true, values: [{value: 70047}]} means "assigned to user 70047 OR to me". Cannot be combined with match_type "not_empty". FIELDS: per-field display settings keyed by field_id; each entry REQUIRES hidden (boolean); width (100–1500 px) applies to table layout only. SPLIT_BY groups records into sections; eligible field types: single/multi_category, status, single/multi_user, single/multi_relation, single_date, range_date, created_on, last_modified_on, calculation. Views are always public team views (max 2000 per app). Requires a USER API key (automation keys rejected) and SHARE access to the app. Use tape_makeViewDefault to make the new view the default.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
app_id | number | required | The app ID to create the view in (from getApp, listApps, or platform context). |
name | string | required | View name (max 200 characters). |
layout | string | required | View layout. table: all fields visible by default; list/board: only the title field visible by default. Values: table, list, board |
filters | array | optional | Filter objects, same schema as tape_filterRecords: {field_id, field_type, match_type, values: [{value}]}. AND-combined, max 100. Field filters only. No relative date tokens — use absolute datetimes. |
sort_by | number | optional | Field ID to sort by (from getApp). Omit for manual record ordering. |
sort_desc | boolean | optional | Sort descending (default false). |
fields | object | optional | Per-field display settings keyed by field_id, e.g. {"123": {"hidden": false, "width": 240}}. hidden is required per entry; width (100–1500 px) applies to table layout only. If omitted, Tape defaults every app field to visible — the created view's fields object lists an entry for every app field, not only ones set here. |
split_by | object | optional | Group records into sections: {field_id (required), period (day/weekday/week/month/year — date fields only), sorting (label_asc/label_desc/value_asc/value_desc), limit (max sections, >= 1)}. Sub-keys left unspecified are filled in by Tape with defaults (period: "month", limit: 100) — pass explicit values to avoid relying on these. |
Request
curl -X POST https://api.syncello.io/v1/tools/tape/createView \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
-d '{
"app_id": "123",
"name": "example",
"layout": "table"
}'Response
{
"view": {
"id": 810452,
"view_id": 810452,
"name": "Open Deals",
"app_id": 500123,
"is_default": false,
"layout": "table",
"private": false,
"sort_by": 1234567,
"sort_desc": true,
"filters": [
{
"field_id": 1234568,
"field_type": "single_category",
"type": "category",
"match_type": "any",
"values": [
{
"value": 3
}
]
}
],
"fields": {
"1234567": {
"hidden": false
},
"1234568": {
"hidden": false
},
"1234569": {
"hidden": false
}
},
"split_by": null
}
} Try It
Try it
Sign in to execute this tool
Sign InUpdate View
POST /v1/tools/tape/updateView
Update a saved Tape view. PARTIAL update: omitted keys keep their stored value; passing null CLEARS a setting (sort_by, split_by, filters, fields); filters and fields collections are replaced WHOLESALE — never merged (a field omitted from a replacement fields object resets to visible, it does not keep its prior setting; the response always lists every app field, not only the ones you set). ALWAYS call tape_getView first when changing filters or fields, then send the complete desired collection. A name cannot be cleared (null name = preserve). is_default cannot be changed here — use tape_makeViewDefault. sort_desc only takes effect once sort_by is non-null (already stored or set in this same call) — if the view has no sort_by, sort_desc is silently ignored: the call still returns 200 but the stored value does not change. Filter rules match tape_createView: field filters only (no system-date meta filters), no relative tokens like "-7d" (use relative_date_type "today"/"yesterday"/"tomorrow" for a self-updating view, or "exact_date" with an absolute datetime — those four are the only valid modes); include_active_user: true on a user filter also matches records assigned to the CALLING user (not combinable with match_type "not_empty"), max 100. Switching layout preserves the other layouts' field settings. Requires a USER API key (automation keys rejected) and SHARE access to the app.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
view_id | number | required | The view ID to update (from tape_getAppViews or tape_getView). |
name | string | optional | New view name (max 200 characters). |
layout | string | optional | Switch the view layout. Field settings of other layouts are preserved. Values: table, list, board |
filters | array,null | optional | REPLACEMENT filter array (same schema as tape_createView) — replaces ALL existing filters wholesale; fetch current ones with tape_getView first. Pass null to remove all filters. Omit to leave unchanged. |
sort_by | number,null | optional | Field ID (number) to sort by, or null to clear (manual ordering). Omit to leave unchanged. |
sort_desc | boolean | optional | Sort descending. Only takes effect once sort_by is non-null (already stored on the view, or set in this same call) — with no sort_by, Tape silently ignores sort_desc (200 response, no change). |
fields | object,null | optional | REPLACEMENT per-field display settings object keyed by field_id ({"123": {"hidden": false, "width": 240}}) — replaces ALL existing field settings for the current layout wholesale; fetch current ones with tape_getView first. hidden is required per entry. A field left out of this object resets to visible (hidden: false), it does not keep its prior setting. Omit to leave unchanged. |
split_by | object,null | optional | Grouping config {field_id, period?, sorting?, limit?}, or null to remove grouping. Sub-keys left unspecified are filled in by Tape with defaults (period: "month", limit: 100). Omit to leave unchanged. |
Request
curl -X POST https://api.syncello.io/v1/tools/tape/updateView \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
-d '{
"view_id": "123"
}'Response
{
"view": {
"id": 810451,
"view_id": 810451,
"name": "Won Deals",
"app_id": 500123,
"is_default": false,
"layout": "table",
"private": false,
"sort_by": null,
"sort_desc": false,
"filters": [
{
"field_id": 1234568,
"field_type": "single_category",
"type": "category",
"match_type": "equal",
"values": [
{
"value": 5
}
]
}
],
"fields": {
"1234567": {
"hidden": false
},
"1234568": {
"hidden": false
},
"1234569": {
"hidden": true
}
},
"split_by": null
}
} Try It
Try it
Sign in to execute this tool
Sign InMake View Default
POST /v1/tools/tape/makeViewDefault
Make a view the default view of its Tape app — the view members see when opening the app. Exactly one view per app is default; promoting one automatically demotes the previous default. This is the ONLY way to change is_default (tape_updateView ignores it). Requires a USER API key and SHARE access to the app.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
view_id | number | required | The view ID to promote to default (from tape_getAppViews). |
Request
curl -X POST https://api.syncello.io/v1/tools/tape/makeViewDefault \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
-d '{
"view_id": "123"
}'Response
{
"view": {
"id": 810451,
"view_id": 810451,
"name": "Open Deals",
"app_id": 500123,
"is_default": true,
"layout": "table",
"private": false,
"sort_by": 1234567,
"sort_desc": true,
"filters": [],
"fields": {
"1234567": {
"hidden": false
},
"1234568": {
"hidden": false
},
"1234569": {
"hidden": false
}
},
"split_by": null
}
} Try It
Try it
Sign in to execute this tool
Sign InDelete View
POST /v1/tools/tape/deleteView
Delete a saved view from a Tape app. PERMANENT — there is no restore for views (records are unaffected; only the saved view configuration is removed). Confirm with tape_getView first if unsure which view this is. Requires a USER API key and SHARE access to the app.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
view_id | number | required | The view ID to delete (from tape_getAppViews). |
Request
curl -X POST https://api.syncello.io/v1/tools/tape/deleteView \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
-d '{
"view_id": "123"
}'Response
{
"view_id": 810451
} Try It
Try it
Sign in to execute this tool
Sign In