{"id":10320,"date":"2026-08-30T07:10:00","date_gmt":"2026-08-30T05:10:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10320"},"modified":"2026-10-09T22:56:24","modified_gmt":"2026-10-09T20:56:24","slug":"matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/","title":{"rendered":"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200"},"content":{"rendered":"<p>Matomo can record data without a line of JavaScript: a single HTTP request to <code>matomo.php<\/code> can send a page view, an event or a goal. This provides a way to record activity a browser never sees, such as an order confirmed in the back office, a subscription cancelled by phone or a completed batch job.<\/p>\n<p>The property that makes it pleasant to use is also the one that makes it hard to debug. The endpoint answers almost every request the same way: HTTP 200 and an empty image, whether the hit was recorded, silently discarded or counted in the wrong site. Everything below is about telling those three apart without the response saying anything.<\/p>\n<figure class=\"lw-diagram\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/matomo-api-en.png?v=20260925\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"A request to matomo.php broken into its parameters, grouped into mandatory fields, attribution fields and fields that only work with an authentication token, with the response below: HTTP 200 and an empty image for recorded and discarded hits alike, HTTP 400 for an unknown idsite or token fields without a token\"><figcaption>Three groups of parameters: HTTP 200 and an empty image for recorded and discarded hits alike, HTTP 400 only for an unknown idsite and for token fields without a token.<\/figcaption><\/figure>\n<h2>What a Hit Needs at a Minimum<\/h2>\n<p>Three parameters decide whether anything is recorded at all: <code>idsite<\/code>, the site the hit belongs to, <code>rec=1<\/code>, which is the switch that turns a request into a recording, and something to name the hit &#8211; a <code>url<\/code>, an <code>action_name<\/code> or both. Without <code>rec=1<\/code> the request is answered exactly as before and nothing is stored.<\/p>\n<p>Everything else is optional in the sense that the hit survives without it, and rarely optional in the sense that the report stays useful. A hit without a URL appears in the reports without a name, which is the kind of entry that is discovered months later and can no longer be assigned to anything.<\/p>\n<h2>The Visitor Id Decides Everything Else<\/h2>\n<p>The parameter <code>_id<\/code> is a visitor identifier of exactly sixteen hexadecimal characters. Not fifteen, not a UUID with its dashes, not the thirty-two characters of an MD5 hash &#8211; Matomo silently ignores anything that does not match the format, and silently is the operative word.<\/p>\n<p>What happens then is worse than an error. Without a usable <code>_id<\/code>, Matomo derives the visitor from IP address and user agent. That works acceptably in a browser and collapses on a server: every hit arrives from the same address with the same client string, so the whole day&#8217;s traffic merges into a single visitor with a remarkable number of actions.<\/p>\n<p>A recognisable case of this is a report in which one visitor accounts for most of the events while the visit count stays flat. It is not a bot; it is a batch job without an identifier.<\/p>\n<h2>Custom Dimensions Are Only Numbers<\/h2>\n<p>Dimensions are sent as <code>dimension1<\/code>, <code>dimension2<\/code> and so on. The number identifies a slot that must already be configured in the Matomo interface, rather than naming the dimension. If that index has not been configured, the request is accepted but the dimension value is discarded.<\/p>\n<p>The second thing to get right is the scope. A dimension of visit scope holds one value per visit and is overwritten by every later hit that carries it; a dimension of action scope holds one value per action. A tariff name in the wrong scope produces either a value that changes with the last page view or one that cannot be used as a segment across the visit.<\/p>\n<h2>What Only a Server May Send<\/h2>\n<p>Some parameters change data that a request is not normally allowed to set: <code>cip<\/code> supplies the real visitor IP address, <code>cdt<\/code> sets a timestamp other than now, and geographic fields set location data. These require <code>token_auth<\/code>, except that <code>cdt<\/code> needs it only for timestamps more than 24 hours in the past. If the token is missing where required, Matomo rejects the entire request with HTTP 400.<\/p>\n<p>The token belongs on a server and nowhere else. In a browser it is readable by every visitor, and it does not grant reading rights but writing rights: anyone holding it can write arbitrary hits into the statistics, and there is no way to tell those apart afterwards. Where a page needs to send hits itself, it sends them without those parameters.<\/p>\n<p>With a token, Matomo also accepts older timestamps, as long as they do not fall behind the configured deletion period for raw data. A week of history can therefore be backfilled with <code>cdt<\/code>; the reports for the affected days then have to be reprocessed.<\/p>\n<h2>Why a Hit Disappears Without a Word<\/h2>\n<table style=\"width:100%;border-collapse:collapse\">\n<thead>\n<tr>\n<th style=\"white-space:nowrap;vertical-align:top\">Cause<\/th>\n<th>What is seen<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">Missing <code>rec=1<\/code><\/td>\n<td>Nothing at all, and the request looks completely normal.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">Wrong <code>idsite<\/code><\/td>\n<td>The hits land in the site that has this id; if no such site exists, Matomo answers with HTTP 400.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\"><code>_id<\/code> in the wrong format<\/td>\n<td>Every hit merges into one visitor, and the visit count stops rising.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\"><code>cdt<\/code> without a token<\/td>\n<td>Up to 24 hours back, the hit is recorded with the intended time; older timestamps are refused with HTTP 400.<\/td>\n<\/tr>\n<tr>\n<td style=\"white-space:nowrap;vertical-align:top\">Unconfigured dimension<\/td>\n<td>The hit is recorded, the dimension is not.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The check that ends most of these in a minute is the visits log with the real-time view open while the request is sent. A hit that appears there is recorded; one that does not was discarded, and the list above says where to look. The response never will.<\/p>\n<div class=\"lw-faq\">\n<h2>Questions and answers<\/h2>\n<h3>Where does a server get a valid _id when the same visitor is also tracked in the browser?<\/h3>\n<p>Ideally from the browser itself. Matomo&#8217;s JavaScript tracker stores the visitor ID in a cookie whose name starts with _pk_id; its value begins with exactly the sixteen hexadecimal characters that _id expects, followed by a dot and further data. If the request that triggers the server-side hit comes from that browser, the ID can be read there and passed along. Browser and server hits then end up with the same visitor.<\/p>\n<p>Where that route does not exist, as with a subscription cancelled by phone, a separate, stable identifier in the right format is enough. A common approach is to take the first sixteen hexadecimal characters of a hash of the customer number; the full thirty-two-character MD5 hash would be discarded. The same person then receives the same ID on every hit, without the customer number itself appearing in Matomo.<\/p>\n<p>Two caveats come with this. Such a hash remains a pseudonym and therefore personal data, and reading the cookie presupposes that the browser tracker was allowed to set one in the first place. Without consent, or with cookieless tracking, there is nothing to read.<\/p>\n<h3>Why do server-side hits all show the same location?<\/h3>\n<p>Because without cip Matomo uses the address of the request, which is that of the sending server. The location reports then show the data centre in which the batch job runs. The real visitor address can only be passed with cip, and therefore only together with token_auth.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.matomo.org\/api-reference\/tracking-api\" target=\"_blank\" rel=\"noopener noreferrer\">Matomo Tracking HTTP API<\/a><\/li>\n<li><a href=\"https:\/\/matomo.org\/docs\/\" target=\"_blank\" rel=\"noopener noreferrer\">Matomo user guides<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Sending hits to Matomo without JavaScript is a single HTTP request. What it needs at a minimum, why the visitor id decides everything, and the mistakes that make a hit disappear without a word.<\/p>\n","protected":false},"author":1,"featured_media":15134,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[91279,91237],"class_list":["post-10320","post","type-post","status-publish","format-standard","hentry","category-digital-analytics","tag-prywatnosc-danych-pl","tag-self-hosting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200 | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Server-side hits to matomo.php: the mandatory parameters, the sixteen hex characters of the visitor id, and why a wrong hit still returns 200.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200 | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Server-side hits to matomo.php: the mandatory parameters, the sixteen hex characters of the visitor id, and why a wrong hit still returns 200.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-30T05:10:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-09T20:56:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10320-the-matomo-tracking-api-answers-200--n.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200\",\"datePublished\":\"2026-08-30T05:10:00+00:00\",\"dateModified\":\"2026-10-09T20:56:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/\"},\"wordCount\":1108,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10320-the-matomo-tracking-api-answers-200--n.png\",\"keywords\":[\"Data Privacy\",\"Self-Hosting\"],\"articleSection\":[\"Digital Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/\",\"name\":\"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200 | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10320-the-matomo-tracking-api-answers-200--n.png\",\"datePublished\":\"2026-08-30T05:10:00+00:00\",\"dateModified\":\"2026-10-09T20:56:24+00:00\",\"description\":\"Server-side hits to matomo.php: the mandatory parameters, the sixteen hex characters of the visitor id, and why a wrong hit still returns 200.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10320-the-matomo-tracking-api-answers-200--n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10320-the-matomo-tracking-api-answers-200--n.png\",\"width\":1200,\"height\":630,\"caption\":\"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200 | Lukas Wojcik","description":"Server-side hits to matomo.php: the mandatory parameters, the sixteen hex characters of the visitor id, and why a wrong hit still returns 200.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/","og_locale":"en_US","og_type":"article","og_title":"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200 | Lukas Wojcik","og_description":"Server-side hits to matomo.php: the mandatory parameters, the sixteen hex characters of the visitor id, and why a wrong hit still returns 200.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-30T05:10:00+00:00","article_modified_time":"2026-10-09T20:56:24+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10320-the-matomo-tracking-api-answers-200--n.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200","datePublished":"2026-08-30T05:10:00+00:00","dateModified":"2026-10-09T20:56:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/"},"wordCount":1108,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10320-the-matomo-tracking-api-answers-200--n.png","keywords":["Data Privacy","Self-Hosting"],"articleSection":["Digital Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/","name":"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200 | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10320-the-matomo-tracking-api-answers-200--n.png","datePublished":"2026-08-30T05:10:00+00:00","dateModified":"2026-10-09T20:56:24+00:00","description":"Server-side hits to matomo.php: the mandatory parameters, the sixteen hex characters of the visitor id, and why a wrong hit still returns 200.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10320-the-matomo-tracking-api-answers-200--n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10320-the-matomo-tracking-api-answers-200--n.png","width":1200,"height":630,"caption":"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/matomo-tracking-api-server-side-hits-mandatory-parameters-and-the-mistakes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Matomo Tracking API: Server-Side Hits, Mandatory Parameters and the Mistakes That Still Return 200"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10320"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10320\/revisions"}],"predecessor-version":[{"id":21981,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10320\/revisions\/21981"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/15134"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}