Skip to content
GDPR compliant. Hosted in DE.
14-day free trial →

API Reference

REST API with 230+ endpoints across the whole platform. Base URL: https://api.xictraq.com/api. Auth via Bearer token or X-API-Key header.

# Quickstart

Create an API key under Settings > API keys. The key starts with xtraq_ and is shown only once.

First API call
View in demo account →
$ curl -H "Authorization: Bearer xtraq_IHR_KEY" \
       https://api.xictraq.com/api/websites

[{"id":"019d7e3c-...","name":"Shop","url":"https://shop.invalid","is_up":true}]

Auth

Authorization: Bearer xtraq_... or X-API-Key: xtraq_...

Rate-Limit

1,200 req/min/user; optionally tighter per key

Permissions

read (GET) / write (POST/PUT/DELETE)

Resources

# Complete endpoint reference

Generated live from the OpenAPI spec — always current. The detailed examples further down cover the most common endpoints.

Loading …

# Plan Limits

RessourceFreeStarterBusinessAgency
Websites131050
Scans/h1030100300
Pageviews/Mo10k100k1M10M
Heartbeats210100Unbegr.
API-Endpoints—1025100
Keywords (noch nicht freigeschaltet)——50500
Team-Mitglieder—25Unbegr.
API-Keys10 (nur Geo)10 (nur Geo)1010
Rate-Limit1.200/min1.200/min1.200/min1.200/min

# Websites

# Scans

When the target site has bot protection enabled (Cloudflare, Imunify, Sucuri, etc.), uptime.waf_blocked and privacy.waf_blocked are set to true. Compliance checks like Impressum/Datenschutz return null instead of false — results cannot be reliably evaluated in this case. technology.waf shows the detected WAF (e.g. "Cloudflare", "Sucuri").
dns.ermittelt states per DNS query whether the name server answered. A flag such as has_spf is only a measurement when the matching entry in ermittelt is true — if the query went unanswered the flag stays false without the record being absent. Evaluate both fields together, otherwise a failed query turns into missing protection.

# Uptime & SSL

# Alerts

# Analytics (Starter+)

# E-commerce & shop data (Business)

Revenue, orders, products and the data from the Shopware 6 order import. The reports and shop data endpoints require the Business plan; the shop connection itself (shop-integration) does not, there only switching on the order import does. All endpoints can be used with an API key, writing ones only with the key’s write permission. Amounts ending in _minor are in cents. Imported orders without a tracker purchase count in revenue, orders, products and export, not in conversion, funnel and ROAS. Name, company and customer number from the import only appear with customer identification in the plan and never in a neutralised call. Share links never deliver customer data, neither from the import nor tracker identities (name, company, customer ID, external_user_id); the figures remain.

Leaving out cancellations: exclude_cancelled
By default every purchase the tracker reported counts, even if the order was cancelled in the shop later. With exclude_cancelled=1, /revenue, /analytics/revenue-aggregate, /ecommerce/order-log, /ecommerce/finance, /ecommerce/refunds, /ecommerce/categories, /ecommerce/products, /ecommerce/product-detail, /ecommerce/payment-shipping, /ecommerce/orders, /ecommerce/customers, /shop/summary, /shop/orders and the order export leave these tracker purchases out. A purchase counts as cancelled when the order the import matched to it has the order state cancelled, without a matched order by the state the order status fetch last read; a refund for the same order is left out with it. With both switched off the parameter changes nothing. It does not affect import rows, a cancelled order never gets one. Each of these responses carries cancelled_excluded.
Setup, the eight read permissions of the role, counting rules and error codes are described on the page Shop connection (Shopware 6).

# Heartbeats

# API Monitoring (Starter+)

# API keys (Business+, geo key on every plan)

permissions and scopes serve two different purposes: permissions controls the allowed HTTP methods (read = GET only, write = POST/PUT/PATCH/DELETE), while scopes unlocks individual function areas. The value geo in the scopes array is required for a key to use the Geo API — without it /geo responds with 403 scope_denied. The value neutral strips names, email addresses and phone numbers from every response of this key. The wildcard * covers all scopes but not neutral — neutralisation is always set explicitly. It does not cover the operator-side admin scope (cross-account read access) either; that one cannot be created through this endpoint. The plain key is returned only once in the response; afterwards only the key_prefix remains visible. A key whose only scope is geo is the exception to the Business requirement: it can be created, listed and revoked on every plan, but is then valid for /geo, /geo/batch and /geo/db only — on any other endpoint it responds with 403 scope_denied.

# Neutralised responses (GDPR)

Every endpoint can return its response without personal data: names, email addresses and phone numbers are removed, every other field stays untouched. Intended for downstream processing in a data warehouse, in a BI tool, or at a processor that does not need the personal data.

Three ways to switch it on

scope "scopes": ["read", "neutral"]
header X-Neutral: 1
query ?neutral=1

A key carrying the neutral scope is neutralised permanently, with no header and no parameter — that is the option for an access token you hand to a third party. Header and query parameter are the option for your own key when just a single call should come back without personal data. All three accept 1, true, ja or yes.

GET /team/invitations — normal

[
  {
    "id": "019d8f2a-…",
    "email": "team@firma.invalid",
    "role": "editor",
    "status": "accepted",
    "created_at": "2026-06-14T09:12:00Z"
  }
]

GET /team/invitations?neutral=1

[
  {
    "id": "019d8f2a-…",
    "email": null,
    "role": "editor",
    "status": "accepted",
    "created_at": "2026-06-14T09:12:00Z"
  }
]
The control is the response header X-Neutralisiert: 1. It is set on every response that was actually neutralised. If it is missing, the response contains personal data — regardless of what was requested. Anyone processing neutralised data should check this header rather than trust their own call.

