Pricing for AI crawlers

War-Tracker is free for humans and for any bot that brings a human to us. AI training crawlers pay a USDC micropayment per request, on-chain, via the open x402 protocol. There are no API keys, no contracts, and no minimums — a bot pays per request and gets the resource on the very next response.

What costs money

Pricing is per-request, USDC-denominated, settled on Base mainnet (eip155:8453). All amounts are charged on top of the bot’s own gas; the facilitator covers gas via EIP-3009 transferWithAuthorization, so payments are signature-only on the bot side.

Path patternPriceAtomic unitsWhat you get
^/share/\d+(/[^/?]*)?/?$$0.0011000 µUSDCGeneric per-event article template at /share/{event_id}/{slug} (substitute any id/slug from /api/v1/events). Default response is SEO HTML with embedded JSON-LD @graph (NewsArticle + Event + VideoObject + FAQPage) for the requested event. Content-negotiable: Accept application/json returns the same JSON as /api/v1/events/{id}. One payment covers either representation. OpenAPI probe id 397003 is an audit example only.
^/api/v1/events/\d+/?$$0.0011000 µUSDCSingle event at /api/v1/events/{id}. Returns canonical JSON: scalar fields (id, date, country, event_type, lat/lng), headline, TL;DR, article paragraphs, full schema.org JSON-LD @graph (NewsArticle + Event + VideoObject + BreadcrumbList + FAQPage), thumbnail (free), media URL (paid via /media/{id}), transcript when available, FAQ, super-event metadata. Equivalent to /share/{id}/{slug} with Accept: application/json.
^/region/[^/?]+/?$$0.0011000 µUSDCRegion hub page at /region/{slug}. Aggregates conflict events for a single region (continent, sub-continent, or maritime bbox). HTML with embedded CollectionPage + Dataset JSON-LD that points back at /api/v1/events?region=… so agents can read the JSON-LD instead of scraping the DOM.
^/country/[^/?]+/?$$0.0011000 µUSDCCountry hub page at /country/{iso2}. Aggregates conflict events for a single sovereign nation, keyed by ISO-3166-1 alpha-2. HTML with embedded CollectionPage + Dataset JSON-LD pointing back at /api/v1/events?country={iso2}.
^/event-type/[^/?]+/?$$0.0011000 µUSDCEvent-type hub page at /event-type/{slug}. Aggregates events matching one classification slug (e.g. drone-strike, airstrike, skirmish). HTML with embedded CollectionPage + Dataset JSON-LD pointing back at /api/v1/events?event_type={slug}.
^/api/v1/vessels/\d+/?$$0.0011000 µUSDCSingle vessel identity by IMO. Returns scalar identity: name, MMSI, flag (ISO-3166-1 alpha-2), AIS type (e.g. `Tanker`, `Cargo`, `Fishing`), subtype (e.g. `Crude Oil Tanker`), commercial market (13-value enum: `WET BULK`, `DRY BULK`, `CONTAINER SHIPS`, …), overall length in metres, year built, and the boolean `sanctioned` / `watchlisted` rollups across OFAC, FCDO, EU, UANI, ASO, GAC, UN, SECO, MFAT, and the War-Tracker OSINT shadow-fleet watchlist. Free for browsers, AI-search crawlers (PerplexityBot, OAI-SearchBot, ChatGPT-User, Claude-User, …), and link-preview bots (facebookexternalhit, Twitterbot, Slackbot, …); paid via x402 for training-crawler UAs (GPTBot, ClaudeBot, CCBot, anthropic-ai, Bytespider, Google-Extended, …). Identity rows refresh on a 4-hour batch from the MarineTraffic upstream; for the latest AIS position call /api/v1/vessels/{imo}/position. Typical workflow: enumerate candidates via /api/v1/vessels/search → call this for full identity → /api/v1/vessels/{imo}/sanctions for per-body sanctions detail or /api/v1/vessels/{imo}/track for the recent AIS path. Returns 404 when the IMO is well-formed (7 digits, 1000000-9999999) but missing from our mirror.
^/api/v1/vessels/\d+/position/?$$0.0011000 µUSDCLatest AIS position for one vessel by IMO. Returns lat/lon (WGS84), speed over ground (`sog`, knots), course over ground (`cog`, degrees true 0-360), AIS destination string (free-form, operator-entered), captured-at UTC, and `age_seconds` since the ping was received. Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs (GPTBot, ClaudeBot, CCBot, …). AIS pings arrive every 1-180 s depending on vessel speed and satellite/terrestrial coverage — `age_seconds` >300 is normal in low-coverage areas like the open Indian Ocean, while <60 s is typical near coastlines and chokepoints. Median server latency is ~10-50 ms even on cold cache (`IX_mtvp_ship_captured` covering index). Returns 404 when the IMO has no position rows in our 7-day rolling AIS window. Pair with /api/v1/vessels/{imo}/track for the recent path polyline, or /api/v1/vessels/in-area for every vessel in a bbox.
^/api/v1/vessels/\d+/sanctions/?$$0.0011000 µUSDCSanctions + watchlist rollup for one vessel by IMO. Joins our internal mirrors of the 9 sanctioning bodies (OFAC, FCDO, EU, UANI, ASO, GAC, UN, SECO, MFAT) plus the War-Tracker OSINT shadow-fleet watchlist, and returns every body that has ever listed the vessel along with the listing date per body, plus structured watchlist context (`reason`, `severity`, `source`, first/last-updated UTC). Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs. Always returns 200 — for clean hulls `bodies` is an empty array and `watchlist` is null (NOT 404); the absence of listings is itself a useful signal for KYC / cargo-origin / vessel-vetting flows. Sanctions data refreshes daily at 02:00 UTC from the upstream OFAC SDN list, FCDO consolidated list, EU FSF, UANI tanker tracker, and the other 5 sources. Typical use case: KYC vetting, cargo-origin compliance, shadow-fleet research, insurance underwriting checks.
^/api/v1/vessels/search/?$$0.0022000 µUSDCFaceted vessel-identity search across the ~600k-vessel MarineTraffic mirror. Supports free-text `q` (matches name prefix, IMO, or MMSI), facet filters (`flag`/country_code, AIS `type`, `subtype`, `commercial_market_name`), boolean `sanctioned` and `watchlisted` flags, and numeric `min_length` (metres) / `min_year_built` filters. **Always enumerate legal facet values via the free /api/v1/vessels/facets endpoint before paying for /search** — otherwise probing unknown facet values burns $0.002 per miss and returns an empty page. Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs (GPTBot, ClaudeBot, CCBot, …). Cursor-based pagination — one paid call per page; the cursor is opaque (base64 JSON of `(last_seen_utc, ship_id)`) and encodes the original filter set, so pass it back bare on subsequent calls — DO NOT also repeat `q` / `flag` / `type` alongside the cursor (the server prefers the cursor's filters). Hard cap of 20 rows/page (vs the events corpus's 200) reflects the higher per-row indexing cost. Typical workflow: /facets → /search → /vessels/{imo}/position or /track for selected IMOs.
^/api/v1/events/?$$0.0055000 µUSDCPaginated event corpus at /api/v1/events (up to 200 rows per call).
^/api/v1/hormuz/summary/?$$0.0055000 µUSDCDaily aggregate analytics for the Strait of Hormuz transit feed (ShipTracker-sourced). Single paid call returns three rollups in one response: (a) `daily_counts` — per-UTC-day transit counts split by direction (`direction_0` / `direction_1` / `direction_unknown`), `total`, `sanctioned`, `watchlisted`, and `distinct_operators` for each day; (b) `top_operators` — top 10 operator companies by crossing count over the window with their `sanctioned_crossings` share; (c) `top_flags` — top 10 flag country codes (ISO-3166-1 alpha-2) by crossing count with their sanctioned-crossings share. `?days=` is rolling window in days, default 14, max 14 (the rolling-window cap on the underlying scrape). Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs. NOT paginated — the response is bounded by design (≤14 daily rows + ≤10 operators + ≤10 flags). Typical use case: weekly operator-concentration analysis, flag-shift detection (IR→PA, IR→MH, etc), sanctioned-fleet activity heatmap, energy-security throughput trends. For per-vessel transit detail use /api/v1/hormuz/crossings.
^/media/\d+/?$$0.0110000 µUSDCFull media bytes (photo or video) for an event at /media/{event_id}. Flat price.
^/api/v1/vessels/\d+/track/?$$0.01010000 µUSDCRecent AIS position polyline for one vessel by IMO. Response shape: `{imo, hours_requested, hours_effective, raw_points_in_window, downsample_step, points: [{captured_utc, lat, lon, sog, cog}, …]}` — ordered oldest-first so a client can plot the track without sorting. The `?hours=` parameter is currently clamped to 1 (anything wider is silently rolled back — the param stays in the route signature so we can ship longer windows as higher-priced tiers without a rename). When the raw window contains more than 1000 pings the response auto-downsamples evenly to ≤1000 points and reports `downsample_step` (e.g. `4` = every 4th raw ping kept) so the client can compute true gap densities. Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs. Returns 404 when the vessel has no position rows in the last 1 h. Typical workflow: see an anomalous AIS gap or destination change in /position → call this to reconstruct the actual path; for multi-vessel spatial analysis use /api/v1/vessels/in-area instead.
^/api/v1/vessels/in-area/?$$0.01010000 µUSDCDistinct vessels with at least one AIS ping inside a bounding box (`min_lat`/`min_lon`/`max_lat`/`max_lon` in WGS84) over the last `hours` hours. Page size locked at 10 vessels per paid call. Each row carries identity + last ping (`last_lat`, `last_lon`, `last_sog`, `last_cog`, `last_ping_utc`, `destination`) + the sanctioned/watchlisted booleans. Optional facet filters mirror /vessels/search: `flag`, `type`, `subtype`, `commercial_market_name`, `sanctioned`, `watchlisted`. Pagination is SNAPSHOT-based: the first call pins a `page.snapshot_utc` and returns a `next_cursor` encoding `(snapshot_utc, last_ping_utc, ship_id)`. **Every subsequent page MUST echo the cursor** so the result set stays consistent against the live AIS feed (vessels can't race ahead between pages). If `page.snapshot_utc` in a paginated response differs from your starting snapshot, your original has rotated out (stale snapshots >1 h old silently restart from a fresh one) — begin pagination again from page 1. bbox is hard-capped at 25°×25° to keep the underlying non-spatial scan bounded; `hours` is hard-capped at 1. Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs. Typical use case: chokepoint monitoring (Strait of Hormuz, South China Sea, Bosphorus, Suez approaches, Bab-el-Mandeb), new-arrival detection in port basins, sanctioned-vessel cluster detection.
^/api/v1/hormuz/crossings/?$$0.01010000 µUSDCPaginated feed of individual vessel transits through the Strait of Hormuz, sourced from the ShipTracker live AIS feed. One row per (vessel, direction, crossing-day). Each row carries `dt_utc` (UTC day), MMSI + resolved IMO, vessel name and shiptype, flag (`country_code`), operator company, deadweight tonnage (`dwt`), `direction` (0 or 1), `time1` / `time2` (ShipTracker first/second-cross timestamps), and the `sanctioned` / `watchlisted` flags resolved against our internal mirror of OFAC + 8 other bodies. Filters: `?date=YYYY-MM-DD` (single UTC day) OR `?days=` (rolling window, default 7, max 14); `?direction=` (0 or 1 — ShipTracker's convention is opaque, see /api/v1/vessels/facets for the actual distinct values present); `?country_code=` (vessel flag, ISO-3166-1 alpha-2); `?sanctioned=true|false` (filter to sanctioned hulls only). Cursor-based pagination at 10 rows/page (one paid call per page); cursor is opaque base64 JSON of `(dt, mmsi)` — pass it back bare as `?cursor=`. Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs. Typical use case: daily Iran shadow-fleet detection, tanker-flow analysis, choke-point throughput monitoring, sanctioned-vessel transit alerts. Pair with /api/v1/hormuz/summary for aggregate analytics over the same window.
^/api/v1/vessels/sanctioned/?$$0.02525000 µUSDCCursor-paginated sanctioned / shadow-fleet vessel feed. Each row carries identity (name, IMO, MMSI, flag, type, subtype, commercial market, year built, dimensions) + last-known AIS position (`last_lat`, `last_lon`, `last_sog`, `last_cog`, `last_ping_utc`, `last_destination`, `last_pos_age_seconds`) + the array of sanctioning bodies that have ever listed the vessel with their listing dates. Optional filters: `?body=` (one of `ofac`, `fcdo`, `uani`, `eu`, `aso`, `gac`, `un`, `seco`, `mfat`), `?active_only=true` (only currently-listed entries, excludes de-listings), and `?flag=` (ISO-3166-1 alpha-2 country code; use /api/v1/vessels/facets for the legal set). Hard cap of 10 rows/page — one paid call per page; rows ordered by IMO ascending so pagination is stable across daily rebuilds. Pass back `next_cursor` as `?cursor=` to fetch the next page. Free for browsers, AI-search crawlers, and link-preview bots; paid via x402 for training-crawler UAs. The full ~1.4 k-row dump costs ~$3.50 to walk (140 paid calls); for daily-delta workflows prefer filtering by `?active_only=true&body=ofac` or similar to bound the result set. Typical use case: nightly compliance mirror, shadow-fleet OSINT research, cargo-origin vetting, port-state-control pre-screening.

Atomic units are the on-wire integer (USDC has 6 decimals, so 1 USDC = 1,000,000 µUSDC). Prices may change; the table above is rendered live from the current gate configuration on every request. The machine-readable mirror is at /x402.json.

Who pays

The following user-agents are classified as AI training crawlers and must pay for paid surfaces: anthropic_ai, applebot_extended, bytespider, ccbot, claudebot, cohere_ai, diffbot, google_extended, gptbot, meta_externalagent.

Everyone else is free:

Free surfaces (even for training crawlers)

Discovery has to be free or this whole arrangement breaks. Training crawlers are explicitly allowed to fetch the policy, the sitemap, the OpenAPI spec, and the site root without paying: /, /about, /methodology, /robots.txt, /llms.txt, /sitemap.xml, /pricing, /x402, /x402.json, /api/v1/openapi.json, /api/v1/docs, /api/v1/redoc.

How to pay

The protocol is intentionally short:

  1. Make a normal HTTPS GET. We reply HTTP 402 Payment Required with a PAYMENT-REQUIRED header (base64 JSON) describing the price, network, asset, and our wallet.
  2. Sign a USDC transferWithAuthorization (EIP-3009) for that exact amount with your bot’s wallet. Base64 the payload, replay the request with a PAYMENT-SIGNATURE header.
  3. We forward the signature to the public facilitator at https://facilitator.xpay.sh, which verifies and settles on-chain. On success we return the resource with a PAYMENT-RESPONSE header containing the transaction hash.

Off-the-shelf clients handle all three steps. The Python SDK is pip install 'x402[httpx]'; the TypeScript fetch wrapper is @x402/fetch. Wire format, curl examples, replay protection, fail-closed behavior, and the kill switch are documented at /x402.

Facilitator economics

The 402 envelope offers buyers multiple facilitator routes; each charges a small per-tx fee on top of the base price (visible as +… µUSDC below). Sellers retain 100% of the base price net of the facilitator fee — buyers pay the uplift directly so seller revenue is unaffected by facilitator choice.

FacilitatorURLNetworks+fee per tx
xpay · xpayhttps://facilitator.xpay.shBase mainnet+0 µUSDC
cdp · Coinbase Developer Platform (auth)https://api.cdp.coinbase.com/platform/v2/x402Base mainnet, Polygon mainnet+1,000 µUSDC
payai · PayAIhttps://facilitator.payai.networkBase mainnet, Polygon mainnet, Avalanche C-Chain+1,000 µUSDC
dexter · Dexterhttps://x402.dexter.cashBase mainnet+0 µUSDC

Sample requests & responses

Real, captured probe + paid round-trips against this site — verbatim headers, decoded PAYMENT-REQUIRED / PAYMENT-SIGNATURE / PAYMENT-RESPONSE JSON, and an on-chain transaction hash for each settlement. Click a row to expand. Samples are regenerated on demand by scripts/capture_pricing_samples.py; the snapshot below was captured at 2026-05-16T22:16:59Z from buyer wallet 0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a against network eip155:8453 via facilitator https://facilitator.xpay.sh.

Long base64 wire-format fields (PAYMENT-REQUIRED, PAYMENT-SIGNATURE, PAYMENT-RESPONSE) are truncated with their middle-byte count for readability; the full decoded JSON for each is shown directly underneath.

Per-event article (/share/{id}/{slug}) — HTML · pattern /share/{event_id}/{slug} · on-chain: 0xf8364e79…f07717

1. Unauthenticated probe (training-bot User-Agent)

$ curl -i \
    -H 'User-Agent: GPTBot' \
    'https://war-tracker.com/share/397003/na'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)

< HTTP/2 402 Payment Required
< content-type: application/json
< content-length: 4018
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: <https://war-tracker.com/x402>; rel="payment", </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2…<5276 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< server: cloudflare
< vary: User-Agent
< x-payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2…<5276 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbef28fa890fb-HEL

Decoded PAYMENT-REQUIRED body (also returned verbatim as the response body):

{
  "accepts": [
    {
      "amount": "1000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x8B7243F652D3641F661619862157686992640b37",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:43114",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "headers": {
            "Accept": "text/html, application/json"
          },
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Numeric event id from /api/v1/events.",
                "pattern": "^[0-9]+$",
                "type": "string"
              },
              "slug": {
                "description": "URL slug (cosmetic — server canonicalises).",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "id": "12345",
            "slug": "syria-strike-2026-05-12"
          },
          "routeTemplate": "/share/:event_id/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...JSON-LD @graph with NewsArticle + Event + VideoObject...<article>headline + description + sources</article>...</html>  OR, with Accept: application/json, the /api/v1/events/{id} JSON payload (canonical_url, headline, jsonld_graph, media_url, thumbnail_url, transcript, faq, super_event, ...).",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered HTML article with embedded schema.org JSON-LD @graph (NewsArticle + Event + VideoObject + FAQPage). Send `Accept: application/json` to receive the same data as the /api/v1/events/{id} JSON payload instead.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Per-event article at /share/{id}/{slug}. Default response is the SEO-canonical HTML page with an embedded JSON-LD @graph (NewsArticle + VideoObject + FAQPage). Content-negotiable: send `Accept: application/json` or `application/ld+json` to receive the same data as a pure JSON payload (the same shape as /api/v1/events/{id}). One payment covers either representation.",
    "iconUrl": "https://war-tracker.com/favicon-1024.png",
    "mimeType": "text/html; charset=utf-8",
    "serviceName": "War-Tracker Event Article",
    "tags": [
      "news",
      "article",
      "conflict",
      "geopolitics",
      "osint"
    ],
    "url": "https://war-tracker.com/share/397003/na"
  },
  "x402Version": 2
}

