PropTally/API Documentationv1
EnterpriseDashboard

Partner API Documentation

Integrate PropTally analytics into your prop firm dashboard. Embed widgets, query trader data, and receive real-time webhooks.

1
Get Your API Key
Sign up at the enterprise dashboard or contact us for a key.
2
Make Your First Request
Call /api/partner/stats with your key to test the connection.
3
Embed or Integrate
Use iframes for quick embeds, or the REST API for full control.

Try it now

curl -H "X-API-Key: pt_YOUR_KEY" \
  https://proptally.app/api/partner/stats?period=30d
const res = await fetch('https://proptally.app/api/partner/stats?period=30d', {
  headers: { 'X-API-Key': 'pt_YOUR_KEY' }
});
const data = await res.json();
console.log(data.stats);

Authentication

All API requests require authentication. There are two methods:

API Key Authentication

Include your API key in requests using any of these methods (in order of preference):

# 1. X-API-Key header (recommended)
curl -H "X-API-Key: pt_YOUR_KEY" https://proptally.app/api/partner/stats

# 2. Authorization Bearer header
curl -H "Authorization: Bearer pt_YOUR_KEY" https://proptally.app/api/partner/stats

# 3. Query parameter (for embeds/iframes)
curl "https://proptally.app/api/partner/stats?api_key=pt_YOUR_KEY"
Keep your keys safe
API keys grant full access to your partner data. Never expose them in client-side code (except for embed widget URLs which are scoped to embed:read). Use server-side requests for sensitive operations.

Session Authentication (Portal)

The partner portal uses magic link email authentication. After clicking the link, a secure pt_session httpOnly cookie is set. Portal requests use this cookie automatically — no API key needed in the browser.

API Key Scopes

ScopeDescriptionTier
embed:readAccess embed widget endpointsStarter+
stats:readRead individual trader statisticsStarter+
stats:aggregateRead aggregate platform statisticsStarter+
accounts:listList connected trading accountsStarter+
webhooks:manageCreate and manage webhook subscriptionsGrowth+

Rate Limits

Limits are per API key, per calendar day (UTC). Check X-RateLimit-* response headers for current usage.

TierDaily RequestsEmbed WidgetsPrice
starter1,0003 widgetsFree
growth10,000All widgets$149/mo
enterprise100,000All + white-labelCustom
HTTP/1.1 200 OK
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9847
Access-Control-Allow-Origin: *
Rate limit exceeded?
When you hit your daily limit, all API requests return 403 until midnight UTC. Upgrade your tier or contact us for higher limits.

Error Codes

All errors return JSON with an error field describing the issue.

{
  "error": "Missing required scope: webhooks:manage"
}
CodeNameDescription
400Bad RequestMissing required parameters or invalid values.
401UnauthorizedMissing API key or session cookie.
403ForbiddenInvalid API key, inactive partner, rate limit exceeded, or missing scope.
404Not FoundRequested resource does not exist.
429Rate LimitedDaily request limit exceeded. Resets at midnight UTC.
500Internal ErrorServer error. Contact support if persistent.

REST API Endpoints

Base URL: https://proptally.app/api/partner

GET/api/partner/statsstats:read
Try it

Get trader performance statistics for a specific account or aggregate across all accounts.

Parameters
NameTypeRequiredDescription
account_idstringOptionalSpecific account ID. Omit for aggregate stats across all accounts.
periodstringOptional"7d", "30d", "90d", "1y", or "all". Default: "30d".
Response
{
  "account": { "id": "acc_456", "nickname": "Apex 50K" },
  "period": "30d",
  "stats": {
    "tradeCount": 142,
    "winRate": 58.5,
    "avgPnl": 27.10,
    "totalPnl": 3847.50,
    "bestTrade": 450.00,
    "worstTrade": -180.25,
    "profitFactor": 1.82,
    "instrumentsTraded": 4
  },
  "dailyPnl": [
    { "day": "2026-03-01", "pnl": 125.50, "trades": 8 }
  ],
  "instruments": [
    { "symbol": "ES", "trades": 85, "win_rate": 61.2, "total_pnl": 2450.00 }
  ]
}
Code Examples
curl -H "X-API-Key: pt_YOUR_KEY" \
  "https://proptally.app/api/partner/stats?account_id=acc_456&period=30d"
