Checking authentication...

Views

Manage saved app views (layouts, filters, sorting, field display, grouping)

6 tools

Get App Views

Read Idempotent

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

NameTypeRequiredDescription
app_idnumberrequiredThe 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

Get View

Read Idempotent

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

NameTypeRequiredDescription
view_idnumberrequiredThe 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

Create View

Write

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

NameTypeRequiredDescription
app_idnumberrequiredThe app ID to create the view in (from getApp, listApps, or platform context).
namestringrequiredView name (max 200 characters).
layoutstringrequiredView layout. table: all fields visible by default; list/board: only the title field visible by default.
Values: table, list, board
filtersarrayoptionalFilter 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_bynumberoptionalField ID to sort by (from getApp). Omit for manual record ordering.
sort_descbooleanoptionalSort descending (default false).
fieldsobjectoptionalPer-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_byobjectoptionalGroup 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

Update View

Write

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

NameTypeRequiredDescription
view_idnumberrequiredThe view ID to update (from tape_getAppViews or tape_getView).
namestringoptionalNew view name (max 200 characters).
layoutstringoptionalSwitch the view layout. Field settings of other layouts are preserved.
Values: table, list, board
filtersarray,nulloptionalREPLACEMENT 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_bynumber,nulloptionalField ID (number) to sort by, or null to clear (manual ordering). Omit to leave unchanged.
sort_descbooleanoptionalSort 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).
fieldsobject,nulloptionalREPLACEMENT 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_byobject,nulloptionalGrouping 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

Make View Default

Read Idempotent

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

NameTypeRequiredDescription
view_idnumberrequiredThe 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

Delete View

Destructive

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

NameTypeRequiredDescription
view_idnumberrequiredThe 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