Mad Fish Elements
HomeTrust CenterVisualization types & fields

Visualization types & fields

The complete request and response field reference for reports, charts, tables, KPI cards, and dataset widgets.

Report media typeapplication/json
Contract limits5 MB body · 100 widgets · 12 columns
Complete visualization schema

A report is a JSON object containing metadata, layout preferences, and one or more widgets. Unknown safe widget properties are preserved in the stored source and widget configuration, while the fields below are the fields interpreted by the API or renderer.

Every widget shares identity, display, sizing, and note fields. Its type then determines which content fields are rendered.

Report request fieldsPOST, PUT, and PATCH
FieldTypeRequirementDescription
titleStringRequiredNon-empty report title, maximum 255 characters.
widgetsArrayRequiredNon-empty list containing 1-100 widget objects. Widget IDs must be unique within the report.
user_idIntegerOptional; API key userPrimary active user within the report's parent account. When omitted on create, the API key owner is used; updates retain the existing user.
external_idStringOptional; generatedStable producer ID, maximum 128 characters. Reusing it on POST replaces that organization's existing report.
descriptionStringOptional; emptyReport description, maximum 65,535 bytes.
statusStringOptional; draftOne of draft, published, scheduled, shared, or archived.
date_rangeStringOptional; emptyHuman-readable reporting-period label, maximum 128 characters.
scheduleStringOptional; ManualHuman-readable refresh or delivery label, maximum 64 characters.
layoutObjectOptional; 12 columnsJSON layout configuration. The portal uses columns and gap; default is {"columns":12,"gap":16}.
Common widget fieldsEvery widget type
FieldTypeRequirementDescription
idStringRequiredUnique within the report. Starts with a letter, then letters, numbers, underscores, or hyphens; maximum 64 characters. key is an accepted alias.
typeStringOptional; chartOne of chart, table, kpi, or dataset.
titleStringOptional; emptyDisplay heading, up to 255 characters.
widthIntegerOptional; 12Width in the report's 12-column grid. Allowed range: 1-12.
heightIntegerOptional; 320Rendered height in pixels. Allowed range: 160-1,400.
noteStringOptional; emptyCommentary saved separately with the widget and included in API responses and exports; maximum 20,000 bytes.
Chart widget fieldstype: chart
FieldTypeRequirementDescription
optionObjectRequiredA safe declarative chart configuration object.
option.seriesObject or arrayRequiredOne series object or a non-empty array. Each item needs a supported type.
option.datasetObject or arrayOptionalDataset definitions for charts, including source and dimensions.
option.titleObject or arrayOptionalChart title configuration.
option.tooltipObjectOptionalTooltip configuration such as trigger and formatting flags.
option.legendObjectOptionalLegend layout and visibility.
option.gridObject or arrayOptionalPlot boundaries and multiple-grid layout.
option.xAxis / yAxisObject or arrayOptionalCartesian axes for line, bar, scatter, candlestick, and related series.
option.radarObjectOptionalRadar indicators and shape configuration.
option.visualMapObject or arrayOptionalVisual encoding for ranges, heatmaps, maps, and scatter data.
Available chart types

The platform supports the complete set below. Combine compatible series in one chart when a report needs multiple visual encodings.

Line

line

Trends and changes across ordered values or time.

Bar

bar

Comparisons across categories, including stacked and horizontal layouts.

Pie

pie

Part-to-whole comparisons using pie, donut, or rose layouts.

Scatter

scatter

Relationships and distributions across two numeric dimensions.

Effect Scatter

effectScatter

Scatter data with animated emphasis for notable points.

Candlestick

candlestick

Open, close, low, and high values for financial or range data.

Radar

radar

Multivariate comparisons across a shared set of indicators.

Heatmap

heatmap

Magnitude encoded by color across grids, calendars, or coordinates.

Tree

tree

Parent-child hierarchies displayed as expandable branches.

Treemap

treemap

Hierarchical part-to-whole data shown as nested rectangles.

Sunburst

sunburst

Hierarchical levels shown as concentric radial rings.

Map

map

Values and categories displayed across registered geographic regions.

Lines

lines

Routes, flows, or links drawn across geographic or coordinate systems.

Graph

graph

Network relationships between nodes and links.

Boxplot

boxplot

Statistical distributions using quartiles, medians, and outliers.

Parallel

parallel

High-dimensional records compared across parallel axes.

Gauge

gauge

A current value shown against a defined scale or target.

Funnel

funnel

Stage-to-stage volume and conversion comparisons.

Sankey

sankey

Weighted flows between categories or process stages.

Theme River

themeRiver

Category volume changing over time in a flowing stream layout.

Pictorial Bar

pictorialBar

Bar values rendered with repeated or scaled symbols.

Custom Series

custom

Safe custom point, rectangle, or line marks driven by declarative series data.

Custom series use a safe local renderer with shape set to point, rect, or line. The API preserves other safe declarative option fields and rejects prototype-related keys, submitted renderItem callbacks, script URLs, function expressions, arrow functions, and structures deeper than 30 levels.