GET/api/partner/accountsaccounts:list
Try it

List all trading accounts on the platform with basic statistics.

Parameters
NameTypeRequiredDescription
firm_idstringOptionalFilter accounts by prop firm ID.
limitnumberOptionalMax results per page (default: 50, max: 200).
offsetnumberOptionalPagination offset.
Response
{
  "accounts": [
    {
      "id": "acc_456",
      "nickname": "Apex 50K",
      "trade_count": 142,
      "total_pnl": 3847.50
    }
  ],
  "total": 250,
  "limit": 50,
  "offset": 0
}
Code Examples
curl -H "X-API-Key: pt_YOUR_KEY" \
  "https://proptally.app/api/partner/accounts?limit=50&offset=0"
GET/api/partner/tradesstats:read
Try it

Get paginated trade history for a specific account. Supports filtering and sorting.

Parameters
NameTypeRequiredDescription
account_idstringRequiredThe account to query trades for.
pagenumberOptionalPage number (default: 1).
limitnumberOptionalResults per page (default: 50, max: 100).
periodstringOptional"7d", "30d", "90d", "1y", or "all".
symbolstringOptionalFilter by instrument symbol (e.g., "ES", "NQ").
directionstringOptional"long" or "short".
sortstringOptional"entry_time" (default), "exit_time", "pnl", "symbol", "quantity".
orderstringOptional"desc" (default) or "asc".
Response
{
  "account": { "id": "acc_456", "nickname": "Apex 50K" },
  "period": "30d",
  "pagination": {
    "page": 1,
    "limit": 50,
    "total": 142,
    "total_pages": 3,
    "has_more": true
  },
  "trades": [
    {
      "id": "trd_abc",
      "symbol": "ES",
      "direction": "long",
      "quantity": 2,
      "entry_price": 5250.50,
      "exit_price": 5254.25,
      "entry_time": 1710072000000,
      "exit_time": 1710073800000,
      "pnl": 187.50,
      "commission": -4.60,
      "setup_type": "breakout",
      "duration_minutes": 30
    }
  ]
}
Code Examples
curl -H "X-API-Key: pt_YOUR_KEY" \
  "https://proptally.app/api/partner/trades?account_id=acc_456&period=30d&sort=pnl&order=desc"
GET/api/partner/dashboard
Try it

Get self-service dashboard data: partner info, API keys (masked), usage stats, tier limits, and billing status.

Response
{
  "partner": {
    "id": "ptr_abc",
    "name": "Apex Trader Funding",
    "contact_email": "[email protected]",
    "tier": "growth",
    "billing_status": "active",
    "created_at": 1710000000000
  },
  "keys": [
    {
      "id": "key_123",
      "prefix": "pt_9f2e5c97",
      "label": "Production",
      "scopes": ["embed:read", "stats:read"],
      "rate_limit_daily": 10000,
      "is_active": true,
      "requests_today": 847
    }
  ],
  "usage": {
    "total_30d": 24500,
    "errors_30d": 12,
    "daily": [{ "day": "2026-03-10", "requests": 847, "avg_ms": 45, "errors": 0 }],
    "by_endpoint": [{ "endpoint": "/api/partner/stats", "method": "GET", "requests": 15200 }]
  },
  "limits": {
    "daily_requests": 10000,
    "embed_widgets": ["stats-card", "performance-summary", "equity-curve", "trade-heatmap", "instrument-breakdown", "drawdown-gauge", "leaderboard"],
    "features": ["basic_stats", "detailed_stats", "embed", "bulk_query", "webhooks"]
  }
}
Code Examples
curl -H "X-API-Key: pt_YOUR_KEY" \
  https://proptally.app/api/partner/dashboard
POST/api/partner/keys
Try it

Generate a new API key (max 10 per partner). The full key is returned only once — save it immediately.

