Jump to content

Pulsed Media Public Data Feeds

From Pulsed Media Wiki


Pulsed Media publishes a set of live, public data feeds: machine-readable JSON files anyone can fetch without a key or an account. They cover the current product catalog, pricing, dedicated-server hardware specs, published customer-satisfaction scores, live server performance per plan, and how customers use their AI credits. Every feed lives under https://pulsedmedia.com/data/v1/, regenerates every 15 minutes (server performance and AI credits hourly), and is served as a static file. Each JSON feed carries a generated_at timestamp (ISO 8601, UTC) so you can check freshness.

Start at the manifest — https://pulsedmedia.com/data/v1/index.json — which lists every endpoint that is currently live.

These feeds carry no account data. To read your own services, with login addresses and usage figures, use an API key: see Pulsed Media Customer API.

At a glance

Feed Format Contents
index.json JSON Manifest of every live endpoint. Start here.
products.json JSON Full product catalog: id, name, description, price per billing cycle, stock, availability.
products-summary.json JSON Catalog trimmed to id, name, monthly price, stock.
md-pricing.txt JSON MiniDedi dedicated servers: full CPU/RAM/storage/bandwidth specs, pricing, and value ratios.
csat.json JSON Customer satisfaction score (0–10) over 30-day, 120-day, and since-inception windows.
virsilipas.json JSON AI credits customers used: credits, requests and tokens per 24 hours, 7 and 30 days, per model, per day and per hour. Hourly.
fleet-performance.json JSON Live server performance per plan: users and drives per server, disk response time, disk waits, 60-day peaks. Average and median, hourly.
eternal-campaign.json JSON Eternal Väinämöinen campaign: per-tier available/sold counts and totals.
eternal-drops.json JSON Live per-tier drop odds for the campaign release engine.
eternal-drops-audit.jsonl JSONL One line per slot release.
eternal-milestones.json JSON Campaign milestone tracks and rewards.
eternal-orders.json / .jsonl JSON / JSONL Log of claimed campaign slots (pseudonymized: first name + country).

The manifest: index.json

The manifest is the entry point. It lists every published endpoint with its size, last-modified time, and a short description, so you can discover the full live set from one request.

{
  "schema_version": 1,
  "generated_at": "2026-07-18T08:00:01+00:00",
  "description": "Pulsed Media public data endpoints. Public-by-design. Updates every 15 min (eternal-orders every 1 min).",
  "endpoints": [
    {
      "url": "https://pulsedmedia.com/data/v1/products.json",
      "file": "products.json",
      "size": 66272,
      "mtime": "2026-07-18T08:00:01+00:00",
      "description": "All visible WHMCS products with full schema"
    }
  ]
}

Product catalog: products.json

products.json lists every publicly visible Pulsed Media product with its price and stock. Prices are in EUR, keyed by billing cycle. PulseWatch, a community-made monitor, records stock and price changes from this feed.

{
  "schema_version": 1,
  "generated_at": "2026-07-18T08:00:01+00:00",
  "currency": "EUR",
  "products": [
    {
      "id": 197,
      "name": "M1000 S",
      "description": "2 000 MiB RAM, 2TB Storage, 1Gbps Download/Upload, 30 000GiB monthly traffic",
      "type": "hostingaccount",
      "paytype": "recurring",
      "stock": 30,
      "stock_managed": true,
      "available": true,
      "is_free": false,
      "billing_cycles": { "monthly": 6.99, "annually": 79.69 }
    }
  ]
}

Reading the fields:

  • available is true when the product can be ordered: it has no stock limit, or its stock is above zero.
  • stock is the store's own stock counter, sent only when stock_managed is true; otherwise it is null and the product has no stock limit. At 0 or below nothing is on sale. Negative values are internal markers, not a count of waiting orders.
  • billing_cycles lists only the terms the product is sold on. A few products, such as special offers, have no monthly entry and are sold yearly or longer.
  • Prices are the product's base price. On the store, a product with required options shows a "Starting from" price that adds the cheapest of them, so it can be higher than the feed's price.
  • Product categories are not in the feed.

