446 lines
8.5 KiB
Markdown
446 lines
8.5 KiB
Markdown
# Subscription API Reference
|
|
|
|
Complete API endpoint documentation for the ALwrity subscription system.
|
|
|
|
## Base URL
|
|
|
|
All endpoints are prefixed with `/api/subscription`
|
|
|
|
## Authentication
|
|
|
|
All endpoints require user authentication. Include the user ID in the request path or headers as appropriate.
|
|
|
|
## Subscription Management Endpoints
|
|
|
|
### Get All Subscription Plans
|
|
|
|
Get a list of all available subscription plans.
|
|
|
|
```http
|
|
GET /api/subscription/plans
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"name": "Free",
|
|
"price": 0.0,
|
|
"billing_cycle": "monthly",
|
|
"limits": {
|
|
"gemini_calls": 100,
|
|
"tokens": 100000
|
|
}
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Basic",
|
|
"price": 29.0,
|
|
"billing_cycle": "monthly",
|
|
"limits": {
|
|
"gemini_calls": 1000,
|
|
"openai_calls": 500,
|
|
"tokens": 1500000,
|
|
"monthly_cost": 50.0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Get User Subscription
|
|
|
|
Get the current subscription details for a specific user.
|
|
|
|
```http
|
|
GET /api/subscription/user/{user_id}/subscription
|
|
```
|
|
|
|
**Parameters:**
|
|
- `user_id` (path): The user's unique identifier
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"user_id": "user123",
|
|
"plan_name": "Pro",
|
|
"plan_id": 3,
|
|
"status": "active",
|
|
"started_at": "2025-01-01T00:00:00Z",
|
|
"expires_at": "2025-02-01T00:00:00Z",
|
|
"limits": {
|
|
"gemini_calls": 5000,
|
|
"openai_calls": 2500,
|
|
"monthly_cost": 150.0
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get API Pricing Information
|
|
|
|
Get current pricing configuration for all API providers.
|
|
|
|
```http
|
|
GET /api/subscription/pricing
|
|
```
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"provider": "gemini",
|
|
"model": "gemini-2.5-flash",
|
|
"input_cost_per_1m": 0.125,
|
|
"output_cost_per_1m": 0.375
|
|
},
|
|
{
|
|
"provider": "tavily",
|
|
"cost_per_request": 0.001
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Usage Tracking Endpoints
|
|
|
|
### Get Current Usage Statistics
|
|
|
|
Get current usage statistics for a user.
|
|
|
|
```http
|
|
GET /api/subscription/usage/{user_id}
|
|
```
|
|
|
|
**Parameters:**
|
|
- `user_id` (path): The user's unique identifier
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"billing_period": "2025-01",
|
|
"total_calls": 1250,
|
|
"total_tokens": 210000,
|
|
"total_cost": 15.75,
|
|
"usage_status": "active",
|
|
"limits": {
|
|
"gemini_calls": 5000,
|
|
"monthly_cost": 150.0
|
|
},
|
|
"provider_breakdown": {
|
|
"gemini": {
|
|
"calls": 800,
|
|
"tokens": 125000,
|
|
"cost": 10.50
|
|
},
|
|
"openai": {
|
|
"calls": 450,
|
|
"tokens": 85000,
|
|
"cost": 5.25
|
|
}
|
|
},
|
|
"usage_percentages": {
|
|
"gemini_calls": 16.0,
|
|
"cost": 10.5
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get Usage Trends
|
|
|
|
Get historical usage trends over time.
|
|
|
|
```http
|
|
GET /api/subscription/usage/{user_id}/trends?months=6
|
|
```
|
|
|
|
**Parameters:**
|
|
- `user_id` (path): The user's unique identifier
|
|
- `months` (query, optional): Number of months to retrieve (default: 6)
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"periods": [
|
|
{
|
|
"period": "2024-07",
|
|
"total_calls": 850,
|
|
"total_cost": 12.50,
|
|
"provider_breakdown": {
|
|
"gemini": {"calls": 600, "cost": 8.00},
|
|
"openai": {"calls": 250, "cost": 4.50}
|
|
}
|
|
}
|
|
],
|
|
"trends": {
|
|
"calls_trend": "increasing",
|
|
"cost_trend": "stable"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get Dashboard Data
|
|
|
|
Get comprehensive dashboard data including usage, limits, projections, and alerts.
|
|
|
|
```http
|
|
GET /api/subscription/dashboard/{user_id}
|
|
```
|
|
|
|
**Parameters:**
|
|
- `user_id` (path): The user's unique identifier
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"summary": {
|
|
"total_api_calls_this_month": 1250,
|
|
"total_cost_this_month": 15.75,
|
|
"usage_status": "active",
|
|
"unread_alerts": 2
|
|
},
|
|
"current_usage": {
|
|
"billing_period": "2025-01",
|
|
"total_calls": 1250,
|
|
"total_cost": 15.75,
|
|
"usage_status": "active",
|
|
"provider_breakdown": {
|
|
"gemini": {"calls": 800, "cost": 10.50, "tokens": 125000},
|
|
"openai": {"calls": 450, "cost": 5.25, "tokens": 85000}
|
|
},
|
|
"usage_percentages": {
|
|
"gemini_calls": 16.0,
|
|
"openai_calls": 18.0,
|
|
"cost": 10.5
|
|
}
|
|
},
|
|
"limits": {
|
|
"plan_name": "Pro",
|
|
"limits": {
|
|
"gemini_calls": 5000,
|
|
"openai_calls": 2500,
|
|
"monthly_cost": 150.0
|
|
}
|
|
},
|
|
"projections": {
|
|
"projected_monthly_cost": 47.25,
|
|
"projected_usage_percentage": 31.5
|
|
},
|
|
"alerts": [
|
|
{
|
|
"id": 1,
|
|
"title": "API Usage Notice - Gemini",
|
|
"message": "You have used 800 of 5,000 Gemini API calls",
|
|
"severity": "info",
|
|
"created_at": "2025-01-15T10:30:00Z",
|
|
"read": false
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Alerts & Notifications Endpoints
|
|
|
|
### Get Usage Alerts
|
|
|
|
Get usage alerts and notifications for a user.
|
|
|
|
```http
|
|
GET /api/subscription/alerts/{user_id}?unread_only=false
|
|
```
|
|
|
|
**Parameters:**
|
|
- `user_id` (path): The user's unique identifier
|
|
- `unread_only` (query, optional): Filter to only unread alerts (default: false)
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": [
|
|
{
|
|
"id": 1,
|
|
"user_id": "user123",
|
|
"title": "API Usage Notice - Gemini",
|
|
"message": "You have used 800 of 5,000 Gemini API calls",
|
|
"severity": "info",
|
|
"alert_type": "usage_threshold",
|
|
"created_at": "2025-01-15T10:30:00Z",
|
|
"read": false
|
|
},
|
|
{
|
|
"id": 2,
|
|
"user_id": "user123",
|
|
"title": "Usage Warning",
|
|
"message": "You have reached 90% of your monthly cost limit",
|
|
"severity": "warning",
|
|
"alert_type": "cost_threshold",
|
|
"created_at": "2025-01-20T14:15:00Z",
|
|
"read": false
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Mark Alert as Read
|
|
|
|
Mark a specific alert as read.
|
|
|
|
```http
|
|
POST /api/subscription/alerts/{alert_id}/mark-read
|
|
```
|
|
|
|
**Parameters:**
|
|
- `alert_id` (path): The alert's unique identifier
|
|
|
|
**Response:**
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Alert marked as read"
|
|
}
|
|
```
|
|
|
|
## Usage Examples
|
|
|
|
### Get User Usage (cURL)
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/subscription/usage/user123" \
|
|
-H "Content-Type: application/json"
|
|
```
|
|
|
|
### Get Dashboard Data (cURL)
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/subscription/dashboard/user123" \
|
|
-H "Content-Type: application/json"
|
|
```
|
|
|
|
### Get Usage Trends (cURL)
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/subscription/usage/user123/trends?months=6" \
|
|
-H "Content-Type: application/json"
|
|
```
|
|
|
|
### JavaScript Example
|
|
|
|
```javascript
|
|
// Get comprehensive usage data
|
|
const response = await fetch(`/api/subscription/dashboard/${userId}`);
|
|
const data = await response.json();
|
|
|
|
console.log(data.data.summary);
|
|
// {
|
|
// total_api_calls_this_month: 1250,
|
|
// total_cost_this_month: 15.75,
|
|
// usage_status: "active",
|
|
// unread_alerts: 2
|
|
// }
|
|
|
|
// Get current usage percentages
|
|
const usage = data.data.current_usage;
|
|
console.log(usage.usage_percentages);
|
|
// {
|
|
// gemini_calls: 16.0,
|
|
// openai_calls: 18.0,
|
|
// cost: 10.5
|
|
// }
|
|
```
|
|
|
|
### Python Example
|
|
|
|
```python
|
|
import requests
|
|
|
|
# Get user usage statistics
|
|
response = requests.get(
|
|
f"http://localhost:8000/api/subscription/usage/{user_id}",
|
|
headers={"Content-Type": "application/json"}
|
|
)
|
|
|
|
data = response.json()
|
|
usage = data["data"]
|
|
|
|
print(f"Total calls: {usage['total_calls']}")
|
|
print(f"Total cost: ${usage['total_cost']}")
|
|
print(f"Status: {usage['usage_status']}")
|
|
```
|
|
|
|
## Error Responses
|
|
|
|
All endpoints return consistent error responses:
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"error": "error_type",
|
|
"message": "Human-readable error message",
|
|
"details": "Additional error details",
|
|
"user_id": "user123",
|
|
"timestamp": "2025-01-15T10:30:00Z"
|
|
}
|
|
```
|
|
|
|
### Common Error Codes
|
|
|
|
- `400 Bad Request`: Invalid request parameters
|
|
- `401 Unauthorized`: Authentication required
|
|
- `404 Not Found`: Resource not found
|
|
- `429 Too Many Requests`: Usage limit exceeded
|
|
- `500 Internal Server Error`: Server error
|
|
|
|
## Rate Limiting
|
|
|
|
Usage limits are enforced automatically. When a limit is exceeded, the API returns a `429 Too Many Requests` response:
|
|
|
|
```json
|
|
{
|
|
"success": false,
|
|
"error": "UsageLimitExceededException",
|
|
"message": "Usage limit exceeded for Gemini API calls",
|
|
"details": {
|
|
"provider": "gemini",
|
|
"limit_type": "api_calls",
|
|
"current_usage": 1000,
|
|
"limit_value": 1000
|
|
}
|
|
}
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
- [Overview](overview.md) - System architecture and features
|
|
- [Setup](setup.md) - Installation and configuration
|
|
- [Pricing](pricing.md) - Subscription plans and API pricing
|
|
|
|
---
|
|
|
|
**Last Updated**: January 2025
|
|
|