Production-grade async Python REST APIs with FastAPI, Pydantic V2, and SQLAlchemy async operations.
Works with
Covers REST endpoint design, Pydantic V2 schema validation, async database CRUD, and dependency injection patterns
Includes JWT authentication, OAuth2 flows, and authorization strategies with secure token management
Provides WebSocket endpoint setup, OpenAPI/Swagger documentation generation, and async testing with pytest and httpx
Enforces type hints, async/await patterns, and prope
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionfastapi-expertExecute the skills CLI command in your project's root directory to begin installation:
Fetches fastapi-expert from jeffallan/claude-skills and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate fastapi-expert. Access via /fastapi-expert in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
19
total installs
19
this week
7.9K
GitHub stars
0
upvotes
Run in your terminal
19
installs
19
this week
7.9K
stars
Deep expertise in async Python, Pydantic V2, and production-grade API development with FastAPI.
pytest after each endpoint group and verify OpenAPI docs at /docsCheckpoint after each step: confirm schemas validate correctly, endpoints return expected HTTP status codes, and
/docsreflects the intended API surface before proceeding.
Schema + endpoint + dependency injection in one cohesive unit:
# schemas.py
from pydantic import BaseModel, EmailStr, field_validator, model_config
class UserCreate(BaseModel):
model_config = model_config(str_strip_whitespace=True)
email: EmailStr
password: str
name: str | None = None
@field_validator("password")
@classmethod
def password_strength(cls, v: str) -> str:
if len(v) < 8:
raise ValueError("Password must be at least 8 characters")
return v
class UserResponse(BaseModel):
model_config = model_config(from_attributes=True)
id: int
email: EmailStr
name: str | None = None
# routers/users.py
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from typing import Annotated
from app.database import get_db
from app.schemas import UserCreate, UserResponse
from app import crud
router = APIRouter(prefix="/users", tags=["users"])
DbDep = Annotated[AsyncSession, Depends(get_db)]
@router.post("/", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
async def create_user(payload: UserCreate, db: DbDep) -> UserResponse:
existing = await crud.get_user_by_email(db, payload.email)
if existing:
raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="Email already registered")
return await crud.create_user(db, payload)
# crud.py
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.models import User
from app.schemas import UserCreate
from app.security import hash_password
async def get_user_by_email(db: AsyncSession, email: str) -> User | None:
result = await db.execute(select(User).where(User.email == email))
return result.scalar_one_or_none()
async def create_user(db: AsyncSession, payload: UserCreate) -> User:
user = User(email=payload.email, hashed_password=hash_password(payload.password), name=payload.name)
db.add(user)
await db.commit()
await db.refresh(user)
return user
# security.py
from datetime import datetime, timedelta, timezone
from jose import JWTError, jwt
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from typing import Annotated
SECRET_KEY = "read-from-env" # use os.environ / settings
ALGORITHM = "HS256"
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/token")
def create_access_token(subject: str, expires_delta: timedelta = timedelta(minutes=30)) -> str:
payload = {"sub": subject, "exp": datetime.now(timezone.utc) + expires_delta}
return jwt.encode(payload, SECRET_KEY, algorithm=ALGORITHM)
async def get_current_user(token: Annotated[str, Depends(oauth2_scheme)]) -> str:
try:
data = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
subject: str | None = data.get("sub")
if subject is None:
raise ValueError
return subject
except (JWTError, ValueError):
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid credentials")
CurrentUser = Annotated[str, Depends(get_current_user)]
Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Pydantic V2 | references/pydantic-v2.md |
Creating schemas, validation, model_config |
| SQLAlchemy | references/async-sqlalchemy.md |
Async database, models, CRUD operations |
| Endpoints | references/endpoints-routing.md |
APIRouter, dependencies, routing |
| Authentication | references/authentication.md |
JWT, OAuth2, get_current_user |
| Testing | references/testing-async.md |
pytest-asyncio, httpx, fixtures |
| Django Migration | references/migration-from-django.md |
Migrating from Django/DRF to FastAPI |
field_validator, model_validator, model_config)Annotated pattern for dependency injectionX | None instead of Optional[X]@validator, class Config)When implementing FastAPI features, provide:
FastAPI, Pydantic V2, async SQLAlchemy, Alembic migrations, JWT/OAuth2, pytest-asyncio, httpx, BackgroundTasks, WebSockets, dependency injection, OpenAPI/Swagger
Prerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
jeffallan/claude-skills
jeffallan/claude-skills
jeffallan/claude-skills
jeffallan/claude-skills
jeffallan/claude-skills
mindrally/skills
Registry listing for fastapi-expert matched our evaluation — installs cleanly and behaves as described in the markdown.
fastapi-expert reduced setup friction for our internal harness; good balance of opinion and flexibility.
Useful defaults in fastapi-expert — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
Keeps context tight: fastapi-expert is the kind of skill you can hand to a new teammate without a long onboarding doc.
Registry listing for fastapi-expert matched our evaluation — installs cleanly and behaves as described in the markdown.
We added fastapi-expert from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
fastapi-expert has been reliable in day-to-day use. Documentation quality is above average for community skills.
fastapi-expert fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Solid pick for teams standardizing on skills: fastapi-expert is focused, and the summary matches what you get after install.
fastapi-expert is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
showing 1-10 of 40