products-summary.json is the same catalog trimmed to the essentials:

{
  "schema_version": 1,
  "generated_at": "2026-07-18T08:00:01+00:00",
  "products": [
    { "id": 197, "name": "M1000 S", "monthly": 6.99, "stock": 30, "available": true }
  ]
}

MiniDedi hardware and pricing: md-pricing.txt

Despite the .txt extension (kept for existing consumers), this feed is JSON. It describes every MiniDedi dedicated server, keyed by product id, with full hardware specs, current pricing, and computed value ratios (performance and storage per euro). A distilled companion, md-pricing-sh.txt, carries the same data in a more compact form.

{
  "servers": {
    "291": {
      "name": "MD1",
      "cpu": { "make": "Intel", "model": "i5-7500t", "cores": 4, "threads": 4,
               "clockBase": 2.7, "clockBoost": 3.3,
               "performanceSingle": 1245, "performanceMulti": 3737 },
      "ram": 16, "ramType": "DDR4",
      "storage": { "nvmeQty": 1, "nvmeCapacity": 250, "hddQty": 0, "ssdQty": 0 },
      "bandwidth": 1000, "unmetered": 1,
      "stock": "0",
      "model": "MD1: i5-7500t/16G/250GB NVMe",
      "priceMonthly": "48.94", "priceMonthlySetup": "9.99",
      "valueRatioEuroPer": { "eurosPerRamGB": 3.06, "eurosPerStorageGB": 0.2 }
    }
  }
}

Customer satisfaction: csat.json

The satisfaction feed publishes the average CSAT score on a 0–10 scale across three windows, each with its sample size.

{
  "scale": 10,
  "generated_at": "2026-07-18T03:15:02+00:00",
  "windows": {
    "d30":            { "avg": "9.4", "n": 50,  "days": 30,  "label": "past 30 days" },
    "d120":           { "avg": "9.2", "n": 165, "days": 120, "label": "past four months" },
    "since_inception":{ "avg": "9.1", "n": 188, "since": "2026-01-27" }
  }
}

AI credits used: virsilipas.json

virsilipas.json shows how Pulsed Media customers use their AI credits: credits, requests and tokens over the last 24 hours, 7 days and 30 days, per model, per day and per hour. Only customer keys count, not Pulsed Media's own test keys, and the feed holds totals only: no key, no customer and no count of either. Windows end at as_of, the end of the last complete UTC hour. A request counts once it is accepted; a request refused before that (no credit left, a rate limit, an unknown model) is not counted. The same data drives the live charts at virsilipas.mcx.fi, which also serves it at https://virsilipas.mcx.fi/public/usage.json. Both refresh hourly. The site also publishes a list of up to ten keys that used the most credits in the last 24 hours, 7 days and 30 days, each under an anonymous id that other visitors cannot link to a customer (the key's owner can compute their own), at https://virsilipas.mcx.fi/public/top.json; it is not part of virsilipas.json.

Field Contents
windows For 24h, 7d and 30d: credits, requests, input tokens (prompt_tokens, with the cached part in cached_tokens), output tokens (completion_tokens, with the reasoning part in reasoning_tokens), the share of requests answered with HTTP 2xx, the share that needed a retry, and the mean time to the first byte in milliseconds.
models_30d Every model used in the last 30 days with the same counts, its share of credits and of requests, its mean time to the first byte, and its speed: generation_tokens_per_second, the output tokens per second while an answer streams (only streamed answers that finished normally with a counted usage report count; null until a model has a minute of such time), next to the two sums it comes from, gen_tokens and gen_ms. Model names are the ones listed on the AI credits page.
models_24h, models_7d The same fields as models_30d, over the last 24 hours and the last 7 days.
daily One row per UTC day for the last 30 days, from the first day of use, each with its five most used models.
hourly_7d Every hour of the last 7 days, credits split into the five most used models of the last 30 days and other.
heatmap_24h, heatmap_7d, heatmap_30d Credits and requests per ISO weekday (1 = Monday) and UTC hour over the last 24 hours, 7 days and 30 days.
rolling_24h, rolling_7d, rolling_30d Rolling sums of credits. rolling_24h and rolling_7d: every hour of the last 7 days, each with the credits of the 24 hours or 7 days up to and including that hour. rolling_30d: one point a day for the last 30 days, each with the credits of the 30 days up to and including it. hour names the last hour a point includes, and every point has its whole window behind it.