2. Paid retry with PAYMENT-SIGNATURE

$ curl -i \
    -H 'User-Agent: GPTBot' \
    -H 'PAYMENT-SIGNATURE: <base64(json{x402Version,scheme,network,payload})>' \
    'https://war-tracker.com/share/397003/na'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> payment-signature: eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7…<4040 bytes>…cGUiOiJvYmplY3QifX19fQ==

< HTTP/2 200 OK
< content-type: text/html; charset=utf-8
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< x-content-type-options: nosniff
< link: </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…MDc4NGVmMzIyZjA3NzE3In0=
< server: cloudflare
< vary: User-Agent, accept-encoding
< x-payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…MDc4NGVmMzIyZjA3NzE3In0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< cf-ray: 9fcdbef3d8bc90fb-HEL

Decoded PAYMENT-SIGNATURE payload (EIP-3009 transferWithAuthorization over USDC):

{
  "x402Version": 2,
  "payload": {
    "authorization": {
      "from": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
      "to": "0x8B7243F652D3641F661619862157686992640b37",
      "value": "1000",
      "validAfter": "1778969177",
      "validBefore": "1778969837",
      "nonce": "0x56a026a82f137b4dd36b514ab0550b663f597ca256c3b51778f0bfa77968925b"
    },
    "signature": "0x70c8eab0b83c03db35cceeb122efe8cfc59fd47aeee6f6cf52b0d35fe5057adb030cc7db8829bb74b33a1fc34154e1738ed821d3ee9f41633eff107eacf1c00e1b"
  },
  "accepted": {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "1000",
    "payTo": "0x8B7243F652D3641F661619862157686992640b37",
    "maxTimeoutSeconds": 60,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    }
  },
  "resource": {
    "url": "https://war-tracker.com/share/397003/na",
    "description": "Per-event article at /share/{id}/{slug}. Default response is the SEO-canonical HTML page with an embedded JSON-LD @graph (NewsArticle + VideoObject + FAQPage). Content-negotiable: send `Accept: application/json` or `application/ld+json` to receive the same data as a pure JSON payload (the same shape as /api/v1/events/{id}). One payment covers either representation.",
    "mimeType": "text/html; charset=utf-8"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "headers": {
            "Accept": "text/html, application/json"
          },
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Numeric event id from /api/v1/events.",
                "pattern": "^[0-9]+$",
                "type": "string"
              },
              "slug": {
                "description": "URL slug (cosmetic — server canonicalises).",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "id": "12345",
            "slug": "syria-strike-2026-05-12"
          },
          "routeTemplate": "/share/:event_id/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...JSON-LD @graph with NewsArticle + Event + VideoObject...<article>headline + description + sources</article>...</html>  OR, with Accept: application/json, the /api/v1/events/{id} JSON payload (canonical_url, headline, jsonld_graph, media_url, thumbnail_url, transcript, faq, super_event, ...).",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered HTML article with embedded schema.org JSON-LD @graph (NewsArticle + Event + VideoObject + FAQPage). Send `Accept: application/json` to receive the same data as the /api/v1/events/{id} JSON payload instead.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  }
}