Also available:
DELETE/api/partner/keys?key_id=xxxRevoke an API key. Cannot revoke the key being used for this request.
Parameters
NameTypeRequiredDescription
labelstringOptionalLabel for the key (default: "API Key", max 50 chars).
scopesstring[]OptionalArray of scopes. Default: ["embed:read", "stats:read", "stats:aggregate", "accounts:list"].
Request Body
{
  "label": "Production Widget Key",
  "scopes": ["embed:read", "stats:read"]
}
Response
{
  "key": "pt_a1b2c3d4e5f6...",
  "id": "key_abc123",
  "prefix": "pt_a1b2c3d4",
  "label": "Production Widget Key",
  "scopes": ["embed:read", "stats:read"],
  "message": "Save this key now — it will not be shown again."
}
Code Examples
# Create a key
curl -X POST -H "X-API-Key: pt_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"label": "Widget Key", "scopes": ["embed:read"]}' \
  https://proptally.app/api/partner/keys

# Revoke a key
curl -X DELETE -H "X-API-Key: pt_YOUR_KEY" \
  "https://proptally.app/api/partner/keys?key_id=key_abc123"
GET/api/partner/branding
Try it

Get or update your white-label branding settings. Custom branding colors and logos appear on all embed widgets.

Also available:
PUT/api/partner/brandingUpdate branding. Send only the fields you want to change. hide_powered_by requires Enterprise tier.
Request Body
// PUT body
{
  "primary_color": "#10b981",
  "logo_url": "https://yourfirm.com/logo.svg",
  "company_name": "Apex Trader Funding",
  "hide_powered_by": true
}
Response
{
  "branding": {
    "primary_color": "#3b82f6",
    "logo_url": "https://yourfirm.com/logo.svg",
    "company_name": "Your Firm Name",
    "hide_powered_by": false
  },
  "tier": "growth",
  "can_white_label": false
}
Code Examples
# Get branding
curl -H "X-API-Key: pt_YOUR_KEY" \
  https://proptally.app/api/partner/branding

# Update branding
curl -X PUT -H "X-API-Key: pt_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"primary_color": "#10b981", "company_name": "My Firm"}' \
  https://proptally.app/api/partner/branding
GET/api/partner/webhookswebhooks:manage
Try it

Manage webhook endpoints. Get notified in real-time when trades, milestones, or account events occur.

Also available:
POST/api/partner/webhooksCreate a webhook (max 5). URL must use HTTPS. Returns a signing secret.
DELETE/api/partner/webhooks?webhook_id=xxxDelete a webhook subscription.
Request Body
// POST body
{
  "url": "https://yourfirm.com/webhooks/proptally",
  "events": ["trade.created", "milestone.reached", "daily_summary"]
}
Response
{
  "webhooks": [
    {
      "id": "wh_abc",
      "url": "https://yourfirm.com/webhooks/proptally",
      "events": ["trade.created", "milestone.reached"],
      "is_active": true,
      "last_triggered_at": 1710072000000,
      "failure_count": 0
    }
  ],
  "available_events": [
    "trade.created", "trade.updated", "milestone.reached",
    "account.created", "account.updated", "daily_summary"
  ]
}
Code Examples
# Create webhook
curl -X POST -H "X-API-Key: pt_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://yourfirm.com/hooks", "events": ["trade.created"]}' \
  https://proptally.app/api/partner/webhooks

# List webhooks
curl -H "X-API-Key: pt_YOUR_KEY" \
  https://proptally.app/api/partner/webhooks

# Delete webhook
curl -X DELETE -H "X-API-Key: pt_YOUR_KEY" \
  "https://proptally.app/api/partner/webhooks?webhook_id=wh_abc"
POST/api/partner/auth/magic-link
Try it

Authentication endpoints for the partner portal. Magic link sends a login email; session manages cookie auth.

Also available:
GET/api/partner/auth/verify?token=xxxVerify magic link token. Sets session cookie and redirects to dashboard.
GET/api/partner/auth/sessionCheck current session status.
POST/api/partner/auth/sessionExchange API key for session cookie (alternative login).
DELETE/api/partner/auth/sessionSign out and clear session cookie.
Request Body
// POST /api/partner/auth/magic-link
{ "email": "[email protected]" }

// POST /api/partner/auth/session (exchange API key for session)
{ "api_key": "pt_YOUR_KEY" }
Response
// POST /magic-link response (always returns success)
{ "success": true, "message": "If an account exists with that email, a login link has been sent." }

