pixellint

Matomo bulk requests account for PHP parsing and field-reader defaults.

The Tracking API records a hit when idsite is the website ID and rec is 1. Event and ecommerce dependencies apply to query hits and observable bulk entries. Exact matomo.php and piwik.php routes are recognized on Matomo Cloud and self-hosted domains.

The pinned matomo_php8 profile models bounded bracket trees, mapped sanitization and field-reader defaults for observable bulk entries. Independent controls execute PHP 8.3.35 with pinned Matomo source. Chronological advice compares explicit parseable cdt timestamps. Unknown deployment context, unsupported query forms and unmapped readers remain explicit gaps.

The official JavaScript tracker reports absent cookie support and browser plugins as 0, and present capabilities as 1. Those optional fields accept both values. Other values remain outside the reviewed producer profile; that format finding does not establish collector rejection.

What this pack matches

Hosts
matomo.cloud
Paths
/matomo.php, /piwik.php
Vendor docs
developer.matomo.org/api-reference/tracking-api

Bulk entries retain source-specific decoding.

Entries from body.requests[] reuse this pack's event contracts. Native maps use the bounded matomo_php8 server reader profile; unmapped readers remain informative.

Chronological advice compares only explicit parseable cdt timestamps and warns on a backward step. Missing or unresolved timestamps do not acquire an inferred clock.

{
  "source_field": "body.requests[]",
  "inherited_params": {
    "token_auth": "body.token_auth"
  },
  "encoding": "url_query",
  "inherited_overrides": true,
  "native_map": "matomo_php8",
  "check_chronological_order": true
}

Rules

Codes are stable. A finding in CI, MCP, or the playground lands on the same id.

