# Dudelytics

> Track productive crypto from a workflow. Dudelytics publishes the DPMI, an index of 30 crypto assets that do real work (gas, staking, fees), plus sector indices for DeFi, AI, real-world assets and more, a daily comparison with Bitcoin and the whole market, a Fear & Greed score and the Dude-VIX market-stress score. Read the latest levels, pull history over any dates, and see what each index holds.

App · 8 actions. Web page: https://docs.lodol.com/docs/integrations/dudelytics

## Actions

### Get daily benchmark

Compare the DPMI with Bitcoin and the whole crypto market, one row a day at 00:00 UTC, all rebased to 100 on the same start day. Says which of the three has done best.

**Inputs**

- Start date (`start_date`, date): The first day of the benchmark to include (UTC). Leave it empty for 30 days before the end date.
- End date (`end_date`, date): The last day to include (UTC). Leave it empty for today.

**Outputs**

- `base_date` (text): The day every series was rebased to 100.
- `complete_days` (number): How many complete days the benchmark has.
- `count` (number): How many days are returned.
- `days` (list): Each day in the range.
- `end_date` (text): The last day covered.
- `latest` (object): The most recent day.
- `leader` (text): Which has done best since the base date: DPMI, Bitcoin or Total crypto market.
- `methodology_version` (text): The benchmark's methodology version.
- `next_update` (text): When the next daily row is due (UTC).
- `source_url` (text): The Dudelytics data file this answer was read from.
- `start_date` (text): The first day covered.

**Example output**

```json
{
  "base_date": "2026-09-01",
  "complete_days": 44,
  "count": 1,
  "days": [
    {
      "btc_normalized": 105.4087,
      "btc_usd": 81603.65,
      "complete": true,
      "date": "2026-10-15",
      "dpmi": 128.863006,
      "dpmi_normalized": 104.7706,
      "eth_usd": 2419.69,
      "total_market_cap_usd": 2758150441503.0,
      "total_market_normalized": 105.1464
    }
  ],
  "end_date": "2026-10-15",
  "latest": {
    "btc_normalized": 105.4087,
    "btc_usd": 81603.65,
    "complete": true,
    "date": "2026-10-15",
    "dpmi": 128.863006,
    "dpmi_normalized": 104.7706,
    "eth_usd": 2419.69,
    "total_market_cap_usd": 2758150441503.0,
    "total_market_normalized": 105.1464
  },
  "leader": "Bitcoin",
  "methodology_version": "DPMI-BENCH-1.3",
  "next_update": "2026-10-16T00:00:00Z",
  "source_url": "https://dudelytics.com/data/dpmi/benchmark.json",
  "start_date": "2026-10-15"
}
```

### Get Fear & Greed score

Get DPMI Fear & Greed, a 0-100 sentiment score for the productive crypto market, with its 24-hour, 7-day and 30-day readings and the market signals behind it.

**Inputs**: None.

**Outputs**

- `components` (list): The market signals behind the 24-hour score.
- `coverage_percent` (number): How much of the input data was available, %.
- `horizons` (list): The three time horizons blended into the score.
- `label` (text): Extreme fear, Fear, Neutral, Greed or Extreme greed.
- `maturity_percent` (number): How mature the time model is, in %.
- `methodology_version` (text): The methodology version.
- `pulse_24h_label` (text): The label for the 24-hour score.
- `pulse_24h_score` (number): The short-term score from the last 24 hours.
- `regime_30d_score` (number): The 30-day regime score.
- `score` (number): The score from 0 (extreme fear) to 100 (extreme greed).
- `source_url` (text): The Dudelytics data file this answer was read from.
- `timestamp` (text): When the score was calculated (UTC).
- `trend_7d_score` (number): The 7-day trend score.

**Example output**