// GET /session response
{
  "authenticated": true,
  "partner": { "id": "ptr_abc", "name": "Your Firm", "tier": "growth" }
}

// DELETE /session response
{ "success": true }
Code Examples
# Request magic link
curl -X POST -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}' \
  https://proptally.app/api/partner/auth/magic-link

# Exchange API key for session
curl -X POST -H "Content-Type: application/json" \
  -d '{"api_key": "pt_YOUR_KEY"}' \
  https://proptally.app/api/partner/auth/session

# Check session
curl -b cookies.txt https://proptally.app/api/partner/auth/session

# Sign out
curl -X DELETE -b cookies.txt https://proptally.app/api/partner/auth/session

Webhook Events

Webhooks deliver real-time event notifications to your server via HTTPS POST. All payloads are signed with HMAC-SHA256.

Signature Verification

Every webhook includes an X-PropTally-Signature header containing an HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret.

import crypto from 'crypto';

function verifyWebhook(body, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(body)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature, 'hex'),
    Buffer.from(expected, 'hex')
  );
}

// Express middleware
app.post('/webhooks/proptally', (req, res) => {
  const sig = req.headers['x-proptally-signature'];
  const valid = verifyWebhook(req.rawBody, sig, WEBHOOK_SECRET);
  if (!valid) return res.status(401).send('Invalid signature');

  const event = req.headers['x-proptally-event'];
  const data = JSON.parse(req.rawBody);
  console.log(`Received ${event}`, data);
  res.status(200).send('OK');
});
Webhook reliability
Webhooks retry on failure (non-2xx response). After 10 consecutive failures, the webhook is automatically disabled. Check the webhook dashboard to re-enable.

Event Types

trade.created

A new trade was imported or manually added.

Example Payload
{
  "event": "trade.created",
  "timestamp": "2026-03-10T14:30:00.000Z",
  "data": {
    "trade_id": "abc123",
    "account_id": "acc_456",
    "symbol": "ES",
    "direction": "long",
    "quantity": 2,
    "entry_price": 5250.50,
    "pnl": 187.50
  }
}
trade.updated

A trade was modified (notes, setup type, etc).

Example Payload
{
  "event": "trade.updated",
  "timestamp": "2026-03-10T14:35:00.000Z",
  "data": {
    "trade_id": "abc123",
    "account_id": "acc_456",
    "changes": ["notes", "setup_type"]
  }
}
milestone.reached

A trader reached a milestone (e.g., 100 trades, $10K profit).

Example Payload
{
  "event": "milestone.reached",
  "timestamp": "2026-03-10T15:00:00.000Z",
  "data": {
    "account_id": "acc_456",
    "milestone": "total_pnl_10000",
    "label": "$10,000 Total Profit",
    "value": 10247.50
  }
}
account.created

A new trading account was connected.

Example Payload
{
  "event": "account.created",
  "timestamp": "2026-03-10T10:00:00.000Z",
  "data": {
    "account_id": "acc_789",
    "nickname": "Apex 50K",
    "firm": "Apex Trader Funding"
  }
}
account.updated

Account settings or status changed.

Example Payload
{
  "event": "account.updated",
  "timestamp": "2026-03-10T10:05:00.000Z",
  "data": {
    "account_id": "acc_789",
    "changes": ["nickname", "status"]
  }
}
daily_summary

End-of-day summary for all active accounts. Sent daily at ~00:15 UTC.

Example Payload
{
  "event": "daily_summary",
  "timestamp": "2026-03-11T00:15:00.000Z",
  "data": {
    "date": "2026-03-10",
    "accounts": [
      {
        "account_id": "acc_456",
        "trades": 8,
        "pnl": 425.00,
        "win_rate": 62.5
      }
    ],
    "totals": { "trades": 12, "pnl": 580.00 }
  }
}

Embed Widgets

Drop analytics widgets into your website with a single <iframe> tag. All widgets support dark/light themes and custom accent colors.

Quick Embed

<iframe
  src="https://proptally.app/embed/partner/stats-card?key=pt_YOUR_KEY&account_id=acc_456&theme=dark"
  width="100%"
  height="280"
  frameborder="0"
  style="border:none;border-radius:12px;"
></iframe>

Customization

