Skip to main content
POST
Run an analytics report and get its rows back. Despite being a POST this reads rather than writes; the method reflects that the query goes in the body. Reports cover the shared workspace, so figures include other callers’ activity.
First time? Point any MCP client at https://mcp.aisa.one/mcp — Claude Code, Codex, Cursor, VS Code and the rest. Authorization is OAuth: the client opens a browser, you click Allow once, and there is no key to paste. Your agent then reaches every endpoint through a few meta tools: search, list_categories, get_details and batch_quote are free, batch_use is billed per call. Setup per client is in Connect via MCP; the live tool list and what each call costs are on aisa.one/mcp.
Set this endpoint up in your agent →

Request contract

Complete OpenAPI definition Effective request and pricing declaration (including authentication and referenced schemas):

Cost and request rules

Published reference price: $0.012 USD per successful request. Account-specific pricing and final settlement may differ. Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.
  • Default request reference estimate (USD): 0.012
  • Cost contract: fixed_success
  • Settlement evidence source: request_snapshot

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
date_ranges
object[]
required

The time window for the query. Provide one object with a modality preset. For a custom date range, set modality to custom_range and add a smart_datetime_range key in filters with {"min": "YYYY-MM-DD", "max": "YYYY-MM-DD"}.

Maximum array length: 1
filters
object
required

Key/value filter map to narrow the result set. Pass an empty object {} for no filters. Common filter keys are documented in the properties below; additional dimension-based filters may also be passed using the same key names as group_by[].name values. Refer to the Metrics and Dimensions Reference for a complete list.

group_by
object[]
required

The dimension to group results by (row dimension). Pass one object to break results down by that dimension. Pass an empty array [] for flat totals with no grouping.

Only one entry is supported. Refer to the Metrics and Dimensions Reference for valid dimension names.

Maximum array length: 1
group_by_totals_selected
boolean
required

When true, the response includes an aggregated totals row in addition to the per-dimension-value rows.

metrics
object[]
required

The metrics to query. Each object specifies which metric to measure and which date and user columns the engine should use for that metric. The smart_datetime_reference and smart_user_id_reference values are metric-specific — using the wrong values will return no data. Refer to the Metrics and Dimensions Reference for valid metric names and the correct reference fields for each.

Pass an empty array [] to return a response with no metric columns.

pivot_group_by_totals_selected
boolean
required

When true, the pivot response includes an aggregated totals column in addition to the per-pivot-value columns.

sorts
object[]
required

Sort order for the result rows. Only the first entry is applied. Pass an empty array [] to use the default order.

Sorting is supported by metric value — provide the metric field with the same structure as an entry in the metrics array. The asc field controls direction (true = ascending, false = descending).

Sorting by dimension value (e.g. alphabetically by user name) is not supported via the API.

min_ratio_denominator
integer
default:0

Minimum denominator threshold for ratio metrics. Rows where the denominator falls below this value are excluded from ratio calculations.

pivot_group_by
object[]

The dimension to pivot on (column dimension). Used together with group_by to produce a two-dimensional cross-tab table: group_by defines the row dimension and pivot_group_by defines the column dimension. Pass an empty array [] for non-pivot queries.

Only one entry is supported.

Maximum array length: 1
skip_group_by_values
string[]

Exclude specific dimension values from the result rows. Values must match the raw key field returned in bucket responses for the active group_by dimension (e.g. a contact stage ID string, a user ID string, or a date string for datetime dimensions). Maximum 500 entries.

Maximum array length: 500

Response

Successful response

report
object

Report result (shape depends on request).