```json
{
  "components": [
    {
      "available": true,
      "name": "Market breadth",
      "score": 59.87,
      "weight_percent": 30.0
    },
    {
      "available": true,
      "name": "Volume impulse",
      "score": 84.52,
      "weight_percent": 10.0
    }
  ],
  "coverage_percent": 100.0,
  "horizons": [
    {
      "label": "Greed",
      "name": "24-hour pulse",
      "readiness_percent": 100.0,
      "score": 61.04
    },
    {
      "label": "Neutral",
      "name": "7-day trend",
      "readiness_percent": 100.0,
      "score": 47.81
    },
    {
      "label": "Neutral",
      "name": "30-day regime",
      "readiness_percent": 100.0,
      "score": 51.43
    }
  ],
  "label": "Neutral",
  "maturity_percent": 100.0,
  "methodology_version": "DPMI-FG-0.2-TEMPORAL-WARMUP",
  "pulse_24h_label": "Greed",
  "pulse_24h_score": 61.04,
  "regime_30d_score": 51.43,
  "score": 53.35,
  "source_url": "https://dudelytics.com/data/dpmi/fear-greed.php",
  "timestamp": "2026-10-15T18:02:08Z",
  "trend_7d_score": 47.81
}
```

### Get index history

Get a DPMI index's level over a date range, one point per day or hour (the closing level), with the range's change, high and low. Reconstructed history from before an index went live is left out unless you ask for it.

**Inputs**

- Index (`index`, text): Which index to read: the main DPMI, DPMI Holder Quality, or one of the sector indices such as DeFi, AI or Real-world assets (RWA). Default: `dpmi`.
- Start date (`start_date`, date): The first day of history to include (UTC). Leave it empty for 30 days before the end date.
- End date (`end_date`, date): The last day to include (UTC). Leave it empty for today.
- One point per (`interval`, text): How finely to sample. Daily and hourly keep the last reading in each day or hour, which is its closing value. One of: `daily` (Day), `hourly` (Hour), `all` (Every reading (about 5-10 min)). Default: `daily`.
- Include reconstructed history (`include_backfill`, true/false): Also return the main DPMI's backfilled week before it went live (calculated with today's basket, so not a real historical record). Each point says which it is. Default: `false`.
- Most points (`limit`, number): The most points to return. When there are more, the most recent are kept. From 1 to 5000. Default: `500`.

**Outputs**

- `change_percent` (number): Change from the first to the last level, in %.
- `count` (number): How many points are returned.
- `end_date` (text): The last day covered.
- `first_value` (number): The first level in the range.
- `high` (number): The highest level in the range.
- `includes_backfill` (true/false): Whether any returned point is reconstructed.
- `index` (text): The index's key, such as dpmi or defi, ready for the Index field of Get index level or Get index history.
- `interval` (text): daily, hourly or all.
- `last_value` (number): The last level in the range.
- `low` (number): The lowest level in the range.
- `name` (text): The index's name.
- `points` (list): The levels, oldest first.
- `source_url` (text): The Dudelytics data file this answer was read from.
- `start_date` (text): The first day covered.
- `total_matching` (number): How many points matched, before the limit.
- `truncated` (true/false): Whether the limit dropped the oldest points.

**Example output**

```json
{
  "change_percent": -1.5737,
  "count": 3,
  "end_date": "2026-10-15",
  "first_value": 131.394804,
  "high": 131.394804,
  "includes_backfill": false,
  "index": "dpmi",
  "interval": "daily",
  "last_value": 129.32683,
  "low": 128.863006,
  "name": "DPMI (Dudelytics Productive Market Index)",
  "points": [
    {
      "date": "2026-10-13",
      "reconstructed": false,
      "timestamp": "2026-10-13T23:57:04Z",
      "value": 131.394804
    },
    {
      "date": "2026-10-14",
      "reconstructed": false,
      "timestamp": "2026-10-14T23:52:07Z",
      "value": 128.863006
    },
    {
      "date": "2026-10-15",
      "reconstructed": false,
      "timestamp": "2026-10-15T18:02:08Z",
      "value": 129.32683
    }
  ],
  "source_url": "https://dudelytics.com/data/dpmi/history.json",
  "start_date": "2026-10-13",
  "total_matching": 3,
  "truncated": false
}
```