ParameterValuesDescription
theme"dark" | "light"Widget color scheme. Default: "dark"
accentHex color (no #)Primary accent color, e.g., "10b981" for green
period"7d" | "30d" | "90d" | "1y" | "all"Data time period
account_idstringSpecific account (omit for aggregate)
White-label embeds
Enterprise tier partners can hide the "Powered by PropTally" footer on all widgets via the branding API. Set hide_powered_by: true.

Available Widgets

Stats CardstarterHeight: 280px

Compact overview: win rate, P&L, trade count, profit factor.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account (omit for aggregate)
periodNo"7d", "30d", "90d", "1y", "all"
themeNo"dark" (default) or "light"
accentNoHex color for accents (e.g., "3b82f6")
<iframe src="https://proptally.app/embed/partner/stats-card?key=pt_YOUR_KEY&theme=dark" width="100%" height="280" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Performance SummarystarterHeight: 380px

Detailed summary with sparkline, instruments, and metrics grid.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
periodNoTime period filter
themeNo"dark" or "light"
<iframe src="https://proptally.app/embed/partner/performance-summary?key=pt_YOUR_KEY&theme=dark" width="100%" height="380" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Equity CurvestarterHeight: 300px

Canvas-rendered equity curve chart with daily P&L overlay.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
periodNoTime period filter
themeNo"dark" or "light"
accentNoChart line color
<iframe src="https://proptally.app/embed/partner/equity-curve?key=pt_YOUR_KEY&theme=dark" width="100%" height="300" frameborder="0" style="border:none;border-radius:12px;"></iframe>
LeaderboardgrowthHeight: 400px

Top traders ranked by P&L, win rate, or trade count.

ParamRequiredDescription
keyYesYour API key
firm_idNoFilter by prop firm
limitNoNumber of traders (default: 10)
themeNo"dark" or "light"
sortNo"pnl", "win_rate", or "trades"
<iframe src="https://proptally.app/embed/partner/leaderboard?key=pt_YOUR_KEY&theme=dark" width="100%" height="400" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Trade HeatmapgrowthHeight: 200px

P&L heatmap by day of week and hour of day.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
periodNoTime period filter
themeNo"dark" or "light"
<iframe src="https://proptally.app/embed/partner/trade-heatmap?key=pt_YOUR_KEY&theme=dark" width="100%" height="200" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Instrument BreakdowngrowthHeight: 260px

Per-instrument performance with trade count bars and win rates.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
periodNoTime period filter
themeNo"dark" or "light"
<iframe src="https://proptally.app/embed/partner/instrument-breakdown?key=pt_YOUR_KEY&theme=dark" width="100%" height="260" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Drawdown GaugegrowthHeight: 180px

Visual arc gauge showing current drawdown vs max allowed.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
themeNo"dark" or "light"
max_drawdownNoMax drawdown limit in dollars
<iframe src="https://proptally.app/embed/partner/drawdown-gauge?key=pt_YOUR_KEY&theme=dark" width="100%" height="180" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Win StreakgrowthHeight: 240px

Current winning/losing streak with recent W/L history dots.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
periodNoTime period filter
themeNo"dark" or "light"
<iframe src="https://proptally.app/embed/partner/win-streak?key=pt_YOUR_KEY&theme=dark" width="100%" height="240" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Monthly CalendargrowthHeight: 380px

Calendar heatmap showing daily P&L with month navigation.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
monthNoYYYY-MM format (default: current month)
themeNo"dark" or "light"
<iframe src="https://proptally.app/embed/partner/monthly-calendar?key=pt_YOUR_KEY&theme=dark" width="100%" height="380" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Risk MetricsgrowthHeight: 320px

Sharpe ratio, Sortino, max drawdown, VaR, risk:reward, and more.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
periodNoTime period filter
themeNo"dark" or "light"
<iframe src="https://proptally.app/embed/partner/risk-metrics?key=pt_YOUR_KEY&theme=dark" width="100%" height="320" frameborder="0" style="border:none;border-radius:12px;"></iframe>
Recent TradesstarterHeight: 420px

Live scrolling feed of latest trades with P&L, direction, and duration.

ParamRequiredDescription
keyYesYour API key
account_idNoSpecific account
limitNoNumber of trades (default: 10, max: 25)
themeNo"dark" or "light"
<iframe src="https://proptally.app/embed/partner/recent-trades?key=pt_YOUR_KEY&theme=dark" width="100%" height="420" frameborder="0" style="border:none;border-radius:12px;"></iframe>

Responsive Sizing

Widgets adapt to their container width. For responsive layouts, wrap the iframe in a container with the desired width:

<div style="max-width: 400px; width: 100%;">
  <iframe
    src="https://proptally.app/embed/partner/stats-card?key=pt_YOUR_KEY"
    width="100%"
    height="280"
    frameborder="0"
    style="border:none;border-radius:12px;"
  ></iframe>
</div>

SDKs & Libraries

Official SDK libraries are coming soon. In the meantime, use any HTTP client with the REST API directly.

JavaScript / TypeScript

// Minimal PropTally client
class PropTallyClient {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://proptally.app/api/partner';
  }

  async request(path, options = {}) {
    const url = new URL(this.baseUrl + path);
    if (options.params) {
      Object.entries(options.params).forEach(([k, v]) => url.searchParams.set(k, v));
    }
    const res = await fetch(url.toString(), {
      method: options.method || 'GET',
      headers: {
        'X-API-Key': this.apiKey,
        ...(options.body ? { 'Content-Type': 'application/json' } : {}),
      },
      body: options.body ? JSON.stringify(options.body) : undefined,
    });
    if (!res.ok) throw new Error(`API error ${res.status}: ${(await res.json()).error}`);
    return res.json();
  }

  getStats(params) { return this.request('/stats', { params }); }
  getAccounts(params) { return this.request('/accounts', { params }); }
  getTrades(params) { return this.request('/trades', { params }); }
  getDashboard() { return this.request('/dashboard'); }
  getBranding() { return this.request('/branding'); }
  getWebhooks() { return this.request('/webhooks'); }

  createKey(label, scopes) {
    return this.request('/keys', { method: 'POST', body: { label, scopes } });
  }

  createWebhook(url, events) {
    return this.request('/webhooks', { method: 'POST', body: { url, events } });
  }
}