Decoded PAYMENT-RESPONSE (facilitator settlement receipt):

{
  "facilitator": "xpay",
  "network": "eip155:8453",
  "payer": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
  "success": true,
  "transaction": "0xf8364e7954b2ab61915143c35e1121b649f01846e3115a4740784ef322f07717"
}

Response body preview (14,260 bytes, text/html; charset=utf-8):

<title>30D ago - Military Withdrawal – Qasrak, Syria</title>

# Military Withdrawal – Qasrak, Syria
April 16, 2026 10:44 UTC
# TL;DR
On April 16, 2026 10:44 UTC, a Military Withdrawal was reported in Qasrak, Syria in Syria. The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground…
The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground presence that began in 2014.
# Frequently asked questions
Per-event article (/share/{id}/{slug}) — JSON via Accept negotiation · pattern /share/{event_id}/{slug} (with Accept: application/json) · on-chain: 0xbd2753dc…0b7ecc

1. Unauthenticated probe (training-bot User-Agent)

$ curl -i \
    -H 'User-Agent: GPTBot' \
    'https://war-tracker.com/share/397003/na'

> host: war-tracker.com
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> accept: application/json

< HTTP/2 402 Payment Required
< content-type: application/json
< content-length: 4018
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: <https://war-tracker.com/x402>; rel="payment", </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2…<5276 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< server: cloudflare
< vary: User-Agent
< x-payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2…<5276 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf1259810a0e-HEL

Decoded PAYMENT-REQUIRED body (also returned verbatim as the response body):

{
  "accepts": [
    {
      "amount": "1000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x8B7243F652D3641F661619862157686992640b37",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:43114",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "headers": {
            "Accept": "text/html, application/json"
          },
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Numeric event id from /api/v1/events.",
                "pattern": "^[0-9]+$",
                "type": "string"
              },
              "slug": {
                "description": "URL slug (cosmetic — server canonicalises).",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "id": "12345",
            "slug": "syria-strike-2026-05-12"
          },
          "routeTemplate": "/share/:event_id/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...JSON-LD @graph with NewsArticle + Event + VideoObject...<article>headline + description + sources</article>...</html>  OR, with Accept: application/json, the /api/v1/events/{id} JSON payload (canonical_url, headline, jsonld_graph, media_url, thumbnail_url, transcript, faq, super_event, ...).",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered HTML article with embedded schema.org JSON-LD @graph (NewsArticle + Event + VideoObject + FAQPage). Send `Accept: application/json` to receive the same data as the /api/v1/events/{id} JSON payload instead.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Per-event article at /share/{id}/{slug}. Default response is the SEO-canonical HTML page with an embedded JSON-LD @graph (NewsArticle + VideoObject + FAQPage). Content-negotiable: send `Accept: application/json` or `application/ld+json` to receive the same data as a pure JSON payload (the same shape as /api/v1/events/{id}). One payment covers either representation.",
    "iconUrl": "https://war-tracker.com/favicon-1024.png",
    "mimeType": "text/html; charset=utf-8",
    "serviceName": "War-Tracker Event Article",
    "tags": [
      "news",
      "article",
      "conflict",
      "geopolitics",
      "osint"
    ],
    "url": "https://war-tracker.com/share/397003/na"
  },
  "x402Version": 2
}

2. Paid retry with PAYMENT-SIGNATURE

$ curl -i \
    -H 'User-Agent: GPTBot' \
    -H 'PAYMENT-SIGNATURE: <base64(json{x402Version,scheme,network,payload})>' \
    'https://war-tracker.com/share/397003/na'

> host: war-tracker.com
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> accept: application/json
> payment-signature: eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7…<4040 bytes>…cGUiOiJvYmplY3QifX19fQ==

< HTTP/2 200 OK
< content-type: application/ld+json
< content-length: 1727
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…YTZhYTBmZTM4MGI3ZWNjIn0=
< server: cloudflare
< vary: User-Agent, accept-encoding
< x-payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…YTZhYTBmZTM4MGI3ZWNjIn0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf13dada0a0e-HEL