### Get index holdings

List the top-30 crypto assets in the main DPMI or DPMI Holder Quality, largest first, with each one's weight in the index, price, market value and category.

**Inputs**

- Index (`index`, text): Whose basket to list. Only the main DPMI and DPMI Holder Quality publish their holdings. One of: `dpmi` (DPMI (main index)), `dpmi_hq` (DPMI Holder Quality). Default: `dpmi`.
- How many assets (`limit`, number): How many holdings to return, largest first. From 1 to 30. Default: `30`.

**Outputs**

- `as_of` (text): When prices and weights were last updated (UTC).
- `assets` (list): The basket, largest first.
- `composition_version` (text): The basket's version.
- `count` (number): How many assets are returned.
- `index` (text): The index's key, such as dpmi or defi, ready for the Index field of Get index level or Get index history.
- `methodology_version` (text): The methodology version.
- `name` (text): The index's name.
- `rebalanced_at` (text): When the basket was last rebalanced (UTC).
- `source_url` (text): The Dudelytics data file this answer was read from.
- `top_asset` (text): The largest holding's name.
- `top_weight_percent` (number): The largest holding's weight, in %.
- `total_assets` (number): How many assets the basket holds.

**Example output**

```json
{
  "as_of": "2026-10-15T18:02:08Z",
  "assets": [
    {
      "categories": [
        "Smart Contract Platforms / Layer 1"
      ],
      "coingecko_id": "ethereum",
      "eligible": true,
      "market_cap_usd": 298487469270.0,
      "name": "Ethereum",
      "price_usd": 2442.43,
      "rank": 1,
      "symbol": "ETH",
      "target_weight_percent": 15.0,
      "weight_percent": 14.9695
    }
  ],
  "composition_version": "DPMI-1.0_20261001T000232Z",
  "count": 1,
  "index": "dpmi",
  "methodology_version": "DPMI-1.0",
  "name": "DPMI (Dudelytics Productive Market Index)",
  "rebalanced_at": "2026-10-01T00:02:06Z",
  "source_url": "https://dudelytics.com/data/dpmi/composition.json",
  "top_asset": "Ethereum",
  "top_weight_percent": 14.9695,
  "total_assets": 30
}
```

### Get index level

Get the current level of a DPMI index (the main productive crypto index, Holder Quality, or a sector such as DeFi or AI) with its 24-hour, 7-day and 30-day changes. Includes a ready-made source line for quoting the number.

**Inputs**

- Index (`index`, text): Which index to read: the main DPMI, DPMI Holder Quality, or one of the sector indices such as DeFi, AI or Real-world assets (RWA). Default: `dpmi`.

**Outputs**

- `change_1y_percent` (number): Change over the last year, in percent. Empty until the index has that much history.
- `change_24h_percent` (number): Change over the last 24 hours, in percent.
- `change_30d_percent` (number): Change over the last 30 days, in percent.
- `change_7d_percent` (number): Change over the last 7 days, in percent.
- `change_90d_percent` (number): Change over the last 90 days, in percent. Empty until the index has that much history.
- `citation` (text): A ready-made source line in the form Dudelytics asks for when you quote the level.
- `component_count` (number): How many assets a sector index holds. Empty for the main indices.
- `index` (text): The index's key, such as dpmi or defi, ready for the Index field of Get index level or Get index history.
- `index_id` (text): Dudelytics' own code for it, such as DPMI or DPMI-DEFI.
- `kind` (text): 'Main index' or 'Sector index'.
- `live_since` (text): When real observations of this index began (UTC).
- `methodology_version` (text): The methodology version behind the level.
- `name` (text): The index's name.
- `reconstructed_windows` (list): Change windows that still reach back into reconstructed (backfilled) history rather than real observations. Usually empty.
- `source_url` (text): The Dudelytics data file this answer was read from.
- `status` (text): Whether the index is live.
- `timestamp` (text): When that level was calculated (UTC).
- `value` (number): The index level now. Each index started at 100.

