{
  "info": {
    "name": "Trinity Insights API",
    "description": "Atemporal Postman collection generated from the live Trinity Insights OpenAPI specification.\n\nVariables :\n  - baseUrl : the API root URL (https://api.trinityinsights.io by default)\n  - apiKey  : your Trinity Insights API key (Profile → API keys in the dashboard)\n\nAuthentication is sent as the X-API-Key header on every request requiring auth.\nMiCA + AMF compliance : Trinity Insights is not a registered CASP under EU MiCA Regulation 2023/1114. Data returned is informational and analytical only.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.trinityinsights.io",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "secret"
    },
    {
      "key": "date",
      "value": "YYYY-MM-DD",
      "type": "string"
    },
    {
      "key": "dateTime",
      "value": "YYYY-MM-DDTHH:MM:SSZ",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "alerts",
      "description": "Trinity Insights REST API - endpoints under the alerts tag.",
      "item": [
        {
          "name": "GET /api/v1/alerts/stream - Stream Alerts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/stream?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "stream"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "SSE endpoint for real-time alert notifications.\n\nClients connect here to receive triggered alerts in real-time.\nRequires authentication (Clerk JWT via header or ?token= query param).\n\nEvents:\n  - event: connected  - sent on initial connection (with conn_id)\n  - event: alert      - triggered alert payload\n  - : heartbeat       - keepalive comment every 30s\n\nQuery params:\n    token: JWT token (required if using EventSource which cannot set headers)"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/stream/status - Stream Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/stream/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "stream",
                "status"
              ]
            },
            "description": "Return SSE connection manager stats (admin diagnostic)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "alerts-v2",
      "description": "Trinity Insights REST API - endpoints under the alerts-v2 tag.",
      "item": [
        {
          "name": "DELETE /api/v1/alerts/v2/{alert_id} - Delete Alert",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/:alert_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                ":alert_id"
              ],
              "variable": [
                {
                  "key": "alert_id",
                  "value": "value"
                }
              ]
            },
            "description": "Delete an alert."
          },
          "response": []
        },
        {
          "name": "DELETE /api/v1/alerts/v2/channels/{channel_type} - Delete Channel",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/:channel_type",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                ":channel_type"
              ],
              "variable": [
                {
                  "key": "channel_type",
                  "value": "value"
                }
              ]
            },
            "description": "Remove a notification channel."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2 - List Alerts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "List all V2 alerts for the authenticated user."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/{alert_id} - Get Alert",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/:alert_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                ":alert_id"
              ],
              "variable": [
                {
                  "key": "alert_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get a single alert by ID."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/{alert_id}/history - Get Alert History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/:alert_id/history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                ":alert_id",
                "history"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "alert_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get trigger history for an alert."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/channels - List Channels",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels"
              ]
            },
            "description": "List configured notification channels for the user."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/digest - Get Digest Preferences",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/digest",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "digest"
              ]
            },
            "description": "Get digest preferences."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/metrics - List Alertable Metrics",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/metrics?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "metrics"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "Metriques proposeables a l'alerte : les grandeurs qualifiees seulement.\n\nFiche F45. Jusqu'ici la route rendait tout ce que la base contient (2397\nmetriques). Elle ne rend plus que les 24 grandeurs qualifiees par F41, avec\nleur seuil suggere. L'evaluation des alertes existantes ne passe pas par\nici : le moteur garde le catalogue entier, et une alerte hors selection\ncontinue de fonctionner."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/metrics/{category}/{key}/thresholds - Get Metric Thresholds",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/metrics/:category/:key/thresholds",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "metrics",
                ":category",
                ":key",
                "thresholds"
              ],
              "variable": [
                {
                  "key": "category",
                  "value": "value"
                },
                {
                  "key": "key",
                  "value": "value"
                }
              ]
            },
            "description": "Return statistical percentiles for a metric to help set alert thresholds.\n\nUses ORM models to avoid raw SQL interpolation (Snyk CWE-89 safe).\nReturns p5/p25/p50/p75/p95 percentiles plus the last time the median was crossed."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/metrics/{category}/{key}/windows - Get Metric Windows",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/metrics/:category/:key/windows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "metrics",
                ":category",
                ":key",
                "windows"
              ],
              "variable": [
                {
                  "key": "category",
                  "value": "value"
                },
                {
                  "key": "key",
                  "value": "value"
                }
              ]
            },
            "description": "Les fenetres de variation que la cadence d'une grandeur permet (fiche F85).\n\nUne seule source, le fichier versionne des cadences, lu par le meme module que\nle refus de creation et de modification : l'ecran ne propose que ce que le\nmoteur peut mesurer. Aucune base n'est lue."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/metrics/reachability - Get Metrics Reachability",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/metrics/reachability",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "metrics",
                "reachability"
              ]
            },
            "description": "Les grandeurs que le miroir derive (F76) nomme non atteignables (fiche F81).\n\nLes surfaces qui portent la cloche d'alerte lisent cette liste pour ne\nl'afficher que la ou une alerte peut partir. La liste sort du miroir, elle\nn'est jamais recopiee cote site : le jour ou le miroir change, la cloche suit."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/alerts/v2/templates - List Templates",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/templates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "templates"
              ]
            },
            "description": "Return available alert preset templates."
          },
          "response": []
        },
        {
          "name": "PATCH /api/v1/alerts/v2/{alert_id} - Update Alert",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/:alert_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                ":alert_id"
              ],
              "variable": [
                {
                  "key": "alert_id",
                  "value": "value"
                }
              ]
            },
            "description": "Update an existing alert.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2 - Create Alert",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2"
              ]
            },
            "description": "Create a new V2 alert with validation.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/{alert_id}/snooze - Snooze Alert",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/:alert_id/snooze",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                ":alert_id",
                "snooze"
              ],
              "variable": [
                {
                  "key": "alert_id",
                  "value": "value"
                }
              ]
            },
            "description": "Snooze an alert for X hours.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/{alert_id}/test - Test Alert",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/:alert_id/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                ":alert_id",
                "test"
              ],
              "variable": [
                {
                  "key": "alert_id",
                  "value": "value"
                }
              ]
            },
            "description": "Send a test notification on all configured channels."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/{alert_id}/unsnooze - Unsnooze Alert",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/:alert_id/unsnooze",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                ":alert_id",
                "unsnooze"
              ],
              "variable": [
                {
                  "key": "alert_id",
                  "value": "value"
                }
              ]
            },
            "description": "Unsnooze an alert."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/channels/{channel_type}/test - Test Channel",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/:channel_type/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                ":channel_type",
                "test"
              ],
              "variable": [
                {
                  "key": "channel_type",
                  "value": "value"
                }
              ]
            },
            "description": "Send a test message to a specific channel."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/channels/discord - Save Discord Webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/discord",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                "discord"
              ]
            },
            "description": "Save Discord webhook URL.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/channels/push - Save Push Subscription",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/push",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                "push"
              ]
            },
            "description": "Save Web Push subscription for PWA notifications.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/channels/slack - Save Slack Webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/slack",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                "slack"
              ]
            },
            "description": "Save Slack webhook URL.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/channels/telegram/link - Link Telegram",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/telegram/link",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                "telegram",
                "link"
              ]
            },
            "description": "Generate a Telegram link code for the user."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/channels/telegram/verify - Verify Telegram",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/telegram/verify?code=value&chat_id=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                "telegram",
                "verify"
              ],
              "query": [
                {
                  "key": "code",
                  "value": "value",
                  "disabled": false
                },
                {
                  "key": "chat_id",
                  "value": "value",
                  "disabled": false
                }
              ]
            },
            "description": "Verify Telegram link code and save channel."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/channels/webhook - Save Custom Webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/channels/webhook",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "channels",
                "webhook"
              ]
            },
            "description": "Save custom webhook URL.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/from-template/{key} - Create From Template",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/from-template/:key",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "from-template",
                ":key"
              ],
              "variable": [
                {
                  "key": "key",
                  "value": "value"
                }
              ]
            },
            "description": "Create an alert from a preset template."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/alerts/v2/telegram/webhook - Telegram Webhook",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/telegram/webhook",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "telegram",
                "webhook"
              ]
            },
            "description": "Receive incoming messages from Telegram Bot API (no auth - Telegram calls this).\n\nProcesses /start {code} commands to auto-link user accounts."
          },
          "response": []
        },
        {
          "name": "PUT /api/v1/alerts/v2/digest - Update Digest Preferences",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/alerts/v2/digest",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "alerts",
                "v2",
                "digest"
              ]
            },
            "description": "Update digest preferences (upsert).",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "api-keys",
      "description": "Trinity Insights REST API - endpoints under the api-keys tag.",
      "item": [
        {
          "name": "DELETE /api/v1/users/me/api-keys/{key_id} - Revoke API key",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me/api-keys/:key_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me",
                "api-keys",
                ":key_id"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "value"
                }
              ]
            },
            "description": "Revoke an API key. The key is deactivated immediately and can no longer be used.\n\nAccepts: Authorization (JWT) or X-API-Key header.\nAuthentication required (JWT or API key)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/users/me/api-keys - List my API keys",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me",
                "api-keys"
              ]
            },
            "description": "List all API keys for the current user.\n\nAccepts: Authorization (JWT) or X-API-Key header.\nAuthentication required (JWT or API key)."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/users/me/api-keys - Create API key",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me",
                "api-keys"
              ]
            },
            "description": "Create a new API key. The full key is returned **once** and cannot be retrieved later.\n\nAccepts: Authorization (JWT) or X-API-Key header.\nAuthentication required (JWT or API key).",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/users/me/api-keys/{key_id}/rotate - Rotate API key",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me/api-keys/:key_id/rotate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me",
                "api-keys",
                ":key_id",
                "rotate"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "value"
                }
              ]
            },
            "description": "Rotate an API key - revoke the old key and issue a new replacement.\n\nAccepts: Authorization (JWT) or X-API-Key header.\nAuthentication required (JWT or API key).\nThe new key secret is returned once and cannot be retrieved later."
          },
          "response": []
        }
      ]
    },
    {
      "name": "ask",
      "description": "Trinity Insights REST API - endpoints under the ask tag.",
      "item": [
        {
          "name": "GET /api/v1/ask/suggestions - Get Suggestions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/ask/suggestions?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "ask",
                "suggestions"
              ],
              "query": [
                {
                  "key": "locale",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "Return suggested queries based on locale."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/ask - Ask",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/ask",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "ask"
              ]
            },
            "description": "Trinity Ask - conversational interface to indicator data.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "backtest",
      "description": "Trinity Insights REST API - endpoints under the backtest tag.",
      "item": [
        {
          "name": "GET /api/v1/backtest/runs - List Backtest Runs",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/backtest/runs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "backtest",
                "runs"
              ]
            },
            "description": "List past backtest runs.\n\nReturns a paginated list of previous backtest runs with their\nconfiguration, status, and summary results.\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/backtest/run - Run Backtest",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/backtest/run",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "backtest",
                "run"
              ]
            },
            "description": "Launch an on-chain backtesting run.\n\nAccepts strategy parameters and on-chain signal configuration,\nruns a historical simulation against BRK data, and returns\nperformance metrics (PnL, Sharpe, drawdown, etc.).\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        }
      ]
    },
    {
      "name": "calendar",
      "description": "Trinity Insights REST API - endpoints under the calendar tag.",
      "item": [
        {
          "name": "GET /api/v1/calendar - Get Calendar",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/calendar?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "calendar"
              ],
              "query": [
                {
                  "key": "lang",
                  "value": "fr",
                  "disabled": true
                },
                {
                  "key": "days",
                  "value": "400",
                  "description": "fenêtre à venir demandée",
                  "disabled": true
                },
                {
                  "key": "back",
                  "value": "14",
                  "description": "jours passés conservés",
                  "disabled": true
                },
                {
                  "key": "category",
                  "value": "value",
                  "disabled": true
                },
                {
                  "key": "impact",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "Rendez-vous économiques sur une fenêtre glissante autour d'aujourd'hui.\n\nLa fenêtre déborde dans le passé pour montrer ce qui vient de tomber avec\nson résultat réel — un chiffre publié hier reste utile aujourd'hui."
          },
          "response": []
        }
      ]
    },
    {
      "name": "catalog-public",
      "description": "Trinity Insights REST API - endpoints under the catalog-public tag.",
      "item": [
        {
          "name": "GET /api/v1/catalog/metric/{slug}/full - Get Metric Full",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "x-og-render-secret",
                "value": "value",
                "type": "text",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/catalog/metric/:slug/full?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "catalog",
                "metric",
                ":slug",
                "full"
              ],
              "query": [
                {
                  "key": "preview",
                  "value": "false",
                  "description": "When true, omits the `education` object from the payload. Used by public SSR pages to avoid disclosing the subscriber-only educational module content (paywall posture).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Returns the atemporal payload for a Trinity chart catalog entry.\n\nUsed by :\n  - Next.js SSR pages `/mcp/metrics/[slug]/page.tsx` (preview=true,\n    revalidate 24h ISR) - paywall posture, omits education\n  - Next.js OG image render handlers (preview=true)\n  - Internal admin tooling (preview=false, full payload including\n    education for review purposes)\n\nServer-to-server only. The slug pattern restricts to lowercase\nalphanumeric + hyphen, starting with alphanumeric.\n\nPAYWALL POSTURE (cf. founder directive 2026-05-25) :\nThe `education` object contains subscriber-only content. Public-facing\nrendering paths MUST call with preview=true so the API drops the\neducation sections before serialization. Defence-in-depth : even if a\nrendering page accidentally tries to display education, the payload\nwon't contain it.\n\nCACHE (Phase 1B sprint 2026-05-28) :\nResponse cached in Redis with key\n``catalog:public:metric:{slug}:{preview}`` and TTL\n``cache_ttl_catalog_public`` (default 600s). Preview true and false\nare cached separately because the payload differs (education object\npresent/absent). Fail-open: Redis down → DB direct."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/catalog/metrics/sitemap - List Metrics For Sitemap",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "x-og-render-secret",
                "value": "value",
                "type": "text",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/catalog/metrics/sitemap",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "catalog",
                "metrics",
                "sitemap"
              ]
            },
            "description": "Lightweight list of all active metrics for sitemap generation."
          },
          "response": []
        }
      ]
    },
    {
      "name": "checkout",
      "description": "Trinity Insights REST API - endpoints under the checkout tag.",
      "item": [
        {
          "name": "GET /api/v1/invoices - List Invoices",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/invoices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "invoices"
              ]
            },
            "description": "List the authenticated user's Paddle transactions (last 12).\n\nPaddle MoR issues invoices - we fetch them from the Paddle Transactions API."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/paddle/prices - Get Paddle Prices",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/paddle/prices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "paddle",
                "prices"
              ]
            },
            "description": "Return Paddle price IDs + client token for frontend checkout overlay.\n\nF44 (regle founder du 20/09) : Founding n'est pas un palier, c'est le tarif\nannuel preferentiel des cent premiers, sur le perimetre Pro. Quand les cent\nplaces sont prises, l'offre se retire : la route cesse de servir\nl'identifiant du prix Founding, et le site n'a donc plus rien a donner a\nPaddle.js. Le verdict n'est pas recalcule ici : il est lu a\n`founding_offer_state`, l'autorite unique posee par F39, la meme que celle\nqui sert la disponibilite publique. Une chaine vide est un prix qui n'existe\npas pour le site, et le bouton des tarifs est deja desactive quand le prix\nest vide (`pricing/page.tsx`, `disabled={... || !priceId}`).\n\nF112 (decision founder du 22/09) : l'essai Pro de 7 jours est reserve a qui\nchoisit Pro et une seule fois par personne. Le serveur — jamais la page —\nchoisit l'identifiant : quand le prix d'essai existe cote Paddle et que ce\ncompte n'a jamais consomme d'essai (`trial_started_at IS NULL`),\n`pro_monthly` porte le prix d'essai et `pro_trial_available` vaut vrai.\nSinon la route sert le prix Pro ordinaire. Un visiteur anonyme n'a pas\nd'essai : apres connexion, la page redemande la route et obtient le bon\nidentifiant. Le dernier mot reste au webhook, qui activera la souscription\ntout de suite si un essai est tente malgre tout (`services/paddle.py`).\n\nDecision 7 (founder du 21/09) : la meme reponse porte le drapeau\nd'ouverture des paliers (`open_tiers`). Un palier ferme recoit une chaine\nvide pour chaque periode, de sorte que la page ne puisse pas ouvrir de\ncaisse dessus meme si elle en affichait le bouton ; `open_tiers` lui dit\nquels boutons afficher. Un seul drapeau, lu par l'API et par le site."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/billing-portal - Create Billing Portal",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/billing-portal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "billing-portal"
              ]
            },
            "description": "Return Paddle Customer Portal URL for self-service billing management.\n\nPaddle provides a hosted customer portal where users can:\nupdate payment method, view invoices, cancel/downgrade."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/billing/withdrawal-request - Request Withdrawal",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/billing/withdrawal-request",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "billing",
                "withdrawal-request"
              ]
            },
            "description": "Exercice EN LIGNE du droit de retractation.\n\nEnregistre la demande horodatee, envoie l'accuse de reception au client\n(email = support durable) et une copie interne pour traitement sans delai.\nLa demande est volontairement acceptee sans condition prealable : la\nqualification (fenetre de 14 jours, remboursement du) est instruite au\ntraitement, jamais bloquee a la porte.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/paddle/ensure-customer - Ensure Paddle Customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/paddle/ensure-customer",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "paddle",
                "ensure-customer"
              ]
            },
            "description": "Ensure the current user has a Paddle customer. Creates one if missing.\n\nCalled by the frontend before opening the checkout overlay so we can pass\nthe customer_id to Paddle.js.\n\nDecision 7 (founder du 21/09) : l'API refuse aussi une souscription a un\npalier ferme. Le site annonce le prix qu'il s'aprete a ouvrir ; si ce prix\nappartient a un palier qui n'est pas dans le drapeau d'ouverture, aucune\ncaisse n'est ouverte : 403 avant tout appel Paddle. Sans price_id le\ncontrole est sans effet, pour ne pas casser un client qui ne l'envoie pas.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "cointime",
      "description": "Trinity Insights REST API - endpoints under the cointime tag.",
      "item": [
        {
          "name": "GET /api/v1/cointime/metrics - List Cointime Metrics",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cointime/metrics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cointime",
                "metrics"
              ]
            },
            "description": "List all available Cointime Economics metrics.\n\nReturns the catalog of 30+ cointime metrics including Active Cap,\nVaulted Cap, True Market Mean, AVIV Ratio, and more.\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/cointime/metrics/{metric_id}/data - Get Cointime Metric Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cointime/metrics/:metric_id/data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cointime",
                "metrics",
                ":metric_id",
                "data"
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get time series data for a specific cointime metric.\n\nReturns daily values for the requested cointime metric with\noptional BTC price overlay.\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        }
      ]
    },
    {
      "name": "consent",
      "description": "Trinity Insights REST API - endpoints under the consent tag.",
      "item": [
        {
          "name": "POST /api/v1/consent - Record Consent",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/consent",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "consent"
              ]
            },
            "description": "Enregistre le consentement cookie - route publique (pas d'auth requise).\n\n- Hash SHA-256 de l'IP (jamais l'IP brute)\n- Rate limited par IP (public tier)\n- Preuve CNIL stockee en base",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "conviction",
      "description": "Trinity Insights REST API - endpoints under the conviction tag.",
      "item": [
        {
          "name": "GET /api/v1/conviction/current - Get Current Conviction",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/conviction/current",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "conviction",
                "current"
              ]
            },
            "description": "Get the latest conviction index value.\n\nTier gating:\n- FREE: band + last_changed only, no score, is_locked=True\n- PRO: score + band, no component breakdown\n- PERFORMANCE: full breakdown with components"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/conviction/history - Get Conviction History Endpoint",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/conviction/history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "conviction",
                "history"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "365",
                  "description": "Number of days of history",
                  "disabled": true
                }
              ]
            },
            "description": "Get historical conviction index values.\n\nTier gating:\n- FREE: 403 (no history access)\n- PRO: score + band per day, no components\n- PERFORMANCE: full history with component breakdown"
          },
          "response": []
        },
        {
          "name": "POST /api/v1/conviction/compute - Trigger Conviction Compute",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/conviction/compute",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "conviction",
                "compute"
              ]
            },
            "description": "Admin only - Recompute the conviction index from latest on-chain data."
          },
          "response": []
        }
      ]
    },
    {
      "name": "cross-rubric",
      "description": "Trinity Insights REST API - endpoints under the cross-rubric tag.",
      "item": [
        {
          "name": "GET /api/v1/cross-rubric/alerts - Get Cross Rubric Alerts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cross-rubric/alerts?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cross-rubric",
                "alerts"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ]
            },
            "description": "Live cross-rubric alerts - tier Performance+.\n\nAtemporal, AMF-compliant, recipe-leak guarded.\nTier gating: free/founding/pro → 403. Performance/Team → full."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/cross-rubric/insight/{metric_id} - Get Cross Rubric Insight",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cross-rubric/insight/:metric_id?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cross-rubric",
                "insight",
                ":metric_id"
              ],
              "query": [
                {
                  "key": "date",
                  "value": "latest",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                },
                {
                  "key": "top_n",
                  "value": "3",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Cross-rubric atemporal insight for a URPD-mode metric (Pro+).\n\nPublic-facing alias of /api/v1/insights/cross-rubric/insights?slug=..."
          },
          "response": []
        }
      ]
    },
    {
      "name": "cycle",
      "description": "Trinity Insights REST API - endpoints under the cycle tag.",
      "item": [
        {
          "name": "GET /api/v1/cycle/compare - Compare Cycles",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cycle/compare?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cycle",
                "compare"
              ],
              "query": [
                {
                  "key": "metric",
                  "value": "mvrv-classic",
                  "description": "On-chain metric ID to compare across cycles",
                  "disabled": true
                }
              ]
            },
            "description": "Compare an on-chain metric across all 4 Bitcoin halving cycles.\n\nPRO+ only. FREE tier returns 403.\nAligns data by day-in-cycle (0 = halving day) for visual overlay."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/cycle/history - Get Cycle History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cycle/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cycle",
                "history"
              ]
            },
            "description": "Get historical Bitcoin halving cycles.\n\nFREE tier: past completed cycles only (1-3), no current cycle.\nPRO+: all cycles including current."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/cycle/position - Get Cycle Position",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cycle/position",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cycle",
                "position"
              ]
            },
            "description": "Get current position in the Bitcoin halving cycle with alpha data.\n\nFREE tier: cycle number and phase only (no day, no progress, no alpha).\nPRO+: full data including day_in_cycle, progress_pct, price performance,\n       on-chain metrics comparison, and Cycle Pace score."
          },
          "response": []
        }
      ]
    },
    {
      "name": "cycle-intelligence",
      "description": "Trinity Insights REST API - endpoints under the cycle-intelligence tag.",
      "item": [
        {
          "name": "GET /api/v1/cycle-intelligence/catalog - List Cycle Catalog",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cycle-intelligence/catalog?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cycle-intelligence",
                "catalog"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "value",
                  "description": "Filter by category",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "value",
                  "description": "Search query",
                  "disabled": true
                }
              ]
            },
            "description": "List all Cycle Intelligence metrics catalog entries.\n\nPublic endpoint - returns full catalog metadata.\nData access is gated separately per metric."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/cycle-intelligence/categories - List Cycle Categories",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cycle-intelligence/categories",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cycle-intelligence",
                "categories"
              ]
            },
            "description": "List all Cycle Intelligence categories with counts."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/cycle-intelligence/metrics/{metric_id}/data - Get Cycle Metric Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cycle-intelligence/metrics/:metric_id/data?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cycle-intelligence",
                "metrics",
                ":metric_id",
                "data"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "all",
                  "description": "Timeframe: 90d, 180d, 1y, 2y, 5y, 10y, all",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get time series data for a Cycle Intelligence metric.\n\nServer-side tier gating: if user doesn't have access, returns 403.\nFree-tier metrics serve full data (all timeframes, price overlay included)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/cycle-intelligence/pipeline/status - Get Cycle Pipeline Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cycle-intelligence/pipeline/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cycle-intelligence",
                "pipeline",
                "status"
              ]
            },
            "description": "Admin only - Get Cycle Intelligence pipeline sync status."
          },
          "response": []
        }
      ]
    },
    {
      "name": "dashboard-features",
      "description": "Trinity Insights REST API - endpoints under the dashboard-features tag.",
      "item": [
        {
          "name": "DELETE /api/v1/dashboards/{dashboard_id}/comments/{comment_id} - Delete a comment",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/comments/:comment_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "comments",
                ":comment_id"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                },
                {
                  "key": "comment_id",
                  "value": "value"
                }
              ]
            },
            "description": "Delete a comment"
          },
          "response": []
        },
        {
          "name": "DELETE /api/v1/dashboards/{dashboard_id}/follow - Unfollow a public dashboard",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/follow",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "follow"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Unfollow a public dashboard"
          },
          "response": []
        },
        {
          "name": "DELETE /api/v1/dashboards/{dashboard_id}/journal/{entry_id} - Delete journal entry",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/journal/:entry_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "journal",
                ":entry_id"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                },
                {
                  "key": "entry_id",
                  "value": "value"
                }
              ]
            },
            "description": "Delete journal entry"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/{dashboard_id}/briefing - Get morning briefing (top changes)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/briefing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "briefing"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Morning briefing: compare current state to last snapshot, return top N changes."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/{dashboard_id}/comments - List dashboard comments",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/comments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "comments"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "List dashboard comments"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/{dashboard_id}/journal - List journal entries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/journal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "journal"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "List journal entries"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/{dashboard_id}/playbook - Get dashboard playbook",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/playbook",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "playbook"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get dashboard playbook"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/{dashboard_id}/snapshots - List dashboard snapshots",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/snapshots?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "snapshots"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "30",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "List dashboard snapshots"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/portfolio/me - Get user portfolio",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/portfolio/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                "portfolio",
                "me"
              ]
            },
            "description": "Get user portfolio"
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/audit - Audit dashboard composition",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/audit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "audit"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Rule-based dashboard composition audit. Not financial advice."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/comments - Add a comment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/comments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "comments"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Add a comment",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/follow - Follow a public dashboard",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/follow",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "follow"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Follow a public dashboard to get updates."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/journal - Create journal entry",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/journal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "journal"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Create journal entry",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/playbook - Create or update playbook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/playbook",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "playbook"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Create or update playbook",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/snapshot - Capture a dashboard snapshot",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/snapshot",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "snapshot"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Capture a dashboard snapshot",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PUT /api/v1/dashboards/{dashboard_id}/journal/{entry_id} - Update journal entry",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/journal/:entry_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "journal",
                ":entry_id"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                },
                {
                  "key": "entry_id",
                  "value": "value"
                }
              ]
            },
            "description": "Update journal entry",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "PUT /api/v1/dashboards/portfolio/me - Update user portfolio",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/portfolio/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                "portfolio",
                "me"
              ]
            },
            "description": "Update user portfolio",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "dashboards",
      "description": "Trinity Insights REST API - endpoints under the dashboards tag.",
      "item": [
        {
          "name": "DELETE /api/v1/dashboards/{dashboard_id} - Delete a dashboard",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Delete a dashboard"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards - List user dashboards",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards"
              ]
            },
            "description": "List user dashboards"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/{dashboard_id} - Get a dashboard by ID",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get a dashboard by ID"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/public - List public dashboards (gallery)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/public?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                "public"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "20",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "fork_count",
                  "disabled": true
                }
              ]
            },
            "description": "Public endpoint - no auth required. Returns paginated public dashboards."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/dashboards/share/{slug} - Get a public dashboard by share slug",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/share/:slug",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                "share",
                ":slug"
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Public endpoint - no auth required. Returns read-only dashboard data."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards - Create a new dashboard",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards"
              ]
            },
            "description": "Create a new dashboard",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/add-widget - Add a widget to an existing dashboard",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/add-widget",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "add-widget"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Add a single widget to an existing dashboard (1-click add from any Trinity page).",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/{dashboard_id}/duplicate - Duplicate a dashboard",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id/duplicate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id",
                "duplicate"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Duplicate a dashboard"
          },
          "response": []
        },
        {
          "name": "POST /api/v1/dashboards/fork/{slug} - Fork a public dashboard",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/fork/:slug",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                "fork",
                ":slug"
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Fork a public dashboard into the current user's account."
          },
          "response": []
        },
        {
          "name": "PUT /api/v1/dashboards/{dashboard_id} - Update a dashboard (autosave)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dashboards/:dashboard_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "dashboards",
                ":dashboard_id"
              ],
              "variable": [
                {
                  "key": "dashboard_id",
                  "value": "value"
                }
              ]
            },
            "description": "Update a dashboard (autosave)",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "data-export",
      "description": "Trinity Insights REST API - endpoints under the data-export tag.",
      "item": [
        {
          "name": "POST /api/v1/account/data-export - Request Data Export",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/account/data-export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "account",
                "data-export"
              ]
            },
            "description": "RGPD Art. 20 - request a portable copy of your data by email.\n\nRevokes any previous unconsumed token for this user, mints a fresh\nsingle-use token (~1h TTL), and emails a link to the frontend download\npage. Best-effort email: a delivery failure does not fail the request."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/account/data-export/download - Download Data Export",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/account/data-export/download",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "account",
                "data-export",
                "download"
              ]
            },
            "description": "PUBLIC by design - download your data using the single-use token.\n\nNo Clerk dependency: possession of the single-use, short-lived token IS the\nauth (conscious derogation to the Depends-auth-on-/api/* rule - see module\ndocstring). The token arrives in the BODY, never the URL. It is consumed\nATOMICALLY before any data is served, so a link pre-fetch (Gmail/Outlook)\nor a second click cannot replay it. Rejections are a generic 403 - we never\nreveal whether the token was unknown, expired, or already used.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "exchange-intelligence",
      "description": "Trinity Insights REST API - endpoints under the exchange-intelligence tag.",
      "item": [
        {
          "name": "GET /api/v1/exchange-intelligence/families - List Families",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-intelligence/families",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-intelligence",
                "families"
              ]
            },
            "description": "List all functional families with chart counts + tier distribution.\n\nPublic endpoint - used by the hub page to render the family grid."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-intelligence/families/{family} - List Family Charts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-intelligence/families/:family",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-intelligence",
                "families",
                ":family"
              ],
              "variable": [
                {
                  "key": "family",
                  "value": "value"
                }
              ]
            },
            "description": "List all charts for a given family (e.g. /families/open-interest)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-intelligence/metrics - List Metrics",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-intelligence/metrics?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-intelligence",
                "metrics"
              ],
              "query": [
                {
                  "key": "tier",
                  "value": "value",
                  "description": "Filter by tier (free | pro | performance).",
                  "disabled": true
                },
                {
                  "key": "layer",
                  "value": "value",
                  "description": "Filter by architectural layer (A | B | C | D | E).",
                  "disabled": true
                },
                {
                  "key": "family",
                  "value": "value",
                  "description": "Filter by functional family. One of: open-interest | funding-rate | liquidations | long-short-ratio | basis-premium | volume | composite | cme | dex.",
                  "disabled": true
                }
              ]
            },
            "description": "List all Exchange Intelligence metric metadata, filterable.\n\nPublic endpoint - returns full catalog metadata (no time-series).\nPer-chart access remains gated at `/metrics/{slug}/data`.\n\nFiltering is registry-driven (always 30 charts; DB metadata is\nconsulted only to enrich `source_provider` + `attribution_text`)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-intelligence/metrics/{metric_id}/data - Get Metric Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-intelligence/metrics/:metric_id/data?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-intelligence",
                "metrics",
                ":metric_id",
                "data"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "30d",
                  "description": "Timeframe granularity. Valid: live, 7d, 30d, 90d, 1y, all",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "value",
                  "description": "Optional asset filter (BTC / ETH / SOL / XRP / DOGE / BNB). V1.1 wire - currently only BTC backfill is available; other assets gracefully return empty payload until V1.2 multi-asset sync (sync_derivatives_coinalyze.py ETH/SOL/... backfill).",
                  "disabled": true
                },
                {
                  "key": "symbol",
                  "value": "value",
                  "description": "Optional quote symbol filter (USDT / USDC / USD). Backend wire V1.2 - currently ignored as data is USDT-aggregated.",
                  "disabled": true
                },
                {
                  "key": "exchange",
                  "value": "value",
                  "description": "Optional exchange filter ('all' or specific venue). When data metadata exposes per-exchange dict, frontend filters client-side.",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get time-series data for an Exchange Intelligence metric.\n\nServer-side tier gating: returns 403 if user tier < metric tier.\nFree-tier metrics serve full data regardless of timeframe.\n\nAsset / symbol / exchange filters (V1.1 Vague 2 + 4) :\n  - asset : BTC (default backfilled) / ETH / SOL / XRP / DOGE / BNB.\n    Non-BTC return empty payload until V1.2 multi-asset sync ships.\n  - symbol : USDT (default) / USDC / USD - currently ignored backend.\n  - exchange : 'all' = no filter, OR specific venue name (client-side\n    filter via metadata.byExchange dict).\n\nOG render bypass: requests carrying `X-OG-Render-Secret` (matching\n`OG_RENDER_SECRET` env) skip the tier gate - used by Next.js OG\nimage route + Trinity Audit Engine sampler."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-intelligence/metrics/{metric_id}/metadata - Get Metric Metadata",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-intelligence/metrics/:metric_id/metadata",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-intelligence",
                "metrics",
                ":metric_id",
                "metadata"
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Single-metric metadata (no time-series)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "exchange-v2",
      "description": "Trinity Insights REST API - endpoints under the exchange-v2 tag.",
      "item": [
        {
          "name": "GET /api/v1/exchange-v2/cot - Lire Cot",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/cot?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "cot"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/cot/exchange-cot-leveraged-vs-asset-managers - Lire E82",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/cot/exchange-cot-leveraged-vs-asset-managers?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "cot",
                "exchange-cot-leveraged-vs-asset-managers"
              ],
              "query": [
                {
                  "key": "subject",
                  "value": "BTC",
                  "description": "Sous-jacent : BTC, ETH, SOL ou XRP.",
                  "disabled": true
                },
                {
                  "key": "jeu",
                  "value": "futures",
                  "description": "Jeu Socrata : futures seuls ou combines (options).",
                  "disabled": true
                },
                {
                  "key": "contrat",
                  "value": "dates",
                  "description": "'dates' (tous les futures a echeance, convertis) ou un code CFTC a echeance.",
                  "disabled": true
                }
              ]
            },
            "description": "E82 Portage institutionnel : net des fonds a levier face aux gerants, en unites de l'actif."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/cot/exchange-cot-open-interest - Lire E81",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/cot/exchange-cot-open-interest?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "cot",
                "exchange-cot-open-interest"
              ],
              "query": [
                {
                  "key": "subject",
                  "value": "BTC",
                  "description": "Sous-jacent : BTC, ETH, SOL ou XRP.",
                  "disabled": true
                }
              ]
            },
            "description": "E81 Open interest des futures reglementes : par contrat + agregat, en unites de l'actif."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/cot/exchange-cot-positioning - Lire E80",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/cot/exchange-cot-positioning?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "cot",
                "exchange-cot-positioning"
              ],
              "query": [
                {
                  "key": "subject",
                  "value": "BTC",
                  "description": "Sous-jacent : BTC, ETH, SOL ou XRP.",
                  "disabled": true
                },
                {
                  "key": "categorie",
                  "value": "dealer_intermediary",
                  "description": "Categorie de declarant TFF.",
                  "disabled": true
                },
                {
                  "key": "jeu",
                  "value": "futures",
                  "description": "Jeu Socrata : futures seuls ou combines (options).",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "brut",
                  "description": "brut | net | pct_oi | traders.",
                  "disabled": true
                },
                {
                  "key": "contrat",
                  "value": "value",
                  "description": "Code CFTC du contrat affiche (standard/micro/nano/perp style/historique) ; par defaut le contrat CME standard du sujet.",
                  "disabled": true
                }
              ]
            },
            "description": "E80 Positionnement declare (COT) : categorie x jeu x unite x contrat, par semaine."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/cot/exchange-us-perp-style-futures - Lire E83",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/cot/exchange-us-perp-style-futures?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "cot",
                "exchange-us-perp-style-futures"
              ],
              "query": [
                {
                  "key": "actif",
                  "value": "value",
                  "description": "Sous-jacent d'un contrat perp style ; absent : tous, en USD.",
                  "disabled": true
                }
              ]
            },
            "description": "E83 Perpetuels reglementes americains : open interest et positions par contrat perp style."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/dex - Lire Dex",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/dex?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "dex"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/dex/exchange-dex-share - Lire E70",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/dex/exchange-dex-share?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "dex",
                "exchange-dex-share"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E70 Part des places decentralisees : part CEX/DEX, repartition des DEX."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/dex/exchange-hyperliquid-liquidator-vault - Lire E73",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/dex/exchange-hyperliquid-liquidator-vault?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "dex",
                "exchange-hyperliquid-liquidator-vault"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E73 Coffre liquidateur d'Hyperliquid : positions reprises, résultat cumulé."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/dex/exchange-hyperliquid-markets - Lire E71",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/dex/exchange-hyperliquid-markets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "dex",
                "exchange-hyperliquid-markets"
              ]
            },
            "description": "E71 Marches Hyperliquid : classement par open interest, lecture directe."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/dex/exchange-rwa-perpetuals - Lire E72",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/dex/exchange-rwa-perpetuals?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "dex",
                "exchange-rwa-perpetuals"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E72 Perpétuels sur actifs réels : pile par place, marchés, marchés écartés."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/ensemble - Lire Ensemble",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/ensemble?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "ensemble"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/ensemble/actifs - Lire Actifs",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/ensemble/actifs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "ensemble",
                "actifs"
              ]
            },
            "description": "Actifs du selecteur global (cahier §3.3) : palier et collecte effective.\n\n`logos` (audit du 27/09, T1) : la table complete symbole -> logo du registre\n`exchange_asset_logos` (repli `screener_assets`), pour que le web resolve le\nlogo de TOUT actif affiche, pas seulement des actifs du selecteur. Les URL\nsont celles deja servies par la rubrique (CDN CoinGecko ou chemins du\ndepot), jamais un lien vers un site tiers."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/ensemble/exchange-derivatives-dashboard - Lire E01",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/ensemble/exchange-derivatives-dashboard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "ensemble",
                "exchange-derivatives-dashboard"
              ]
            },
            "description": "E01 Tableau de bord des dérivés : six chiffres clés + trois mini-courbes."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/ensemble/exchange-derivatives-screener - Lire E02",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/ensemble/exchange-derivatives-screener",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "ensemble",
                "exchange-derivatives-screener"
              ]
            },
            "description": "E02 Ecran des actifs : palier partiel filtre cote serveur pour le gratuit."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/ensemble/exchange-leverage-heatmap - Lire E03",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/ensemble/exchange-leverage-heatmap?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "ensemble",
                "exchange-leverage-heatmap"
              ],
              "query": [
                {
                  "key": "horizon",
                  "value": "24h",
                  "description": "Bascule de variation : 24 h ou 7 j.",
                  "disabled": true
                },
                {
                  "key": "centile",
                  "value": "false",
                  "description": "Remplace la variation par le centile propre de chaque actif (n. d. tant que l'historique est trop court).",
                  "disabled": true
                }
              ]
            },
            "description": "E03 Carte du levier : treemap top 100 par open interest."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/ensemble/exchange-leverage-split - Lire E04",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/ensemble/exchange-leverage-split",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "ensemble",
                "exchange-leverage-split"
              ]
            },
            "description": "E04 Répartition du levier : aire empilée à 100 % Bitcoin / Ether / autres actifs."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/ensemble/exchange-market-breadth - Lire E05",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/ensemble/exchange-market-breadth?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "ensemble",
                "exchange-market-breadth"
              ],
              "query": [
                {
                  "key": "famille",
                  "value": "prix",
                  "description": "Tranches de variation de prix, d'open interest ou de funding.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "24h",
                  "description": "Horizon des variations (le funding se lit à son niveau).",
                  "disabled": true
                }
              ]
            },
            "description": "E05 Étendue du marché : tranches fixes et annotées, historique des parts."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/evenements - Lire Evenements",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/evenements?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "evenements"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Série de la famille dans l'enveloppe commune (vide : la vue passe par sa route)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/evenements/exchange-detected-events - Lire Journal",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/evenements/exchange-detected-events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "evenements",
                "exchange-detected-events"
              ]
            },
            "description": "Journal des événements détectés : tout l'historique, du plus récent au plus ancien."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/flux - Lire Flux",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/flux?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "flux"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/flux/exchange-average-trade-size - Lire E45",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/flux/exchange-average-trade-size?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "flux",
                "exchange-average-trade-size"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E45 Taille moyenne des transactions des perpetuels retenus : volume /\nnombre de transactions, strictement positive ; cote acheteur en `value3`,\ncote vendeur dans `payload.vendeurs`, nombre de transactions en `value4`."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/flux/exchange-derivatives-spot-volume-ratio - Lire E43",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/flux/exchange-derivatives-spot-volume-ratio?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "flux",
                "exchange-derivatives-spot-volume-ratio"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E43 Part des derives dans le volume total (comptant + perpetuels\nretenus), bornee 0-100 %, sans appariement par place."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/flux/exchange-oi-participation - Lire E44",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/flux/exchange-oi-participation?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "flux",
                "exchange-oi-participation"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E44 Participation : variation d'open interest du seau rapportee au\nvolume du seau, bornee ±100 % (valeur ecretee dite en note)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/flux/exchange-perp-cvd - Lire E40",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/flux/exchange-perp-cvd?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "flux",
                "exchange-perp-cvd"
              ],
              "query": [
                {
                  "key": "ancrage",
                  "value": "fenetre",
                  "description": "fenetre | jour | semaine | mois — point de depart du cumul.",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E40 Delta de volume cumule des perpetuels : ancrage reglable et affiche."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/flux/exchange-spot-vs-perp-cvd - Lire E41",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/flux/exchange-spot-vs-perp-cvd?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "flux",
                "exchange-spot-vs-perp-cvd"
              ],
              "query": [
                {
                  "key": "regroupement",
                  "value": "places",
                  "description": "places | zone — mode « Par zone » (regroupement du cote comptant, L3-d).",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E41 Delta de volume comptant contre perpetuels, normalise par le volume\npropre a chaque cote (axe commun), sans appariement par place. Mode\n« Par zone » : le cote comptant est scinde en places regulees americaines\ncontre offshore, chacune normalisee par son propre volume cumule."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/flux/exchange-taker-imbalance - Lire E42",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/flux/exchange-taker-imbalance?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "flux",
                "exchange-taker-imbalance"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E42 Desequilibre acheteur / vendeur : volume d'initiative par seau,\nborne de -1 a +1 (jamais un libelle long / short pour un volume)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis - Lire Funding Basis",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-constant-maturity-basis - Lire E27",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-constant-maturity-basis?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-constant-maturity-basis"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E27 Basis annualisee a maturite constante de trois mois."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-cumulative-funding-cost - Lire E23",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-cumulative-funding-cost?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-cumulative-funding-cost"
              ],
              "query": [
                {
                  "key": "fenetre",
                  "value": "7d",
                  "description": "7d | 30d | 90d | 365d",
                  "disabled": true
                },
                {
                  "key": "base",
                  "value": "pct",
                  "description": "pct | usd",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E23 Cout de portage du levier : cout cumule d'une position longue.\n\n`pct` rend le cout en fraction (le client l'affiche en pourcentage), `usd`\nen dollars pour la position de reference de 1 000 $ (cahier §4.3). Les\nquatre fenetres sont servies ensemble dans `cumulative`."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-funding-dispersion - Lire E24",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-funding-dispersion?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-funding-dispersion"
              ],
              "query": [
                {
                  "key": "base",
                  "value": "8h",
                  "description": "8h | annualized",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E24 Dispersion du funding entre places : ecart max-min et ecart-type."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-funding-matrix - Lire E21",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-funding-matrix?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-funding-matrix"
              ],
              "query": [
                {
                  "key": "mode",
                  "value": "reel",
                  "description": "reel | predit",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "8h",
                  "description": "8h | annualized",
                  "disabled": true
                },
                {
                  "key": "tri",
                  "value": "oi",
                  "description": "oi | funding | spread",
                  "disabled": true
                }
              ]
            },
            "description": "E21 Matrice du funding : actifs x places, base commune de 8 h."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-funding-matrix/historique - Lire E21 Historique",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-funding-matrix/historique?asset=value&venue=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-funding-matrix",
                "historique"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "value",
                  "disabled": false
                },
                {
                  "key": "venue",
                  "value": "value",
                  "disabled": false
                },
                {
                  "key": "unite",
                  "value": "8h",
                  "disabled": true
                }
              ]
            },
            "description": "Historique horaire d'une cellule de la matrice (30 jours)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-funding-persistence - Lire E22",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-funding-persistence?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-funding-persistence"
              ],
              "query": [
                {
                  "key": "unite",
                  "value": "8h",
                  "description": "8h | annualized",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "90d | 1y",
                  "disabled": true
                }
              ]
            },
            "description": "E22 Persistance du funding : tableau-ecran triable, top 50 par OI."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-futures-term-structure - Lire E26",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-futures-term-structure?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-futures-term-structure"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E26 Structure par terme des contrats a echeance (courbes par etat)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-oi-weighted-funding - Lire E20",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-oi-weighted-funding?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-oi-weighted-funding"
              ],
              "query": [
                {
                  "key": "mode",
                  "value": "reel",
                  "description": "reel | predit",
                  "disabled": true
                },
                {
                  "key": "base",
                  "value": "8h",
                  "description": "8h | annualized",
                  "disabled": true
                },
                {
                  "key": "place",
                  "value": "value",
                  "description": "Place isolee pour la bascule 'par place'.",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E20 Funding pondere par l'open interest : serie temporelle, double axe."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/funding-basis/exchange-perp-spot-premium - Lire E25",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/funding-basis/exchange-perp-spot-premium?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "funding-basis",
                "exchange-perp-spot-premium"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E25 Ecart perpetuel / comptant : une ligne par place appariee (LignesParPlace),\nplus l'agregat pondere par l'OI du perpetuel pour le bandeau des chiffres cles.\nPas de bascule 'place isolee' : le masquage se fait par la legende du graphique."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures - Lire Lectures",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-derivatives-onchain-bridge - Lire J5",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-derivatives-onchain-bridge?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-derivatives-onchain-bridge"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "J5 Pont dérivés et on-chain : BTC seulement (V2)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-derivatives-regime - Lire J1",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-derivatives-regime?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-derivatives-regime"
              ],
              "query": [
                {
                  "key": "jours",
                  "value": "90",
                  "description": "Fenêtre relue en jours (matrice actifs × jours).",
                  "disabled": true
                }
              ]
            },
            "description": "J1 Régime des dérivés : matrice d'états actifs × jours."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-leverage-stress - Lire J2",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-leverage-stress?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-leverage-stress"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "J2 Tension du levier : score 0-100 par actif contre son historique propre."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-price-of-leverage - Lire J6",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-price-of-leverage?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-price-of-leverage"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "J6 Prix du levier : funding annualisé, basis à trois mois, taux sans risque."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-sector-leverage-rotation - Lire J3",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-sector-leverage-rotation?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-sector-leverage-rotation"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "J3 Rotation du levier par secteur : parts d'OI, variation, funding pondéré."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-session-seasonality - Lire J8",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-session-seasonality?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-session-seasonality"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "J8 Saisonnalité : moyennes par séance et semaine / week-end, avec leur\nnombre d'observations et leur intervalle de confiance (statistique\ndescriptive de l'historique rendu)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-trinity-composites - Lire Composites",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-trinity-composites?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-trinity-composites"
              ],
              "query": [
                {
                  "key": "composite",
                  "value": "tfpi",
                  "description": "Composite classé et tracé (les trois autres sont servis en colonnes).",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Les quatre composites en multi-actifs (F175)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-trinity-derivatives-index - Lire J7",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-trinity-derivatives-index?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-trinity-derivatives-index"
              ],
              "query": [
                {
                  "key": "secteur",
                  "value": "value",
                  "description": "Sous-indice sectoriel tracé en secondaire (identifiant de secteur).",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "J7 Indice des dérivés Trinity : niveau, sous-indices, rebalancements datés."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/lectures/exchange-venue-fragmentation - Lire J4",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/lectures/exchange-venue-fragmentation?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "lectures",
                "exchange-venue-fragmentation"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "J4 Fragmentation des places : score 0-100 et les trois écarts mesurés."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/liquidations - Lire Liquidations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/liquidations?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "liquidations"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/liquidations/exchange-hyperliquid-liquidation-levels - Lire E36",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/liquidations/exchange-hyperliquid-liquidation-levels",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "liquidations",
                "exchange-hyperliquid-liquidation-levels"
              ]
            },
            "description": "E36 Prix de liquidation des positions Hyperliquid (positions reelles).\n\nAgregats seuls : la table ne porte aucune adresse. La part de l'OI\ncouverte est mesuree (somme des positions lues / OI Hyperliquid), jamais\nextrapolee. Place unique (`Hyperliquid`) dite comme telle par la vue."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/liquidations/exchange-largest-liquidation-days - Lire E33",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/liquidations/exchange-largest-liquidation-days",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "liquidations",
                "exchange-largest-liquidation-days"
              ]
            },
            "description": "E33 Journees record : classement des journees les plus lourdes.\n\nLu sur les liquidations journalieres DEJA collectees (depuis 2019 pour les\nmarches retenus) : aucune recollecte, aucun appel source. La place\ndominante n'existe que pour les journees ou la collecte par place la sert\n(raison dite sinon) ; l'evenement n'est attache que s'il est dans la table\na source officielle."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/liquidations/exchange-liquidation-heatmap - Lire E34",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/liquidations/exchange-liquidation-heatmap?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "liquidations",
                "exchange-liquidation-heatmap"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E34 Carte des liquidations : matrice actifs x jours, liquidations / OI.\n\nEchelle FIXE (`S.ECHELLE_E34_PCT`), jours sans valeur gris « n. d. »,\naucun style propre. Lecture des barres journalieres deja collectees."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/liquidations/exchange-liquidation-intensity - Lire E32",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/liquidations/exchange-liquidation-intensity?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "liquidations",
                "exchange-liquidation-intensity"
              ],
              "query": [
                {
                  "key": "denominateur",
                  "value": "oi",
                  "description": "Denominateur de l'intensite : open interest moyen (defaut) ou capitalisation connue (bascule V2, au plus 24 h).",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E32 Intensite des liquidations : classement multi-actifs + historique\nde l'actif selectionne (graphique d'appoint) avec le badge de centile.\n\nBascule V2 `denominateur=capitalisation` : la capitalisation n'est jamais\nhistorisee brute (doctrine cahier §9.3.1) ; une capitalisation absente ou\nvieille de plus de 24 h laisse la valeur « n. d. » avec sa raison."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/liquidations/exchange-liquidations-by-venue - Lire E31",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/liquidations/exchange-liquidations-by-venue?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "liquidations",
                "exchange-liquidations-by-venue"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E31 Liquidations par place : classement, montants ou part de l'OI de la place."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/liquidations/exchange-long-short-liquidations - Lire E30",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/liquidations/exchange-long-short-liquidations?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "liquidations",
                "exchange-long-short-liquidations"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "24h | 7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "minute | 5min | hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E30 Liquidations longues et courtes : barres miroir, montants planchers.\n\nPeriodes fines alimentees par la table minute : 24 h a la minute, 7 j par\nseaux de 5 minutes (pas `minute` et `5min`), avec KPI « derniere heure » et\n« dernieres 24 h » calcules sur les seules periodes closes."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest - Lire Open Interest",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-aggregated-open-interest - Lire E10",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-aggregated-open-interest?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-aggregated-open-interest"
              ],
              "query": [
                {
                  "key": "ancrage",
                  "value": "aucun",
                  "description": "Ancrage de la série : aucun | jour | semaine | fenetre (base 100 à la première tranche de la période).",
                  "disabled": true
                },
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E10 Open interest agrege : OI, prix de reference, effet prix isole, ancrage reglable."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-leverage-ratio - Lire E13",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-leverage-ratio?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-leverage-ratio"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "value",
                  "description": "Actif pour l'historique du ratio (clic) ; absent = classement.",
                  "disabled": true
                }
              ]
            },
            "description": "E13 Levier relatif : classement OI / capitalisation, historique du ratio au clic."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-open-interest-by-margin - Lire E14",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-open-interest-by-margin?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-open-interest-by-margin"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E14 Open interest par type de collatéral : pile linéaire / inversé, en USD ou en part."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-open-interest-by-venue - Lire E11",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-open-interest-by-venue?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-open-interest-by-venue"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E11 Open interest par place et parts : pile par place et barres courantes."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-open-interest-change - Lire E12",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-open-interest-change?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-open-interest-change"
              ],
              "query": [
                {
                  "key": "horizon",
                  "value": "1h",
                  "description": "1h | 24h | 7d — vrai horizon, jamais un écart entre deux photographies quotidiennes.",
                  "disabled": true
                },
                {
                  "key": "min_places",
                  "value": "2",
                  "description": "Nombre minimal de places retenues pour qu'un actif figure au classement.",
                  "disabled": true
                }
              ]
            },
            "description": "E12 Variation de l'open interest : classement signé par vrai horizon, z-score sur l'historique propre."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-open-interest-concentration - Lire E17",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-open-interest-concentration?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-open-interest-concentration"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                }
              ]
            },
            "description": "E17 Concentration de l'open interest : Pareto des marchés retenus, calcul Coinalyze seul."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-perpetual-vs-dated-oi - Lire E15",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-perpetual-vs-dated-oi?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-perpetual-vs-dated-oi"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E15 Perpétuels contre contrats à échéance : pile des deux versants, daté nommé."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/open-interest/exchange-price-oi-regime-map - Lire E16",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/open-interest/exchange-price-oi-regime-map?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "open-interest",
                "exchange-price-oi-regime-map"
              ],
              "query": [
                {
                  "key": "fenetre",
                  "value": "1h",
                  "description": "1h | 24h | 7d",
                  "disabled": true
                }
              ]
            },
            "description": "E16 Regime prix x open interest : un point par actif."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places - Lire Places",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-extended-venue-overview - Lire E66",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-extended-venue-overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-extended-venue-overview"
              ]
            },
            "description": "E66 Panorama elargi des places de derives : agregats CoinGecko seulement.\n\nLe dernier instantane ecrit par `aggregate_exchange_places.py` (agregats\npar place : interets ouverts, volumes 24 h, comptes, identites) ; aucune\nserie historique brute, aucune valeur brute CoinGecko servie au-dela de\n24 h. Pied « Powered by CoinGecko »."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-listing-footprint - Lire E65",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-listing-footprint",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-listing-footprint"
              ]
            },
            "description": "E65 Empreinte de cotation : sur combien de places un actif se traite.\n\nPlaces distinctes du referentiel, en perpetuel et au comptant ; deux\nmarches du meme actif sur la meme place ne comptent qu'une place."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-market-depth - Lire E63",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-market-depth?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-market-depth"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "24h",
                  "disabled": true
                }
              ]
            },
            "description": "E63 Profondeur de marche a +/-2 % (lot L4-e, F185).\n\nInstantane CoinGecko du jour par place et par paire au comptant (moins de\n24 h, jamais plus : doctrine §9.3.1) et carnet du perpetuel Hyperliquid,\nhistorise (planchers, encadrement, resolution du carnet agrege, rapport a\nl'open interest, desequilibre). La serie porte l'historique Hyperliquid :\n`value` profondeur totale (plancher), `value2` prix median, `value3`\ndesequilibre."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-new-perpetual-listings - Lire E64",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-new-perpetual-listings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-new-perpetual-listings"
              ]
            },
            "description": "E64 Nouvelles cotations de perpetuels : apparues apres le premier jour du referentiel.\n\nUn marche present des le premier jour du referentiel n'est pas une nouvelle\ncotation (temoin dedie). La montee d'open interest est servie a 7 et 30\njours depuis l'apparition ; une barre absente laisse un trou, jamais un\nzero."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-venue-market-share - Lire E60",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-venue-market-share?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-venue-market-share"
              ],
              "query": [
                {
                  "key": "metrique",
                  "value": "oi",
                  "description": "oi | volume | volume_spot : grandeur repartie entre les places.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "hour",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "zone",
                  "value": "false",
                  "description": "Regroupe les places par zone (regulees americaines / offshore, convention E41).",
                  "disabled": true
                },
                {
                  "key": "secteur",
                  "value": "value",
                  "description": "Restreint aux actifs du secteur donne (J3, source CoinGecko).",
                  "disabled": true
                }
              ]
            },
            "description": "E60 Parts de marche des places (V2 : volume comptant, zones, secteur).\n\nTrois modes de source : la serie de place agregee (`exchange_venue_bars`)\npour open interest et volume perpetuels ; les barres de marche pour le\nvolume comptant (aucune recollecte : la classe `comptant` collecte deja)\net pour le filtre secteur (appartenances `exchange_asset_sectors`, derniere\nconnue). Le regroupement par zone suit la convention de E41 (arbitrage\nC0 §6) et ne s'applique jamais a un secteur inconnu : la vue dit alors\nqu'elle n'a rien a servir plutot que d'inventer une repartition."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-venue-profile - Lire E61",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-venue-profile?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-venue-profile"
              ],
              "query": [
                {
                  "key": "venue",
                  "value": "value",
                  "description": "Slug ou code de la place ; absent : classement factuel des places.",
                  "disabled": true
                }
              ]
            },
            "description": "E61 Fiche place : faits mesures, aucun score ni note.\n\nSans `venue`, la reponse sert le classement factuel des places (tableau).\nAvec `venue`, elle ajoute la fiche complete de la place (serie agregee,\nactifs listes, completude de publication, rotation, reserves declarees,\nincidents sources). Une place inconnue rend un etat explicite, jamais une\nerreur : `payload.connue = false` et la liste des places servies."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-venue-reserves - Lire E67",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-venue-reserves",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-venue-reserves"
              ]
            },
            "description": "E67 Reserves des places : soldes declares, source nommee place par place.\n\nReutilise la collecte existante (`sync_exchange_reserves.py`, remise sous\nlicence par F142) ; aucune source nouvelle n'est branchee. Une place\ncoupee par F142 n'apparait nulle part (jamais un zero) ; une place en\nrecalcul ou sans liste publiee est nommee hors de toute somme. La\nvariation nette n'est pas un flux."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/places/exchange-volume-consistency - Lire E62",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/places/exchange-volume-consistency?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "places",
                "exchange-volume-consistency"
              ],
              "query": [
                {
                  "key": "pas",
                  "value": "day",
                  "description": "Pas quotidien (rotation close).",
                  "disabled": true
                }
              ]
            },
            "description": "E62 Coherence du volume : rotation volume / OI par place et par jour.\n\nTexte descriptif seulement : un ecart a la mediane du marche peut avoir\ndes causes legitimes (structure de frais, programmes de volume,\ninstruments). Aucune accusation, aucune note."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/positionnement - Lire Positionnement",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/positionnement?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "positionnement"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "Serie de la famille dans l'enveloppe commune ; vide tant qu'aucune vue n'est remplie."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/positionnement/exchange-account-long-short-ratio - Lire E50",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/positionnement/exchange-account-long-short-ratio?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "positionnement",
                "exchange-account-long-short-ratio"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E50 : ratio de comptes longs/courts par place, sans agrégat.\n\nL'enveloppe commune `enveloppe_vue_actif` suppose une série AGRÉGÉE\n(un seul `value` par point) ; E50 n'en calcule aucun (cahier §4.6). La\ncharge par place vit donc dans `payload.points`, `series` reste vide."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/positionnement/exchange-hyperliquid-positioning - Lire E51",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/positionnement/exchange-hyperliquid-positioning?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "positionnement",
                "exchange-hyperliquid-positioning"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E51 : répartition des positions ouvertes sur Hyperliquid par taille de\ncompte, en nombre de comptes et en montant (échantillon, agrégats seuls).\n\nPlace unique (`Hyperliquid`) dite comme telle ; aucune adresse n'existe\ndans la table lue. Le filtre des places ne s'applique pas (une seule place) ;\nseuls `asset`, `horizon` et `pas` sont utilisés."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/positionnement/exchange-korea-premium - Lire E53",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/positionnement/exchange-korea-premium?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "positionnement",
                "exchange-korea-premium"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E53 : prime coréenne, granularité quotidienne (le change officiel est\nquotidien), place coréenne unique servie par la source (Bithumb)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/exchange-v2/positionnement/exchange-us-spot-premium - Lire E52",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/exchange-v2/positionnement/exchange-us-spot-premium?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "exchange-v2",
                "positionnement",
                "exchange-us-spot-premium"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "description": "Actif suivi (BTC par défaut).",
                  "disabled": true
                },
                {
                  "key": "venues",
                  "value": "value",
                  "description": "Places retenues ; vide = toutes les places servies.",
                  "disabled": true
                },
                {
                  "key": "horizon",
                  "value": "90d",
                  "description": "7d | 30d | 90d | 180d | 1y | 2y | all.",
                  "disabled": true
                },
                {
                  "key": "pas",
                  "value": "day",
                  "description": "hour | day.",
                  "disabled": true
                },
                {
                  "key": "unite",
                  "value": "usd",
                  "description": "usd | asset | pct | annualized | raw.",
                  "disabled": true
                }
              ]
            },
            "description": "E52 : prime BTC/ETH/SOL. Vue multi-actifs fixe (arbitrage C0 §6) :\n`asset`/`venues` du paramétrage commun ne s'appliquent pas ici (comme\nE01/E04 de la famille `ensemble`), seul `horizon`/`pas` est utilisé."
          },
          "response": []
        }
      ]
    },
    {
      "name": "factor",
      "description": "Trinity Insights REST API - endpoints under the factor tag.",
      "item": [
        {
          "name": "GET /api/v1/factor/saved - List Saved Factors",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/factor/saved",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "factor",
                "saved"
              ]
            },
            "description": "List saved custom factors for the authenticated user.\n\nReturns all previously generated and saved factors with\ntheir definitions, performance metrics, and last update time.\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/factor/generate - Generate Factor",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/factor/generate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "factor",
                "generate"
              ]
            },
            "description": "Generate a custom on-chain factor from a natural language prompt.\n\nAccepts a text prompt describing the desired factor (e.g.,\n\"ratio of 1y+ HODL supply to total supply, smoothed 30d\"),\nvalidates feasibility against available BRK metrics, and\nreturns the computed factor with backtested performance.\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        }
      ]
    },
    {
      "name": "foresight",
      "description": "Trinity Insights REST API - endpoints under the foresight tag.",
      "item": [
        {
          "name": "GET /api/v1/foresight/calibration/{asset}/{timeframe} - Get Foresight Calibration",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/foresight/calibration/:asset/:timeframe",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "foresight",
                "calibration",
                ":asset",
                ":timeframe"
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                },
                {
                  "key": "timeframe",
                  "value": "value"
                }
              ]
            },
            "description": "Return the Calibration Lab payload for (asset, timeframe).\n\nPayload comes from the offline `foresight.calibrate_metrics` CLI that\nruns nightly on Hetzner. Gating is Performance+ - above base Foresight -\nbecause the methodology details are a paid-tier differentiator.\n\nReturns 404 when no sidecar has been published yet for the pair,\n400 for unsupported tuples, and 500 on schema mismatch."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/foresight/chunks/{chunk_id} - Get Foresight Chunk",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/foresight/chunks/:chunk_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "foresight",
                "chunks",
                ":chunk_id"
              ],
              "variable": [
                {
                  "key": "chunk_id",
                  "value": "value"
                }
              ]
            },
            "description": "Return the decoded payload for one yearly chunk.\n\nResolution order:\n1. Parse chunk_id → (asset, tf, year)\n2. Verify the chunk is published (artifact_uri present on DB row)\n3. Read the gzipped file from the configured data dir\n4. Return a Pydantic-validated payload"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/foresight/history/{asset}/{timeframe} - Get Foresight History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/foresight/history/:asset/:timeframe?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "foresight",
                "history",
                ":asset",
                ":timeframe"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "180",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                },
                {
                  "key": "timeframe",
                  "value": "value"
                }
              ]
            },
            "description": "Return the latest closed OHLC bars for the Foresight chart.\n\nProxied server-side so the source identity stays off the client surface\nand browser CSP stays strict. Cached 5 minutes per tuple."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/foresight/manifest/{asset}/{timeframe} - Get Foresight Manifest",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/foresight/manifest/:asset/:timeframe",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "foresight",
                "manifest",
                ":asset",
                ":timeframe"
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                },
                {
                  "key": "timeframe",
                  "value": "value"
                }
              ]
            },
            "description": "Return the yearly-chunk manifest for (asset, timeframe).\n\nEmpty payloads are exposed as 404 so the frontend can fall back to a\nskeleton state rather than rendering an empty fan chart."
          },
          "response": []
        }
      ]
    },
    {
      "name": "founding",
      "description": "Trinity Insights REST API - endpoints under the founding tag.",
      "item": [
        {
          "name": "GET /api/v1/founding/availability - Get Founding Availability",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/founding/availability",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "founding",
                "availability"
              ]
            },
            "description": "Returns the current count of claimed Founding spots vs the FOUNDING_QUOTA cap.\n\nPublic (no auth) - consumed by the pricing page to render the\n\"X / 100 spots remaining\" badge. The counter is best-effort:\nPaddle webhook idempotency guarantees no double-claim, but a\nracing webhook delivery could cause a brief over-claim window\nbefore being reconciled.\n\nF39 : `available = false` n'est pas un libelle d'affichage, c'est la\nfermeture de l'offre. Le chemin de paiement doit lire le meme verdict\n(`founding_offer_state`) avant d'ouvrir une caisse au tarif Founding."
          },
          "response": []
        }
      ]
    },
    {
      "name": "hyperliquid",
      "description": "Trinity Insights REST API - endpoints under the hyperliquid tag.",
      "item": [
        {
          "name": "GET /api/v1/hyperliquid/all - All Hyperliquid data in one call - tier-filtered",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/all",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "all"
              ]
            },
            "description": "Fetches all Hyperliquid collectors in parallel, then filters the response\nbased on the authenticated user's tier.\n\nTier gates (server-enforced, aligned on\n``docs/strategy/hyperliquid_tiering_2026-06-04.md``) :\n  - free/founding : market_overview + aggregate leaderboard/funding +\n    liquidations health\n  - pro           : + full leaderboard / funding matrix / 24h liquidation\n    radar + vaults + smart_money + funding chart + LS ratio + orderbook +\n    funding_arb\n  - performance   : + HLP stats + clearinghouse (HIP-3 lives in its own\n    canonical router ``/api/v1/hyperliquid/hip3/*``)\n\nRedis cache (P29-REDIS-CACHE-2026-06-01) : raw data cached with TTL 30s.\nTier filtering happens server-side POST-cache so tier-agnostic key is safe\n(cf. cache.py SECURITY CONTRACT). resolve_user_tier still runs BEFORE every\nresponse - cache only avoids the slow fetch_all_hyperliquid() upstream call.\nData refreshes every 15min via collector cron; 300s TTL = ~99.9% hit ratio."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/book-depth - Near-mid order-book depth - Hyperliquid vs Binance",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/book-depth?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "book-depth"
              ],
              "query": [
                {
                  "key": "coin",
                  "value": "BTC",
                  "description": "Perp coin. Allowed: BTC, ETH, SOL, HYPE",
                  "disabled": true
                }
              ]
            },
            "description": "Photo instantanée de la liquidité proche du milieu, des deux côtés du\ncarnet, sur Hyperliquid et sur une place centralisée de référence.\n\nFree tier. Aucune persistance : c'est un instantané, pas une série.\nRenvoie 503 si l'une des deux venues ne répond pas - un ratio calculé sur\nun seul carnet serait trompeur."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/btc-price-history - BTC/USD daily price history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/btc-price-history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "btc-price-history"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "90",
                  "disabled": true
                }
              ]
            },
            "description": "BTC/USD daily OHLCV from the public market data of a major centralized exchange.\n\nPublic klines endpoint, no API key.\nData available since 2017-08-17 (~3200 days).\nPaginated: max 1000 candles per request."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/clearinghouse - Hyperliquid clearinghouse state - institutional solvency monitor",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/clearinghouse",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "clearinghouse"
              ]
            },
            "description": "Hyperliquid clearinghouse on-chain state.\nInstitutional-grade systemic risk monitoring.\nPerformance tier exclusive."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/fear-greed/history - HL Fear & Greed Index historical scores for charting",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/fear-greed/history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "fear-greed",
                "history"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "90",
                  "disabled": true
                }
              ]
            },
            "description": "Returns hourly Fear & Greed scores for the last N days (default 90, max 1200).\nUsed for temporal charting. Includes both live and backfilled data points."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/flippenings - HL vs CEX flippening registry - BTC-perp open interest per venue",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/flippenings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "flippenings"
              ]
            },
            "description": "Registre des flippenings : pour chaque venue centralisée suivie, l'OI\nBTC-perp face à Hyperliquid - ratio courant, date de dépassement persistant\n(dans notre fenêtre de données), écart restant et progression.\n\nFree tier. Périmètre BTC-perp (couverture Coinalyze) - documenté côté UI."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/funding - Hyperliquid funding rates - aggregate heatmap (Free) or full matrix with per-market extremes (Pro)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/funding?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "funding"
              ],
              "query": [
                {
                  "key": "detail",
                  "value": "aggregate",
                  "description": "aggregate (Free, default) - heatmap, averages, ecosystem extremes. full (Pro) - per-market funding rates with extreme reading flags.",
                  "disabled": true
                }
              ]
            },
            "description": "Funding rates across Hyperliquid perpetuals.\n\nTwo views :\n  - ``aggregate`` (free) - heatmap, averages, ecosystem-level extremes.\n  - ``full`` (pro+) - per-market matrix with extreme readings to act on."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/funding-arb - Cross-venue funding arbitrage - HL vs Binance vs Bybit annualised spread",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/funding-arb",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "funding-arb"
              ]
            },
            "description": "Compares predicted funding rates on Hyperliquid against Binance Perpetuals and\nBybit Perpetuals for each overlapping asset. Rates are annualised on a common\nbasis (HL hourly × 8760; CEX 8h × 1095) so they are directly comparable.\n\nThe spread (|HL_annual − CEX_annual|) quantifies the cross-venue funding edge\navailable to market-neutral strategies (long the cheaper-funding venue, short\nthe dearer-funding venue). Assets are sorted by widest spread descending.\n\nRequires Pro plan or higher. Analytical use only - not investment advice."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip3 - HIP-3 tokenized assets - DEPRECATED; use /api/v1/hyperliquid/hip3/* (canonical builder-DEX router)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip3",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip3"
              ]
            },
            "description": "DEPRECATED. Use ``/api/v1/hyperliquid/hip3/*`` instead - those routes\nprovide the full HIP-3 builder-DEX taxonomy (dashboard, by-dex, by-symbol,\noi-trends, aggregates) with the same tier gating.\n\nKept for backward compatibility until the front-end migration is complete.\nPerformance tier required."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hlp - HLP vault counter-trade indication - Trinity-exclusive lecture",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hlp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hlp"
              ]
            },
            "description": "HLP (Hyperliquid Protocol Liquidity) vault state.\n\nTrinity-exclusive lecture : HLP is the exchange market maker - its P&L\nreveals retail positioning. The composition of the counter-trade\nindication (factors, weights, smoothing) is not disclosed (Trinity moat).\nPerformance tier exclusive."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/leaderboard - Hyperliquid top traders leaderboard - aggregate (Free) or full drill-down (Pro) with Smart Money positioning lecture",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/leaderboard?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "leaderboard"
              ],
              "query": [
                {
                  "key": "detail",
                  "value": "aggregate",
                  "description": "aggregate (Free, default) - top-5 traders + ecosystem counters. full (Pro) - complete trader list with per-trader Smart Money positioning lecture.",
                  "disabled": true
                }
              ]
            },
            "description": "Top traders by PnL (on-chain verifiable) with Smart Money positioning.\n\nTwo views :\n  - ``aggregate`` (free) - top-5 traders + ecosystem counters.\n  - ``full`` (pro+) - complete leaderboard with per-trader detail."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/liquidations - Hyperliquid liquidations - three levels: ecosystem health (Free), 24h radar (Pro), real-time feed (Performance)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/liquidations?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "liquidations"
              ],
              "query": [
                {
                  "key": "level",
                  "value": "health",
                  "description": "health (Free, default) - ecosystem pressure + dominant side. radar-24h (Pro) - 24-hour radar with hot-coin clusters. real-time (Performance) - real-time feed + 6-month history.",
                  "disabled": true
                }
              ]
            },
            "description": "Liquidation detection across top Hyperliquid perpetuals.\n\nThree levels :\n  - ``health`` (free) - ecosystem pressure + dominant side.\n  - ``radar-24h`` (pro+) - last 24h with hot-coin clusters.\n  - ``real-time`` (perf+) - real-time + 6-month history."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/market - Hyperliquid market overview - OI, volume, Fear & Greed Index",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/market",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "market"
              ]
            },
            "description": "Global Hyperliquid market snapshot.\nIncludes total OI, 24h volume, top assets, HL Fear & Greed Index.\nAvailable to all authenticated users.\nAlso persists F&G score hourly for historical charting (fire-and-forget)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/market-history - HL perp market KPI time-series - OI, volume, funding, volatility proxy",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/market-history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "market-history"
              ],
              "query": [
                {
                  "key": "metric",
                  "value": "total_oi_usd",
                  "description": "KPI column to return. Allowed: asset_count, avg_funding_rate, positive_funding_pct, total_oi_usd, total_volume_24h_usd, vola_proxy",
                  "disabled": true
                },
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Time window. Allowed: 7d, 30d, 90d, 1y, all",
                  "disabled": true
                }
              ]
            },
            "description": "Time-series of Hyperliquid market KPIs persisted by the market-history recorder.\n\nEach data point is one recorder run (cadence depends on cron schedule,\ntypically 15-minute or daily intervals).\n\nMetrics available:\n- total_oi_usd          - aggregate open interest in USD\n- total_volume_24h_usd  - aggregate 24h notional volume in USD\n- asset_count           - number of listed perp assets\n- avg_funding_rate      - mean HOURLY funding rate across all perps.\n                          Hyperliquid settles funding every hour, so annualise\n                          with x8760 (24 x 365), NOT x1095. Corrected 2026-08-07:\n                          this line and the column comment of migration 120 both\n                          read \"8h\", which would understate annual carry 8-fold.\n- positive_funding_pct  - percent of assets with funding > 0\n- vola_proxy            - mean abs 24h price change % (cross-asset volatility proxy)\n\nAvailable to all authenticated users (free tier).\nReturns at most 10 000 points to keep response size bounded."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/vaults - Hyperliquid vault scanner with Vault Alpha Score",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/vaults",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "vaults"
              ]
            },
            "description": "Public vault intelligence with risk-adjusted scoring.\nVault Alpha Score (VAS) = composite of ROI, AUM, and PnL consistency.\nRequires Pro plan or higher."
          },
          "response": []
        }
      ]
    },
    {
      "name": "hyperliquid-economics",
      "description": "Trinity Insights REST API - endpoints under the hyperliquid-economics tag.",
      "item": [
        {
          "name": "GET /api/v1/hyperliquid/economics/overview - Protocol economics - measured AF buyback, implied revenue, supply dynamics",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/economics/overview?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "economics",
                "overview"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "all",
                  "disabled": true
                }
              ]
            },
            "description": "Protocol economics - measured AF buyback, implied revenue, supply dynamics"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/economics/segments - Where protocol revenue comes from - measured total split by weighted segment volumes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/economics/segments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "economics",
                "segments"
              ]
            },
            "description": "Where protocol revenue comes from - measured total split by weighted segment volumes"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/economics/valuation - HYPE valuation - buyback yield, P/S multiples, implied price bands",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/economics/valuation",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "economics",
                "valuation"
              ]
            },
            "description": "HYPE valuation - buyback yield, P/S multiples, implied price bands"
          },
          "response": []
        }
      ]
    },
    {
      "name": "hyperliquid-etf",
      "description": "Trinity Insights REST API - endpoints under the hyperliquid-etf tag.",
      "item": [
        {
          "name": "GET /api/v1/hyperliquid/etf/dashboard - HYPE spot ETF dashboard - universe, latest snapshot, ecosystem totals",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/etf/dashboard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "etf",
                "dashboard"
              ]
            },
            "description": "HYPE spot ETF dashboard - universe, latest snapshot, ecosystem totals"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/etf/history - HYPE spot ETF daily time series (per ticker, per metric)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/etf/history?ticker=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "etf",
                "history"
              ],
              "query": [
                {
                  "key": "ticker",
                  "value": "value",
                  "disabled": false
                },
                {
                  "key": "metric",
                  "value": "aum_hype_usd",
                  "disabled": true
                },
                {
                  "key": "period",
                  "value": "all",
                  "disabled": true
                }
              ]
            },
            "description": "HYPE spot ETF daily time series (per ticker, per metric)"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/etf/history-all - HYPE spot ETF daily time series across all issuers (one metric)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/etf/history-all?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "etf",
                "history-all"
              ],
              "query": [
                {
                  "key": "metric",
                  "value": "aum_hype_usd",
                  "disabled": true
                },
                {
                  "key": "period",
                  "value": "all",
                  "disabled": true
                }
              ]
            },
            "description": "Real daily history for ALL issuers in one call - feeds the dashboard's\nper-issuer stacked charts (flows / AUM / holdings) with genuine time series\nfrom hl_etf_snapshot_daily (no fabrication, no single-point placeholders)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "hyperliquid-hip3",
      "description": "Trinity Insights REST API - endpoints under the hyperliquid-hip3 tag.",
      "item": [
        {
          "name": "GET /api/v1/hyperliquid/hip3/aggregates - HIP-3 cumulative KPIs (all-time volume, trades) + volume history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip3/aggregates?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip3",
                "aggregates"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "all",
                  "disabled": true
                },
                {
                  "key": "dex",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "HIP-3 cumulative KPIs (all-time volume, trades) + volume history"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip3/by-dex - HIP-3 per-DEX OI/volume + market share",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip3/by-dex",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip3",
                "by-dex"
              ]
            },
            "description": "HIP-3 per-DEX OI/volume + market share"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip3/by-symbol - HIP-3 per-symbol breakdown for a given builder DEX",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip3/by-symbol?dex=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip3",
                "by-symbol"
              ],
              "query": [
                {
                  "key": "dex",
                  "value": "value",
                  "disabled": false
                }
              ]
            },
            "description": "HIP-3 per-symbol breakdown for a given builder DEX"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip3/dashboard - HIP-3 ecosystem dashboard - total OI, volume, per-DEX breakdown",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip3/dashboard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip3",
                "dashboard"
              ]
            },
            "description": "HIP-3 ecosystem dashboard - total OI, volume, per-DEX breakdown"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip3/oi-trends - HIP-3 open interest time series (ecosystem or per-DEX)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip3/oi-trends?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip3",
                "oi-trends"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "1w",
                  "disabled": true
                },
                {
                  "key": "dex",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "HIP-3 open interest time series (ecosystem or per-DEX)"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip3/share - HIP-3 share of total HL perp volume + top markets by OI",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip3/share",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip3",
                "share"
              ]
            },
            "description": "HIP-3 share of total HL perp volume + top markets by OI"
          },
          "response": []
        }
      ]
    },
    {
      "name": "hyperliquid-hip4",
      "description": "Trinity Insights REST API - endpoints under the hyperliquid-hip4 tag.",
      "item": [
        {
          "name": "GET /api/v1/hyperliquid/hip4/by-outcome - HIP-4 single-outcome drill-down - per-side probability + volume time series",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip4/by-outcome?outcome_id=1",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip4",
                "by-outcome"
              ],
              "query": [
                {
                  "key": "outcome_id",
                  "value": "1",
                  "description": "HIP-4 outcome_id (from /dashboard).",
                  "disabled": false
                }
              ]
            },
            "description": "Per-outcome drill-down (Pro).\n\nReturns market metadata and the full time series of each side (Yes/No)\n: implied probability (= ``last_price``), notional volume USD, and\ntrade count over every available snapshot.\n\nThe aggregate ecosystem view (``/dashboard`` + ``/history``) stays Free,\nbut acting on a specific market - comparing per-side probability flows,\ntiming entries - requires Pro."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip4/dashboard - HIP-4 prediction markets - outcomes with implied probabilities, volume",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip4/dashboard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip4",
                "dashboard"
              ]
            },
            "description": "HIP-4 prediction markets - outcomes with implied probabilities, volume"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hip4/history - HIP-4 ecosystem daily time series (aggregate volume + trades by snapshot)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hip4/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hip4",
                "history"
              ]
            },
            "description": "Real aggregate time series across all outcomes (volume + trades per\nsnapshot ts). Replaces the single-point / fabricated 70-30 split charts with\na genuine ecosystem history from hl_hip4_outcome_snapshot."
          },
          "response": []
        }
      ]
    },
    {
      "name": "hyperliquid-hype",
      "description": "Trinity Insights REST API - endpoints under the hyperliquid-hype tag.",
      "item": [
        {
          "name": "GET /api/v1/hyperliquid/hype/buy-pressure - HYPE structural buy pressure - AF buyback + ETF flows + DAT vs float",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hype/buy-pressure?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hype",
                "buy-pressure"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "all",
                  "disabled": true
                }
              ]
            },
            "description": "HYPE structural buy pressure - AF buyback + ETF flows + DAT vs float"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hype/candles - HYPE OHLCV daily series",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hype/candles?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hype",
                "candles"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "all",
                  "disabled": true
                }
              ]
            },
            "description": "HYPE OHLCV daily series"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hype/dashboard - HYPE token dashboard - structural, AF buyback, composite, bridges",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hype/dashboard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hype",
                "dashboard"
              ]
            },
            "description": "HYPE token dashboard - structural, AF buyback, composite, bridges"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/hyperliquid/hype/history - HYPE daily time series (per allowed metric)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/hyperliquid/hype/history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "hyperliquid",
                "hype",
                "history"
              ],
              "query": [
                {
                  "key": "metric",
                  "value": "price",
                  "disabled": true
                },
                {
                  "key": "period",
                  "value": "all",
                  "disabled": true
                }
              ]
            },
            "description": "HYPE daily time series (per allowed metric)"
          },
          "response": []
        }
      ]
    },
    {
      "name": "indicators",
      "description": "Trinity Insights REST API - endpoints under the indicators tag.",
      "item": [
        {
          "name": "GET /api/v1/indicators - List Indicators",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/indicators",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "indicators"
              ]
            },
            "description": "List all indicators with latest data - gated by tier.\n\nAccepts: Authorization (JWT) or X-API-Key header."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/indicators/{slug} - Get Indicator",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/indicators/:slug",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "indicators",
                ":slug"
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Get single indicator metadata.\n\nAccepts: Authorization (JWT) or X-API-Key header."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/indicators/{slug}/data - Get Indicator Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/indicators/:slug/data?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "indicators",
                ":slug",
                "data"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "30",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Get indicator historical data.\n\nAccepts: Authorization (JWT) or X-API-Key header.\nAuthentication required (JWT or API key) unless X-OG-Render-Secret\nis provided (OG rendering + Trinity Audit Engine sampler)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "insights-cross-rubric",
      "description": "Trinity Insights REST API - endpoints under the insights-cross-rubric tag.",
      "item": [
        {
          "name": "GET /api/v1/insights/cross-rubric/composites-snapshot - Get Composites Snapshot",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/insights/cross-rubric/composites-snapshot?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "insights",
                "cross-rubric",
                "composites-snapshot"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ]
            },
            "description": "Snapshot composites Trinity + cycle context - tier Pro+.\n\nReturns score + phase + timestamp for TCTI/TSMI/TRI/TSS.\nNEVER reveals sub_scores or components (recipe-leak guard).\n\nTier gating: free/founding → 403. Pro/Performance/Team → full.\nOG render bypass: ``X-OG-Render-Secret`` header skips gating."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/insights/cross-rubric/cycle-phase - Get Cycle Phase",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/insights/cross-rubric/cycle-phase?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "insights",
                "cross-rubric",
                "cycle-phase"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ]
            },
            "description": "Cycle phase + days_since_halving - public (all tiers).\n\nSource: halvings.py (single source of truth). Atemporal.\nNo tier gating - educational baseline content."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/insights/cross-rubric/insights - Get Cross Rubric Insights",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/insights/cross-rubric/insights?slug=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "insights",
                "cross-rubric",
                "insights"
              ],
              "query": [
                {
                  "key": "slug",
                  "value": "value",
                  "description": "URPD slug (#273-#284 + #285)",
                  "disabled": false
                },
                {
                  "key": "date",
                  "value": "latest",
                  "description": "Date YYYY-MM-DD or 'latest'",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                },
                {
                  "key": "top_n",
                  "value": "3",
                  "disabled": true
                }
              ]
            },
            "description": "Cross-rubric atemporal insights - tier Pro+.\n\nEvaluates 30 deterministic patterns crossing URPD shape × composites\n× cycle phase. Returns top N insights by descending weight. Insights\nare atemporal, AMF-compliant, recipe-leak guarded.\n\nTier gating: free/founding → 403. Pro/Performance/Team → full."
          },
          "response": []
        }
      ]
    },
    {
      "name": "macro",
      "description": "Trinity Insights REST API - endpoints under the macro tag.",
      "item": [
        {
          "name": "GET /api/v1/macro/business-cycle - Get Business Cycle",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro/business-cycle",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro",
                "business-cycle"
              ]
            },
            "description": "Global Business Cycle state from Copper/Gold ratio MACD (cached 6h)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro/business-cycle/history - Get Business Cycle History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro/business-cycle/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro",
                "business-cycle",
                "history"
              ]
            },
            "description": "Full business cycle regime history for chart ribbon overlay (cached 6h)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro/correlations - List Correlations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro/correlations?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro",
                "correlations"
              ],
              "query": [
                {
                  "key": "lang",
                  "value": "en",
                  "description": "Language: en or fr",
                  "disabled": true
                }
              ]
            },
            "description": "Get latest BTC vs macro correlations.\n\nFREE: btc_m2 only, 7-day delay, no regime.\nPRO: all pairs, real-time.\nPERF: all pairs + detailed regime."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro/correlations/{pair} - Get Correlation Detail",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro/correlations/:pair?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro",
                "correlations",
                ":pair"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "365",
                  "description": "History window in days",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "Language: en or fr",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "pair",
                  "value": "value"
                }
              ]
            },
            "description": "Get historical correlation for a specific BTC vs macro pair.\n\nFREE: btc_m2 only, 403 for others.\nPRO: 365-day history max.\nPERF: full history (up to 3650 days)."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/macro/compute - Trigger Correlation Compute",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro/compute",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro",
                "compute"
              ]
            },
            "description": "Admin only - Trigger recalculation of all macro correlations."
          },
          "response": []
        }
      ]
    },
    {
      "name": "macro-intelligence",
      "description": "Trinity Insights REST API - endpoints under the macro-intelligence tag.",
      "item": [
        {
          "name": "GET /api/v1/macro-intelligence/catalog - List Macro Catalog",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro-intelligence/catalog?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro-intelligence",
                "catalog"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "value",
                  "description": "Filter by category",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "value",
                  "description": "Search query",
                  "disabled": true
                }
              ]
            },
            "description": "List all Macro Intelligence metrics catalog entries.\n\nPublic endpoint - returns full catalog metadata.\nData access is gated separately per metric."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro-intelligence/categories - List Macro Categories",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro-intelligence/categories",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro-intelligence",
                "categories"
              ]
            },
            "description": "List all Macro Intelligence categories with counts."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro-intelligence/events - List Macro Events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro-intelligence/events?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro-intelligence",
                "events"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "sovereign",
                  "description": "Event category (currently 'sovereign'; 'corporate', 'etf' reserved)",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "value",
                  "description": "Filter by country_id (e.g., 'us', 'de', 'sv')",
                  "disabled": true
                },
                {
                  "key": "from_date",
                  "value": "value",
                  "description": "Start date YYYY-MM-DD",
                  "disabled": true
                },
                {
                  "key": "to_date",
                  "value": "value",
                  "description": "End date YYYY-MM-DD",
                  "disabled": true
                },
                {
                  "key": "impact",
                  "value": "value",
                  "description": "Filter by impact level - comma-separated ('high' | 'medium' | 'low'). Example: '?impact=high,medium' returns everything except low-impact events.",
                  "disabled": true
                }
              ]
            },
            "description": "List annotated historical events for a category.\n\nProvides structured public-event data for frontend chart overlays\n(MacroIntelligenceChart keyEvents prop). Each event carries a verifiable\nsource_url per SOP_EDUCATION_DRIVEN_CHART_DESIGN §6.\n\nCurrently 'sovereign' only (29 seed events 2013→2026). Other categories\nreserved for post-EDCD re-audit (corporate_events, etf_events to come)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro-intelligence/metrics/{metric_id}/data - Get Macro Metric Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro-intelligence/metrics/:metric_id/data?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro-intelligence",
                "metrics",
                ":metric_id",
                "data"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "all",
                  "description": "Timeframe: 90d, 180d, 1y, 2y, 5y, 10y, all",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get time series data for a Macro Intelligence metric.\n\nServer-side tier gating: if user doesn't have access, returns 403.\nFree-tier metrics serve full data (all timeframes, price overlay included)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro-intelligence/pipeline/status - Get Macro Pipeline Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro-intelligence/pipeline/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro-intelligence",
                "pipeline",
                "status"
              ]
            },
            "description": "Admin only - Get Macro Intelligence pipeline sync status."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/macro-intelligence/sentinel/status - Get Sentinel Macro Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/macro-intelligence/sentinel/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "macro-intelligence",
                "sentinel",
                "status"
              ]
            },
            "description": "Sentinel observability for Macro Intelligence - pipeline sync status,\nstaleness alerts, and recent auto-heal actions.\n\nCACHE (Phase 1D sprint 2026-05-28) :\nAggregates 3-4 expensive PG queries (GROUP BY + LEFT JOIN + CTE) into\na single payload. Cached under ``query:slow:macro_sentinel_status``\nwith TTL ``cache_ttl_query_slow`` (default 600s = 10 min). The Sentinel\nprobe and admin UI both consume this endpoint at intervals ≥30s, so a\n10-min cache keeps freshness aligned with pipeline cadence while\neliminating the heavy joins from the hot path. Fail-open: Redis down\n→ DB direct."
          },
          "response": []
        }
      ]
    },
    {
      "name": "market-intelligence",
      "description": "Trinity Insights REST API - endpoints under the market-intelligence tag.",
      "item": [
        {
          "name": "GET /api/v1/market-intelligence/asset/{canonical_slug} - Get Asset Detail",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/asset/:canonical_slug",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "asset",
                ":canonical_slug"
              ],
              "variable": [
                {
                  "key": "canonical_slug",
                  "value": "value"
                }
              ]
            },
            "description": "Single asset detail - page asset cockpit (Sprint 7 Marathon Phase 3).\n\nReal DB query : fetch metadata + all metrics + 6 axes radar + TCS + freshness.\nTrinity Verdict generation via Templates Python (deterministic rules-based,\n0€/mo - cf. brainstorm §3.3). Compliance AMF : pas de label Buy/Sell, juste\ndescription factuelle statistique en français/anglais."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/asset/{canonical_slug}/ohlc - Get Asset Ohlc",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/asset/:canonical_slug/ohlc?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "asset",
                ":canonical_slug",
                "ohlc"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "1y",
                  "description": "Window. Valid: 7d, 1m, 3m, 6m, 1y, max",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "canonical_slug",
                  "value": "value"
                }
              ]
            },
            "description": "Daily OHLC candles for a single asset - fuels asset cockpit candle chart.\n\nSprint Candle Chart (2026-05-19) - founder directive \"Candle Chart Price\npremium maximum avec plusieurs timeframes\" sur cockpit detail page.\n\nSource data : `screener_asset_ohlc_daily` populé par\nsync_market_intelligence_ohlc.py (CoinGecko Pro /coins/{id}/ohlc daily,\ncron 05:30 UTC daily).\n\nTier gating : même resolver que /assets (DB-authoritative). Free voit\nquand même le chart pour BTC/ETH/SOL (top 50) - pas de blur ici puisque\nc'est un chart, pas un row count.\n\nCompliance AMF : candles déterministes (open/high/low/close), pas de\nlabel Buy/Sell, pas d'indicator technique propre Trinity exposé."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/assets - List Assets",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/assets?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "assets"
              ],
              "query": [
                {
                  "key": "view",
                  "value": "overview",
                  "description": "Column preset view. Valid: overview, performance, trinity-score, derivatives",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Pagination limit (max 500)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "0",
                  "description": "Pagination offset",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "market_cap_usd",
                  "description": "Sort field. Default = market_cap_usd (compliance AMF : pas de tri DESC TCS implicit top picks). Valid: market_cap_usd, volume_24h_usd, price_usd, price_change_24h_pct, price_change_7d_pct, tcs, rank",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "Sort order. Valid: asc, desc",
                  "disabled": true
                }
              ]
            },
            "description": "List universe assets with tier-based limit + view-specific column preset.\n\nSprint 1 (2026-05-18) : real DB query against `screener_assets` JOIN\n`screener_asset_latest` (populated by sync_market_intelligence_main.py\nUniverseSync). Tier limit applied client-side via blur (cf. brainstorm §5.4).\n\nCompliance AMF : default sort = market_cap_usd DESC (PAS TCS DESC)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/deltas - Get Deltas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/deltas?since=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "deltas"
              ],
              "query": [
                {
                  "key": "since",
                  "value": "value",
                  "description": "ISO 8601 timestamp (e.g. '2026-05-18T10:30:00Z'). Returns rows changed after this.",
                  "disabled": false
                }
              ]
            },
            "description": "Incremental delta endpoint - frontend polling 15-30s pattern.\n\nSCAFFOLD : returns empty delta list. Real implementation will query\n`screener_asset_latest WHERE updated_at > :since LIMIT 200` and emit only\nchanged fields (compact payload ~160 bytes/asset).\n\nAnti-pattern interdit (brainstorm §5.6) : PAS de SSE Top 200 global push 5s\npour 1K users (fragile FastAPI sans Redis). Polling 15-30s suffit au MVP."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/derivatives - Top crypto derivatives snapshot (Coinalyze aggregated cross-exchange)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/derivatives?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "derivatives"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "oi_usd",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "disabled": true
                }
              ]
            },
            "description": "Trinity Market Intel Derivatives tab snapshot.\n\nReturns Top N assets with aggregated derivatives metrics across exchanges :\n    - OI USD total + 24h % change\n    - Funding 8h weighted avg by OI + predicted next 8h\n    - Long/Short ratio weighted\n    - Liquidations 24h (long + short split)\n    - Conviction stars 0-5 (Phase α heuristic)\n    - TDCS placeholder 0-100 (Phase β real composite scheduled)\n    - Exchanges count + data quality flag\n\nTier gating identical to /assets endpoint :\n    - free: 50, founding: 500, pro: 500, performance: 2800, team: 2800"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/fear-greed - Canonical Fear & Greed Index (Alternative.me) - current + 90d history (Pro tier)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/fear-greed",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "fear-greed"
              ]
            },
            "description": "Canonical Fear & Greed Index (Alternative.me) + 90 days daily history.\n\nFounder LIV 2026-05-27 (Bug 3) :\n  - PRIMARY  : Alternative.me canonical index (free, commercial-OK, fetched\n               server-side so no ad-blocker / CSP can break it).\n  - FALLBACK : Trinity HL composite (`hl_fear_greed_history`) only if\n               Alternative.me is unreachable.\nCache : 1h in-process (Alternative.me updates once daily).\nTier  : Pro (inclus overlay Market Intelligence v2)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/fx-rates - Get Fx Rates",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/fx-rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "fx-rates"
              ]
            },
            "description": "USD → EUR/GBP/JPY/CHF rates (mid-market, ECB via Frankfurter.app).\n\nSprint 3.7 multi-devise - Trinity stores prices in USD, frontend converts\nruntime via these rates. Cache backend in-memory 1h (rate FX bouge peu).\n\nNo auth required (public reference data). Rate-limited via rate_limit_public."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/img - Proxy Logo Image",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/img?url=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "img"
              ],
              "query": [
                {
                  "key": "url",
                  "value": "value",
                  "description": "CoinGecko logo URL to proxy",
                  "disabled": false
                }
              ]
            },
            "description": "Same-origin proxy for crypto logos (canvas-safe, share-safe).\n\nPublic (no tier gate) - these are public token logos used as chart\ndecoration. Bearer/password auth is intentionally NOT applied: the endpoint\nis consumed by <img>/<canvas> tags that cannot carry auth headers, and a\nstandard per-IP limiter (30/min) would break the ~500-logo first paint of a\npremium tab. The actual abuse surface is closed by a strict host allowlist\n(CoinGecko/CMC CDN only - not an open proxy), no redirect following (SSRF),\na 2 MB size cap, a raster-only content-type allowlist (anti-XSS, no SVG),\nand a 30-day immutable cache (repeat loads hit CDN/browser, not the origin)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/liquidations-history - Derivatives liquidations history aggregated cross-exchange (long + short stacked)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/liquidations-history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "liquidations-history"
              ],
              "query": [
                {
                  "key": "asset",
                  "value": "BTC",
                  "disabled": true
                },
                {
                  "key": "interval",
                  "value": "day",
                  "disabled": true
                },
                {
                  "key": "timeframe",
                  "value": "30d",
                  "disabled": true
                },
                {
                  "key": "include_btc_price",
                  "value": "true",
                  "disabled": true
                }
              ]
            },
            "description": "Historique des liquidations long + short empilées par bucket (day ou hour).\n\nSource : Coinalyze /liquidation-history aggregated across exchanges (PHASE_ALPHA whitelist 30 cryptos).\n\nConstraints :\n    - interval=hour only valid for timeframe in {7d, 30d}\n    - timeframe=max returns up to 5 years of daily history\n    - asset must be in PHASE_ALPHA_PERPS_MAP whitelist (otherwise 404)\n\nOptional include_btc_price=true (legacy param name - actually returns the SELECTED\nASSET's price overlay, not always BTC). JOINs screener_asset_ohlc_daily for daily\ncloses, linear interpolation between adjacent closes for hourly mode.\n\nTier gating : aligned on Derivatives tab parent (no per-endpoint gating -\nPhase γ.16 LIV founder 2026-05-24 corrected). The Derivatives tab itself is\naccessible to all logged-in users (same model as Overview/Performance/Trinity\nScore), so adding per-endpoint tier restrictions was inconsistent. Result :\nTeam tier user (founder) was incorrectly blocked on 90D/180D/1Y/MAX. Fix : drop\nthe endpoint-level gating ; rely on parent tab policy. CSV download (frontend)\nis the only Performance+/Team gated feature on this surface."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/rwa - Get Rwa Assets",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/rwa",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "rwa"
              ]
            },
            "description": "Real-World Assets allée institutionnelle - Sprint 8 v23 (founder 2026-05-20).\n\nRenvoie la liste curée des tokens RWA (BlackRock BUIDL, Ondo OUSG/USDY,\nHashnote USYC, Janus Anemoy JTRSY/JAAA, Spiko EUTBL/EURSAFO, Apollo Figure\nHELOC, Superstate USTB, Securitize BCAP).\n\nDifférences vs `/assets` Market Intelligence main view :\n  - Bypass filtre v18 (vol < $1M OK, ces tokens trade OTC)\n  - KPIs adaptés : AUM + sponsor + asset_class + chain + APY + expense_ratio\n  - Pas de TCS ni 6 axes radar (modèle Trinity peu signifiant pour RWA)\n  - Pas de price_change_24h_pct (les prix sont pegged ~$1 stable)\n\nSource AUM : seedé manuel depuis press releases issuers (data/rwa_allowlist.py\nupdate trimestriel). Source prix : CoinGecko spot (les rares qui trade\npubliquement bougent < 0.5%, peg stable).\n\nPas de tier gating : RWA = free access (différenciateur produit Trinity vs\nconcurrents qui ne couvrent PAS cette niche institutional). Conversion tier\nse fait via Market Intelligence main view + indicateurs Trinity Exclusive."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/rwa-perps-overview - RWA Perps Dérivés - OI + Volume by category / exchange (HIP-3 perps)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/rwa-perps-overview?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "rwa-perps-overview"
              ],
              "query": [
                {
                  "key": "dimension",
                  "value": "category",
                  "disabled": true
                },
                {
                  "key": "timeframe",
                  "value": "1y",
                  "disabled": true
                }
              ]
            },
            "description": "Aggregated OI + Volume + market count + avg funding for RWA perps."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/rwa-universe-overview - RWA Universe Overview - stacked AUM by dimension (asset_class/sponsor/chain/yield)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/rwa-universe-overview?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "rwa-universe-overview"
              ],
              "query": [
                {
                  "key": "dimension",
                  "value": "asset_class",
                  "disabled": true
                },
                {
                  "key": "timeframe",
                  "value": "1y",
                  "disabled": true
                },
                {
                  "key": "top_n",
                  "value": "10",
                  "disabled": true
                }
              ]
            },
            "description": "Trinity RWA Universe Overview snapshot for premium 4-card grid.\n\nReturns AUM time-series stacked by dimension (asset_class / sponsor / chain / yield)\n+ per-group share % + delta metrics. Used by `RWAUniverseOverview` frontend cards.\n\nSource : screener_rwa_aum_history table (backfilled via Phase 1 sync_rwa_aum_history.py).\nTier gating : aligned with RWA tab parent (no extra restriction - accessible all logged-in)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/rwa/{canonical_slug} - Get Rwa Asset Detail",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/rwa/:canonical_slug?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "rwa",
                ":canonical_slug"
              ],
              "query": [
                {
                  "key": "history_days",
                  "value": "90",
                  "description": "AUM history window (days)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "canonical_slug",
                  "value": "value"
                }
              ]
            },
            "description": "RWA token cockpit drill-down - Sprint v25 Phase C.\n\nLit screener_rwa_meta (config + latest values) + screener_rwa_aum_snapshot\n(historique AUM/APY pour growth chart). Enrichi avec :\n  - description_fr/en générée selon asset_class + sponsor\n  - sponsor_official_url (target=_blank)\n  - contract_explorer_url (Etherscan, Stellar, Centrifuge, etc.)\n  - aum_history time-series pour line chart"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/sparklines - Get Sparklines",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/sparklines?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "sparklines"
              ],
              "query": [
                {
                  "key": "window",
                  "value": "7d",
                  "description": "Sparkline window. Valid: 24h, 7d, 30d, 1y",
                  "disabled": true
                },
                {
                  "key": "ids",
                  "value": "",
                  "description": "Comma-separated asset IDs (e.g. '1,2,3'). Max 50.",
                  "disabled": true
                }
              ]
            },
            "description": "Batch sparklines for a set of assets.\n\nSCAFFOLD : returns mock-shaped response with empty `data` array. Real\nimplementation will query `screener_asset_sparklines` JSONB column with\nasset_id IN (...) filter."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/spot-perps - Top 30 perps spot vs perp pressure map snapshot (Performance tier)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/spot-perps",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "spot-perps"
              ]
            },
            "description": "Live snapshot of Top 30 perps (mark + funding + OI from Hyperliquid WS)\naggregated with CoinGecko spot price + 24h change.\n\nCache : 30s in-process (kickoff doc §3 budget = 2,880 CoinGecko calls/mo).\nTier  : Performance (kickoff doc §2 - killer feature institutional)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/spot-perps/funding-heatmap - Funding rate heatmap - 30 perps × last 24h (6h windows)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/spot-perps/funding-heatmap",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "spot-perps",
                "funding-heatmap"
              ]
            },
            "description": "Returns 30 perps × 4 windows (6h each) funding rate heatmap matrix.\n\nCache : 5 min in-process (kickoff doc §3 budget - keeps us under HL API\nrate limit even with multiple concurrent users on the dashboard).\nTier  : Performance (kickoff doc §2 - Onglet 4 killer feature, paired with\n/spot-perps endpoint).\n\nBug 1 hotfix Johann LIV 2026-05-27 :\n  - Previously frontend showed \"Coming v1.1\" placeholder because endpoint\n    was missing (sub-agent E in Phase 0 had invented the endpoint name in\n    the frontend hook without backend wiring).\n  - Now fully implemented : fetches HL fundingHistory in parallel (10 concurrent\n    semaphore) for the locked Top 30 perps, buckets into 6h UTC windows."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/stablecoin-overview - Stablecoins Overview - market cap by asset / issuer / chain / reference currency",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/stablecoin-overview?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "stablecoin-overview"
              ],
              "query": [
                {
                  "key": "dimension",
                  "value": "asset",
                  "disabled": true
                },
                {
                  "key": "timeframe",
                  "value": "1y",
                  "disabled": true
                },
                {
                  "key": "top_n",
                  "value": "20",
                  "disabled": true
                }
              ]
            },
            "description": "Aggregated stablecoin market cap by dimension. Cached 60s."
          },
          "response": []
        }
      ]
    },
    {
      "name": "market-intelligence-tokenized",
      "description": "Trinity Insights REST API - endpoints under the market-intelligence-tokenized tag.",
      "item": [
        {
          "name": "GET /api/v1/market-intelligence/tokenized/asset/{slug} - Tokenized asset drill-down detail (Performance+ tier required)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/tokenized/asset/:slug?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "tokenized",
                "asset",
                ":slug"
              ],
              "query": [
                {
                  "key": "history_days",
                  "value": "30",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Drill-down asset detail page.\n\nReturns metadata + latest snapshot + history N days.\n\nTier gating : Performance + Team only (Pro/Free see upgrade tooltip)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/tokenized/asset/{slug}/ohlc - Tokenized asset OHLC candles (HIP-3 candleSnapshot OR CoinGecko OHLC dispatch)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/tokenized/asset/:slug/ohlc?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "tokenized",
                "asset",
                ":slug",
                "ohlc"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "7d",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "OHLC daily candles pour tokenized asset cockpit chart.\n\nPhase γ.15 (2026-05-23) - founder directive : Candle Chart Price premium\nsur cockpit detail page tokenized (identique crypto rubric #7).\n\nDispatch source par asset :\n- issuer=\"Hyperliquid HIP-3\" + hip3_dex → POST HL /info candleSnapshot\n- cg_id présent (non-null) → CG /coins/{cg_id}/ohlc\n- Sinon → sync_status=\"unsupported\" (commodity sans CG, pre-IPO sans listing public)\n\nTier gating : Pro+ (incl. Performance/Team). Free voit chart limité Treasury Top 5.\n\nCompliance AMF : candles déterministes O/H/L/C, pas d'indicator Trinity proprio."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/tokenized/compliance-map - Compliance map snapshot 4-quadrants (Free tier visible)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/tokenized/compliance-map?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "tokenized",
                "compliance-map"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ]
            },
            "description": "Compliance map 4-quadrants visualization :\nUS Permitted / EU Permitted / KYC Required / Permissionless.\n\nFree tier visible (snapshot teaser)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/tokenized/premium-watch - Live cross-wrapper premium watch (top N)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/tokenized/premium-watch?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "tokenized",
                "premium-watch"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "10",
                  "description": "Top N rows",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ]
            },
            "description": "Get Live Premium Watch - cross-wrapper premium/discount across wrappers\nof the same underlying.\n\nTier gating :\n- Free : top 5 snapshot\n- Pro+ : full top N"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/market-intelligence/tokenized/universe - Universe of tokenized markets assets (tier-gated)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market-intelligence/tokenized/universe?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market-intelligence",
                "tokenized",
                "universe"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "value",
                  "description": "Filter by asset type",
                  "disabled": true
                },
                {
                  "key": "chain",
                  "value": "value",
                  "description": "Filter by chain (solana, ethereum, etc.)",
                  "disabled": true
                },
                {
                  "key": "compliance",
                  "value": "value",
                  "description": "Filter by compliance tag (us_permitted, eu_permitted, kyc_required, permissionless)",
                  "disabled": true
                },
                {
                  "key": "issuer",
                  "value": "value",
                  "description": "Filter by issuer name",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ]
            },
            "description": "Get the tokenized markets universe (assets with latest snapshot data).\n\nTier gating :\n- Free : Treasury & MM Top 5 read-only\n- Pro (=Founding) + Performance + Team : all assets + filters"
          },
          "response": []
        }
      ]
    },
    {
      "name": "mcp",
      "description": "Trinity Insights REST API - endpoints under the mcp tag.",
      "item": [
        {
          "name": "GET /api/v1/mcp/tools - Discover available MCP tools",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/tools",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "tools"
              ]
            },
            "description": "Returns the list of all available MCP tools with their schemas. Public endpoint - no API key required. Rate limited."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/mcp/call - Invoke an MCP tool",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/call",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "call"
              ]
            },
            "description": "Execute a tool call. Requires API key authentication via X-API-Key header. Rate limited per API key tier.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "mcp-api-keys",
      "description": "Trinity Insights REST API - endpoints under the mcp-api-keys tag.",
      "item": [
        {
          "name": "DELETE /api/v1/mcp/api-keys/{key_id} - Revoke an MCP API key",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/api-keys/:key_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "api-keys",
                ":key_id"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "value"
                }
              ]
            },
            "description": "Revoke an MCP API key by id.\n\nIdempotent: a second revoke on the same key returns 404 (it is no\nlonger active). The MCP server picks up the revocation within the\n60-second cache TTL."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/mcp/api-keys - List my MCP API keys",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "api-keys"
              ]
            },
            "description": "List every MCP API key the current user has ever created.\n\nActive keys come first, then revoked/expired keys, both sorted by\ncreation time desc. The plaintext is never included."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/mcp/api-keys/analytics - My Trinity Data usage analytics",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/api-keys/analytics?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "api-keys",
                "analytics"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "30",
                  "disabled": true
                }
              ]
            },
            "description": "Usage analytics for the developer console.\n\nSourced from the call log (`mcp_tool_calls`) - both MCP tool calls and REST\nAPI calls are logged (one Trinity Data key for both). `days` is clamped to 1..90."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/mcp/api-keys/usage - My Trinity Data credit usage",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/api-keys/usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "api-keys",
                "usage"
              ]
            },
            "description": "Trinity Data credit balance for the current user.\n\nRead-only: per-key monthly used/remaining (+ reset date) for metered keys,\nplus the aggregate non-expired top-up balance. An empty `keys` list means no\nTrinity Data plan is provisioned yet (credit metering disabled)."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/mcp/api-keys - Create a new MCP API key",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "api-keys"
              ]
            },
            "description": "Issue a new MCP API key.\n\nThe plaintext value (`key_plaintext`) is included in the 201 response\nbody and shown to the user once. It is HMAC-SHA256 hashed\nserver-side with a secret pepper before persistence; the plaintext is\nnever logged, mailed, or stored anywhere else.\n\nTier enforcement:\n    - free → 403 (cannot create MCP keys)\n    - founding/pro → up to 5 active keys, 1000 req/min\n    - performance → up to 10 active keys, 10000 req/min\n    - team → up to 20 active keys, 10000 req/min",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/mcp/api-keys/{key_id}/rotate - Rotate an MCP API key",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/mcp/api-keys/:key_id/rotate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "mcp",
                "api-keys",
                ":key_id",
                "rotate"
              ],
              "variable": [
                {
                  "key": "key_id",
                  "value": "value"
                }
              ]
            },
            "description": "Rotate a key: mint a new secret carrying the SAME plan (tier, scopes,\nrate limit, credits + current period) and revoke the old one, atomically.\nThe new plaintext is shown once. Does not count against the key limit or\nrefill credits."
          },
          "response": []
        }
      ]
    },
    {
      "name": "narrative-intelligence",
      "description": "Trinity Insights REST API - endpoints under the narrative-intelligence tag.",
      "item": [
        {
          "name": "GET /api/v1/narrative-intelligence/catalog - List Narrative Catalog",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/narrative-intelligence/catalog?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "narrative-intelligence",
                "catalog"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "value",
                  "description": "Filter by category (attention/media/...)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "value",
                  "description": "Search query",
                  "disabled": true
                }
              ]
            },
            "description": "List all Narrative Intelligence metrics catalog entries.\n\nPublic endpoint - returns full catalog metadata.\nData access gated separately per metric via /metrics/{id}/data."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/narrative-intelligence/categories - List Narrative Categories",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/narrative-intelligence/categories",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "narrative-intelligence",
                "categories"
              ]
            },
            "description": "List all Narrative Intelligence categories (6 sub-families Codex-style).\n\nCounts are static for Sprint 1 STAGED - will be derived from catalog at\nPhase 2 wirage when catalog-attention.ts + future catalogs are integrated."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/narrative-intelligence/metrics/{metric_id}/data - Get Narrative Metric Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/narrative-intelligence/metrics/:metric_id/data?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "narrative-intelligence",
                "metrics",
                ":metric_id",
                "data"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "all",
                  "description": "Timeframe: 90d, 180d, 1y, 2y, 5y, 10y, 22y, all",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get time series data for a Narrative Intelligence metric.\n\nServer-side tier gating: if user doesn't have access, returns 403.\nFree-tier metrics serve full data (all timeframes, price overlay included)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "newsletter",
      "description": "Trinity Insights REST API - endpoints under the newsletter tag.",
      "item": [
        {
          "name": "GET /api/v1/newsletter/resubscribe - Resubscribe",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/newsletter/resubscribe?token=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "newsletter",
                "resubscribe"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "value",
                  "disabled": false
                }
              ]
            },
            "description": "Re-subscribe the user behind this send-token (symmetric to /unsubscribe).\n\nUsed by the \"Vous avez changé d'avis ?\" link on the unsubscribe confirmation\npage (same token), AND can be hand-shared with users who unsubscribed by\naccident. Idempotent : flipping back on an already-opted-in user is a no-op.\nThe resubscribe page does NOT offer re-unsubscribe (each weekly brief\nalready carries its own unsubscribe link)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/newsletter/unsubscribe - Unsubscribe",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/newsletter/unsubscribe?token=value",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "newsletter",
                "unsubscribe"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "value",
                  "disabled": false
                }
              ]
            },
            "description": "Mark the user behind this send-token opted out of the Weekly Brief.\n\nIdempotent : re-clicking does nothing harmful. Invalid/unknown tokens get the\nsame friendly page (no enumeration leak). Test sends (user_id NULL) flip nobody.\nThe page links back to /resubscribe with the SAME token so an accidental\nclick is reversible in 1 click."
          },
          "response": []
        }
      ]
    },
    {
      "name": "old-coins",
      "description": "Trinity Insights REST API - endpoints under the old-coins tag.",
      "item": [
        {
          "name": "GET /api/v1/old-coins/count - Old Coin Count",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/old-coins/count?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "old-coins",
                "count"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "7",
                  "disabled": true
                }
              ]
            },
            "description": "Get old coin awakening event count.\n\nAll tiers can access this endpoint. FREE users see 24h-delayed data.\nPRO+ users see real-time counts."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/old-coins/events - Old Coin Events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/old-coins/events?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "old-coins",
                "events"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "30",
                  "disabled": true
                },
                {
                  "key": "min_significance",
                  "value": "50",
                  "disabled": true
                }
              ]
            },
            "description": "Get full old coin awakening event details.\n\nGating:\n- FREE: 403 Forbidden\n- PRO: full events, last 30 days max, no significance_score\n- PERF/TEAM: full events, all history, with significance_score"
          },
          "response": []
        }
      ]
    },
    {
      "name": "onchain",
      "description": "Trinity Insights REST API - endpoints under the onchain tag.",
      "item": [
        {
          "name": "GET /api/v1/onchain/catalog - List Onchain Catalog",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/catalog?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "catalog"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "value",
                  "description": "Filter by category",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "value",
                  "description": "Search query",
                  "disabled": true
                }
              ]
            },
            "description": "List all on-chain metrics catalog entries.\n\nPublic endpoint - returns catalog metadata. Data access is gated\nseparately per metric.\n\nServed from `on_chain_metric_meta`, enriched with the catalog number\nand short descriptions held by `metrics_catalog`. Until 2026-09-06\nthis returned an empty list, behind a comment saying the pipeline was\nnot live yet: it has been for a long time, and the macro, cycle and\nnarrative sibling routes have been serving their own catalogues all\nalong. An empty list here read as \"Trinity has no on-chain charts\"."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/categories - List Onchain Categories",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/categories",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "categories"
              ]
            },
            "description": "List all on-chain categories with counts."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/cohort-conviction/{slug} - Get Cohort Conviction",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/cohort-conviction/:slug?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "cohort-conviction",
                ":slug"
              ],
              "query": [
                {
                  "key": "w",
                  "value": "150",
                  "description": "Onboarding window (days). Presets 30/90/150/180/365 sit on band edges (exact N0).",
                  "disabled": true
                },
                {
                  "key": "b",
                  "value": "99",
                  "description": "Days before the halving the cohort window opens (default 99).",
                  "disabled": true
                },
                {
                  "key": "censor",
                  "value": "true",
                  "description": "Right-censor older cohorts to the youngest epoch's follow-up horizon.",
                  "disabled": true
                },
                {
                  "key": "weighting",
                  "value": "btc",
                  "description": "btc = supply weighting ; usd = realized cap (cost-basis).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Cohort Conviction - survival of new-buyer cohorts per halving epoch.\n\nReturns, per epoch cohort, the Kaplan-Meier survival curve S(t) (``survival``),\nits 30-day rolling decay rate (``decay``), or a 0-100 conviction score\n(``conviction``), over a days-post-onboarding horizon. ``slug`` is one of the\nfour catalog charts; the engine view is derived internally. Tier gating\nmirrors ``/metrics/{id}/data``."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/events - List Onchain Events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/events?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "events"
              ],
              "query": [
                {
                  "key": "subject",
                  "value": "value",
                  "description": "Filter by subject_id (e.g., 'network', 'protocol', 'exchange', 'miner', 'etf')",
                  "disabled": true
                },
                {
                  "key": "event_type",
                  "value": "value",
                  "description": "Filter by event_type (e.g., 'halving', 'protocol', 'crisis', 'regulatory')",
                  "disabled": true
                },
                {
                  "key": "from_date",
                  "value": "value",
                  "description": "Start date YYYY-MM-DD",
                  "disabled": true
                },
                {
                  "key": "to_date",
                  "value": "value",
                  "description": "End date YYYY-MM-DD",
                  "disabled": true
                },
                {
                  "key": "impact",
                  "value": "value",
                  "description": "Filter by impact level - comma-separated ('high' | 'medium' | 'low').",
                  "disabled": true
                }
              ]
            },
            "description": "List annotated Bitcoin network events for on-chain chart overlays.\n\nEach event carries a verifiable source_url per SOP EDCD §6.\nExcludes 'pending_review' entries (RSS auto-feed awaiting admin promotion)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/metrics/{metric_id}/data - Get Onchain Metric Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/metrics/:metric_id/data?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "metrics",
                ":metric_id",
                "data"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "all",
                  "description": "Timeframe: 7d, 30d, 90d, 180d, 1y, 2y, 4y, all",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get time series data for an on-chain metric.\n\nServer-side tier gating: if user doesn't have access, returns 403.\nFree-tier metrics serve full data (all timeframes, price overlay included).\nNo blur, no timeframe restriction on On-Chain data."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/pipeline/status - Get Pipeline Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/pipeline/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "pipeline",
                "status"
              ]
            },
            "description": "Admin only - Get on-chain pipeline sync status (live from node + PostgreSQL stats)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/urpd/{slug}/{date} - Get Onchain Urpd Payload",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/urpd/:slug/:date?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "urpd",
                ":slug",
                ":date"
              ],
              "query": [
                {
                  "key": "bins",
                  "value": "1",
                  "description": "Optional server-side log-bin aggregation. When provided, the raw buckets (typically 75k-80k per snapshot, ~8 MB JSON) are pre-aggregated into N log-spaced price bins (typically 250 for snapshot charts, 600 for heatmap rows). Reduces payload size ~160x and frontend render time to near-zero. Default = no aggregation (backward compat for legacy callers). Sprint URPD Perf 2026-05-26.",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                },
                {
                  "key": "date",
                  "value": "value"
                }
              ]
            },
            "description": "Return the URPD payload (2D DataFrame as JSONB) for (slug, date).\n\nSprint γ B4 legacy architecture endpoint (Phase 1 nuit 1/4) - see\n``memory/b4_legacy_architecture_kickoff_2026-05-20.md`` for the full\ndesign. Serves the 11 URPD-mode metrics whose computes return\n``pd.DataFrame`` 2D rather than time-indexed ``pd.Series``. Data is\nwritten by ``_sync_metric_urpd_payload`` in ``sync_onchain_brk.py``\n(Phase 2 nuit 2/4 onwards) into the ``on_chain_metric_payload`` table\n(migration 035).\n\nTier gating mirrors ``/metrics/{id}/data`` :\n\n  - Tier check via ``ONCHAIN_TIER_MAP[slug]`` (5 pro / 6 performance ;\n    no Free-tier URPD metric - #279 ``key-cost-basis-originals`` is the\n    Free hero but it ships as a regular Series multi-line wrapper,\n    served by ``/metrics/{id}/data``).\n  - OG image render bypass via ``X-OG-Render-Secret`` header.\n  - 403 on tier mismatch ; 404 if slug is unknown or payload row missing.\n\nPath parameters\n---------------\nslug : str\n    Canonical metric_id (must be in ``URPD_MODE_SLUGS``).\ndate : str\n    ISO date \"YYYY-MM-DD\" - typically today for snapshot mode, or a\n    date from the weekly sampling window for heatmap mode.\n\nResponse shape\n--------------\nJSON object ::\n\n    {\n      \"metric_id\": str,\n      \"date\": str,                # ISO date as requested\n      \"payload\": {                # the JSONB row from on_chain_metric_payload\n         \"date\": str,\n         \"cohort\": str,           # \"all\" | \"sth\" | \"lth\" | \"21_age_bands\"\n         \"shape\": str,            # \"snapshot\" | \"heatmap_row\"\n         \"buckets\": [...]         # list of bucket dicts (shape depends on chart)\n         \"computed_at\": str       # ISO timestamp\n      },\n      \"computed_at\": str          # ISO timestamp of the cache row\n    }"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/urpd/{slug}/clusters/{date} - Get Onchain Urpd Clusters",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/urpd/:slug/clusters/:date?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "urpd",
                ":slug",
                "clusters",
                ":date"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                },
                {
                  "key": "max_clusters",
                  "value": "7",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                },
                {
                  "key": "date",
                  "value": "value"
                }
              ]
            },
            "description": "Return auto-detected significant URPD clusters with confidence.\n\nSprint δ #384 - EXCLUSIVE Trinity proprietary algorithm. Recipe-leak\nguard SOP_MCP_RECIPE_LEAK v1.0 applies. Algorithm details are not\nexposed in API responses - only the cluster annotations and confidence.\n\nTier gating : forced to ``performance`` (regardless of ONCHAIN_TIER_MAP\ndeclaration) because this endpoint is exclusive to the cycle-aware chart.\nOG render bypass via ``X-OG-Render-Secret`` header.\n\nPath parameters\n---------------\nslug : str\n    Must be ``trinity-urpd-cycle-aware`` (other slugs return 404).\ndate : str\n    ISO date \"YYYY-MM-DD\" - typically ``latest`` resolved by frontend.\n\nQuery parameters\n----------------\nlanguage : \"fr\" | \"en\"\n    Localization for cluster labels.\nmax_clusters : int\n    Maximum number of cluster annotations returned (default 7).\n\nResponse shape\n--------------\nJSON object ::\n\n    {\n      \"metric_id\": \"trinity-urpd-cycle-aware\",\n      \"date\": \"YYYY-MM-DD\",\n      \"spot_price\": float,\n      \"cycle_phase\": str,\n      \"cycle_phase_color\": str,\n      \"clusters\": [\n        {\n          \"price_level\": float,\n          \"delta_btc\": float,\n          \"cluster_type\": \"accumulation\" | \"distribution\" | \"resistance\" | \"support\",\n          \"confidence\": float,\n          \"label\": str\n        }\n      ],\n      \"color_map\": { \"<phase>\": \"<hex>\" },\n      \"compliance\": { ... }\n    }"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/urpd/{slug}/dates - Get Onchain Urpd Dates",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/urpd/:slug/dates?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "urpd",
                ":slug",
                "dates"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "400",
                  "description": "Max dates returned, most recent first (default 400 - covers heatmap weekly 5y = 261 rows).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Return the list of available dates for a URPD slug - no payloads.\n\nSprint URPD Perf 2026-05-26 - lightweight companion to ``/urpd/{slug}/range``.\nPre-Sprint the frontend hook ``useURPDAvailableDates`` called ``/range?limit=20``\njust to extract the date list, transferring 20 rows × ~8 MB each = ~160 MB\nof payload data ultimately discarded. This endpoint returns only the dates\n(single column SELECT) in ~10 ms with a sub-KB response.\n\nResponse shape ::\n\n    {\"metric_id\": str, \"dates\": [\"YYYY-MM-DD\", ...], \"count\": int}\n\nDates are returned in DESC order (most recent first). Frontend sorts ASC\nfor timeline rendering as needed."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/urpd/{slug}/latest_date - Get Onchain Urpd Latest Date",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/urpd/:slug/latest_date",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "urpd",
                ":slug",
                "latest_date"
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Return the most recent date available for a URPD-mode slug.\n\nSprint URPD Perf 2026-05-26 - lightweight companion to ``/urpd/{slug}/{date}``.\nPre-Sprint the frontend hook ``useOnChainURPDPayload`` resolved \"latest\" by\ncalling ``/range?limit=1000`` (potentially returning ~2.4 GB JSON theoretical)\njust to extract the last date. This endpoint returns ``{date}`` only in\n<10 ms with a single ``SELECT MAX(date)`` query.\n\nResponse shape ::\n\n    {\"metric_id\": str, \"date\": str | null}\n\nReturns ``date: null`` when no rows exist for the slug."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/onchain/urpd/{slug}/range - Get Onchain Urpd Payload Range",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/onchain/urpd/:slug/range?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "onchain",
                "urpd",
                ":slug",
                "range"
              ],
              "query": [
                {
                  "key": "from_date",
                  "value": "value",
                  "description": "Start date YYYY-MM-DD (inclusive)",
                  "disabled": true
                },
                {
                  "key": "to_date",
                  "value": "value",
                  "description": "End date YYYY-MM-DD (inclusive)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "400",
                  "description": "Max rows returned (default 400)",
                  "disabled": true
                },
                {
                  "key": "bins",
                  "value": "1",
                  "description": "Optional server-side log-bin aggregation applied to each row's buckets. Critical for heatmap charts (#281, #282, #284) that fetch 8+ rows × ~2.4 MB each - without aggregation a single range call can hit 502 timeouts. Recommended: bins=600 for heatmap rendering. Sprint URPD Perf 2026-05-26.",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Return all URPD payload rows for a slug across a date range.\n\nSprint γ B4 legacy architecture Phase 3 (frontend nuit 3/4) - companion\nto ``/urpd/{slug}/{date}`` snapshot endpoint. Used by heatmap charts\n(#281, #282, #284) which need many date rows to build the 2D matrix\n(time × price_floor × value). Single-snapshot charts (#273-#278, #280,\n#283) can ignore this endpoint and stick to ``/urpd/{slug}/{date}``.\n\nTier gating + OG render bypass mirror ``/urpd/{slug}/{date}``.\n\nQuery parameters\n----------------\nfrom_date, to_date : str | None\n    Optional ISO date filters (inclusive). If omitted, returns all\n    rows up to ``limit``.\nlimit : int\n    Max rows returned (default 400 ; 260 covers weekly 5y sampling\n    with margin).\n\nResponse shape\n--------------\nJSON object ::\n\n    {\n      \"metric_id\": str,\n      \"from_date\": str | null,\n      \"to_date\": str | null,\n      \"rows\": [\n         {\n           \"date\": str,\n           \"payload\": {...},  # snapshot or heatmap_row shape\n           \"computed_at\": str\n         },\n         ...\n      ],\n      \"count\": int\n    }"
          },
          "response": []
        }
      ]
    },
    {
      "name": "price-intelligence",
      "description": "Trinity Insights REST API - endpoints under the price-intelligence tag.",
      "item": [
        {
          "name": "GET /api/v1/price-intelligence/{asset}/{metric_id} - Get Metric Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/price-intelligence/:asset/:metric_id?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "price-intelligence",
                ":asset",
                ":metric_id"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "all",
                  "description": "7d|30d|90d|180d|1y|2y|4y|all",
                  "disabled": true
                },
                {
                  "key": "resolution",
                  "value": "1d",
                  "description": "1d|1w|1m|3m|6m",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                },
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get indicator data overlaid on OHLCV for a specific metric."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/price-intelligence/{asset}/{metric_id}/intraday - Get Metric Intraday",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/price-intelligence/:asset/:metric_id/intraday?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "price-intelligence",
                ":asset",
                ":metric_id",
                "intraday"
              ],
              "query": [
                {
                  "key": "interval",
                  "value": "4h",
                  "description": "5m | 15m | 1h | 4h | 12h",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "1500",
                  "description": "Max candles returned",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                },
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Indicator computed on intraday candles (pi_klines archive).\n\nBAR_COMPUTE metrics run the Python calculator on the intraday bars\n(TradingView period convention) ; DAILY_JOIN metrics step-join the\ndaily indicator value onto each bar of its UTC day."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/price-intelligence/{asset}/klines - Get Intraday Klines",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/price-intelligence/:asset/klines?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "price-intelligence",
                ":asset",
                "klines"
              ],
              "query": [
                {
                  "key": "interval",
                  "value": "1D",
                  "description": "1h | 4h | 12h | 1D | 1W | 1M",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "1",
                  "description": "Unix timestamp (seconds, UTC) - lower bound inclusive",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "1",
                  "description": "Unix timestamp (seconds, UTC) - upper bound inclusive",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "1000",
                  "description": "Max candles returned (default 1000)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                }
              ]
            },
            "description": "Get intraday OHLCV candles for an asset at a given interval.\n\nMulti-source archive (Hyperliquid, with older history from major centralized exchanges)\npersisted in `pi_klines` partitioned table. Sprint A.bis.\n\nFounder LIV 2026-06-09 : pattern TradingView candle interval picker."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/price-intelligence/{asset}/ohlcv - Get Ohlcv",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/price-intelligence/:asset/ohlcv?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "price-intelligence",
                ":asset",
                "ohlcv"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "all",
                  "description": "7d|30d|90d|180d|1y|2y|4y|all",
                  "disabled": true
                },
                {
                  "key": "resolution",
                  "value": "1d",
                  "description": "1d|1w|1m|3m|6m",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                }
              ]
            },
            "description": "Get OHLCV candle data for an asset at a given resolution."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/price-intelligence/assets - List Assets",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/price-intelligence/assets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "price-intelligence",
                "assets"
              ]
            },
            "description": "List supported assets."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/price-intelligence/categories - List Categories",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/price-intelligence/categories",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "price-intelligence",
                "categories"
              ]
            },
            "description": "List Price Intelligence categories."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/price-intelligence/cross/{metric_id} - Get Cross Asset Metric",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/price-intelligence/cross/:metric_id?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "price-intelligence",
                "cross",
                ":metric_id"
              ],
              "query": [
                {
                  "key": "timeframe",
                  "value": "all",
                  "description": "7d|30d|90d|180d|1y|2y|4y|all",
                  "disabled": true
                },
                {
                  "key": "resolution",
                  "value": "1d",
                  "description": "1d|1w|1m|3m|6m",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "metric_id",
                  "value": "value"
                }
              ]
            },
            "description": "Get cross-asset metric data (ratios, rotation, relative strength)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "prices",
      "description": "Trinity Insights REST API - endpoints under the prices tag.",
      "item": [
        {
          "name": "GET /api/v1/prices/ohlc/{asset} - Get Price Ohlc",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/prices/ohlc/:asset",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "prices",
                "ohlc",
                ":asset"
              ],
              "variable": [
                {
                  "key": "asset",
                  "value": "value"
                }
              ]
            },
            "description": "Get historical OHLC candles for a price asset.\n\nSupported assets: btc, eth, eth_btc, btc_d, total2,\nsp500, gold, oil, commodities, japan, europe, us_dollar, china, emerging.\n\nS&P 500 includes Shiller deep history (1871-present, ~155 years).\nCrypto assets merge exchange feeds with CoinGecko.\n\nUses stale-while-revalidate caching: serves stale data instantly\nwhile refreshing in background. Users never wait for upstream fetches."
          },
          "response": []
        }
      ]
    },
    {
      "name": "referrals",
      "description": "Trinity Insights REST API - endpoints under the referrals tag.",
      "item": [
        {
          "name": "GET /api/v1/referrals/code - Get Referral Code",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/referrals/code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "referrals",
                "code"
              ]
            },
            "description": "Get or generate the user's unique referral code."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/referrals/stats - Get Stats",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/referrals/stats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "referrals",
                "stats"
              ]
            },
            "description": "Get referral statistics for the current user."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/referrals/link - Link To Referrer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/referrals/link",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "referrals",
                "link"
              ]
            },
            "description": "Link current user to a referrer via referral code.\n\nCalled during the post-signup flow when ?ref= query param is present.\nIdempotent - linking twice is a no-op.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "regime",
      "description": "Trinity Insights REST API - endpoints under the regime tag.",
      "item": [
        {
          "name": "GET /api/v1/regime/current - Get Current Regime",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/regime/current",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "regime",
                "current"
              ]
            },
            "description": "Get the current Bitcoin market regime.\n\nReturns the detected regime (accumulation, markup, distribution, markdown)\nwith confidence score and supporting on-chain signals.\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/regime/history - Get Regime History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/regime/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "regime",
                "history"
              ]
            },
            "description": "Get historical regime transitions.\n\nReturns a time series of regime changes with transition dates,\nduration, and performance metrics per regime phase.\n\nCurrently a placeholder - will be activated when BRK node indexation completes."
          },
          "response": []
        }
      ]
    },
    {
      "name": "rwa-intelligence",
      "description": "Trinity Insights REST API - endpoints under the rwa-intelligence tag.",
      "item": [
        {
          "name": "GET /api/v1/rwa-intelligence/assets - Univers des actifs tokenises (detail par actif : palier Pro)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/assets?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "assets"
              ],
              "query": [
                {
                  "key": "asset_type",
                  "value": "value",
                  "description": "stock, etf, commodity",
                  "disabled": true
                },
                {
                  "key": "liquid_only",
                  "value": "true",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "value",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "market_cap",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "asc",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "Univers des actifs tokenises (detail par actif : palier Pro)"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/assets/{asset_id} - Fiche d'un actif tokenise",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/assets/:asset_id?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "assets",
                ":asset_id"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset_id",
                  "value": "value"
                }
              ]
            },
            "description": "Tout ce qu'une fiche affiche, en une reponse et sans appel exterieur."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/assets/{asset_id}/chart - Serie en chandeliers d'un actif tokenise",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/assets/:asset_id/chart?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "assets",
                ":asset_id",
                "chart"
              ],
              "query": [
                {
                  "key": "range",
                  "value": "1d",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset_id",
                  "value": "value"
                }
              ]
            },
            "description": "Chandeliers agreges EN BASE, plus les points de la jambe tokenisee.\n\nLe regroupement se fait cote serveur : quatre-vingt-douze jours au pas de\nquinze minutes font huit mille points, que le navigateur devrait sinon\nagreger lui-meme a chaque changement d'echelle."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/assets/{asset_id}/depth - Profondeur par place d'un actif tokenise (palier Pro)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/assets/:asset_id/depth?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "assets",
                ":asset_id",
                "depth"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset_id",
                  "value": "value"
                }
              ]
            },
            "description": "Les places ou cet actif s'echange, et ce qu'il faut pour le deplacer.\n\nUN ACTIF HORS DU RELEVE N'EST PAS UNE ERREUR. Le releve couvre les actifs\nles plus echanges du jour ; les autres rendent `covered = false` avec la\nraison, et l'ecran le dit au lieu d'afficher un vide."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/assets/{asset_id}/history - Serie quotidienne d'un actif tokenise (palier Pro)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/assets/:asset_id/history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "assets",
                ":asset_id",
                "history"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "90",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset_id",
                  "value": "value"
                }
              ]
            },
            "description": "Serie quotidienne d'un actif tokenise (palier Pro)"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/depth - Profondeur a +/-2 % par place, par emetteur et par type de place",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/depth?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "depth"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "Ou le marche tokenise peut absorber un ordre, et a quel cout.\n\nLe montant a engager pour deplacer le prix de 2 % a la hausse, celui a\nvendre pour le deplacer de 2 % a la baisse, additionnes par place, par\nemetteur et par type de place, sur les actifs les plus echanges au moment\ndu releve. Zero appel exterieur : tout vient du releve quotidien en base."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/issuers - Capitalisation et volume par emetteur",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/issuers?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "issuers"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "Capitalisation et volume par emetteur"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/logos - Correspondance symbole vers logo officiel",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/logos",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "logos"
              ]
            },
            "description": "Tous les logos de la rubrique, indexes par symbole en majuscules.\n\nSert les tableaux qui n'ont pas l'image dans leur propre reponse. Aucun\nappel exterieur : les images sont deja en base, ecrites par la collecte du\nmarche, et cette route ne fait que les projeter.\n\nDeux actifs peuvent porter le meme symbole. On retient celui qui pese le\nplus : c'est celui que le lecteur a en tete quand il lit un ticker.\n\nL'IMAGE EST CELLE QUE LA COLLECTE A JUGEE (migration 158), jamais le logo\nqu'un emetteur pose sur tous ses jetons. Le representant de chaque symbole\nest choisi AVANT d'ecarter les actifs sans vraie image : filtrer d'abord\nferait passer, pour un symbole donne, un actif plus petit et etranger\nportant le meme ticker."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/overview - Capitalisation, volume et repartition du marche tokenise",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/overview?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "overview"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "Capitalisation, volume et repartition du marche tokenise"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/perp-map - Quel perpetuel double chaque actif tokenise",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/perp-map",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "perp-map"
              ]
            },
            "description": "Pour chaque actif double d'un perpetuel, son marche et son ticker.\n\nPOURQUOI LE TABLEAU EN A BESOIN. Le navigateur s'abonne au flux public du\nmarche pour afficher le prix en direct. Sans cette carte, une ligne ne\nsaurait pas sous quel nom son actif y est cote : notre or porte XAU, les\nmarches le cotent GOLD.\n\nPOURQUOI ELLE EST SERVIE A PART. La calculer coute 562 ms mesurees : il faut\nbalayer les instantanes recents, regrouper par ticker et par marche, puis\nretenir le plus liquide. Dans la requete du tableau, ce cout s'ajouterait a\nchaque chargement ; ici il est paye une fois par periode de cache."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/perp-venues - Perpetuels sur actifs reels, toutes places",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/perp-venues?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "perp-venues"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "Ou se negocient les perpetuels ecrits sur les actifs de la rubrique.\n\nZero appel exterieur : tout vient du dernier releve ecrit en base."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/perp-venues/{asset_id} - Perpetuels d'un sous-jacent, place par place (palier Pro)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/perp-venues/:asset_id?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "perp-venues",
                ":asset_id"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "asset_id",
                  "value": "value"
                }
              ]
            },
            "description": "Le detail par place d'un sous-jacent, lu au depli de sa ligne.\n\nMeme releve que la liste, zero appel exterieur. Un sous-jacent connu sans\ncontrat retenu rend une liste vide, pas une erreur."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/spread - Ecart entre le jeton tokenise et son perpetuel",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/spread?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "spread"
              ],
              "query": [
                {
                  "key": "both_liquid",
                  "value": "true",
                  "description": "Exiger les deux jambes liquides",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "Friction du marche primaire, mesuree en points de base.\n\nSeules les paires dont l'appariement est VALIDE sont publiees. Une paire\necartee reste en base : on ne supprime rien, on ne publie pas ce qui n'a\npas passe le controle de vraisemblance par le prix."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/rwa-intelligence/spread/history - Ecart median jeton / perpetuel, jour par jour",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/rwa-intelligence/spread/history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "rwa-intelligence",
                "spread",
                "history"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "en",
                  "disabled": true
                }
              ]
            },
            "description": "La mediane de l'ecart absolu, par jour, sur les paires publiees.\n\nCE QUI EST PUBLIE. Les memes paires que la lecture du jour : valides,\nliquides des deux cotes, dont les deux prix datent du meme moment a moins\nd'une heure pres. Une journee reconstituee n'entre que si sa methode figure\ndans `SPREAD_METHODES_PUBLIEES`, et chaque point dit de quelle methode il\nvient : la courbe trace les deux differemment.\n\nL'AGREGAT EST OUVERT. Comme la mediane affichee au-dessus du tableau du\njour, il ne livre aucune paire en particulier."
          },
          "response": []
        }
      ]
    },
    {
      "name": "scores",
      "description": "Trinity Insights REST API - endpoints under the scores tag.",
      "item": [
        {
          "name": "GET /api/v1/scores/{indicator}/history - Get Indicator History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/scores/:indicator/history?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "scores",
                ":indicator",
                "history"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "90",
                  "disabled": true
                },
                {
                  "key": "view",
                  "value": "value",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "indicator",
                  "value": "value"
                }
              ]
            },
            "description": "Historical data for one indicator - requires auth (or dev override), tier-clamped.\n\nAccepts: Authorization (JWT) or X-API-Key header.\nAuthentication required (JWT or API key).\n\n``view=journal`` additionally serves the indication lifecycle view\nreconstructed from the append-only journal (statuses presumed /\nvalidated / invalidated + superseded_by + first_seen) - additive field,\nthe legacy payload is unchanged.\n\nRecipe-leak guard (2026-08-01) : per-point ``metadata`` is sanitised\nfor non-admins - sub_scores aggregated by category (same rule as\n/latest), pipeline reduced to product outputs (allocation, regime).\nAdmin keeps the raw JSONB."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/scores/{indicator}/latest - Get Indicator Latest",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/scores/:indicator/latest",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "scores",
                ":indicator",
                "latest"
              ],
              "variable": [
                {
                  "key": "indicator",
                  "value": "value"
                }
              ]
            },
            "description": "Latest score for a single indicator.\n\nAccepts: Authorization (JWT) or X-API-Key header."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/scores/{indicator}/page-payload - Get Indicator Page Payload",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/scores/:indicator/page-payload",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "scores",
                ":indicator",
                "page-payload"
              ],
              "variable": [
                {
                  "key": "indicator",
                  "value": "value"
                }
              ]
            },
            "description": "Self-contained premium page payload (weekly series + walk-forward\nmarkers + meta + daily preliminary), built hourly by the pipeline cron\n(scripts/refresh_tcti_v2_payload.py) into indicator_page_payloads.\n\nAuth required; tier gate mirrors the indicator's tier_min (same rule as\n/history). 404 when the payload has not been built yet - the Next route\nfalls back to its embedded snapshot in that case."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/scores/detailed - Get Detailed Scores",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/scores/detailed",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "scores",
                "detailed"
              ]
            },
            "description": "Detailed scores with sub-scores - requires auth or dev override (Pro+).\n\nAccepts: Authorization (JWT) or X-API-Key header.\nAuthentication required (JWT or API key)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/scores/insights-lab - Get Insights Lab",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/scores/insights-lab",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "scores",
                "insights-lab"
              ]
            },
            "description": "Scores grouped by tier - for Insights Lab view.\n\nAccepts: Authorization (JWT) or X-API-Key header."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/scores/latest - Get Latest Scores",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/scores/latest",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "scores",
                "latest"
              ]
            },
            "description": "Latest scores for all indicators - gated by tier (public, soft-auth).\n\nAccepts: Authorization (JWT) or X-API-Key header."
          },
          "response": []
        }
      ]
    },
    {
      "name": "stream",
      "description": "Trinity Insights REST API - endpoints under the stream tag.",
      "item": [
        {
          "name": "GET /api/v1/stream/scores - Stream Scores",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/stream/scores?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "stream",
                "scores"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "SSE endpoint streaming live indicator scores, gated by user tier.\n\n- Anonymous users receive only free-tier data (locked indicators have null scores)\n- Authenticated users receive data matching their subscription tier\n- Data pushes every 60 seconds, heartbeats every 15 seconds\n- Auto-handles client disconnects\n- Concurrent connection limiting: max 200 total, max 3 per user/IP\n\nQuery params:\n    token: Optional JWT token (EventSource cannot send Authorization headers)"
          },
          "response": []
        },
        {
          "name": "GET /api/v1/stream/scores/snapshot - Scores Snapshot",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/stream/scores/snapshot?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "stream",
                "scores",
                "snapshot"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "value",
                  "disabled": true
                }
              ]
            },
            "description": "One-shot REST endpoint returning the same data as the SSE stream.\n\nUsed by the frontend to pre-load scores instantly on page refresh\nwhile the SSE connection is being established."
          },
          "response": []
        }
      ]
    },
    {
      "name": "team",
      "description": "Trinity Insights REST API - endpoints under the team tag.",
      "item": [
        {
          "name": "DELETE /api/v1/team/members/{member_id} - Remove Member",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/team/members/:member_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "team",
                "members",
                ":member_id"
              ],
              "variable": [
                {
                  "key": "member_id",
                  "value": "value"
                }
              ]
            },
            "description": "Remove a member from the owner's team (cannot remove self / the owner)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/team/invite/{token} - Preview Invite",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/team/invite/:token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "team",
                "invite",
                ":token"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "value"
                }
              ]
            },
            "description": "Preview an invitation by token (public - for the accept landing page).\n\nReturns only non-sensitive fields so the page can render\n\"{inviter} invited you to join {team}\". ``user`` is accepted but optional\n(anonymous visitors can see the preview before signing in)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/team/members - List Members",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/team/members",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "team",
                "members"
              ]
            },
            "description": "List the owner's team members + pending invites (owner / team tier)."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/team/invite - Create Invite",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/team/invite",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "team",
                "invite"
              ]
            },
            "description": "Invite a teammate by email (owner / team tier only).",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "POST /api/v1/team/invite/{invite_id}/revoke - Revoke Invite",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/team/invite/:invite_id/revoke",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "team",
                "invite",
                ":invite_id",
                "revoke"
              ],
              "variable": [
                {
                  "key": "invite_id",
                  "value": "value"
                }
              ]
            },
            "description": "Revoke a pending invitation (owner / team tier only)."
          },
          "response": []
        },
        {
          "name": "POST /api/v1/team/invite/{token}/accept - Accept Invite",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/team/invite/:token/accept",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "team",
                "invite",
                ":token",
                "accept"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "value"
                }
              ]
            },
            "description": "Accept an invitation and join the team (authenticated)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "treasuries",
      "description": "Trinity Insights REST API - endpoints under the treasuries tag.",
      "item": [
        {
          "name": "GET /api/v1/treasuries/public - Get Treasuries Hub",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/treasuries/public",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "treasuries",
                "public"
              ]
            },
            "description": "Latest snapshot of all corporate BTC treasuries, ranked (public hub feed)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/treasuries/public/{slug} - Get Treasury Entity",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/treasuries/public/:slug",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "treasuries",
                "public",
                ":slug"
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "value"
                }
              ]
            },
            "description": "Full public profile for one treasury entity (entity page feed)."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/treasuries/public/sparklines - Get Treasuries Sparklines",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/treasuries/public/sparklines",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "treasuries",
                "public",
                "sparklines"
              ]
            },
            "description": "90-day holdings mini-series per company, downsampled to ~30 points.\n\nSingle batch payload (~20 KB) feeding the dashboard explorer's inline\nsparklines - values only; the client normalises min/max locally."
          },
          "response": []
        }
      ]
    },
    {
      "name": "trial",
      "description": "Trinity Insights REST API - endpoints under the trial tag.",
      "item": [
        {
          "name": "GET /api/v1/trial/status - Trial Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/trial/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "trial",
                "status"
              ]
            },
            "description": "Get current trial status - also triggers expiration check if needed."
          },
          "response": []
        }
      ]
    },
    {
      "name": "trinity-composites",
      "description": "Trinity Insights REST API - endpoints under the trinity-composites tag.",
      "item": [
        {
          "name": "GET /api/v1/trinity-composites/live - Get Trinity Composites Live",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/trinity-composites/live?",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "trinity-composites",
                "live"
              ],
              "query": [
                {
                  "key": "language",
                  "value": "fr",
                  "disabled": true
                }
              ]
            },
            "description": "Live snapshot of the 8 Trinity composite indicators.\n\nPublic-facing alias of /api/v1/insights/cross-rubric/composites-snapshot.\n\nTier gating: free/founding → 403. Pro/Performance/Team → full.\nRecipe-leak guarded: NEVER returns sub_scores or components."
          },
          "response": []
        }
      ]
    },
    {
      "name": "users",
      "description": "Trinity Insights REST API - endpoints under the users tag.",
      "item": [
        {
          "name": "DELETE /api/v1/users/me - Delete My Data",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me"
              ]
            },
            "description": "RGPD art. 17 - droit a l'effacement. Delai: 30 jours max."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/users/me - Get Me",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me"
              ]
            },
            "description": "Get current user profile with trial info."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/users/me/export - Export My Data",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me",
                "export"
              ]
            },
            "description": "RGPD art. 20 - droit a la portabilite."
          },
          "response": []
        },
        {
          "name": "GET /api/v1/users/me/newsletter-preferences - Get Newsletter Preferences",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me/newsletter-preferences",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me",
                "newsletter-preferences"
              ]
            },
            "description": "Read the authenticated user's Weekly Brief preferences."
          },
          "response": []
        },
        {
          "name": "PATCH /api/v1/users/me/newsletter-preferences - Update Newsletter Preferences",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/users/me/newsletter-preferences",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "users",
                "me",
                "newsletter-preferences"
              ]
            },
            "description": "Update the authenticated user's Weekly Brief preferences.\n\nSending `newsletter_opt_in=true` after an unsubscribe also clears\n`newsletter_unsubscribed_at` (re-subscription via the account page -\nsymétrique au lien email /api/v1/newsletter/resubscribe). Founder iter 7.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    }
  ]
}