get_report_schema
Returns the complete list of valid dimension keys, filter keys, and metric names forrun_performance_report, plus an authoritative definition for every metric. Call this first if you’re unsure which keys to use — the exact strings returned here are the accepted values for dimensions, filters, and sort_by. It is also the source of truth for “what metrics are available?”, “how is <metric> calculated?”, and “what custom metrics do I have?”.
Parameters: None.
Response fields:
The
metric_definitions entries describe how each metric is computed. For built-in metrics, unit is one of count, currency, percent, or ratio, and the human-readable formula is in the description (the formula field itself may be empty). For custom metrics (is_custom: true — this network’s user-defined metrics), the formula field is populated but unit may be empty. Custom metrics are distinct from the custom_payout_revenue entity.
run_performance_report
Queries aggregated performance data grouped by one or more dimensions. The primary tool for campaign analysis, partner comparison, and revenue reporting. Parameters:The
filters parameter uses comma-separated type:value strings — for example offer:123,affiliate:456,country_code:US. To match multiple values for the same ID filter, separate them with a pipe — offer:1|2|5 returns all three offers in a single query instead of running a separate report per offer. The type:value string form is the documented, preferred form here; a JSON-object form (e.g. {"offer":"1|2"}) is also accepted but should not be mixed with the string form in one call. (list_entities, by contrast, accepts only a JSON object.) See the filters accordion below for all valid keys.filters and metric_filters are different axes. filters narrows by dimension/entity values (offer, affiliate, country, sub1, …); metric_filters narrows by metric values (clicks, conversions, invalid_clicks, revenue, cvr, …). A metric name is not a valid filters key, and vice-versa.Percent metrics: cvr, ctr, and margin are expressed as percentages (e.g. 2.84 means 2.84%), not 0–1 fractions. In metric_filters, write cvr<2 to mean “CVR under 2%”. For “no invalid traffic”, use invalid_clicks<=0.run_performance_report uses total_rows (not total_matching) in its pagination envelope, which differs from list tools like list_offers and list_affiliates.has_more and result_capped are independent. has_more: true alone just means “page for the rest.” result_capped: true means the result is genuinely incomplete — to get complete data, narrow the date range, add more specific filters (e.g. a single affiliate or offer), or split the request into multiple smaller queries.applied_query object — the exact, resolved query that produced the rows, so you can audit a number and reproduce it in the portal rather than trust it blind. It echoes from, to, the resolved timezone and currency (after defaulting to the network’s settings when omitted), dimensions, and — when supplied — filters, metric_filters, and sort_by/sort_direction. Empty sections are omitted.
Timezone resolution. Everflow supports a fixed set of timezones. If you request a valid IANA zone that isn’t in that set, it’s resolved to the supported zone with identical day boundaries and DST rules (e.g.
America/Toronto → America/New_York) — the numbers are unaffected. When this happens, applied_query additionally carries timezone_requested (what you asked for) and a timezone_note explaining the mapping, so the resolved timezone isn’t mistaken for the request being ignored.metric_glossary object — inline one-line definitions for the metrics that are easy to misread, so methodology travels with the numbers instead of needing a separate get_report_schema call. It covers the conversion-counting family (conversions vs total_conversions vs events), revenue’s event inclusion, and the percent/ratio metrics (cvr, ctr, margin, roas) so 2.84 isn’t mistaken for a fraction.
And a totals object with every metric aggregated over the full matched set — all rows, before pagination and the display cap — computed server-side so you never sum rows yourself. Additive metrics (clicks, conversions, payout, revenue, …) are summed; the ratio metrics (cvr, roas, margin, …) are re-derived from those sums (e.g. overall cvr = Σtotal_conversions ÷ Σclicks), never averaged — so the totals stay correct even when only one page of rows is returned.
Period-over-period comparison
To answer “which offers/partners moved the most”, have the report compare two periods instead of running it twice and subtracting the numbers yourself. Setcomparison=previous_period (compares [from, to] against the equal-length window immediately before it) or pass an explicit compare_from/compare_to baseline (e.g. the same month last year).
Each row then carries, for every metric, an object of { current, prior, delta, pct_change } — all computed server-side. pct_change is null when the prior value was 0 (the change is undefined, not an infinite increase). Rank the movers with a delta sort key: sort_by accepts <metric>_delta and <metric>_pct_change (e.g. epc_delta, revenue_pct_change) in addition to the raw metric names.
Comparison mode is current-anchored. It ranks rows that were active in the current period against their prior-period values. An entity that had activity in the prior period but none in the current period is not returned — so comparison mode cannot answer “what did I lose”. For that, run an explicit report over the prior window on its own.Comparison mode requires
sort_by, does not support cursor (no pagination across a join), and cannot group by a time dimension (date, hour, month — a date never aligns across two windows). It is also bounded: if either period matches more rows than the comparison cap, the call returns an error asking you to narrow — add metric_filters (e.g. revenue>1000), add filters, or use fewer dimensions, rather than expecting truncation. The prior period is fetched scoped to the current period’s entities, so for single-dimension comparisons narrowing the current period is enough. With multiple dimensions the prior scope is per-dimension (a cross-product of the current ids), so a very active prior period can still exceed the cap — narrow further with filters or drop a dimension if it does.Available dimensions
Available dimensions
Pass one or more of these keys as a comma-separated
dimensions string. The schema (get_report_schema) also returns two aliases not listed below: smart_link (alias of campaign) and device (a general device dimension alongside device_type).TimeEntities
Geo
Device & Technology
Tracking & Attribution
People & Managers
Payout & Revenue
Sub-Parameters
App
Available filters
Available filters
Pass filters as comma-separated inclusive
type:value pairs — e.g. offer:123,affiliate:456,country_code:US. Only inclusive filters are supported — there is no exclusion syntax. status is not a supported filter or dimension on this tool; to filter conversions by status, use search_activity(type="conversion") instead.Multiple values (OR): for any ID filter, separate IDs with a pipe to match any of them in one query — offer:1|2|5 returns offers 1, 2, and 5 together. Repeating a key (offer:1,offer:2) does the same. Supported on the ID filters: offer, offer_group, affiliate, advertiser, creative, campaign, category, network, tracking_domain, channel. Prefer one multi-value query over many single-ID queries.Accepted aliases: the _id form and common synonyms are normalized to the canonical key, so you don’t have to guess — offer_id→offer, affiliate_id/partner→affiliate, advertiser_id/brand→advertiser, offer_group_id→offer_group, campaign_id/smart_link→campaign, and the error-code dimensions click_error_code/conversion_error_code→error_code (so you can filter by the same key you grouped a breakdown on). An unrecognized filter key returns an error with a suggestion rather than being silently ignored. Note: campaign is the smart-link/rotator entity; the individual ad campaign is an offer.EntitiesGeo —
region/city take internal numeric IDs; resolve a name to its ID with list_entities (type=region / type=city, and type=country for the country_id that scopes a region lookup).Device & Technology
People & Managers — numeric employee IDs; resolve a name with
list_entities type=employee.Sub-Parameters
Billing & Labels
Available metrics
Available metrics
These are also the valid values for the
sort_by parameter. Call get_report_schema for the same definitions in machine-readable form (metric_definitions), including any network-specific custom metrics.VolumeRevenue & Cost
Rates & Efficiency
cvr, ctr, and margin are percentages (e.g. 2.84 = 2.84%), and roas is a ratio. This matters in metric_filters: cvr<2 means “under 2%“.run_network_summary
Returns headline performance totals for a date range — no grouping, just aggregate numbers. Optionally includes a comparison against the prior equivalent period, and can be scoped to specific entities. Parameters:filters enables a filtered period comparison — pair it with include=comparison to answer “is offer 91 up or down vs last week?”. Only the entity keys above are supported here; for breakdowns by country / device / sub-parameter / error-code, use run_performance_report instead — those dimensions are not available on the summary.run_performance_report, the response carries an applied_query object echoing exactly what ran — from, to, the resolved timezone and currency, and any filters and include — so the totals can be audited and reproduced (empty sections omitted). Timezone resolution works the same way here (a requested zone that isn’t supported maps to its equivalent, surfaced via timezone_requested/timezone_note — see the note under run_performance_report). It also carries the same metric_glossary object of inline definitions for the easily-confused metrics.
search_activity
Searches raw event records within a date-time window. Settype to choose the event stream:
type="click"— raw click events. Maximum 14-day window, up to 1,000 records (not paginated).type="conversion"— conversion events. Minimum reliable window is one full day in the network timezone. Paginated viapage_size(1–100, default 50) andnext_cursor.
Results are automatically filtered by affiliate visibility. If your account has a limited affiliate scope, rows for affiliates outside that scope are silently excluded — counts may be lower than expected when querying without an
affiliate_id filter.
Type-specific parameters:
Response envelope:
Per-record fields (
type="click"): transaction_id, timestamp, offer_id, affiliate_id, advertiser_id, campaign_id, error_code, is_unique, payout, revenue, currency, country, sub1–sub10, source_id. campaign_id is returned only when the click is on a smart link.
Per-record fields (type="conversion"): conversion_id, transaction_id, timestamp, click_timestamp, status, error_code, offer_id, offer_name, affiliate_id, affiliate_name, advertiser_id, advertiser_name, payout, revenue, sale_amount, event_id, order_id, country, sub1–sub10, source_id. Fields that are empty/zero are omitted — coupon_code, is_scrub, event_name, and adv1–adv10 appear only when populated.
Single-event & transaction lookup
Single-event lookups are served by the genericget_entity tool (type="click", type="conversion", or type="transaction" for the full attribution chain). Response fields, listing filters, and guidance on choosing between these and search_activity are on Events & Attribution.