Table widget fieldstype: table
FieldTypeRequirementDescription
columnsArrayRequired; non-emptyEach column is a string or an object with key and optional label.
columns[].keyStringObject columnsProperty read from object rows.
columns[].labelStringOptionalVisible column heading; defaults to key.
rowsArrayRequired; may be emptyEach row may be an object keyed by column key or an array aligned to column order.
KPI widget fieldstype: kpi
FieldTypeRequirementDescription
valueString, number, boolean, or nullRequiredPrimary value rendered in the KPI card.
labelStringOptionalSupporting label rendered below the value.
deltaScalarOptionalComparison, trend, or change value rendered with the KPI.
Dataset widget fieldstype: dataset
FieldTypeRequirementDescription
dataAny JSON valueOptionalPreferred field for inspectable source data. Objects and arrays are formatted as JSON.
datasetAny JSON valueOptional aliasRendered when data is not present.
Chart widgettype: chart
{
    "id": "revenue-trend",
    "type": "chart",
    "title": "Revenue vs target",
    "width": 8,
    "height": 360,
    "option": {
        "tooltip": {
            "trigger": "axis"
        },
        "legend": [],
        "dataset": {
            "source": [
                [
                    "day",
                    "Revenue",
                    "Target"
                ],
                [
                    "Mon",
                    18400,
                    17000
                ],
                [
                    "Tue",
                    21300,
                    18000
                ]
            ]
        },
        "xAxis": {
            "type": "category"
        },
        "yAxis": [],
        "series": [
            {
                "type": "bar"
            },
            {
                "type": "line"
            }
        ]
    },
    "note": "Revenue remained above target."
}

Use a declarative chart option; executable callbacks are not accepted.

Table widgettype: table
{
    "id": "regional-detail",
    "type": "table",
    "title": "Regional performance",
    "columns": [
        {
            "key": "region",
            "label": "Region"
        },
        {
            "key": "revenue",
            "label": "Revenue"
        }
    ],
    "rows": [
        {
            "region": "West",
            "revenue": "$218,400"
        },
        {
            "region": "Central",
            "revenue": "$176,900"
        }
    ]
}

Columns may be strings or keyed label objects; rows may be arrays or objects.

KPI widgettype: kpi
{
    "id": "pipeline-coverage",
    "type": "kpi",
    "title": "Pipeline coverage",
    "width": 4,
    "height": 220,
    "value": "3.8x",
    "label": "Next-quarter target",
    "delta": "+0.4x"
}

The required value can be a string, number, boolean, or null.

Dataset widgettype: dataset
{
    "id": "source-records",
    "type": "dataset",
    "title": "Normalized source records",
    "data": [
        {
            "account_id": "acct_1042",
            "segment": "Enterprise",
            "arr": 218400
        },
        {
            "account_id": "acct_1088",
            "segment": "Mid-market",
            "arr": 176900
        }
    ]
}

Dataset widgets make the underlying structured records directly inspectable.

Report response fieldsReturned data object
FieldTypeRequirementDescription
idStringAlwaysServer-generated 24-character report ID used in report and widget URLs.
external_idStringAlwaysCaller-supplied idempotency key, or generated as report_{id}.
titleStringAlwaysReport title.
statusStringAlwaysCapitalized status label such as Published or Archived.
typeStringAlwaysFixed value: Data visualization.
date_rangeStringAlwaysSaved label, or All data when empty.
scheduleStringAlwaysSaved label, or Manual when empty.
client_idIntegerAlwaysParent client account that owns and scopes the report. Zero for accounts that are not client-owned.
user_idIntegerAlwaysPrimary active user assigned within the report's parent account.
user_labelStringAlwaysHuman-readable label for the primary user.
owner_user_idIntegerAlwaysImmutable portal user ID that originally created the report.
updated_atDatetime stringAlwaysDatabase update timestamp.
updated_displayStringAlwaysHuman-readable update date in M j, Y format.
share_enabledBooleanAlwaysWhether a public share token is active.
widget_typesArray of stringsAlwaysUnique capitalized widget type labels in the report.
descriptionStringFull report onlyStored report description.
layoutObjectFull report onlyNormalized layout object; defaults to {"columns":12,"gap":16}.
sourceObjectFull report onlyOriginal complete request representation currently stored for the report.
share_urlStringFull report onlyActive share URL, or an empty string.
widgetsArrayFull report onlyNormalized widgets in display order with any saved notes.
Normalized widget response fieldswidgets[]
FieldTypeRequirementDescription
idStringAlwaysCanonical widget ID, including when the request used key.
typeStringAlwaysNormalized lowercase widget type.
titleStringAlwaysNormalized title; empty when omitted.
widthIntegerAlwaysNormalized grid width.
heightIntegerAlwaysNormalized pixel height.
noteStringAlwaysSaved note text; empty when none exists.
note_updated_atDatetime stringAlwaysTimestamp of the latest note update; empty when no note exists.
Type-specific fieldsJSONWhen suppliedFields such as option, columns, rows, value, label, delta, data, and other safe configuration are preserved.
Response envelope fieldsTop-level JSON
FieldTypeRequirementDescription
statusStringAlwaysMachine-readable result such as ok, unauthorized, invalid_json, not_found, or validation_error.
messageStringWhen availableHuman-readable result or error message.
dataObject or arraySuccess responsesReport, report collection, or other operation result.
errorsArray of stringsValidation errorsField-level validation messages returned with HTTP 422.

See the chart library in action

Explore live, responsive examples of every visualization family supported by the reporting platform.

Open Chart Gallery

Use these fields in an endpoint

Return to the operation reference for complete request, response, cURL, and Python examples.

API operations