Decoded PAYMENT-SIGNATURE payload (EIP-3009 transferWithAuthorization over USDC):

{
  "x402Version": 2,
  "payload": {
    "authorization": {
      "from": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
      "to": "0x8B7243F652D3641F661619862157686992640b37",
      "value": "1000",
      "validAfter": "1778969182",
      "validBefore": "1778969842",
      "nonce": "0x2d99cd64ac36d9ac1dacaed35caedc9b506d8ebc93553de9b75d9b2e2f968296"
    },
    "signature": "0x2728ae7e6ee574bb046edd329054e6686f597ce7a56415e40120c230370196f8345101eccaf5a793df7373c36e3ce27e52f5708970d308608ecdb961144968f01c"
  },
  "accepted": {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "1000",
    "payTo": "0x8B7243F652D3641F661619862157686992640b37",
    "maxTimeoutSeconds": 60,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    }
  },
  "resource": {
    "url": "https://war-tracker.com/share/397003/na",
    "description": "Per-event article at /share/{id}/{slug}. Default response is the SEO-canonical HTML page with an embedded JSON-LD @graph (NewsArticle + VideoObject + FAQPage). Content-negotiable: send `Accept: application/json` or `application/ld+json` to receive the same data as a pure JSON payload (the same shape as /api/v1/events/{id}). One payment covers either representation.",
    "mimeType": "text/html; charset=utf-8"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "headers": {
            "Accept": "text/html, application/json"
          },
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Numeric event id from /api/v1/events.",
                "pattern": "^[0-9]+$",
                "type": "string"
              },
              "slug": {
                "description": "URL slug (cosmetic — server canonicalises).",
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "id": "12345",
            "slug": "syria-strike-2026-05-12"
          },
          "routeTemplate": "/share/:event_id/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...JSON-LD @graph with NewsArticle + Event + VideoObject...<article>headline + description + sources</article>...</html>  OR, with Accept: application/json, the /api/v1/events/{id} JSON payload (canonical_url, headline, jsonld_graph, media_url, thumbnail_url, transcript, faq, super_event, ...).",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "id": {
                    "description": "Numeric event id from /api/v1/events.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  },
                  "slug": {
                    "description": "URL slug (cosmetic — server canonicalises).",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered HTML article with embedded schema.org JSON-LD @graph (NewsArticle + Event + VideoObject + FAQPage). Send `Accept: application/json` to receive the same data as the /api/v1/events/{id} JSON payload instead.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  }
}

Decoded PAYMENT-RESPONSE (facilitator settlement receipt):

{
  "facilitator": "xpay",
  "network": "eip155:8453",
  "payer": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
  "success": true,
  "transaction": "0xbd2753dc8a05bd44bbf73f44319214fd984ddebfcc75165eca6aa0fe380b7ecc"
}

Response body preview (6,769 bytes, application/ld+json):