**Example output**

```json
{
  "change_1y_percent": null,
  "change_24h_percent": 0.6123,
  "change_30d_percent": 3.8076,
  "change_7d_percent": 1.2215,
  "change_90d_percent": null,
  "citation": "Dudelytics (2026): DPMI \u2013 Dudelytics Productive Market Index. Data timestamp: 2026-10-15, 18:02 UTC, index level: 129.33, methodology: DPMI-1.0. Accessed 2026-10-15, 18:10 UTC. Source: https://dudelytics.com/en/dpmi/",
  "component_count": null,
  "index": "dpmi",
  "index_id": "DPMI",
  "kind": "Main index",
  "live_since": "2026-08-17T16:06:32Z",
  "methodology_version": "DPMI-1.0",
  "name": "DPMI (Dudelytics Productive Market Index)",
  "reconstructed_windows": [],
  "source_url": "https://dudelytics.com/data/dpmi/current.json",
  "status": "live",
  "timestamp": "2026-10-15T18:02:08Z",
  "value": 129.32683
}
```

### Get market stress (Dude-VIX)

Get Dude-VIX, a 0-100 market-stress score built from recent volatility, sharp drops, how closely sectors move together and drawdowns, with its label (Calm to Extreme stress) and data quality.

**Inputs**: None.

**Outputs**

- `components` (list): The four stress signals behind the score.
- `data_quality` (text): Normal, Limited or Insufficient.
- `fresh` (true/false): Whether the score is up to date.
- `label` (text): Calm, Normal, Elevated tension, High stress or Extreme stress.
- `methodology_version` (text): The methodology version.
- `quality_notes` (list): Why the data quality is limited. Empty when it is normal.
- `score` (number): The stress score from 0 (calm) to 100 (extreme stress).
- `source_url` (text): The Dudelytics data file this answer was read from.
- `status` (text): Whether the score is live.
- `timestamp` (text): When the score was calculated (UTC).

**Example output**

```json
{
  "components": [
    {
      "name": "Realized volatility (24h)",
      "score": 100.0,
      "weight_percent": 35.0
    },
    {
      "name": "Downside shock (24h)",
      "score": 0.0,
      "weight_percent": 25.0
    },
    {
      "name": "Sector correlation (48h)",
      "score": 90.68,
      "weight_percent": 20.0
    },
    {
      "name": "Drawdown pressure (7d)",
      "score": 64.21,
      "weight_percent": 20.0
    }
  ],
  "data_quality": "Limited",
  "fresh": true,
  "label": "High stress",
  "methodology_version": "DVIX-0.2",
  "quality_notes": [
    "long observation gap in seven day high"
  ],
  "score": 65.98,
  "source_url": "https://dudelytics.com/data/dpmi/dvix.php",
  "status": "live",
  "timestamp": "2026-10-15T18:02:08Z"
}
```

### Get market stress history

Get Dude-VIX market-stress scores over a date range, one per day or hour, with the range's high, low and average.

**Inputs**

- Start date (`start_date`, date): The first day of scores to include (UTC). Leave it empty for 30 days before the end date.
- End date (`end_date`, date): The last day to include (UTC). Leave it empty for today.
- One point per (`interval`, text): How finely to sample. Daily and hourly keep the last reading in each day or hour, which is its closing value. One of: `daily` (Day), `hourly` (Hour), `all` (Every reading (about 5-10 min)). Default: `daily`.
- Most points (`limit`, number): The most points to return. When there are more, the most recent are kept. From 1 to 5000. Default: `500`.

**Outputs**

- `average_score` (number): The average score in the range.
- `count` (number): How many points are returned.
- `end_date` (text): The last day covered.
- `highest_score` (number): The highest score in the range.
- `interval` (text): daily, hourly or all.
- `latest_score` (number): The last score in the range.
- `lowest_score` (number): The lowest score in the range.
- `points` (list): The scores, oldest first.
- `source_url` (text): The Dudelytics data file this answer was read from.
- `start_date` (text): The first day covered.
- `total_matching` (number): How many points matched, before the limit.
- `truncated` (true/false): Whether the limit dropped the oldest points.

