Skip to main content

apiforgepy

API observability & intelligence for FastAPI/Starlette — local-first, privacy-first.

PyPI version CI License: MIT Python

Track latency, error rates, and behavioral trends of your APIs. Everything stays on your machine.

→ Full documentation


Install

pip install apiforgepy

Quick start

from fastapi import FastAPI
from apiforgepy import ApiForgeMiddleware

app = FastAPI()

app.add_middleware(ApiForgeMiddleware)

@app.get("/users/{user_id}")
def get_user(user_id: int):
    return {"id": user_id}

# Dashboard auto-starts at http://localhost:4242

Dashboard

Open http://localhost:4242 after starting your app. No configuration needed — the dashboard server starts automatically in the background.

  • Health Score (0–100) — global API health at a glance
  • Latency percentiles — P50 / P90 / P99 per route
  • Error rates — 4xx and 5xx breakdown
  • Automatic insights — latency anomalies, dead endpoints, release regressions
  • Time series chart — click any route to see its latency over time

Data is stored locally in .apiforge.db (SQLite). Nothing leaves your machine.

Configuration

app.add_middleware(
    ApiForgeMiddleware,
    db_path=".apiforge.db",
    dashboard_port=4242,        # set to 0 to disable
    env="production",
    release="v1.4.0",           # enables release regression detection
    service="user-service",
    sampling=1.0,               # 0.0–1.0 sample rate
    ignore_paths=["/health", "/favicon.ico"],
)

Cloud mode

Send metrics to the APIForge SaaS platform instead of storing them locally:

app.add_middleware(
    ApiForgeMiddleware,
    cloud_url=os.environ["APIFORGE_CLOUD_URL"],
    api_key=os.environ["APIFORGE_API_KEY"],
    service="user-service",
    env="production",
    release=os.environ.get("APP_VERSION"),
)

In cloud mode, metrics are aggregated in memory for 60 seconds and sent as a single batch — the local dashboard and SQLite database are not used.

Release tracking

Pass your release version to enable before/after deployment comparison:

import os
app.add_middleware(ApiForgeMiddleware, release=os.environ.get("APP_VERSION"))

When a new release is detected, APIForge compares P90 latency before and after and surfaces regressions automatically.

What you get

  • Per-route latency — P50, P90, P99 per endpoint, updated every 60 s
  • Error rate by route — 2xx / 3xx / 4xx / 5xx breakdown
  • API Health Score — a single 0–100 score summarising your API's health
  • Ghost route detection — requests that match no declared Starlette/FastAPI route
  • Latency anomaly alerts — Z-score detection against a 7-day baseline
  • Dead endpoint detection — routes with no traffic for 21+ days
  • Release regression analysis — automatic P90 comparison per deploy
  • Progressive drift detection — slow latency increases over weeks
  • Untracked route detection — declared routes that never received traffic
  • Inflight concurrency tracking — inflight_avg and inflight_max per route

Graceful shutdown

Cleanup (flush buffer, close dashboard, close SQLite) happens automatically via atexit. For explicit control in long-running processes:

from contextlib import asynccontextmanager
from fastapi import FastAPI
from apiforgepy import ApiForgeMiddleware

forge = None

@asynccontextmanager
async def lifespan(app):
    yield
    if forge:
        forge.shutdown()

app = FastAPI(lifespan=lifespan)
forge = ApiForgeMiddleware(app)  # store reference before adding
app.add_middleware(ApiForgeMiddleware)

Privacy by design

The middleware never reads request or response bodies, headers, cookies, or tokens. Route parameters are captured as patterns only (/users/{user_id} — never /users/42). In local mode, zero data leaves your machine.

Requirements

  • Python ≥ 3.11
  • Starlette ≥ 0.27 (FastAPI ≥ 0.110 includes this)

License

MIT — APIForge Organisation

Release files for apiforgepy 4.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for apiforgepy 4.0.0
File Size Uploaded
apiforgepy-4.0.0.tar.gz 746.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for apiforgepy 4.0.0
File Interpreter ABI Platform
apiforgepy-4.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / apiforgepy-4.0.0.tar.gz

Download URL apiforgepy-4.0.0.tar.gz
Size 746.4 kB
Tags Source
SHA-256 checksum
How to use checksums
b41c12dc954c87ba4d25198bc683fe96dbcc7f96205cbd99055f40909434f44d
BLAKE2b-256 checksum
How to use checksums
9765e1f94c43f798b4aab17c032979f53f7fcf719aaa8e45d3fe31e66ded63f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / apiforgepy-4.0.0-py3-none-any.whl

Download URL apiforgepy-4.0.0-py3-none-any.whl
Size 747.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f005a101a6aca71e37ff9dc53f59ae06a45a023cba24f19bb8de866fe0cf8d2
BLAKE2b-256 checksum
How to use checksums
00a4b4b2640a2d3f0adfc04f5ced7865619b1ec0ea8476c42bd12445115d6399
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

4.0.0 This release

2 release files

3.0.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page