{
  "id": 397003,
  "url": "https://war-tracker.com/share/397003/military-withdrawal-qasrak-syria",
  "date": "2026-04-16T10:44:26",
  "modified": "2026-04-16T10:44:32",
  "event_type": "Military Withdrawal",
  "location": "Qasrak, Syria",
  "country": "SY",
  "country_name": "Syria",
  "lat": 36.8,
  "lng": 40.7,
  "has_media": true,
  "is_video": true,
  "source_url": null,
  "confidence": "HIGH",
  "description": "The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground presence that began in 2014.",
  "canonical_url": "https://war-tracker.com/share/397003/military-withdrawal-qasrak-syria",
  "headline": "Military Withdrawal – Qasrak, Syria",
  "region_slug": "middle-east",
  "media_url": "https://war-tracker.com/media/397003",
  "thumbnail_url": "https://war-tracker.com/video/thumb/397003",
  "tldr": "On April 16, 2026 10:44 UTC, a Military Withdrawal was reported in Qasrak, Syria in Syria. The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground…",
  "article_paragraphs": [
    "The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground presence that began in 2014."
  … (228 more lines)
Single event JSON (/api/v1/events/{id}) · pattern /api/v1/events/{event_id} · on-chain: 0x31f4dc46…610ada

1. Unauthenticated probe (training-bot User-Agent)

$ curl -i \
    -H 'User-Agent: GPTBot' \
    'https://war-tracker.com/api/v1/events/397003'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)

< HTTP/2 402 Payment Required
< content-type: application/json
< content-length: 5203
< access-control-allow-origin: *
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: <https://war-tracker.com/x402>; rel="payment", </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2…<6848 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< server: cloudflare
< vary: User-Agent
< x-payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2…<6848 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf294928e9e8-HEL

Decoded PAYMENT-REQUIRED body (also returned verbatim as the response body):

{
  "accepts": [
    {
      "amount": "1000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x8B7243F652D3641F661619862157686992640b37",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "2000",
      "asset": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:43114",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Numeric event id.",
                "pattern": "^[0-9]+$",
                "type": "string"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "event_id": "12345"
          },
          "routeTemplate": "/api/v1/events/:event_id",
          "type": "http"
        },
        "output": {
          "example": {
            "article_paragraphs": [
              "..."
            ],
            "canonical_url": "https://war-tracker.com/share/12345/syria-strike-2026-05-12",
            "confidence": "HIGH",
            "country": "SY",
            "country_name": "Syria",
            "date": "2026-05-12",
            "description": "Open-source posts described a strike on infrastructure ...",
            "event_type": "Strike",
            "faq": [
              {
                "a": "...",
                "q": "..."
              }
            ],
            "has_media": true,
            "headline": "Strike – Aleppo",
            "id": 12345,
            "is_video": false,
            "jsonld_graph": {
              "@context": "https://schema.org",
              "@graph": [
                "...NewsArticle, Event, VideoObject, BreadcrumbList, FAQPage..."
              ]
            },
            "lat": 36.2,
            "lng": 37.13,
            "location": "Aleppo",
            "media_url": "https://war-tracker.com/media/12345",
            "modified": "2026-05-12T17:32:00Z",
            "region_slug": "middle-east",
            "source_url": null,
            "super_event": {
              "name": "Russo-Ukrainian War",
              "startDate": "2022-02-24",
              "url": "..."
            },
            "thumbnail_url": "https://war-tracker.com/video/thumb/12345",
            "tldr": "On May 12, 2026 ...",
            "transcript": null
          },
          "type": "json"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "properties": {
                  "article_paragraphs": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "canonical_url": {
                    "type": "string"
                  },
                  "confidence": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "country": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "country_name": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "date": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "event_type": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "faq": {
                    "items": {
                      "properties": {
                        "a": {
                          "type": "string"
                        },
                        "q": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "has_media": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "headline": {
                    "type": "string"
                  },
                  "id": {
                    "type": "integer"
                  },
                  "is_video": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "jsonld_graph": {
                    "type": "object"
                  },
                  "lat": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "lng": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "location": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "media_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "modified": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "region_slug": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "source_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "super_event": {
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "startDate": {
                        "type": "string"
                      },
                      "url": {
                        "type": "string"
                      }
                    },
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "thumbnail_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tldr": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "transcript": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "id",
                  "canonical_url",
                  "jsonld_graph"
                ],
                "type": "object"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Single event at /api/v1/events/{id}. Returns canonical JSON: scalar fields (id, date, country, event_type, lat/lng), headline, TL;DR, article paragraphs, full schema.org JSON-LD @graph (NewsArticle + Event + VideoObject + BreadcrumbList + FAQPage), thumbnail (free), media URL (paid via /media/{id}), transcript when available, FAQ, super-event metadata. Equivalent to /share/{id}/{slug} with Accept: application/json.",
    "iconUrl": "https://war-tracker.com/favicon-1024.png",
    "mimeType": "application/json",
    "serviceName": "War-Tracker Event Detail",
    "tags": [
      "json",
      "schema-org",
      "jsonld",
      "knowledge-graph",
      "event-detail"
    ],
    "url": "https://war-tracker.com/api/v1/events/397003"
  },
  "x402Version": 2
}

2. Paid retry with PAYMENT-SIGNATURE

$ curl -i \
    -H 'User-Agent: GPTBot' \
    -H 'PAYMENT-SIGNATURE: <base64(json{x402Version,scheme,network,payload})>' \
    'https://war-tracker.com/api/v1/events/397003'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> payment-signature: eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7…<5604 bytes>…eXBlIjoib2JqZWN0In19fX0=

< HTTP/2 200 OK
< content-type: application/json
< content-length: 1727
< access-control-allow-origin: *
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…MzE5NmQ4ZDQ2NjEwYWRhIn0=
< server: cloudflare
< vary: User-Agent, accept-encoding
< x-payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…MzE5NmQ4ZDQ2NjEwYWRhIn0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf2a2c20e9e8-HEL

Decoded PAYMENT-SIGNATURE payload (EIP-3009 transferWithAuthorization over USDC):

{
  "x402Version": 2,
  "payload": {
    "authorization": {
      "from": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
      "to": "0x8B7243F652D3641F661619862157686992640b37",
      "value": "1000",
      "validAfter": "1778969185",
      "validBefore": "1778969845",
      "nonce": "0x25479761b06821108ad279a28f521d4551899405687057e402c708c17e294ae2"
    },
    "signature": "0x9c16e8c3141ffd10af178d91e10ad3464d55def8c87aa9999da4d8e6d91e78a938007deb42862d5342f49adfbc51f3bc7d7e18dc5f6902094848500a7f303fc01c"
  },
  "accepted": {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "1000",
    "payTo": "0x8B7243F652D3641F661619862157686992640b37",
    "maxTimeoutSeconds": 60,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    }
  },
  "resource": {
    "url": "https://war-tracker.com/api/v1/events/397003",
    "description": "Single event at /api/v1/events/{id}. Returns canonical JSON: scalar fields (id, date, country, event_type, lat/lng), headline, TL;DR, article paragraphs, full schema.org JSON-LD @graph (NewsArticle + Event + VideoObject + BreadcrumbList + FAQPage), thumbnail (free), media URL (paid via /media/{id}), transcript when available, FAQ, super-event metadata. Equivalent to /share/{id}/{slug} with Accept: application/json.",
    "mimeType": "application/json"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Numeric event id.",
                "pattern": "^[0-9]+$",
                "type": "string"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "event_id": "12345"
          },
          "routeTemplate": "/api/v1/events/:event_id",
          "type": "http"
        },
        "output": {
          "example": {
            "article_paragraphs": [
              "..."
            ],
            "canonical_url": "https://war-tracker.com/share/12345/syria-strike-2026-05-12",
            "confidence": "HIGH",
            "country": "SY",
            "country_name": "Syria",
            "date": "2026-05-12",
            "description": "Open-source posts described a strike on infrastructure ...",
            "event_type": "Strike",
            "faq": [
              {
                "a": "...",
                "q": "..."
              }
            ],
            "has_media": true,
            "headline": "Strike – Aleppo",
            "id": 12345,
            "is_video": false,
            "jsonld_graph": {
              "@context": "https://schema.org",
              "@graph": [
                "...NewsArticle, Event, VideoObject, BreadcrumbList, FAQPage..."
              ]
            },
            "lat": 36.2,
            "lng": 37.13,
            "location": "Aleppo",
            "media_url": "https://war-tracker.com/media/12345",
            "modified": "2026-05-12T17:32:00Z",
            "region_slug": "middle-east",
            "source_url": null,
            "super_event": {
              "name": "Russo-Ukrainian War",
              "startDate": "2022-02-24",
              "url": "..."
            },
            "thumbnail_url": "https://war-tracker.com/video/thumb/12345",
            "tldr": "On May 12, 2026 ...",
            "transcript": null
          },
          "type": "json"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "properties": {
                  "article_paragraphs": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "canonical_url": {
                    "type": "string"
                  },
                  "confidence": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "country": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "country_name": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "date": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "event_type": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "faq": {
                    "items": {
                      "properties": {
                        "a": {
                          "type": "string"
                        },
                        "q": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "has_media": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "headline": {
                    "type": "string"
                  },
                  "id": {
                    "type": "integer"
                  },
                  "is_video": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "jsonld_graph": {
                    "type": "object"
                  },
                  "lat": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "lng": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "location": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "media_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "modified": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "region_slug": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "source_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "super_event": {
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "startDate": {
                        "type": "string"
                      },
                      "url": {
                        "type": "string"
                      }
                    },
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "thumbnail_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tldr": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "transcript": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "id",
                  "canonical_url",
                  "jsonld_graph"
                ],
                "type": "object"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  }
}

Decoded PAYMENT-RESPONSE (facilitator settlement receipt):

{
  "facilitator": "xpay",
  "network": "eip155:8453",
  "payer": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
  "success": true,
  "transaction": "0x31f4dc463f111f97eeaed4c05c67a0ba7e9964f4cefe639b73196d8d46610ada"
}

Response body preview (6,769 bytes, application/json):

{
  "id": 397003,
  "url": "https://war-tracker.com/share/397003/military-withdrawal-qasrak-syria",
  "date": "2026-04-16T10:44:26",
  "modified": "2026-04-16T10:44:32",
  "event_type": "Military Withdrawal",
  "location": "Qasrak, Syria",
  "country": "SY",
  "country_name": "Syria",
  "lat": 36.8,
  "lng": 40.7,
  "has_media": true,
  "is_video": true,
  "source_url": null,
  "confidence": "HIGH",
  "description": "The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground presence that began in 2014.",
  "canonical_url": "https://war-tracker.com/share/397003/military-withdrawal-qasrak-syria",
  "headline": "Military Withdrawal – Qasrak, Syria",
  "region_slug": "middle-east",
  "media_url": "https://war-tracker.com/media/397003",
  "thumbnail_url": "https://war-tracker.com/video/thumb/397003",
  "tldr": "On April 16, 2026 10:44 UTC, a Military Withdrawal was reported in Qasrak, Syria in Syria. The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground…",
  "article_paragraphs": [
    "The U.S. has ended its military presence in Syria with the last convoy leaving Qasrak base in the northeast. Control of the area is now shifting to Syrian forces, effectively ending the U.S. ground presence that began in 2014."
  … (228 more lines)
Full media bytes (/media/{event_id}) · pattern /media/{event_id} · on-chain: 0x4de82197…ac82c7

1. Unauthenticated probe (training-bot User-Agent)

$ curl -i \
    -H 'User-Agent: GPTBot' \
    'https://war-tracker.com/media/397003'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)

< HTTP/2 402 Payment Required
< content-type: application/json
< content-length: 3451
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: <https://war-tracker.com/x402>; rel="payment"
< payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURi…<4508 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< server: cloudflare
< vary: User-Agent
< x-payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURi…<4508 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf364f828d62-HEL

Decoded PAYMENT-REQUIRED body (also returned verbatim as the response body):

{
  "accepts": [
    {
      "amount": "10000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x8B7243F652D3641F661619862157686992640b37",
      "scheme": "exact"
    },
    {
      "amount": "11000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "11000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "11000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "11000",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "11000",
      "asset": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:43114",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Numeric event id from /api/v1/events; check has_media=true before paying.",
                "pattern": "^[0-9]+$",
                "type": "string"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "event_id": "12345"
          },
          "routeTemplate": "/media/:event_id",
          "type": "http"
        },
        "output": {
          "example": "binary image/* or video/mp4 bytes; Content-Type reflects the underlying media (image/jpeg, image/png, video/mp4). Range requests supported on video responses.",
          "type": "bytes"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id from /api/v1/events; check has_media=true before paying.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id from /api/v1/events; check has_media=true before paying.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "application/octet-stream",
                "description": "Binary media bytes. The response `Content-Type` header carries the underlying MIME (image/jpeg, image/png, or video/mp4). Range requests are supported for video; check `has_media` and `is_video` on the matching /api/v1/events/{event_id} row before paying.",
                "format": "binary",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Full media bytes (photo or video) for an event at /media/{event_id}. Flat price.",
    "iconUrl": "https://war-tracker.com/favicon-1024.png",
    "mimeType": "application/octet-stream",
    "serviceName": "War-Tracker Event Media",
    "tags": [
      "media",
      "video",
      "photo",
      "evidence",
      "imagery"
    ],
    "url": "https://war-tracker.com/media/397003"
  },
  "x402Version": 2
}

2. Paid retry with PAYMENT-SIGNATURE

$ curl -i \
    -H 'User-Agent: GPTBot' \
    -H 'PAYMENT-SIGNATURE: <base64(json{x402Version,scheme,network,payload})>' \
    'https://war-tracker.com/media/397003'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> payment-signature: eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7…<3288 bytes>…cGUiOiJvYmplY3QifX19fQ==

< HTTP/2 200 OK
< content-type: video/mp4
< content-length: 5401350
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…NmU0OTBlZTBhYWM4MmM3In0=
< server: cloudflare
< vary: User-Agent
< x-payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…NmU0OTBlZTBhYWM4MmM3In0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf3879288d62-HEL

Decoded PAYMENT-SIGNATURE payload (EIP-3009 transferWithAuthorization over USDC):

{
  "x402Version": 2,
  "payload": {
    "authorization": {
      "from": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
      "to": "0x8B7243F652D3641F661619862157686992640b37",
      "value": "10000",
      "validAfter": "1778969188",
      "validBefore": "1778969848",
      "nonce": "0x08501ff25553a4000ea625fb87eddfd24a61dc7ab447087bc6781ef3e5e79d67"
    },
    "signature": "0x0fffd3b838f1e514c774354c52616f7c432173918dad7d672e64c910207ddd3f4ed3646b450b5089328c335a28662a0f4ceb5445280b910762954ef53bba3b8b1c"
  },
  "accepted": {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "10000",
    "payTo": "0x8B7243F652D3641F661619862157686992640b37",
    "maxTimeoutSeconds": 60,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    }
  },
  "resource": {
    "url": "https://war-tracker.com/media/397003",
    "description": "Full media bytes (photo or video) for an event at /media/{event_id}. Flat price.",
    "mimeType": "application/octet-stream"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Numeric event id from /api/v1/events; check has_media=true before paying.",
                "pattern": "^[0-9]+$",
                "type": "string"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "event_id": "12345"
          },
          "routeTemplate": "/media/:event_id",
          "type": "http"
        },
        "output": {
          "example": "binary image/* or video/mp4 bytes; Content-Type reflects the underlying media (image/jpeg, image/png, video/mp4). Range requests supported on video responses.",
          "type": "bytes"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id from /api/v1/events; check has_media=true before paying.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "event_id": {
                    "description": "Numeric event id from /api/v1/events; check has_media=true before paying.",
                    "pattern": "^[0-9]+$",
                    "type": "string"
                  }
                },
                "required": [
                  "event_id"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "application/octet-stream",
                "description": "Binary media bytes. The response `Content-Type` header carries the underlying MIME (image/jpeg, image/png, or video/mp4). Range requests are supported for video; check `has_media` and `is_video` on the matching /api/v1/events/{event_id} row before paying.",
                "format": "binary",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  }
}

Decoded PAYMENT-RESPONSE (facilitator settlement receipt):

{
  "facilitator": "xpay",
  "network": "eip155:8453",
  "payer": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
  "success": true,
  "transaction": "0x4de82197e5abe57ae01784f54c67223c2d84d199821145fbf6e490ee0aac82c7"
}

Response body preview (5,401,350 bytes, video/mp4):

(binary media — 5,401,350 bytes, Content-Type: video/mp4)
first-byte sniff: ISO BMFF (.mp4) box header
Country hub (/country/{ISO}) · pattern /country/{ISO} · on-chain: 0xab330ab9…306625

1. Unauthenticated probe (training-bot User-Agent)

$ curl -i \
    -H 'User-Agent: GPTBot' \
    'https://war-tracker.com/country/UA'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)

< HTTP/2 402 Payment Required
< content-type: application/json
< content-length: 3650
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: <https://war-tracker.com/x402>; rel="payment", </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiI1MDAiLCJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZF…<4788 bytes>…LCJ4NDAyVmVyc2lvbiI6Mn0=
< server: cloudflare
< vary: User-Agent
< x-payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiI1MDAiLCJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZF…<4788 bytes>…LCJ4NDAyVmVyc2lvbiI6Mn0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf441a645763-HEL

Decoded PAYMENT-REQUIRED body (also returned verbatim as the response body):

{
  "accepts": [
    {
      "amount": "500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x8B7243F652D3641F661619862157686992640b37",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:43114",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "iso2": {
                "description": "Country slug — either an ISO-3166-1 alpha-2 code (e.g. `UA`) or the lower-case English country name (e.g. `ukraine`). See /api/v1/countries for the canonical list of supported identifiers.",
                "type": "string"
              }
            },
            "required": [
              "iso2"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "iso2": "ukraine"
          },
          "routeTemplate": "/country/:iso2",
          "type": "http"
        },
        "output": {
          "example": "<html>...CollectionPage JSON-LD for country…<section>events aggregated for this country</section>...</html>",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "iso2": {
                    "description": "Country slug — either an ISO-3166-1 alpha-2 code (e.g. `UA`) or the lower-case English country name (e.g. `ukraine`). See /api/v1/countries for the canonical list of supported identifiers.",
                    "type": "string"
                  }
                },
                "required": [
                  "iso2"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "iso2": {
                    "description": "Country slug — either an ISO-3166-1 alpha-2 code (e.g. `UA`) or the lower-case English country name (e.g. `ukraine`). See /api/v1/countries for the canonical list of supported identifiers.",
                    "type": "string"
                  }
                },
                "required": [
                  "iso2"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered country hub HTML. Embeds CollectionPage + Dataset JSON-LD distribution that points back at /api/v1/events?country={iso2}.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Country hub page at /country/{iso2}. Aggregates conflict events for a single sovereign nation, keyed by ISO-3166-1 alpha-2. HTML with embedded CollectionPage + Dataset JSON-LD pointing back at /api/v1/events?country={iso2}.",
    "iconUrl": "https://war-tracker.com/favicon-1024.png",
    "mimeType": "text/html; charset=utf-8",
    "serviceName": "War-Tracker Country Hub",
    "tags": [
      "country",
      "iso3166",
      "nation",
      "borders",
      "sovereign"
    ],
    "url": "https://war-tracker.com/country/UA"
  },
  "x402Version": 2
}

2. Paid retry with PAYMENT-SIGNATURE

$ curl -i \
    -H 'User-Agent: GPTBot' \
    -H 'PAYMENT-SIGNATURE: <base64(json{x402Version,scheme,network,payload})>' \
    'https://war-tracker.com/country/UA'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> payment-signature: eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7…<3548 bytes>…eXBlIjoib2JqZWN0In19fX0=

< HTTP/2 200 OK
< content-type: text/html; charset=utf-8
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< x-content-type-options: nosniff
< link: </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…ZGMyOTg2M2Q2MzA2NjI1In0=
< server: cloudflare
< vary: User-Agent, accept-encoding
< x-payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…ZGMyOTg2M2Q2MzA2NjI1In0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< cf-ray: 9fcdbf456b645763-HEL

Decoded PAYMENT-SIGNATURE payload (EIP-3009 transferWithAuthorization over USDC):

{
  "x402Version": 2,
  "payload": {
    "authorization": {
      "from": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
      "to": "0x8B7243F652D3641F661619862157686992640b37",
      "value": "500",
      "validAfter": "1778969190",
      "validBefore": "1778969850",
      "nonce": "0x9f0c0faa1771999209a0a6b3250000e54667e35b71634ee28ed80aac552c793e"
    },
    "signature": "0x99407d481ecf6a6e3657e56bae66ccc99032e47d6fef287aa63470e2a1c6e7645016a0e0243451d42895ebfcc9c969fa5b7396d3f2b1aa2e73688fa6ec36fbd91b"
  },
  "accepted": {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "500",
    "payTo": "0x8B7243F652D3641F661619862157686992640b37",
    "maxTimeoutSeconds": 60,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    }
  },
  "resource": {
    "url": "https://war-tracker.com/country/UA",
    "description": "Country hub page at /country/{iso2}. Aggregates conflict events for a single sovereign nation, keyed by ISO-3166-1 alpha-2. HTML with embedded CollectionPage + Dataset JSON-LD pointing back at /api/v1/events?country={iso2}.",
    "mimeType": "text/html; charset=utf-8"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "iso2": {
                "description": "Country slug — either an ISO-3166-1 alpha-2 code (e.g. `UA`) or the lower-case English country name (e.g. `ukraine`). See /api/v1/countries for the canonical list of supported identifiers.",
                "type": "string"
              }
            },
            "required": [
              "iso2"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "iso2": "ukraine"
          },
          "routeTemplate": "/country/:iso2",
          "type": "http"
        },
        "output": {
          "example": "<html>...CollectionPage JSON-LD for country…<section>events aggregated for this country</section>...</html>",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "iso2": {
                    "description": "Country slug — either an ISO-3166-1 alpha-2 code (e.g. `UA`) or the lower-case English country name (e.g. `ukraine`). See /api/v1/countries for the canonical list of supported identifiers.",
                    "type": "string"
                  }
                },
                "required": [
                  "iso2"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "iso2": {
                    "description": "Country slug — either an ISO-3166-1 alpha-2 code (e.g. `UA`) or the lower-case English country name (e.g. `ukraine`). See /api/v1/countries for the canonical list of supported identifiers.",
                    "type": "string"
                  }
                },
                "required": [
                  "iso2"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered country hub HTML. Embeds CollectionPage + Dataset JSON-LD distribution that points back at /api/v1/events?country={iso2}.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  }
}