An excerpt, one entry of most lists:

{
  "schema_version": 2,
  "generated_at": "2026-10-18T07:53:42+00:00",
  "as_of": "2026-10-18T07:00:00+00:00",
  "unit": "credits",
  "windows": {
    "24h": { "credits": 5179600, "requests": 1443, "prompt_tokens": 120624170, "cached_tokens": 112704560,
             "completion_tokens": 760096, "reasoning_tokens": 360126,
             "http_2xx_share": 0.9986, "retried_share": 0.0028, "mean_first_byte_ms": 2828 }
  },
  "models_30d": [
    { "model": "deepseek-ai/DeepSeek-V4.1-Flash", "credits": 2683759, "requests": 637, "credit_share": 0.5181,
      "request_share": 0.4414, "mean_first_byte_ms": 2435 }
  ],
  "daily": [
    { "date": "2026-10-18", "credits": 418718, "requests": 154,
      "top_models": [ { "model": "default", "credits": 369109, "requests": 128 } ] }
  ],
  "hourly_7d": [
    { "hour": "2026-10-18T06", "credits": 11329, "requests": 7, "models": { "default": 11280, "other": 49 } }
  ],
  "heatmap_30d": [
    { "weekday": 1, "hour": 0, "credits": 0, "requests": 0 }
  ],
  "rolling_24h": [
    { "hour": "2026-10-18T06", "credits": 5179600 }
  ]
}

Some fields are left out above for space: the 7d and 30d windows, models_24h, models_7d, heatmap_24h, heatmap_7d, rolling_7d and rolling_30d (the same shapes as their siblings), the token counts in models_30d and daily, and the zero entries in models. The last rolling_24h point always equals the 24-hour window's credits.

The credit service is open source; the feed is built by its bin/virsilipas public-usage command.

Server performance: fleet-performance.json

fleet-performance.json shows how Pulsed Media's servers are actually running, plan by plan: how many accounts share a server, how quickly the disks answer, how much of the week the server spent waiting on its disks, and each server's busiest reading of the last 60 days. It refreshes hourly. The same figures appear on each plan page and side by side on the live server performance comparison page, apart from the 60-day peaks: readers took those for the most a server can do, so only the feed carries them.

These are live readings of real use, not what the hardware can do. A 60-day peak of 300 MB/s means the busiest reading those servers recorded in the last 60 days reached that rate; it is not their ceiling. A quiet server shows a low peak because its users did not ask for more. None of these figures is a guarantee or an advertised limit, and the feed's own note field says so.

Each plan, and fleet for all reporting servers together, carries two values per metric: avg_, the average across that plan's servers, and median_, the server in the middle. For a typical server, read the median: one unusually busy or idle machine moves the average but not the median.

Metric (after avg_ / median_) Unit Meaning
users_per_node accounts Accounts on one server. Every account type counts.
node_size_tb TiB Total disk space of one server. The unit is TiB, despite the field name.
drives_per_node drives Physical drives that hold one server's storage. For servers that run as virtual machines this counts the drives in the array behind the machine, not the virtual disks it sees. A drive that has dropped out of its array is not counted until it is back.
service_time_ms ms How long a disk read takes to complete, averaged over the past week.
psi_io_full % of time Share of the week in which every active process on the server was waiting for the disks (Linux pressure stall information, "full"). Averaged over the servers that report a non-zero value; null when fewer than three do.
disk_util_pct % of time Share of the week the disks had work to do. Time spent busy, not capacity used.
throughput_read_mbs, throughput_write_mbs MB/s Disk read and write rate in each server's busiest reading of the last 60 days. Each reading is a two-minute average, and every server is read many times a day.
iops_read, iops_write operations/s Disk operations per second in each server's busiest reading of the last 60 days.

