{"id":8815,"date":"2026-08-05T15:36:49","date_gmt":"2026-08-05T13:36:49","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=8815"},"modified":"2026-10-20T15:01:43","modified_gmt":"2026-10-20T13:01:43","slug":"ga4-anomaly-detector","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/","title":{"rendered":"GA4 Anomaly Detector"},"content":{"rendered":"<link rel=\"stylesheet\" href=\"\/blog\/wp-content\/themes\/lw-theme\/js\/analytics-workbench.css?v=20260927a\">\n<div id=\"lw-analytics-workbench\" data-kind=\"anomaly\" data-rc-private data-mp-mask><\/div>\n<p><script type=\"application\/json\" id=\"lw-analytics-config\">{\"client\": \"Public OAuth Web client ID\", \"quota\": \"Quota project ID (optional)\", \"loadLogin\": \"Load Google login\", \"login\": \"Sign in with Google\", \"disconnect\": \"Disconnect and clear\", \"clear\": \"Clear local data\", \"cancel\": \"Cancel\", \"loading\": \"Loading\u2026\", \"done\": \"Completed.\", \"loginReady\": \"Login loaded. Click Sign in with Google.\", \"loginWaiting\": \"Waiting for Google. Allow popups or use a regular browser tab.\", \"connected\": \"Connected with read-only access.\", \"disconnected\": \"Local results cleared; Google permission remains until revoked in the Google account.\", \"popup\": \"Google login was closed or blocked.\", \"authError\": \"Login missing, expired or permission not granted.\", \"clientInvalid\": \"A Web application client ID is required, not a project ID or secret.\", \"setupTitle\": \"OAuth setup and limits\", \"setup\": \"The prefilled Web OAuth client can be replaced. An own client needs https:\/\/www.lukaswojcik.com as an authorized JavaScript origin, Analytics Data API and a configured consent screen. Only analytics.readonly is requested, with no cloud-platform or AI permission. The optional quota project requires appropriate access. Cancellation stops local waiting; Google may continue processing an accepted request.\", \"privacyOAuth\": \"Google login loads only on click. API calls go directly from this browser to Google. Tokens and reports stay in tab memory; no report proxy or browser storage is used. Tracking, session recording and chat are disabled here. Normal website access logs remain. Explicit CSV downloads stay on the device.\", \"property\": \"Numeric GA4 property ID\", \"start\": \"Start date\", \"end\": \"End date\", \"loadProperties\": \"Load properties\", \"choose\": \"Choose\u2026\", \"demo\": \"Try invented example\", \"demoTitle\": \"Invented example\", \"demoNotice\": \"Example data only. No Google request was sent.\", \"auditRun\": \"Audit acquisition data\", \"auditSummary\": \"Sum of reported session values\", \"auditLimits\": \"The percentage uses the sum of the returned rows, not a separate property total. Up to 50,000 rows; incomplete pagination is rejected. Sampling, thresholding and (other) can hide detail: inspect the metadata. Case and whitespace variants are review candidates, not proof of a tracking error. (not set) alone does not prove missing consent or lost UTMs. No historical data is changed.\", \"source\": \"Source\", \"medium\": \"Medium\", \"campaign\": \"Campaign\", \"channel\": \"Channel\", \"sessions\": \"Sessions\", \"findings\": \"Review flags\", \"noFlag\": \"No rule matched\", \"unassigned\": \"Unassigned channel\", \"notSet\": \"Contains (not set)\", \"other\": \"Aggregated (other) row\", \"variant0\": \"Source variants\", \"variant1\": \"Medium variants\", \"variant2\": \"Campaign variants\", \"spaces0\": \"Source whitespace\", \"spaces1\": \"Medium whitespace\", \"spaces2\": \"Campaign whitespace\", \"metadata\": \"API metadata and quota\", \"export\": \"Download comparison dates as CSV\", \"previewLimit\": \"Preview limited to 500 rows; download contains all rows.\", \"snapshotA\": \"Snapshot A \u00b7 before \/ reference\", \"snapshotB\": \"Snapshot B \u00b7 after \/ comparison\", \"capture\": \"Read configuration\", \"saveSnapshot\": \"Save snapshot JSON\", \"loadSnapshot\": \"Load local snapshot JSON\", \"needSnapshots\": \"Two valid snapshots are required.\", \"compare\": \"Compare\", \"differences\": \"Different fields\", \"setting\": \"Setting\", \"before\": \"A \u00b7 before\", \"after\": \"B \u00b7 after\", \"status\": \"Review result\", \"added\": \"Added\", \"removed\": \"Removed\", \"changed\": \"Changed\", \"configScope\": \"Compare two properties or two saved points in time. Coverage: property name, timezone, currency, industry and service level; event retention; stream names, types and website\/app identifiers; custom dimensions\/metrics; key events. No API secrets are requested or exported.\", \"configLimits\": \"A snapshot covers only the listed fields and is not a full backup or change history. Resource IDs, creation times and measurement IDs are excluded. Streams are matched by type and name, custom definitions by scope and parameter, key events by event name. Renaming a matching key appears as removal plus addition. Failed API reads do not produce a partial snapshot. Zero differences apply only to this scope.\", \"privacyCSV\": \"Files are read only in this browser, without login or upload. No CSV data goes to Google or this website\u2019s server. Tracking, session replay and chat are disabled here; normal page-access logs remain. Downloads are local files.\", \"csvContract\": \"Each file needs one row per order, an order ID, an amount and a three-letter currency code. Up to 5 MB and 20,000 data rows per file. Choose delimiter and decimal mark separately for each file. No thousands separators. IDs remain exact text, including leading zeros; surrounding whitespace is rejected. Amounts use exact decimal arithmetic.\", \"delimiter\": \"Field separator\", \"decimal\": \"Decimal mark in this file\", \"precision\": \"Decimal places (0, 2 or 3)\", \"tolerance\": \"Tolerance per order (dot decimal)\", \"comma\": \"Comma\", \"semicolon\": \"Semicolon\", \"shopFile\": \"Shop CSV\", \"analyticsFile\": \"Analytics CSV\", \"csvFile\": \"Local CSV file\", \"orderId\": \"Order ID\", \"amount\": \"Amount\", \"currency\": \"Currency\", \"rows\": \"data rows\", \"confirmBasis\": \"Both files use the same period, timezone and amount definition (tax, shipping, refunds). One row represents one order.\", \"csvLimits\": \"Duplicates are flagged, never silently added together. A currency mismatch is not converted. Negative amounts are allowed but must follow the agreed refund definition; this tool cannot infer it. Missing orders do not by themselves prove broken tracking. Delta = Analytics minus shop. Equal means equal within the selected tolerance; it is not an audit of completeness. Exported CSV cells are protected against spreadsheet formulas.\", \"results\": \"Results\", \"shop\": \"Shop amount\", \"analytics\": \"Analytics amount\", \"shopCurrency\": \"Shop currency\", \"analyticsCurrency\": \"Analytics currency\", \"delta\": \"Difference\", \"shopRows\": \"Shop rows\", \"analyticsRows\": \"Analytics rows\", \"equal\": \"Equal within tolerance\", \"different\": \"Amount differs\", \"duplicate\": \"Duplicate ID\", \"shopOnly\": \"Only in shop\", \"analyticsOnly\": \"Only in Analytics\", \"currencyMismatch\": \"Currency differs\", \"reloadCSV\": \"Separator changed; reload this CSV file.\", \"cancelled\": \"Cancelled or timed out. No automatic retry.\", \"error\": \"Could not process the data. Check file format, permissions and API availability.\", \"errors\": {\"date\": \"Choose a valid completed date before today. The property timezone and data freshness must also be checked.\", \"property\": \"Use a numeric property ID, not a G- measurement ID.\", \"schema\": \"Unexpected or incomplete response schema. No result produced.\", \"duplicate\": \"Duplicate matching keys; no reliable comparison is possible.\", \"number\": \"Invalid or unsupported metric value. No partial comparison produced.\", \"snapshot\": \"Invalid snapshot format, unknown version or ambiguous keys.\", \"limit\": \"Row limit exceeded or pagination changed. No partial result is presented.\", \"size\": \"File exceeds 5 MB, 20,000 CSV rows or 100 columns.\", \"csv\": \"Invalid CSV: check separator, quoting, unique headers and column counts.\", \"empty\": \"No data rows found.\", \"mapping\": \"Assign three different columns per file.\", \"id\": \"Missing\/reserved ID, surrounding whitespace or invalid currency code.\", \"files\": \"Load both CSV files first.\", \"basis\": \"Confirm the common comparison basis first.\", \"needSnapshots\": \"Two valid snapshots are required.\", \"auth\": \"Login missing, expired or permission not granted.\", \"sdk\": \"Google login could not be loaded.\", \"quota\": \"Invalid quota project ID.\", \"http400\": \"Google rejected the request (400). Check dimensions, property and dates.\", \"http401\": \"Login missing, expired or permission not granted.\", \"http403\": \"Google denied access (403). Check enabled APIs, property permissions and quota project. A failed configuration section aborts the snapshot.\", \"http429\": \"Google quota exceeded (429). Retry later.\", \"threshold\": \"Choose 2, 2.5 or 3.\"}, \"cleared\": \"Local files, mappings and results cleared.\", \"locale\": \"en\", \"target\": \"Day to inspect (property reporting date)\", \"threshold\": \"Review threshold |z|\", \"scan\": \"Inspect selected day\", \"demoGap\": \"Try missing-day example\", \"method\": \"Compare one completed reporting day with the same weekday in each of the eight preceding weeks. The inspected day never enters its own baseline. The default is four calendar days ago to allow processing time; it is not a freshness guarantee. Choose a completed day in the property's reporting timezone. Seven metrics are read in one request, including keyEvents.\", \"interpretation\": \"These are descriptive review flags, not significance tests, probabilities or proof of a tracking fault. z = (observed value \u2212 baseline mean) \/ sample standard deviation, using eight reference values. Holidays, campaigns, trends and reporting changes can still explain a difference. A constant baseline gets a separate status without an invented z-score. Seven simultaneous checks can produce chance flags. Missing metadata or a result within the threshold does not prove complete measurement; inspect quota\/report metadata and data freshness.\", \"baselineDates\": \"Eight reference dates\", \"missingDays\": \"Required dates absent from the response\", \"incomplete\": \"Comparison withheld: missing dates are not treated as zero.\", \"inputDays\": \"Reported values for the nine comparison dates\", \"date\": \"Date\", \"missing\": \"Missing\", \"metric\": \"Metric\", \"actual\": \"Inspected day\", \"baselineMean\": \"Reference mean\", \"sampleSd\": \"Sample standard deviation\", \"score\": \"Descriptive z\", \"high\": \"Above threshold\", \"low\": \"Below threshold\", \"within\": \"Within threshold\", \"constantSame\": \"Constant baseline, unchanged\", \"constantChanged\": \"Changed from a constant baseline\", \"totalUsers\": \"Total users\", \"screenPageViews\": \"Page\/screen views\", \"keyEvents\": \"Key events\", \"eventCount\": \"Event count\", \"totalRevenue\": \"Total revenue\", \"engagementRate\": \"Engagement rate\", \"percentagePoints\": \"pp\", \"reportContext\": \"Reporting timezone \/ currency\", \"unknown\": \"Not provided\"}<\/script><script src=\"\/blog\/wp-content\/themes\/lw-theme\/js\/analytics-workbench-core.js?v=20260927a\"><\/script><script src=\"\/blog\/wp-content\/themes\/lw-theme\/js\/anomaly-core.js?v=20260928a\"><\/script><script src=\"\/blog\/wp-content\/themes\/lw-theme\/js\/anomaly-ui.js?v=20261020\"><\/script><\/p>\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/rest\/v1beta\/properties\/runReport\">Google runReport<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/api-schema\">Google Data API<\/a><\/li>\n<li><a href=\"https:\/\/www.itl.nist.gov\/div898\/handbook\/eda\/section3\/eda35h.htm\">NIST: Detection of Outliers<\/a><\/li>\n<\/ul>\n<h2>Practical articles<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/automated-data-quality-alerts-for-ga4-with-looker-studio-bigquery\/\">Automated Data Quality Alerts for GA4 with Looker Studio &amp; BigQuery<\/a><\/li>\n<li><a href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/ga4-alerts-on-small-numbers-threshold-interval-and-statistical-noise\/\">GA4 Alerts on Small Numbers: Threshold, Interval and Statistical Noise<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Detect sudden spikes and drops in standard GA4 metrics via the Analytics Data API using Z-score analysis.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":38,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[91297,91258],"class_list":["post-8815","page","type-page","status-publish","hentry","tag-data-quality","tag-google-analytics-4"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GA4 Anomaly Detector | Lukas Wojcik<\/title>\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\/toolbox\/ga4-anomaly-detector\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GA4 Anomaly Detector | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Detect sudden spikes and drops in standard GA4 metrics via the Analytics Data API using Z-score analysis.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-20T13:01:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\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\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/ga4-anomaly-detector\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/ga4-anomaly-detector\\\/\",\"name\":\"GA4 Anomaly Detector | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-05T13:36:49+00:00\",\"dateModified\":\"2026-10-20T13:01:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/ga4-anomaly-detector\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/ga4-anomaly-detector\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/ga4-anomaly-detector\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GA4 Anomaly Detector\"}]},{\"@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":"GA4 Anomaly Detector | Lukas Wojcik","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\/toolbox\/ga4-anomaly-detector\/","og_locale":"en_US","og_type":"article","og_title":"GA4 Anomaly Detector | Lukas Wojcik","og_description":"Detect sudden spikes and drops in standard GA4 metrics via the Analytics Data API using Z-score analysis.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-10-20T13:01:43+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/","name":"GA4 Anomaly Detector | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-05T13:36:49+00:00","dateModified":"2026-10-20T13:01:43+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/ga4-anomaly-detector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/"},{"@type":"ListItem","position":3,"name":"GA4 Anomaly Detector"}]},{"@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\/pages\/8815","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"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=8815"}],"version-history":[{"count":7,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/8815\/revisions"}],"predecessor-version":[{"id":20792,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/8815\/revisions\/20792"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/38"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=8815"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=8815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}