Decoded PAYMENT-RESPONSE (facilitator settlement receipt):

{
  "facilitator": "xpay",
  "network": "eip155:8453",
  "payer": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
  "success": true,
  "transaction": "0xab330ab9d523a9230f82ad73434147dcd5ca0cd92f30f5681dc29863d6306625"
}

Response body preview (16,039 bytes, text/html; charset=utf-8):

<title>Live conflict tracker — Ukraine — War-Tracker</title>

# Live conflict tracker — Ukraine
4,209 events recorded in the last 30 days in Ukraine. Top categories: Military Strike, Security Incident, Military Recruitment.
# Recent events (last 30 days)
- Military Strike – Kramatorsk-Druzhkovka front, Ukraine 2026-05-16
- Military Strike – Black Sea near Kinburn Spit, Ukraine 2026-05-16
- Military Strike – Kinburn Spit, Black Sea, Ukraine 2026-05-16
Region hub (/region/{slug}) · pattern /region/{slug} · on-chain: 0x99a977d6…7d0a60

1. Unauthenticated probe (training-bot User-Agent)

$ curl -i \
    -H 'User-Agent: GPTBot' \
    'https://war-tracker.com/region/middle-east'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)

< HTTP/2 402 Payment Required
< content-type: application/json
< content-length: 3730
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: <https://war-tracker.com/x402>; rel="payment", </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiI1MDAiLCJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZF…<4900 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< server: cloudflare
< vary: User-Agent
< x-payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiI1MDAiLCJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZF…<4900 bytes>…Ing0MDJWZXJzaW9uIjoyfQ==
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbf5cdfd71bf4-HEL

