v1 REST API

WallMRR API Reference

Integrate WallMRR into your existing terminal workflows, CI pipelines, or internal tools using our REST API.

The public API — API keys for your own scripts, part of Studio — is coming soon. The endpoints below are the ones the WallMRR dashboard uses today, authenticated with a signed-in session. For agents, use the MCP server, which works now.

Authentication

All API requests must be transmitted over HTTPS to https://api.wallmrr.com with your signed-in session token in the HTTP Authorization header:

curl -H "Authorization: Bearer YOUR_TOKEN" https://api.wallmrr.com/v1/dashboard/projects

Endpoints

Core endpoints for projects, metrics telemetry, layouts, and device pairing.

GET/v1/dashboard/projects
application/json

List all projects configured on the authenticated account.

Example Response
{
  "projects": [
    {
      "id": "74cff1d7-b395-41fb-ab07-8004a7d7e0a7",
      "name": "WallMRR Prod",
      "slug": "wallmrr",
      "displayCurrency": "USD",
      "isPublic": true,
      "amountMode": "exact"
    }
  ]
}
GET/v1/dashboard/projects/{projectId}/snapshot
application/json

The same pre-computed snapshot a paired screen renders. Money is in integer minor units; every metric names its source and how fresh it is.

Example Response
{
  "projectId": "74cff1d7-b395-41fb-ab07-8004a7d7e0a7",
  "displayCurrency": "USD",
  "generatedAt": "2026-09-09T00:00:00Z",
  "expiresAt": "2026-09-09T00:01:00Z",
  "revision": 1842,
  "metrics": {
    "mrr": {
      "key": "mrr",
      "value": 1845000,
      "unit": "currency",
      "currency": "USD",
      "window": "now",
      "delta": { "absolute": 4800, "percent": 0.26, "trend": "up", "basis": "previous_day" },
      "source": { "provider": "stripe", "connectionId": "5b0e…", "fetchedAt": "2026-09-08T23:59:30Z", "freshness": "fresh" }
    }
  }
}
PUT/v1/dashboard/projects/{projectId}/layout
application/json

Update the display layout mode, active theme, and metric widgets.

Example Response
{
  "mode": "monolith",
  "theme": "obsidian",
  "widgets": ["mrr", "arr", "active_subscriptions"]
}
POST/v1/tv/pair/claim
application/json

Claim the six-character code a TV is showing, for one of your projects. Body: { "code", "projectId", "name"? }. The TV collects its tokens on its next status poll.

Example Response
{
  "status": "claimed",
  "screenId": "0c9d2f4e-6a51-4d7b-9e0a-3f8b1c2d4e5f",
  "deviceToken": "…",
  "refreshToken": "…"
}
GET/v1/dashboard/billing
application/json

Retrieve current plan tier, active limitations, and Polar billing portal URL.

Example Response
{
  "plan": "studio",
  "limits": {
    "projects": -1,
    "screens": 5,
    "dataSources": -1,
    "apiAccess": true,
    "allThemes": true,
    "customLayouts": true
  }
}

Looking for Model Context Protocol (MCP)?

For Claude Desktop and Cursor, use the streamable HTTP MCP server instead of writing raw curl commands.

Explore MCP Guide