// Usage
const pt = new PropTallyClient('pt_YOUR_KEY');
const stats = await pt.getStats({ period: '30d' });

Python

import requests

class PropTallyClient:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = 'https://proptally.app/api/partner'

    def _request(self, method, path, params=None, json=None):
        res = requests.request(method, f'{self.base_url}{path}',
            params=params, json=json,
            headers={'X-API-Key': self.api_key})
        res.raise_for_status()
        return res.json()

    def get_stats(self, **params):
        return self._request('GET', '/stats', params=params)

    def get_accounts(self, **params):
        return self._request('GET', '/accounts', params=params)

    def get_trades(self, **params):
        return self._request('GET', '/trades', params=params)

    def get_dashboard(self):
        return self._request('GET', '/dashboard')

    def create_webhook(self, url, events):
        return self._request('POST', '/webhooks', json={'url': url, 'events': events})

# Usage
pt = PropTallyClient('pt_YOUR_KEY')
stats = pt.get_stats(period='30d')
print(f"Win rate: {stats['stats']['winRate']}%")

Changelog

v1.3.0March 2026
  • Added /api/partner/trades endpoint with pagination, filtering, and sorting
  • Added magic link authentication for the partner portal
  • Added branding API for white-label customization
  • Partner portal now uses secure httpOnly session cookies
v1.2.0February 2026
  • Added webhook system with 6 event types and HMAC-SHA256 signing
  • Added self-service API key management (create/revoke)
  • Added partner dashboard API with usage analytics
  • Increased Growth tier daily limit from 5,000 to 10,000 requests
v1.1.0January 2026
  • Added Drawdown Gauge widget
  • Added Instrument Breakdown widget
  • Added Trade Heatmap widget
  • Added Leaderboard widget with sort options
v1.0.0December 2025
  • Initial release: Stats Card, Performance Summary, Equity Curve widgets
  • REST API: /stats and /accounts endpoints
  • 3-tier system: Starter, Growth, Enterprise

Need Help?

Our enterprise team is here to help with integration, custom requirements, and technical support.

Contact Enterprise Team[email protected]