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.
$ curl -H "Authorization: Bearer xtraq_IHR_KEY" \
https://api.xictraq.com/api/websites
[{"id":"019d7e3c-...","name":"Shop","url":"https://shop.invalid","is_up":true}]# Complete endpoint reference
Generated live from the OpenAPI spec — always current. The detailed examples further down cover the most common endpoints.
Loading …
# Plan Limits
| Ressource | Free | Starter | Business | Agency |
|---|---|---|---|---|
| Websites | 1 | 3 | 10 | 50 |
| Scans/h | 10 | 30 | 100 | 300 |
| Pageviews/Mo | 10k | 100k | 1M | 10M |
| Heartbeats | 2 | 10 | 100 | Unbegr. |
| API-Endpoints | — | 10 | 25 | 100 |
| Keywords (noch nicht freigeschaltet) | — | — | 50 | 500 |
| Team-Mitglieder | — | 2 | 5 | Unbegr. |
| API-Keys | 10 (nur Geo) | 10 (nur Geo) | 10 | 10 |
| Rate-Limit | 1.200/min | 1.200/min | 1.200/min | 1.200/min |
# Websites
# Scans
# 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.
# Heartbeats
# API Monitoring (Starter+)
# API keys (Business+, geo key on every plan)
# 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
"scopes": ["read", "neutral"]X-Neutral: 1?neutral=1A 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"
}
]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
# 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):
?key=xtraq_…X-Api-Key: xtraq_…Authorization: Bearer xtraq_…| Field | Meaning |
|---|---|
| accuracy_radius_km | Estimated radius in km around the returned coordinates — not a point location. |
| confidence | Confidence per level (country/region/city), 0–100. Higher = more certain. |
| calling_code | International dialling prefix of the country as an integer without plus (e.g. 353 for Ireland). |
| currency | Country currency as an object with code and symbol (e.g. code EUR, symbol €). |
| languages | Official and widely spoken languages of the country as an array of ISO 639-1 codes, main language first. |
| network | Owning network prefix in CIDR notation (e.g. 185.60.216.0/22). |
| rir | Responsible Regional Internet Registry (RIPE, ARIN, APNIC, LACNIC, AFRINIC). |
| connection_type | hosting, satellite, relay or isp — derived network class. |
| is_hosting / is_datacenter | IP belongs to a hosting/data-centre range (server, not an end user). |
| is_anycast | Prefix is announced via Anycast from multiple locations (e.g. DNS/CDN). |
| cloud_provider | Detected cloud operator when the range maps unambiguously (incl. Azure; otherwise null). |
| is_relay | iCloud Private Relay — anonymising Apple proxy. |
| is_vpn / is_tor | Known VPN exit or Tor exit node. |
| is_satellite | Satellite internet (e.g. known satellite ASNs). |
| is_bogon | Private/reserved IP (RFC 1918/6890) — not publicly routable. |
| abuse_score | Heuristic 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. |
| risk | Classification 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_eu | Country is an EU member state (for GDPR / geo-blocking logic). |
| timezone | IANA time-zone identifier as a string; for ambiguous mappings the country main time zone is returned as a fallback. |
| time_zone | IANA time zone with UTC offset, DST flag and current local time. |
| HTTP | error | Cause |
|---|---|---|
| 401 | missing_api_key | No API key supplied. |
| 401 | invalid_api_key | Key unknown, inactive or expired. |
| 403 | scope_denied | Key has no geo scope. |
| 422 | invalid_ip | ip is not a valid IPv4/IPv6. |
| 429 | rate_limited | Per-minute limit of the key exceeded. |
| 429 | quota_exceeded | Monthly quota used up — upgrade the add-on. |
| 503 | db_unavailable | Offline database (.mmdb) is not available. |
# 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.
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"
}