Decoded PAYMENT-REQUIRED body (also returned verbatim as the response body):

{
  "accepts": [
    {
      "amount": "500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x8B7243F652D3641F661619862157686992640b37",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:43114",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "slug": {
                "description": "Region slug (lowercase, dash-separated). See /api/v1/regions for the canonical list — includes continent slugs like `middle-east`, `eastern-europe` and maritime bbox slugs like `strait-of-hormuz`.",
                "type": "string"
              }
            },
            "required": [
              "slug"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "slug": "middle-east"
          },
          "routeTemplate": "/region/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...CollectionPage JSON-LD for region…<section>events aggregated for this region</section>...</html>",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "slug": {
                    "description": "Region slug (lowercase, dash-separated). See /api/v1/regions for the canonical list — includes continent slugs like `middle-east`, `eastern-europe` and maritime bbox slugs like `strait-of-hormuz`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "slug": {
                    "description": "Region slug (lowercase, dash-separated). See /api/v1/regions for the canonical list — includes continent slugs like `middle-east`, `eastern-europe` and maritime bbox slugs like `strait-of-hormuz`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered region hub HTML. Embeds CollectionPage + Dataset JSON-LD distribution that points back at /api/v1/events?region={slug}.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Region hub page at /region/{slug}. Aggregates conflict events for a single region (continent, sub-continent, or maritime bbox). HTML with embedded CollectionPage + Dataset JSON-LD that points back at /api/v1/events?region=… so agents can read the JSON-LD instead of scraping the DOM.",
    "iconUrl": "https://war-tracker.com/favicon-1024.png",
    "mimeType": "text/html; charset=utf-8",
    "serviceName": "War-Tracker Region Hub",
    "tags": [
      "region",
      "map",
      "geo",
      "atlas",
      "theatre"
    ],
    "url": "https://war-tracker.com/region/middle-east"
  },
  "x402Version": 2
}

2. Paid retry with PAYMENT-SIGNATURE

$ curl -i \
    -H 'User-Agent: GPTBot' \
    -H 'PAYMENT-SIGNATURE: <base64(json{x402Version,scheme,network,payload})>' \
    'https://war-tracker.com/region/middle-east'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> payment-signature: eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7…<3672 bytes>…eXBlIjoib2JqZWN0In19fX0=

< HTTP/2 200 OK
< content-type: text/html; charset=utf-8
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< x-content-type-options: nosniff
< link: </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…ZDQ0MjNlNjdjN2QwYTYwIn0=
< server: cloudflare
< vary: User-Agent, accept-encoding
< x-payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…ZDQ0MjNlNjdjN2QwYTYwIn0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< cf-ray: 9fcdbf5e0b501bf4-HEL

Decoded PAYMENT-SIGNATURE payload (EIP-3009 transferWithAuthorization over USDC):

{
  "x402Version": 2,
  "payload": {
    "authorization": {
      "from": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
      "to": "0x8B7243F652D3641F661619862157686992640b37",
      "value": "500",
      "validAfter": "1778969194",
      "validBefore": "1778969854",
      "nonce": "0x8eb9951ae6af9175b719e622a09559153c1b8f03d436fcb04bc939c01bc25ade"
    },
    "signature": "0x72f6b0b862b282552c99468726ba74d49a1afffe26dd4e13961d6c9fdf6ed1e27b734489292dafabec0c80d3980f54e42a1664feff2af57bbd5cb9734a1530f81c"
  },
  "accepted": {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "500",
    "payTo": "0x8B7243F652D3641F661619862157686992640b37",
    "maxTimeoutSeconds": 60,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    }
  },
  "resource": {
    "url": "https://war-tracker.com/region/middle-east",
    "description": "Region hub page at /region/{slug}. Aggregates conflict events for a single region (continent, sub-continent, or maritime bbox). HTML with embedded CollectionPage + Dataset JSON-LD that points back at /api/v1/events?region=… so agents can read the JSON-LD instead of scraping the DOM.",
    "mimeType": "text/html; charset=utf-8"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "slug": {
                "description": "Region slug (lowercase, dash-separated). See /api/v1/regions for the canonical list — includes continent slugs like `middle-east`, `eastern-europe` and maritime bbox slugs like `strait-of-hormuz`.",
                "type": "string"
              }
            },
            "required": [
              "slug"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "slug": "middle-east"
          },
          "routeTemplate": "/region/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...CollectionPage JSON-LD for region…<section>events aggregated for this region</section>...</html>",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "slug": {
                    "description": "Region slug (lowercase, dash-separated). See /api/v1/regions for the canonical list — includes continent slugs like `middle-east`, `eastern-europe` and maritime bbox slugs like `strait-of-hormuz`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "slug": {
                    "description": "Region slug (lowercase, dash-separated). See /api/v1/regions for the canonical list — includes continent slugs like `middle-east`, `eastern-europe` and maritime bbox slugs like `strait-of-hormuz`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered region hub HTML. Embeds CollectionPage + Dataset JSON-LD distribution that points back at /api/v1/events?region={slug}.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  }
}

Decoded PAYMENT-RESPONSE (facilitator settlement receipt):

{
  "facilitator": "xpay",
  "network": "eip155:8453",
  "payer": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
  "success": true,
  "transaction": "0x99a977d6411eeca1a26cdb298dc5c17659b395b0ddb504a79d4423e67c7d0a60"
}

Response body preview (16,098 bytes, text/html; charset=utf-8):

<title>Live conflict tracker — Middle East — War-Tracker</title>

# Live conflict tracker — Middle East
14,148 events recorded in the last 30 days across Middle East. Top categories: Military Strike, Security Incident, Political Development. Most affected: Iran, Lebanon, Israel.
# Recent events (last 30 days)
- Security Incident – Beit Shemesh, Israel 2026-05-16
- Security Incident – Tabriz and Isfahan, Iran 2026-05-16
- Military Strike – Near Hadatha, Lebanon 2026-05-16
Event-type hub (/event-type/{slug}) · pattern /event-type/{slug} · on-chain: 0x0a1c2d1a…96a1ba

1. Unauthenticated probe (training-bot User-Agent)

$ curl -i \
    -H 'User-Agent: GPTBot' \
    'https://war-tracker.com/event-type/military-strike'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)

< HTTP/2 402 Payment Required
< content-type: application/json
< content-length: 3681
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< link: <https://war-tracker.com/x402>; rel="payment", </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiI1MDAiLCJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZF…<4828 bytes>…fSwieDQwMlZlcnNpb24iOjJ9
< server: cloudflare
< vary: User-Agent
< x-payment-required: eyJhY2NlcHRzIjpbeyJhbW91bnQiOiI1MDAiLCJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZF…<4828 bytes>…fSwieDQwMlZlcnNpb24iOjJ9
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< cf-ray: 9fcdbfe319a4d102-HEL

Decoded PAYMENT-REQUIRED body (also returned verbatim as the response body):