**Example output**

```json
{
  "average_score": 62.05,
  "count": 2,
  "end_date": "2026-10-15",
  "highest_score": 65.98,
  "interval": "daily",
  "latest_score": 65.98,
  "lowest_score": 58.12,
  "points": [
    {
      "date": "2026-10-14",
      "label": "Elevated tension",
      "methodology_version": "DVIX-0.2",
      "score": 58.12,
      "timestamp": "2026-10-14T23:52:07Z"
    },
    {
      "date": "2026-10-15",
      "label": "High stress",
      "methodology_version": "DVIX-0.2",
      "score": 65.98,
      "timestamp": "2026-10-15T18:02:08Z"
    }
  ],
  "source_url": "https://dudelytics.com/data/dpmi/dvix.php?view=history",
  "start_date": "2026-10-14",
  "total_matching": 2,
  "truncated": false
}
```

### List all index levels

List every index in the DPMI family side by side: the main DPMI, Holder Quality and the seven sector indices, each with its level and changes. Rank them by 24-hour, 7-day or 30-day change to see which corner of the market is leading.

**Inputs**

- Include (`include`, text): Which indices to list. One of: `all` (All indices), `main` (Main DPMI and Holder Quality), `sectors` (Sector indices). Default: `all`.
- Order (`sort`, text): How to order the list. A change ranking puts the biggest gainer first. One of: `family` (Dudelytics' order), `change_24h` (Biggest 24h gain), `change_7d` (Biggest 7-day gain), `change_30d` (Biggest 30-day gain), `level` (Highest level). Default: `family`.

**Outputs**

- `best` (text): The name of the index at the top of the ranking. Empty when the list is in family order.
- `count` (number): How many indices are listed.
- `include` (text): Which indices were included: all, main or sectors.
- `indices` (list): Each index, in the order asked.
- `sort` (text): The order they are in.
- `source_url` (text): The Dudelytics data file this answer was read from.
- `timestamp` (text): The newest level's time (UTC).

**Example output**

```json
{
  "best": "DPMI DePIN",
  "count": 2,
  "include": "all",
  "indices": [
    {
      "change_1y_percent": null,
      "change_24h_percent": 1.8733,
      "change_30d_percent": 39.4049,
      "change_7d_percent": 4.9843,
      "change_90d_percent": null,
      "component_count": 17,
      "index": "depin",
      "index_id": "DPMI-DEPIN",
      "kind": "Sector index",
      "live_since": "2026-08-20T19:45:21Z",
      "methodology_version": "DPMI-SF-1.1",
      "name": "DPMI DePIN",
      "reconstructed_windows": [],
      "source_url": "https://dudelytics.com/data/dpmi/sector-family.php",
      "status": "live",
      "timestamp": "2026-10-15T18:02:08Z",
      "value": 161.345717
    },
    {
      "change_1y_percent": null,
      "change_24h_percent": 0.6123,
      "change_30d_percent": 3.8076,
      "change_7d_percent": 1.2215,
      "change_90d_percent": null,
      "component_count": null,
      "index": "dpmi",
      "index_id": "DPMI",
      "kind": "Main index",
      "live_since": "2026-08-17T16:06:32Z",
      "methodology_version": "DPMI-1.0",
      "name": "DPMI (Dudelytics Productive Market Index)",
      "reconstructed_windows": [],
      "source_url": "https://dudelytics.com/data/dpmi/current.json",
      "status": "live",
      "timestamp": "2026-10-15T18:02:08Z",
      "value": 129.32683
    }
  ],
  "sort": "change_30d",
  "source_url": "https://dudelytics.com/en/dpmi/data/",
  "timestamp": "2026-10-15T18:02:08Z"
}
```
