Agentic-Reliability-Framework-API / app /api /routes_payments.py
petter2025's picture
Add FastAPI app
2d521fd verified
"""
Payment endpoints – Stripe Checkout integration.
"""
import os
import stripe
from fastapi import APIRouter, HTTPException, Request
from pydantic import BaseModel
from typing import Optional
from app.core.config import settings
from app.core.usage_tracker import tracker, Tier
router = APIRouter(prefix="/payments", tags=["payments"])
# Set Stripe API key (from environment)
stripe.api_key = os.getenv("STRIPE_SECRET_KEY")
STRIPE_WEBHOOK_SECRET = os.getenv("STRIPE_WEBHOOK_SECRET")
class CheckoutRequest(BaseModel):
api_key: str
success_url: str
cancel_url: str
@router.post("/create-checkout-session")
async def create_checkout_session(req: CheckoutRequest):
"""Create a Stripe Checkout session for the Pro tier."""
if not stripe.api_key:
raise HTTPException(status_code=500, detail="Stripe not configured")
# Verify the API key exists and is free tier
tier = tracker.get_tier(req.api_key) if tracker else None
if tier != Tier.FREE:
raise HTTPException(status_code=400, detail="Only free tier keys can be upgraded")
try:
checkout_session = stripe.checkout.Session.create(
payment_method_types=["card"],
line_items=[
{
"price": os.getenv("STRIPE_PRO_PRICE_ID"), # e.g., "price_123"
"quantity": 1,
}
],
mode="subscription",
success_url=req.success_url,
cancel_url=req.cancel_url,
metadata={"api_key": req.api_key},
client_reference_id=req.api_key,
)
return {"sessionId": checkout_session.id, "url": checkout_session.url}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))