What is removed

  • All email fields (email, owner_email, contact_email, recipient …)
  • All name fields (first_name, last_name, owner_name, customer_name …)
  • A bare name inside a person object (user, owner, member, contact …)
  • Phone numbers (phone, telefon, mobile …)
  • Email addresses inside free text become [entfernt]

What stays

  • All IDs, so records can still be joined
  • Website, monitor and key names — those are not personal data
  • All metrics, timestamps, status and plan fields
  • Structure and field names are unchanged — emptied fields are null
Limit of the detection: in free-text fields only email addresses are found and replaced. A person name sitting inside prose — in a note or an alert message, say — cannot be reliably detected as such and therefore remains. The mode only ever removes and never adds; an accidentally set switch can therefore not corrupt data, at worst it empties a field you needed.

# Geo API (Add-on)

Native, offline IP geolocation served straight from our own indexes — GDPR-compliant, with no live request to any third party. Data is sourced from open datasets. The Geo API is an add-on on every plan, including Free, booked in three volume tiers: Starter (50,000 lookups/month), Pro (500,000) and Business (3M). Without a booked add-on, 1,000 lookups per month are included for testing.

Authentication

API key with the geo scope. The Geo endpoints accept three ways to pass it — the ?key= query parameter is Geo-specific (server-friendly, header-independent):

query ?key=xtraq_…
header X-Api-Key: xtraq_…
header Authorization: Bearer xtraq_…
FieldMeaning
accuracy_radius_kmEstimated radius in km around the returned coordinates — not a point location.
confidenceConfidence per level (country/region/city), 0–100. Higher = more certain.
calling_codeInternational dialling prefix of the country as an integer without plus (e.g. 353 for Ireland).
currencyCountry currency as an object with code and symbol (e.g. code EUR, symbol €).
languagesOfficial and widely spoken languages of the country as an array of ISO 639-1 codes, main language first.
networkOwning network prefix in CIDR notation (e.g. 185.60.216.0/22).
rirResponsible Regional Internet Registry (RIPE, ARIN, APNIC, LACNIC, AFRINIC).
connection_typehosting, satellite, relay or isp — derived network class.
is_hosting / is_datacenterIP belongs to a hosting/data-centre range (server, not an end user).
is_anycastPrefix is announced via Anycast from multiple locations (e.g. DNS/CDN).
cloud_providerDetected cloud operator when the range maps unambiguously (incl. Azure; otherwise null).
is_relayiCloud Private Relay — anonymising Apple proxy.
is_vpn / is_torKnown VPN exit or Tor exit node.
is_satelliteSatellite internet (e.g. known satellite ASNs).
is_bogonPrivate/reserved IP (RFC 1918/6890) — not publicly routable.
abuse_scoreHeuristic abuse estimate 0–100 (higher = riskier). Not a real-time reputation service, only a guidance value. null when the reputation datasets could not be read.
riskClassification derived from abuse_score: low (<20), elevated (<50) or high; German values (niedrig/erhöht/hoch) when lang=de. null when no abuse_score is available.
is_euCountry is an EU member state (for GDPR / geo-blocking logic).
timezoneIANA time-zone identifier as a string; for ambiguous mappings the country main time zone is returned as a fallback.
time_zoneIANA time zone with UTC offset, DST flag and current local time.
HTTPerrorCause
401missing_api_keyNo API key supplied.
401invalid_api_keyKey unknown, inactive or expired.
403scope_deniedKey has no geo scope.
422invalid_ipip is not a valid IPv4/IPv6.
429rate_limitedPer-minute limit of the key exceeded.
429quota_exceededMonthly quota used up — upgrade the add-on.
503db_unavailableOffline database (.mmdb) is not available.
Accuracy note: IP geolocation is an estimate, not an exact positioning. City- and region-level data varies in precision depending on the network operator (see accuracy_radius_km and confidence). The data is built natively and offline from open sources and refreshed regularly.

# Invoices

# Referral Program

# VAT ID (VIES)

# Account

# Status Pages (all plans)

# Team & Agency

Invite team members (from Starter), manage the client portal (Agency), grant agency access (all plans).

# Browser Monitors (Business+)

Playwright-based multi-step scripts: check login flows, checkout and forms automatically.

# Reports & Templates (Business+)

Create and schedule automated reports and send them to recipients.

# Webhooks (Business+)

JSON POST on every alert. Events: alert.opened, alert.resolved. HMAC-SHA256 signature.

Webhook payload
View in demo account →
POST https://hooks.firma.invalid/xictraq
X-Xictraq-Event: alert.opened
X-Xictraq-Delivery: dlv_8f3a91c2d4e6f0a1
X-Xictraq-Signature: sha256=8f3a91...

{
  "event": "alert.opened",
  "delivered_at": "2026-06-20T09:14:07+00:00",
  "data": {
    "alert_id": "019d7e3c-...",
    "incident_id": "019d7e3c-...",
    "type": "downtime",
    "severity": "critical",
    "title": "HTTP 503",
    "message": "...",
    "website": { "id": "019d7e3c-..." },
    "is_resolved": false,
    "created_at": "2026-06-20T09:14:06+00:00"
  },
  "source": "XICTRAQ"
}

Frequently asked questions

API key as a Bearer token (Authorization: Bearer xtraq_...) or as an X-API-Key header. The Geo endpoints additionally accept the ?key= query parameter. Create keys under Settings > API Keys; each key starts with xtraq_ and is shown in plain text only once.
Start in 60 seconds

Let XICTRAQ watch your website.

Permanent free plan available. No credit card, no installation, no hidden fees.