Plans are keyed by name: M1000, M1000-SSD, M10G (the servers Storage Boxes also run on), M10G-SSD, Dragon-R, V1000 and V10G. A plan with no recently reporting servers appears with "status": "no_recent_data" and null values. The feed publishes no server counts, totals or capacity figures.

Trimmed to one plan, without the long note text:

{
  "schema_version": 2,
  "generated_at": "2026-10-04T05:37:01+00:00",
  "tiers": {
    "M10G": {
      "status": "reporting",
      "avg_node_size_tb": 58.69, "avg_users_per_node": 25.4,
      "avg_disk_util_pct": 10.1, "avg_service_time_ms": 15.49, "avg_psi_io_full": 11.32,
      "avg_iops_read": 3492, "avg_iops_write": 1960,
      "avg_throughput_read_mbs": 385, "avg_throughput_write_mbs": 144,
      "median_node_size_tb": 48.11, "median_users_per_node": 27,
      "median_disk_util_pct": 10.7, "median_service_time_ms": 15.31, "median_psi_io_full": 10.81,
      "median_iops_read": 2494, "median_iops_write": 1179,
      "median_throughput_read_mbs": 229, "median_throughput_write_mbs": 119
    }
  }
}

Campaign feeds (Eternal Väinämöinen)

During the Eternal Väinämöinen promotion, Pulsed Media publishes live campaign data under the same path. These feeds are tied to the active campaign and may retire when it ends; the manifest always lists whatever is currently live.

eternal-campaign.json — per-tier available/sold counts and campaign totals:

{
  "schema_version": 1, "generated_at": "2026-07-18T08:00:01+00:00",
  "campaign": "eternal-vainamoinen", "currency": "EUR",
  "month_target": 700, "campaign_target": 4900,
  "month_sold": 98, "campaign_sold": 444,
  "products": { "351": { "available": 13, "sold": 10, "sold_month": 2 } }
}

eternal-drops.json — live per-tier drop odds from the release engine:

{
  "schema_version": 1, "generated_at": "2026-07-18T08:10:02+00:00",
  "campaign_state": "active", "cron_healthy": true, "tick_interval_seconds": 300,
  "live_odds": [
    { "type": "355", "label": "Seedbox 8TB R5 10G", "open_now": 0,
      "drop_chance_per_tick": 0.00167, "state": "droppable" }
  ]
}

eternal-drops-audit.jsonl — one JSON object per line, one per slot release:

{"ts":"2026-06-01T08:47:38+00:00","type":"351","n":7,"src":"admin"}

eternal-milestones.json — milestone tracks with the next reward:

{
  "schema_version": 1, "generated_at": "2026-07-18T08:08:01+00:00",
  "campaign": "eternal-vainamoinen",
  "tracks": {
    "claimed": { "label": "Claimed", "value": 444,
      "next": { "at": 500, "reward": "A new SSD Seedbox tier opens with 15 slots ..." } }
  }
}

eternal-orders.json (and its line-per-record .jsonl form) — the log of claimed slots, pseudonymized to first name and country only:

{"ordinal":1,"ts":"2026-06-01T11:55:31+00:00","firstName":"Alex","country":"FI",
 "sku":"Eternal Väinämöinen - Seedbox 1TB R5 10G","term":"1mo","total":"1.99 EUR","referred":0}

Formats and freshness

  • JSON feeds are objects with a schema_version and a generated_at timestamp (ISO 8601, UTC).
  • .jsonl feeds are line-delimited JSON: one complete record per line.
  • Feeds refresh every 15 minutes (the order log every minute, server performance and AI credits hourly); responses may be cached for up to five minutes (Cache-Control: max-age=300). For the freshest read, add a cache-busting query such as ?t=<unixtime> and check generated_at.
  • Responses carry ETag and Last-Modified headers. A client that polls can send them back as If-None-Match or If-Modified-Since and receive a short 304 Not Modified when the feed has not changed, instead of downloading it again.

Terms of use

The feeds are public by design and free to use, provided as-is. They carry no availability guarantee — they are not covered by a service-level agreement, and their contents or structure may change without notice. The order log is pseudonymized and contains no personal data beyond a first name and a country.

See also