Field Required What it checks Rule ids Source
idsite required It is the numeric Matomo site ID the hit is recorded against. The server requires a positive site ID before looking up its account configuration. Minimum numeric value: 1. Fix: Set `idsite` to the website ID from Matomo Administration. vendor.matomo.param.idsite.missing
vendor.matomo.param.idsite.empty
vendor.matomo.param.idsite.invalid
docs
rec required Matomo documents `rec=1` as required to record the request. Fix: Set `rec` to `1`. vendor.matomo.param.rec.missing
vendor.matomo.param.rec.empty
vendor.matomo.param.rec.invalid
docs
action_name recommended Matomo documents `action_name` as recommended. For page tracks it is the page title. Fix: Set `action_name` to the page title or action name. vendor.matomo.param.action_name.missing
vendor.matomo.param.action_name.empty
docs
url recommended Matomo documents `url` as recommended. It is the full URL of the current action. Fix: Send the absolute page URL in `url`. vendor.matomo.param.url.missing
vendor.matomo.param.url.empty
vendor.matomo.param.url.invalid
docs
_id recommended Matomo documents `_id` as recommended. It is a 16-character hexadecimal visitor ID. Fix: Send a stable 16-character hex visitor ID in `_id`. vendor.matomo.param._id.missing
vendor.matomo.param._id.empty
vendor.matomo.param._id.invalid
docs
rand recommended Matomo documents `rand` as recommended so the request is not cached. Fix: Send a unique `rand` on every hit. vendor.matomo.param.rand.missing
vendor.matomo.param.rand.empty
docs
apiv recommended Matomo documents `apiv=1` as the Tracking API version. Fix: Send `apiv=1`. vendor.matomo.param.apiv.missing
vendor.matomo.param.apiv.empty
vendor.matomo.param.apiv.invalid
docs
cid optional It forces the visitor ID. Matomo documents `cid` as a 16-character hexadecimal string. Fix: Send a 16-character hex visitor ID in `cid`, or use `_id` / `uid` instead. vendor.matomo.param.cid.empty
vendor.matomo.param.cid.invalid
docs
e_v optional It is the event value. Matomo documents it as a float or integer, not a string label. The official PHP float reader accepts signed decimal and exponent spellings. Fix: Send a number in `e_v`, such as `9.99`. vendor.matomo.param.e_v.empty
vendor.matomo.param.e_v.invalid
docs
e_c optional It is the event category. Matomo documents it as required for event tracking and forbids an empty value. Fix: Set `e_c` to the event category, such as `Videos`. vendor.matomo.param.e_c.empty docs
e_a optional It is the event action. Matomo documents it as required for event tracking and forbids an empty value. Fix: Set `e_a` to the event action, such as `Play`. vendor.matomo.param.e_a.empty docs
e_n optional It is the event name. Matomo documents `e_n` as optional and forbids an empty value when it is sent. Fix: Set `e_n` to the event name, or drop the empty pair. vendor.matomo.param.e_n.empty docs
idgoal optional It is the goal ID. Matomo documents `idgoal=0` as required for ecommerce cart and order hits. vendor.matomo.param.idgoal.empty docs
ec_id optional It is the unique ecommerce order id. Matomo documents it as required when tracking an ecommerce order. Fix: Set `ec_id` to the order id when `idgoal=0` is an order, not a cart update. vendor.matomo.param.ec_id.empty docs
revenue optional It is the grand total or goal conversion value. Matomo documents it as required when tracking an ecommerce order. The official PHP float reader accepts signed decimal and exponent spellings. Fix: Set `revenue` to a number, such as `19.99`, with no currency symbol. vendor.matomo.param.revenue.empty
vendor.matomo.param.revenue.invalid
docs
urlref optional It is the HTTP referrer URL. Matomo documents `urlref` as the full referrer used for channel attribution. Fix: Send the absolute referrer URL in `urlref`, or drop the empty pair. vendor.matomo.param.urlref.empty
vendor.matomo.param.urlref.invalid
docs
uid optional It is the User ID. Matomo documents `uid` as any non-empty unique string identifying the logged-in user. Fix: Send the logged-in user id in `uid`, or drop the empty pair. vendor.matomo.param.uid.empty docs
res optional It is the device resolution. Matomo documents `res` as width x height, such as `1280x1024`. Fix: Send `res` as `WIDTHxHEIGHT` digits, such as `1280x1024`. vendor.matomo.param.res.empty
vendor.matomo.param.res.invalid
docs
h optional It is the current hour in local time. Minimum numeric value: 0. Maximum numeric value: 23. Fix: Send the local hour in `h` as an integer. vendor.matomo.param.h.empty
vendor.matomo.param.h.invalid
docs
m optional It is the current minute in local time. Minimum numeric value: 0. Maximum numeric value: 59. Fix: Send the local minute in `m` as an integer. vendor.matomo.param.m.empty
vendor.matomo.param.m.invalid
docs
s optional It is the current second in local time. Minimum numeric value: 0. Maximum numeric value: 59. Fix: Send the local second in `s` as an integer. vendor.matomo.param.s.empty
vendor.matomo.param.s.invalid
docs
cookie optional The pinned JavaScript tracker sends `1` when cookies are supported and `0` when they are unavailable. The server reads the flag as an integer with default zero. Fix: Send `cookie=1` for cookie support, `cookie=0` for no support, or omit the optional flag. vendor.matomo.param.cookie.empty
vendor.matomo.param.cookie.invalid
docs
new_visit optional If set to `1`, Matomo forces a new visit for this action. Fix: Send `new_visit=1` to force a new visit, or omit the pair. vendor.matomo.param.new_visit.empty
vendor.matomo.param.new_visit.invalid
docs
ping optional If set to `1`, the request is a heartbeat that only updates visit duration. Fix: Send `ping=1` for a heartbeat, or omit the pair. vendor.matomo.param.ping.empty
vendor.matomo.param.ping.invalid
docs
pv_id optional It identifies actions on one page view. Matomo documents `pv_id` as six characters from `[0-9a-Z]`. Fix: Send a six-character alphanumeric `pv_id`, shared by events on the same page view. vendor.matomo.param.pv_id.empty
vendor.matomo.param.pv_id.invalid
docs
search optional It is the site-search keyword. Matomo documents that a hit with `search` is tracked as a site search, not a pageview. Fix: Send the search keyword in `search`, or drop the empty pair. vendor.matomo.param.search.empty docs
search_count optional It is how many site-search results were shown. Matomo documents `search_count=0` for keywords with no results. Fix: Send the result count in `search_count` as an integer, including `0`. vendor.matomo.param.search_count.empty
vendor.matomo.param.search_count.invalid
docs
pdf… optional The pinned JavaScript tracker sends `1` for a present browser plugin and `0` for an absent plugin. The core server reads these supported plugin flags as integers with default zero. Fix: Send `1` for a present plugin, `0` for an absent plugin, or omit the optional flag. vendor.matomo.param.pdf.empty
vendor.matomo.param.pdf.invalid
docs
c_n optional It is the content name. Matomo documents `c_n` on content impressions and interactions. Fix: Send the content name in `c_n`, such as `Ad Foo Bar`. vendor.matomo.param.c_n.empty docs
c_p optional It is the content piece. Matomo documents `c_p` as the path to the image, video, audio, or text. Fix: Send the content piece in `c_p`, or drop the empty pair. vendor.matomo.param.c_p.empty docs
c_t optional It is the content target. Matomo documents `c_t` as the landing-page URL. Fix: Send an absolute landing URL in `c_t`, or drop the empty pair. vendor.matomo.param.c_t.empty
vendor.matomo.param.c_t.invalid
docs
c_i optional It is the content interaction, such as `click`. Matomo documents `c_i` together with `c_n`. Fix: Send the interaction name in `c_i`, such as `click`. vendor.matomo.param.c_i.empty docs
ec_items optional It is the JSON array of cart or order rows. Matomo documents each row as sku, name, category, price, quantity. Fix: Send `ec_items` as a JSON array of item rows, such as `["sku","name","cat",11.11,2]`. docs
ec_st optional It is the ecommerce subtotal, excluding shipping. The official PHP float reader accepts signed decimal and exponent spellings. Fix: Send `ec_st` as a number, with no currency symbol. vendor.matomo.param.ec_st.empty
vendor.matomo.param.ec_st.invalid
docs
ec_tx optional It is the tax amount of the ecommerce order. The official PHP float reader accepts signed decimal and exponent spellings. Fix: Send `ec_tx` as a number, with no currency symbol. vendor.matomo.param.ec_tx.empty
vendor.matomo.param.ec_tx.invalid
docs
ec_sh optional It is the shipping cost of the ecommerce order. The official PHP float reader accepts signed decimal and exponent spellings. Fix: Send `ec_sh` as a number, with no currency symbol. vendor.matomo.param.ec_sh.empty
vendor.matomo.param.ec_sh.invalid
docs
ec_dt optional It is the discount offered on the ecommerce order. The official PHP float reader accepts signed decimal and exponent spellings. Fix: Send `ec_dt` as a number, with no currency symbol. vendor.matomo.param.ec_dt.empty
vendor.matomo.param.ec_dt.invalid
docs
_pkc optional It is the category of the product being viewed. Fix: Send the product category in `_pkc`, or drop the empty pair. vendor.matomo.param._pkc.empty docs
_pks optional It is the SKU of the product being viewed. Fix: Send the product SKU in `_pks`, or drop the empty pair. vendor.matomo.param._pks.empty docs
_pkn optional It is the name of the product being viewed. Fix: Send the product name in `_pkn`, or drop the empty pair. vendor.matomo.param._pkn.empty docs
_pkp optional It is the price of the product being viewed. The official PHP float reader accepts signed decimal and exponent spellings. Fix: Send `_pkp` as a number, with no currency symbol. vendor.matomo.param._pkp.empty
vendor.matomo.param._pkp.invalid
docs
pf_net… optional It is a page-performance metric in milliseconds. Matomo documents `pf_net`, `pf_srv`, `pf_tfr`, `pf_dm1`, `pf_dm2`, and `pf_onl`. Fix: Send the timing in milliseconds as an integer, such as `142`. vendor.matomo.param.pf_net.empty
vendor.matomo.param.pf_net.invalid
docs
link optional It is an outlink URL. Matomo documents `link` for tracking outbound clicks. Fix: Send an absolute URL in `link`. Matomo also recommends repeating it in `url`. vendor.matomo.param.link.empty
vendor.matomo.param.link.invalid
docs
download optional It is the URL of a file the user downloaded. Fix: Send an absolute file URL in `download`. Matomo also recommends repeating it in `url`. vendor.matomo.param.download.empty
vendor.matomo.param.download.invalid
docs
search_cat optional It is the site-search category. Matomo documents `search_cat` as optional when `search` is specified. Fix: Send the search category in `search_cat`, or drop the empty pair. vendor.matomo.param.search_cat.empty docs
ua optional It is an override for the User-Agent HTTP header. Matomo uses it to detect the operating system and browser. Fix: Send the full user-agent string in `ua`, or drop the empty pair. vendor.matomo.param.ua.empty docs
lang optional It is an override for the Accept-Language HTTP header. Matomo uses it to detect country when GeoIP is not enabled. Fix: Send the Accept-Language value in `lang`, or drop the empty pair. vendor.matomo.param.lang.empty docs
cs optional It is the charset of the page being tracked. Matomo defaults to `utf-8`. Fix: Send the page charset in `cs` when it is not `utf-8`, or drop the empty pair. vendor.matomo.param.cs.empty docs
ca optional It marks a custom action that is not a page view. Matomo documents `ca=1` on events and on Crash Analytics hits. Fix: Send `ca=1` on a non-pageview hit, or omit the pair. Do not send it with `ping=1`. vendor.matomo.param.ca.empty
vendor.matomo.param.ca.invalid
docs
_rcn optional It is the campaign name used to attribute goal conversions, not visits. Fix: Send the campaign name in `_rcn`, or drop the empty pair. vendor.matomo.param._rcn.empty docs
_rck optional It is the campaign keyword used to attribute goal conversions, not visits. Fix: Send the campaign keyword in `_rck`, or drop the empty pair. vendor.matomo.param._rck.empty docs
_cvar… optional It is a JSON object. Matomo documents `_cvar` as visit-scope custom variables, `cvar` as page-scope custom variables, and `uadata` as Client Hints. Fix: Send a JSON object, such as `{"1":["OS","iphone 5.0"]}`. docs
recMode optional It selects visit vs bot tracking. Matomo documents `1` as bot only and `2` as auto. Omit it for visit-only tracking. Fix: Send `recMode=1` or `recMode=2`, or omit the pair for visit-only tracking. vendor.matomo.param.recMode.empty
vendor.matomo.param.recMode.invalid
docs
bots optional If set to `1`, Matomo tracks a detected bot as a normal visit. Matomo documents `bots=1` only when `recMode` is omitted. Fix: Send `bots=1` without `recMode`, or omit the pair. vendor.matomo.param.bots.empty
vendor.matomo.param.bots.invalid
docs
http_status… optional It is bot-tracking telemetry. Matomo documents `http_status` as the HTTP status code and `bw_bytes` as bytes transferred. Fix: Send `http_status` or `bw_bytes` as an integer. vendor.matomo.param.http_status.empty
vendor.matomo.param.http_status.invalid
docs
source optional It is a source label for a bot request, such as `Cloudflare`. Fix: Send a source label in `source`, or drop the empty pair. vendor.matomo.param.source.empty docs
cra optional It is the crash error message. Matomo documents `cra` as required on a Crash Analytics hit. Fix: Send the error message in `cra`, and send `ca=1`. vendor.matomo.param.cra.empty docs
cra_st… optional It is optional crash metadata. Matomo documents `cra_st` as the stack trace, `cra_ct` as the category, `cra_tp` as the error type, and `cra_ru` as the source-file URI. Fix: Fill the crash field, or drop the empty pair. vendor.matomo.param.cra_st.empty docs
cra_rl… optional It is the source location of the crash. Matomo documents `cra_rl` as the line number and `cra_rc` as the column. Fix: Send `cra_rl` or `cra_rc` as an integer. vendor.matomo.param.cra_rl.empty
vendor.matomo.param.cra_rl.invalid
docs
dimension1… optional It is a custom dimension. Matomo documents `dimension1` through `dimension999`. Maximum decoded UTF-8 bytes: 255. Fix: Fill the custom dimension, or drop the empty pair. vendor.matomo.param.dimension1.empty
vendor.matomo.param.dimension1.invalid
docs
_idts optional The vendor documents `_idts` in the request contract. vendor.matomo.param._idts.empty
vendor.matomo.param._idts.invalid
docs
_idvc optional The vendor documents `_idvc` in the request contract. vendor.matomo.param._idvc.empty
vendor.matomo.param._idvc.invalid
docs
_viewts optional The vendor documents `_viewts` in the request contract. vendor.matomo.param._viewts.empty
vendor.matomo.param._viewts.invalid
docs
_ects optional The vendor documents `_ects` in the request contract. vendor.matomo.param._ects.empty
vendor.matomo.param._ects.invalid
docs
_refts optional The vendor documents `_refts` in the request contract. vendor.matomo.param._refts.empty
vendor.matomo.param._refts.invalid
docs
pf_srv optional The vendor documents `pf_srv` in the request contract. vendor.matomo.param.pf_srv.empty
vendor.matomo.param.pf_srv.invalid
docs
pf_tfr optional The vendor documents `pf_tfr` in the request contract. vendor.matomo.param.pf_tfr.empty
vendor.matomo.param.pf_tfr.invalid
docs
pf_dm1 optional The vendor documents `pf_dm1` in the request contract. vendor.matomo.param.pf_dm1.empty
vendor.matomo.param.pf_dm1.invalid
docs
pf_dm2 optional The vendor documents `pf_dm2` in the request contract. vendor.matomo.param.pf_dm2.empty
vendor.matomo.param.pf_dm2.invalid
docs
pf_onl optional The vendor documents `pf_onl` in the request contract. vendor.matomo.param.pf_onl.empty
vendor.matomo.param.pf_onl.invalid
docs
pf_blr optional The vendor documents `pf_blr` in the request contract. vendor.matomo.param.pf_blr.empty
vendor.matomo.param.pf_blr.invalid
docs
bw_bytes optional The vendor documents `bw_bytes` in the request contract. vendor.matomo.param.bw_bytes.empty
vendor.matomo.param.bw_bytes.invalid
docs
cra_rc optional The vendor documents `cra_rc` in the request contract. vendor.matomo.param.cra_rc.empty
vendor.matomo.param.cra_rc.invalid
docs
ag optional The vendor documents `ag` in the request contract. vendor.matomo.param.ag.empty
vendor.matomo.param.ag.invalid
docs
gears optional The vendor documents `gears` in the request contract. vendor.matomo.param.gears.empty
vendor.matomo.param.gears.invalid
docs
java optional The vendor documents `java` in the request contract. vendor.matomo.param.java.empty
vendor.matomo.param.java.invalid
docs
fla optional The vendor documents `fla` in the request contract. vendor.matomo.param.fla.empty
vendor.matomo.param.fla.invalid
docs
qt optional The vendor documents `qt` in the request contract. vendor.matomo.param.qt.empty
vendor.matomo.param.qt.invalid
docs
realp optional The vendor documents `realp` in the request contract. vendor.matomo.param.realp.empty
vendor.matomo.param.realp.invalid
docs
wma optional The vendor documents `wma` in the request contract. vendor.matomo.param.wma.empty
vendor.matomo.param.wma.invalid
docs
dir optional The vendor documents `dir` in the request contract. vendor.matomo.param.dir.empty
vendor.matomo.param.dir.invalid
docs
send_image optional The vendor documents `send_image` in the request contract. vendor.matomo.param.send_image.empty
vendor.matomo.param.send_image.invalid
docs
queuedtracking optional The vendor documents `queuedtracking` in the request contract. vendor.matomo.param.queuedtracking.empty
vendor.matomo.param.queuedtracking.invalid
docs
country optional The vendor documents `country` in the request contract. vendor.matomo.param.country.empty
vendor.matomo.param.country.invalid
docs
region optional The vendor documents `region` in the request contract. vendor.matomo.param.region.empty docs
city optional The vendor documents `city` in the request contract. vendor.matomo.param.city.empty docs
token_auth optional The vendor documents `token_auth` in the request contract. vendor.matomo.param.token_auth.empty docs
cra_ct optional The vendor documents `cra_ct` in the request contract. vendor.matomo.param.cra_ct.empty docs
cra_tp optional The vendor documents `cra_tp` in the request contract. vendor.matomo.param.cra_tp.empty docs
cra_ru optional The vendor documents `cra_ru` in the request contract. vendor.matomo.param.cra_ru.empty docs
lat optional The vendor documents `lat` in the request contract. Minimum numeric value: -90. Maximum numeric value: 90. vendor.matomo.param.lat.empty
vendor.matomo.param.lat.invalid
docs
long optional The vendor documents `long` in the request contract. Minimum numeric value: -180. Maximum numeric value: 180. vendor.matomo.param.long.empty
vendor.matomo.param.long.invalid
docs
cip optional The vendor documents `cip` in the request contract. vendor.matomo.param.cip.empty docs
cdt optional The vendor documents `cdt` in the request contract. vendor.matomo.param.cdt.empty docs
cvar optional Matomo documents this URL-encoded JSON parameter. docs
uadata optional Matomo documents this URL-encoded JSON parameter. docs
ma_id optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_id.empty docs
ma_re optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_re.empty
vendor.matomo.param.ma_re.invalid
docs
ma_mt optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_mt.empty
vendor.matomo.param.ma_mt.invalid
docs
ma_ti optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_ti.empty docs
ma_pn optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_pn.empty docs
ma_st optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_st.empty
vendor.matomo.param.ma_st.invalid
docs
ma_le optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_le.empty
vendor.matomo.param.ma_le.invalid
docs
ma_ps optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_ps.empty
vendor.matomo.param.ma_ps.invalid
docs
ma_ttp optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_ttp.empty
vendor.matomo.param.ma_ttp.invalid
docs
ma_w optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_w.empty
vendor.matomo.param.ma_w.invalid
docs
ma_h optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_h.empty
vendor.matomo.param.ma_h.invalid
docs
ma_fs optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_fs.empty
vendor.matomo.param.ma_fs.invalid
docs
ma_se optional Presence diagnostic severity: error. Value diagnostic severity: error. vendor.matomo.param.ma_se.empty
vendor.matomo.param.ma_se.invalid
docs
event_requires_action required The hit sends an event category `e_c` without an event action `e_a`. Matomo documents both as required for event tracking. Fix: Set `e_a` to the event action, such as `Play`. vendor.matomo.event_requires_action docs
order_requires_revenue required Matomo ecommerce orders require a grand total in revenue and idgoal=0. Fix: Set `revenue` to the order grand total, and set `idgoal=0`. vendor.matomo.order_requires_revenue docs
content_interaction_requires_name required The hit sends a content interaction `c_i` without a content name `c_n`. Matomo documents both on a content interaction. Fix: Set `c_n` to the same content name as the impression, such as `Ad Foo Bar`. vendor.matomo.content_interaction_requires_name docs
ca_forbids_ping required The hit sends `ca` with `ping=1`. Matomo documents custom action as incompatible with a heartbeat. Fix: Drop `ca` from a heartbeat, or drop `ping=1` from a custom action. vendor.matomo.ca_forbids_ping docs
bot_requires_ua required The hit sets `recMode=1` without `ua`. Matomo documents the user-agent as required for bot-only tracking. Fix: Send the full user-agent string in `ua`. vendor.matomo.bot_requires_ua docs
bots_forbids_recMode required The hit sends `bots=1` with `recMode`. Matomo documents `bots=1` only in visit-only mode, when `recMode` is omitted. Fix: Drop `bots`, or drop `recMode`. vendor.matomo.bots_forbids_recMode docs
crash_requires_ca required The hit sends a crash message `cra` without `ca=1`. Matomo documents `ca=1` as required on a Crash Analytics hit. Fix: Send `ca=1` with `cra`. vendor.matomo.crash_requires_ca docs
override_ip_needs_auth required The request does not satisfy the documented override ip needs auth requirement. vendor.matomo.override_ip_needs_auth docs
ec_id_ecommerce_goal required Ecommerce orders and cart updates require idgoal=0. vendor.matomo.ec_id_ecommerce_goal docs
ec_items_ecommerce_goal required Ecommerce orders and cart updates require idgoal=0. vendor.matomo.ec_items_ecommerce_goal docs
ecommerce_requires_goal required Ecommerce orders and cart updates require idgoal=0. vendor.matomo.ecommerce_requires_goal docs
bot_requires_url required Bot-only tracking requires a page URL or a download URL. vendor.matomo.bot_requires_url docs
media_requires_identity_resource_type required Media Analytics tracking requires ma_id, ma_re and ma_mt. vendor.matomo.media_requires_identity_resource_type docs
cdt_timestamp_format required cdt uses a UTC YYYY-MM-DD HH:MM:SS datetime or a Unix timestamp. vendor.matomo.cdt_timestamp_format docs
cdt_calendar required cdt must be a valid calendar datetime. vendor.matomo.cdt_calendar docs
cdt_old_requires_auth required cdt older than24hours requires token_auth. vendor.matomo.cdt_old_requires_auth docs
cdt_old_datetime_requires_auth required cdt older than24hours requires token_auth. vendor.matomo.cdt_old_datetime_requires_auth docs
root optional Decoded body source: _cvar. Encoding: json. Native JSON type: object. vendor.matomo.body.root.invalid docs
invalid_slots… forbidden A custom variable slot uses a positive numeric index. The default slot count is configurable. Decoded body source: _cvar. Encoding: json. vendor.matomo.body.invalid_slots.forbidden docs
variable_slots… optional Each custom variable slot is a two-element name/value array. Decoded body source: _cvar. Encoding: json. Native JSON type: array. Minimum array items: 2. Maximum array items: 2. vendor.matomo.body.variable_slots.invalid docs
*[] optional Each custom variable name and value is a string of at most 200 characters. Empty strings can remove a variable. Decoded body source: _cvar. Encoding: json. Native JSON type: string. Maximum decoded characters: 200. vendor.matomo.body.*[].invalid docs
root optional Decoded body source: cvar. Encoding: json. Native JSON type: object. vendor.matomo.body.root.invalid docs
invalid_slots… forbidden A custom variable slot uses a positive numeric index. The default slot count is configurable. Decoded body source: cvar. Encoding: json. vendor.matomo.body.invalid_slots.forbidden docs
variable_slots… optional Each custom variable slot is a two-element name/value array. Decoded body source: cvar. Encoding: json. Native JSON type: array. Minimum array items: 2. Maximum array items: 2. vendor.matomo.body.variable_slots.invalid docs
*[] optional Each custom variable name and value is a string of at most 200 characters. Empty strings can remove a variable. Decoded body source: cvar. Encoding: json. Native JSON type: string. Maximum decoded characters: 200. vendor.matomo.body.*[].invalid docs
root optional Decoded body source: ec_items. Encoding: json. Native JSON type: array. vendor.matomo.body.root.invalid docs
[] optional Ecommerce items are positional arrays, with required SKU and up to four further fields. Decoded body source: ec_items. Encoding: json. Native JSON type: array. Minimum array items: 1. Maximum array items: 5. vendor.matomo.body.[].invalid docs
root optional Matomo accepts JSON-encoded User-Agent Client Hints. Decoded body source: uadata. Encoding: json. Native JSON type: object. vendor.matomo.body.root.invalid docs
architecture optional Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.architecture.invalid docs
bitness optional Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.bitness.invalid docs
model optional Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.model.invalid docs
platform optional Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.platform.invalid docs
platformVersion optional Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.platformVersion.invalid docs
uaFullVersion optional Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.uaFullVersion.invalid docs
mobile optional Decoded body source: uadata. Encoding: json. Native JSON type: boolean. vendor.matomo.body.mobile.invalid docs
wow64 optional Decoded body source: uadata. Encoding: json. Native JSON type: boolean. vendor.matomo.body.wow64.invalid docs
brands optional Decoded body source: uadata. Encoding: json. Native JSON type: array. vendor.matomo.body.brands.invalid docs
fullVersionList optional Decoded body source: uadata. Encoding: json. Native JSON type: array. vendor.matomo.body.fullVersionList.invalid docs
formFactors optional Decoded body source: uadata. Encoding: json. Native JSON type: array. vendor.matomo.body.formFactors.invalid docs
brands[] optional Decoded body source: uadata. Encoding: json. Native JSON type: object. vendor.matomo.body.brands[].invalid docs
fullVersionList[] optional Decoded body source: uadata. Encoding: json. Native JSON type: object. vendor.matomo.body.fullVersionList[].invalid docs
formFactors[] optional Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.formFactors[].invalid docs
[0] required SKU is required. The official tracker accepts string-like IDs and joins array-valued SKUs. Body scope: []. Decoded body source: ec_items. Encoding: json. Native JSON type: string or number or array. vendor.matomo.body.[0].missing
vendor.matomo.body.[0].empty
vendor.matomo.body.[0].invalid
docs
[1] optional Body scope: []. Decoded body source: ec_items. Encoding: json. Native JSON type: string or number or array. vendor.matomo.body.[1].invalid docs
[2] optional An item category can be a string or up to five categories. Body scope: []. Decoded body source: ec_items. Encoding: json. Native JSON type: string or array. Maximum array items: 5. vendor.matomo.body.[2].invalid docs
[2][] optional Body scope: []. Decoded body source: ec_items. Encoding: json. Native JSON type: string. vendor.matomo.body.[2][].invalid docs
[3] optional The official tracker accepts numeric item prices, including numeric strings. Body scope: []. Decoded body source: ec_items. Encoding: json. Native JSON type: number or string. vendor.matomo.body.[3].empty
vendor.matomo.body.[3].invalid
docs
[4] optional The official tracker accepts numeric quantities and converts them to an integer. Body scope: []. Decoded body source: ec_items. Encoding: json. Native JSON type: number or string. vendor.matomo.body.[4].empty
vendor.matomo.body.[4].invalid
docs
root optional Body scope: brands[]. Decoded body source: uadata. Encoding: json. Native JSON type: object. vendor.matomo.body.root.invalid docs
brand required Body scope: brands[]. Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.brand.missing
vendor.matomo.body.brand.invalid
docs
version required Body scope: brands[]. Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.version.missing
vendor.matomo.body.version.invalid
docs
root optional Body scope: fullVersionList[]. Decoded body source: uadata. Encoding: json. Native JSON type: object. vendor.matomo.body.root.invalid docs
brand required Body scope: fullVersionList[]. Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.brand.missing
vendor.matomo.body.brand.invalid
docs
version required Body scope: fullVersionList[]. Decoded body source: uadata. Encoding: json. Native JSON type: string. vendor.matomo.body.version.missing
vendor.matomo.body.version.invalid
docs
method required The Tracking HTTP API accepts GET or POST. Complete HTTP capture contract. vendor.matomo.http.method.missing
vendor.matomo.http.method.empty
vendor.matomo.http.method.invalid
docs
body_encoding optional Complete HTTP capture contract. Applies when {"kind":"any","conditions":[{"kind":"present","param":"body.requests"},{"kind":"value_in","param":"body_encoding","values":["json"]}]}. docs
bulk_method required Bulk Tracking requires HTTP POST. Complete HTTP capture contract. Applies when {"kind":"any","conditions":[{"kind":"present","param":"body.requests"},{"kind":"value_in","param":"body_encoding","values":["json"]}]}. vendor.matomo.http.bulk_method.missing
vendor.matomo.http.bulk_method.empty
vendor.matomo.http.bulk_method.invalid
docs
body required A bulk request uses a JSON object envelope. Complete HTTP capture contract. Applies when {"kind":"any","conditions":[{"kind":"present","param":"body.requests"},{"kind":"value_in","param":"body_encoding","values":["json"]}]}. Native JSON type: object. vendor.matomo.http.body.missing
vendor.matomo.http.body.invalid
docs
body.requests required Published API examples use a JSON array. The pinned PHP8 parser decodes objects as associative arrays and iterates their members identically. Empty collections are accepted without an invented minimum count. Complete HTTP capture contract. Applies when {"kind":"any","conditions":[{"kind":"present","param":"body.requests"},{"kind":"value_in","param":"body_encoding","values":["json"]}]}. Native JSON type: array or object. vendor.matomo.http.body.requests.missing
vendor.matomo.http.body.requests.invalid
docs
body.token_auth optional The outer bulk token uses the official PHP string reader. Empty, false, null and the PHP-empty string 0 permit per-item fallback. Permission checks remain external. Complete HTTP capture contract. Applies when {"kind":"any","conditions":[{"kind":"present","param":"body.requests"},{"kind":"value_in","param":"body_encoding","values":["json"]}]}. docs
root optional The pinned PHP8 server accepts query strings and native parameter maps. Non-array scalars become empty requests, and empty maps/arrays are ignored. Native fields use the opt-in source-backed reader; unknown plugin or precision-sensitive conversions remain explicit information findings. Complete HTTP capture contract. Capture scope: body.requests[]. Native JSON type: string or object or array or number or boolean or null. vendor.matomo.http.root.invalid docs

Validate a payload

pixellint validate url "$ARTIFACT" --rulepack vendor/matomo

Try this failing payload in the playground. Matomo Cloud hit missing idsite.

https://example.matomo.cloud/matomo.php?rec=1

cargo install pixellint · npm install pixellint