From dd825cc771db22ffdd6a5fab9a2fceca235f3db7 Mon Sep 17 00:00:00 2001 From: Peter Wood Date: Fri, 14 Nov 2025 13:49:02 -0500 Subject: [PATCH] Refactor API documentation: Update introduction section with detailed overview, authentication methods, response formats, and example usage; enhance clarity and structure for better user guidance. --- api-reference/introduction.mdx | 258 ++++++++++++++++++++++++++++++--- 1 file changed, 239 insertions(+), 19 deletions(-) diff --git a/api-reference/introduction.mdx b/api-reference/introduction.mdx index c835b78..357db6a 100644 --- a/api-reference/introduction.mdx +++ b/api-reference/introduction.mdx @@ -1,33 +1,253 @@ --- -title: 'Introduction' -description: 'Example section for showcasing API endpoints' +title: 'API Introduction' +description: 'RESTful API for the Trading Analysis Dashboard' --- - - If you're not looking to build API reference documentation, you can delete - this section by removing the api-reference folder. - +## Overview -## Welcome - -There are two ways to build API documentation: [OpenAPI](https://mintlify.com/docs/api-playground/openapi/setup) and [MDX components](https://mintlify.com/docs/api-playground/mdx/configuration). For the starter kit, we are using the following OpenAPI specification. +The Trading Analysis Dashboard exposes a RESTful API for accessing trading data, portfolio holdings, and performance metrics programmatically. The API powers the web interface and can be used to build custom integrations or automation tools. - View the OpenAPI specification file + Visit the Trading Analysis Dashboard at performance.miningwood.com +## Base URL + +``` +https://performance.miningwood.com +``` + +For local development: +``` +http://localhost:5000 +``` + ## Authentication -All API endpoints are authenticated using Bearer tokens and picked up from the specification file. +All API endpoints require authentication via Google OAuth 2.0. The API uses session-based authentication with HTTP-only cookies set after successful OAuth login. + + + See the [Authentication guide](/api-reference/auth) for details on the OAuth flow and session management. + + +## API Categories + + + + Access monthly trading data, P&L reports, and individual trade details + + + Manage portfolio holdings and trigger price updates + + + Query trading performance across custom date ranges + + + OAuth endpoints and session management + + + +## Response Format + +All API responses return JSON with a consistent structure: + +### Success Response ```json -"security": [ - { - "bearerAuth": [] - } -] +{ + "success": true, + "data": { ... }, + "data_source": "postgresql" +} ``` + +### Error Response + +```json +{ + "success": false, + "error": "Error message description" +} +``` + +## Common Response Fields + +| Field | Type | Description | +|-------|------|-------------| +| `success` | boolean | Indicates if the request was successful | +| `error` | string | Error message (only present on failure) | +| `data_source` | string | Database source (typically "postgresql") | +| `redirect_to_login` | boolean | Whether client should redirect to login (for 401 errors) | + +## HTTP Status Codes + +The API uses standard HTTP status codes: + +| Code | Meaning | When Used | +|------|---------|-----------| +| `200` | OK | Successful request | +| `400` | Bad Request | Invalid request parameters | +| `401` | Unauthorized | Authentication required | +| `403` | Forbidden | User not authorized | +| `404` | Not Found | Resource not found | +| `500` | Internal Server Error | Server-side error | + +## Rate Limiting + + + The API does not currently implement rate limiting, but the Finnhub price refresh endpoint is subject to Finnhub's API rate limits (60 requests/minute for free tier). + + +## Data Types + +### Date Formats + +- **Months**: `YYYY-MM` format (e.g., `"2024-08"`) +- **Dates**: `YYYY-MM-DD` format (e.g., `"2024-08-15"`) +- **Timestamps**: ISO 8601 format (e.g., `"2024-08-15T14:30:00Z"`) + +### Numeric Values + +- **Prices**: Decimal with 2-4 decimal places +- **Shares**: Integer or decimal (supports fractional shares) +- **P&L Values**: Decimal with 2 decimal places (can be negative) +- **Percentages**: Decimal (e.g., `0.1523` for 15.23%) + +## Example Usage + +### Fetch Available Trading Months + +```bash +curl -X GET https://performance.miningwood.com/api/months \ + -H "Cookie: session=your_session_cookie" +``` + +### Get Portfolio Holdings + +```bash +curl -X GET https://performance.miningwood.com/api/portfolio/holdings \ + -H "Cookie: session=your_session_cookie" +``` + +### Analyze Custom Timeframe + +```bash +curl -X GET "https://performance.miningwood.com/api/timeframe?start_date=2024-01-01&end_date=2024-06-30" \ + -H "Cookie: session=your_session_cookie" +``` + +## Client Libraries + +The API can be accessed using any HTTP client library: + + +```javascript JavaScript (Fetch) +const response = await fetch('/api/months', { + credentials: 'include' // Include cookies +}); +const data = await response.json(); +``` + +```python Python (requests) +import requests + +session = requests.Session() +response = session.get('https://performance.miningwood.com/api/months') +data = response.json() +``` + +```bash cURL +curl -X GET https://performance.miningwood.com/api/months \ + --cookie-jar cookies.txt \ + --cookie cookies.txt +``` + + +## Data Models + +### Trade Object + +```json +{ + "symbol": "AAPL", + "buy_date": "2024-01-15", + "sell_date": "2024-03-20", + "buy_price": 150.25, + "sell_price": 165.80, + "volume": 100, + "profit_loss": 1555.00, + "return_percentage": 10.35 +} +``` + +### Holding Object + +```json +{ + "id": 123, + "symbol": "MSFT", + "type": "stock", + "shares": 50, + "average_cost": 320.50, + "current_price": 345.20, + "market_value": 17260.00, + "gain_loss": 1235.00, + "gain_loss_percentage": 7.70, + "last_updated": "2024-08-15T14:30:00Z" +} +``` + +### Month Summary Object + +```json +{ + "month": "2024-08", + "total_trades": 15, + "winning_trades": 10, + "win_rate": 66.67, + "trading_pl": 1250.75, + "dividend_income": 125.50, + "total_return_with_dividends": 1376.25 +} +``` + +## Error Handling + +Always check the `success` field before processing response data: + +```javascript +const response = await fetch('/api/months'); +const data = await response.json(); + +if (!data.success) { + console.error('API Error:', data.error); + + if (data.redirect_to_login) { + window.location.href = '/auth/login'; + } + return; +} + +// Process data.months +``` + +## Next Steps + + + + Learn about OAuth flow and session management + + + Explore trading data endpoints + + + Manage portfolio holdings + + + Query custom date ranges + +