{
  "accepts": [
    {
      "amount": "500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x8B7243F652D3641F661619862157686992640b37",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0x2633ba64e28A6F6989c343Cb98d43Ea06Bd9bd89",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:8453",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:137",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    },
    {
      "amount": "1500",
      "asset": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxTimeoutSeconds": 60,
      "network": "eip155:43114",
      "payTo": "0xF50C0D73C68EF2d8B3388Ec060ED39edCeb62BAF",
      "scheme": "exact"
    }
  ],
  "error": "PAYMENT-SIGNATURE header is required",
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "slug": {
                "description": "Event-type slug (lowercase, dash-separated). See /api/v1/event-types for the canonical taxonomy — includes slugs like `drone-strike`, `airstrike`, `skirmish`, `naval-engagement`.",
                "type": "string"
              }
            },
            "required": [
              "slug"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "slug": "drone-strike"
          },
          "routeTemplate": "/event-type/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...CollectionPage JSON-LD for event-type…<section>events matching this classification</section>...</html>",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "slug": {
                    "description": "Event-type slug (lowercase, dash-separated). See /api/v1/event-types for the canonical taxonomy — includes slugs like `drone-strike`, `airstrike`, `skirmish`, `naval-engagement`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "slug": {
                    "description": "Event-type slug (lowercase, dash-separated). See /api/v1/event-types for the canonical taxonomy — includes slugs like `drone-strike`, `airstrike`, `skirmish`, `naval-engagement`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered event-type hub HTML. Embeds CollectionPage + Dataset JSON-LD distribution that points back at /api/v1/events?event_type={slug}.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  },
  "resource": {
    "description": "Event-type hub page at /event-type/{slug}. Aggregates events matching one classification slug (e.g. drone-strike, airstrike, skirmish). HTML with embedded CollectionPage + Dataset JSON-LD pointing back at /api/v1/events?event_type={slug}.",
    "iconUrl": "https://war-tracker.com/favicon-1024.png",
    "mimeType": "text/html; charset=utf-8",
    "serviceName": "War-Tracker EventType Hub",
    "tags": [
      "taxonomy",
      "classification",
      "category",
      "facet",
      "aggregation"
    ],
    "url": "https://war-tracker.com/event-type/military-strike"
  },
  "x402Version": 2
}

2. Paid retry with PAYMENT-SIGNATURE

$ curl -i \
    -H 'User-Agent: GPTBot' \
    -H 'PAYMENT-SIGNATURE: <base64(json{x402Version,scheme,network,payload})>' \
    'https://war-tracker.com/event-type/military-strike'

> host: war-tracker.com
> accept: */*
> accept-encoding: gzip, deflate, br
> user-agent: Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)
> payment-signature: eyJ4NDAyVmVyc2lvbiI6MiwicGF5bG9hZCI6eyJhdXRob3JpemF0aW9uIjp7…<3572 bytes>…dHlwZSI6Im9iamVjdCJ9fX19

< HTTP/2 200 OK
< content-type: text/html; charset=utf-8
< cache-control: private, no-store, no-cache, must-revalidate, max-age=0
< x-content-type-options: nosniff
< link: </x402.json>; rel="payment"; type="application/json", </api/v1/openapi.json>; rel="service-desc"; type="application/json", </api/v1/docs>; rel="service-doc"; type="text/html", </api/v1/redoc>; rel="service-doc"; type="text/html", </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </llms.txt>; rel="describedby"; type="text/plain", </sitemap.xml>; rel="sitemap"; type="application/xml", </healthz>; rel="status"; type="application/json"
< payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…NTQyOTA0Y2VlOTZhMWJhIn0=
< server: cloudflare
< vary: User-Agent, accept-encoding
< x-payment-response: eyJmYWNpbGl0YXRvciI6InhwYXkiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXllciI6…<168 bytes>…NTQyOTA0Y2VlOTZhMWJhIn0=
< x-x402-gate: 1
< cf-cache-status: DYNAMIC
< x-frame-options: SAMEORIGIN
< cf-ray: 9fcdbfe40b90d102-HEL

Decoded PAYMENT-SIGNATURE payload (EIP-3009 transferWithAuthorization over USDC):

{
  "x402Version": 2,
  "payload": {
    "authorization": {
      "from": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
      "to": "0x8B7243F652D3641F661619862157686992640b37",
      "value": "500",
      "validAfter": "1778969215",
      "validBefore": "1778969875",
      "nonce": "0x2166b16be5ce06de48b70ccc5673ef9970d2794e98e555723af809e79404b067"
    },
    "signature": "0x868b55acb5fcdee5e99436697fb190d7091472f917940b96f80266b154e60b4c113d62a956036e267715a1dfe1720245325bfb4de83412842aa0535e9c3abeee1c"
  },
  "accepted": {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "500",
    "payTo": "0x8B7243F652D3641F661619862157686992640b37",
    "maxTimeoutSeconds": 60,
    "extra": {
      "name": "USD Coin",
      "version": "2"
    }
  },
  "resource": {
    "url": "https://war-tracker.com/event-type/military-strike",
    "description": "Event-type hub page at /event-type/{slug}. Aggregates events matching one classification slug (e.g. drone-strike, airstrike, skirmish). HTML with embedded CollectionPage + Dataset JSON-LD pointing back at /api/v1/events?event_type={slug}.",
    "mimeType": "text/html; charset=utf-8"
  },
  "extensions": {
    "bazaar": {
      "info": {
        "input": {
          "inputSchema": {
            "properties": {
              "slug": {
                "description": "Event-type slug (lowercase, dash-separated). See /api/v1/event-types for the canonical taxonomy — includes slugs like `drone-strike`, `airstrike`, `skirmish`, `naval-engagement`.",
                "type": "string"
              }
            },
            "required": [
              "slug"
            ],
            "type": "object"
          },
          "method": "GET",
          "pathParams": {
            "slug": "drone-strike"
          },
          "routeTemplate": "/event-type/:slug",
          "type": "http"
        },
        "output": {
          "example": "<html>...CollectionPage JSON-LD for event-type…<section>events matching this classification</section>...</html>",
          "type": "html"
        }
      },
      "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "input": {
            "properties": {
              "method": {
                "enum": [
                  "GET"
                ],
                "type": "string"
              },
              "pathParams": {
                "properties": {
                  "slug": {
                    "description": "Event-type slug (lowercase, dash-separated). See /api/v1/event-types for the canonical taxonomy — includes slugs like `drone-strike`, `airstrike`, `skirmish`, `naval-engagement`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "queryParams": {
                "properties": {
                  "slug": {
                    "description": "Event-type slug (lowercase, dash-separated). See /api/v1/event-types for the canonical taxonomy — includes slugs like `drone-strike`, `airstrike`, `skirmish`, `naval-engagement`.",
                    "type": "string"
                  }
                },
                "required": [
                  "slug"
                ],
                "type": "object"
              },
              "type": {
                "const": "http",
                "type": "string"
              }
            },
            "required": [
              "type",
              "method"
            ],
            "type": "object"
          },
          "output": {
            "properties": {
              "example": {
                "contentMediaType": "text/html",
                "description": "Server-rendered event-type hub HTML. Embeds CollectionPage + Dataset JSON-LD distribution that points back at /api/v1/events?event_type={slug}.",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      }
    }
  }
}

Decoded PAYMENT-RESPONSE (facilitator settlement receipt):

{
  "facilitator": "xpay",
  "network": "eip155:8453",
  "payer": "0xF710A8075F72Bb0B83F1221C9cfC0780dd764f6a",
  "success": true,
  "transaction": "0x0a1c2d1ab4252fdc03faa1f4c6bba751907c26aa5bdcab4ce542904cee96a1ba"
}

Response body preview (15,365 bytes, text/html; charset=utf-8):

<title>Live conflict tracker — Military Strike — War-Tracker</title>

# Live conflict tracker — Military Strike
13,499 events recorded in the last 30 days of type "Military Strike". Most affected: Lebanon, Ukraine, Russia.
# Recent events (last 30 days)
- Military Strike – Kursk region, Russia and northern Ukraine (Sumy, Chernihiv, Poltava regions) 2026-05-16
- Military Strike – Kramatorsk-Druzhkovka front, Ukraine 2026-05-16
- Military Strike – Black Sea near Kinburn Spit, Ukraine 2026-05-16

Discovery (x402 Bazaar)

Every 402 we serve carries the x402 Bazaar extension, so buyers can find War-Tracker through the public catalog without ever talking to us first:

GET https://facilitator.xpay.sh/discovery/resources → filter by tag war, conflict, events, or by serviceName War-Tracker. Each entry carries pricing, input/output JSON Schemas, and the same routes shown in the table above.

Wallet & settlement

Pay to: 0x8B7243F652D3641F661619862157686992640b37
Asset: USDC at 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Network: Base mainnet (eip155:8453)
Facilitator: https://facilitator.xpay.sh

Payments are final on-chain. Erroneous charges (e.g. a 5xx response after we settled) are reconciled manually — contact us via /about.

Enterprise & bulk access

Need a higher rate limit, a private allow-list, or a flat-rate monthly agreement instead of per-request micropayments? Reach out via the channels on /about. We’re happy to issue an X-API-Key for partners with predictable, high-volume needs.