483 Analytics & Benchmarking
Industry benchmarking and cross-dataset analytics for 483 compliance intelligence. Compare facility performance against peer groups and get aggregate statistics across all 483 datasets.
Required Tier: Pro+ (Pro, Enterprise)
Rate limits apply per tier — see Rate Limits for details.
GET /v1/483/analytics/benchmarks
List industry benchmarks with optional filtering by grouping dimension and group value. Benchmarks aggregate risk scores, OAI rates, and citation frequencies across peer groups.
Request
GET https://api.ctwise.ai/v1/483/analytics/benchmarks?grouping=product_type&limit=10
X-Api-Key: YOUR_API_KEY
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
grouping | string | No | Filter by grouping dimension: product_type, state, program_area, country |
group_value | string | No | Filter by specific group value (e.g., Drugs, NJ, CDER) |
limit | integer | No | Results per page (default: 20, max: 100) |
offset | integer | No | Pagination offset (default: 0) |
Available Groupings
| Grouping | Description | Example Values |
|---|---|---|
product_type | FDA product classification | Drugs, Devices, Biologics |
state | US state (2-letter code) | NJ, CA, TX, PA |
program_area | FDA program area | Drugs, Devices, Biologics |
country | Country of facility | United States, India, China |
Response
{
"results": [
{
"grouping": "product_type",
"group_value": "Drugs",
"metrics": {
"avg_oai_rate": 0.15,
"median_oai_rate": 0.12,
"avg_risk_score": 35.5,
"median_risk_score": 32.0,
"avg_citations_per_inspection": 2.1,
"total_facilities": 500,
"percentile_25": 20.0,
"percentile_75": 48.0,
"percentile_90": 62.0
},
"peer_group_size": 500,
"insufficient_data": false,
"last_updated": "2026-02-21T12:00:00+00:00"
},
{
"grouping": "product_type",
"group_value": "Devices",
"metrics": {
"avg_oai_rate": 0.10,
"median_oai_rate": 0.08,
"avg_risk_score": 28.0,
"median_risk_score": 25.0,
"avg_citations_per_inspection": 1.5,
"total_facilities": 300,
"percentile_25": 15.0,
"percentile_75": 40.0,
"percentile_90": 55.0
},
"peer_group_size": 300,
"insufficient_data": false,
"last_updated": "2026-02-21T12:00:00+00:00"
}
],
"total": 2,
"offset": 0,
"limit": 20,
"filters_applied": {
"grouping": "product_type",
"group_value": null
},
"data_source": "483-intelligence/serving/benchmarks.jsonl",
"query_metadata": {
"execution_time_ms": 65
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
results | array | List of benchmark records |
results[].grouping | string | Grouping dimension (product_type, state, etc.) |
results[].group_value | string | Specific group (e.g., "Drugs", "NJ") |
results[].metrics | object | Aggregate metrics for this peer group |
results[].metrics.avg_oai_rate | number | Average OAI rate across peer group |
results[].metrics.median_oai_rate | number | Median OAI rate (robust to outliers) |
results[].metrics.avg_risk_score | number | Average composite risk score [0-100] |
results[].metrics.median_risk_score | number | Median risk score |
results[].metrics.avg_citations_per_inspection | number | Average citations per inspection |
results[].metrics.total_facilities | integer | Number of facilities in peer group |
results[].metrics.percentile_25 | number | 25th percentile risk score |
results[].metrics.percentile_75 | number | 75th percentile risk score |
results[].metrics.percentile_90 | number | 90th percentile risk score |
results[].peer_group_size | integer | Number of facilities in peer group |
results[].insufficient_data | boolean | true if <10 facilities (interpret with caution) |
results[].last_updated | string | When benchmarks were last computed |
total | integer | Total matching records |
offset | integer | Current pagination offset |
limit | integer | Current page size |
Groups with fewer than 10 facilities are flagged with insufficient_data: true. These benchmarks have limited statistical reliability and should be interpreted with caution.
GET /v1/483/analytics/summary
Cross-dataset analytics summary combining citations, facilities, CFR references, and risk scores.
Request
GET https://api.ctwise.ai/v1/483/analytics/summary
X-Api-Key: YOUR_API_KEY
Response
{
"total_citations": 25522,
"total_facilities": 8145,
"total_cfr_references": 1410,
"risk_distribution": {
"low": 4200,
"medium": 2800,
"high": 900,
"critical": 245
},
"top_cited_cfr": [
{
"act_cfr_number": "21 CFR 211.22",
"short_description": "Responsibilities of quality control unit",
"occurrence_count": 1245
}
],
"fiscal_year_breakdown": {
"2020": 3200,
"2021": 2800,
"2022": 4100,
"2023": 5200,
"2024": 5800
},
"data_freshness": {
"citations": "25522 records",
"facilities": "8145 records",
"risk_scores": "8145 records",
"cfr_references": "1410 records"
},
"query_metadata": {
"execution_time_ms": 310
}
}
Summary Response Fields
| Field | Type | Description |
|---|---|---|
total_citations | integer | Total 483 citation records |
total_facilities | integer | Total unique facilities |
total_cfr_references | integer | Total unique CFR sections cited |
risk_distribution | object | Facility count by risk level |
top_cited_cfr | array | Most frequently cited CFR sections |
fiscal_year_breakdown | object | Citation counts by fiscal year |
data_freshness | object | Record counts per dataset |
Examples
Get Benchmarks by Product Type
curl -X GET "https://api.ctwise.ai/v1/483/analytics/benchmarks?grouping=product_type" \
-H "X-Api-Key: YOUR_API_KEY"
Get Benchmarks for a Specific State
curl -X GET "https://api.ctwise.ai/v1/483/analytics/benchmarks?grouping=state&group_value=NJ" \
-H "X-Api-Key: YOUR_API_KEY"
Python Example - Benchmark Analysis
import requests
API_KEY = "your_api_key"
BASE_URL = "https://api.ctwise.ai/v1"
# Get benchmarks by product type
response = requests.get(
f"{BASE_URL}/483/analytics/benchmarks",
headers={"X-Api-Key": API_KEY},
params={"grouping": "product_type"}
)
data = response.json()
print(f"Benchmarks: {data['total']} peer groups\n")
for benchmark in data["results"]:
metrics = benchmark["metrics"]
flag = " (insufficient data)" if benchmark["insufficient_data"] else ""
print(f"{benchmark['group_value']}{flag}")
print(f" Avg Risk Score: {metrics['avg_risk_score']:.1f}")
print(f" OAI Rate: {metrics['avg_oai_rate']:.1%}")
print(f" Facilities: {metrics['total_facilities']}")
print(f" Risk P25/P75/P90: {metrics['percentile_25']:.0f} / {metrics['percentile_75']:.0f} / {metrics['percentile_90']:.0f}")
print()
Python Example - Compare Facility Against Peers
import requests
API_KEY = "your_api_key"
BASE_URL = "https://api.ctwise.ai/v1"
# Get your facility's risk score
fei = "3005012345"
risk_response = requests.get(
f"{BASE_URL}/483/risk-scores/{fei}",
headers={"X-Api-Key": API_KEY}
)
risk = risk_response.json()
# Get benchmark for Drugs product type
bench_response = requests.get(
f"{BASE_URL}/483/analytics/benchmarks",
headers={"X-Api-Key": API_KEY},
params={"grouping": "product_type", "group_value": "Drugs"}
)
bench = bench_response.json()["results"][0]
metrics = bench["metrics"]
# Compare
my_score = risk["risk_score"]
print(f"Your Facility: {my_score:.1f}/100 ({risk['risk_level']})")
print(f"Drugs Peer Group: avg={metrics['avg_risk_score']:.1f}, median={metrics['median_risk_score']:.1f}")
print(f"Peer Group Size: {metrics['total_facilities']} facilities")
if my_score < metrics["percentile_25"]:
print("Result: Below 25th percentile - Strong compliance record")
elif my_score < metrics["percentile_75"]:
print("Result: Within interquartile range - Typical performance")
elif my_score < metrics["percentile_90"]:
print("Result: Above 75th percentile - Elevated risk")
else:
print("Result: Above 90th percentile - High priority for improvement")
JavaScript Example - Analytics Summary
const API_KEY = 'your_api_key';
const BASE_URL = 'https://api.ctwise.ai/v1';
// Get analytics summary
const response = await fetch(`${BASE_URL}/483/analytics/summary`, {
headers: { 'X-Api-Key': API_KEY }
});
const summary = await response.json();
console.log(`Total Citations: ${summary.total_citations}`);
console.log(`Total Facilities: ${summary.total_facilities}`);
console.log(`\nRisk Distribution:`);
Object.entries(summary.risk_distribution).forEach(([level, count]) => {
console.log(` ${level}: ${count}`);
});
console.log(`\nCitations by Fiscal Year:`);
Object.entries(summary.fiscal_year_breakdown).forEach(([year, count]) => {
console.log(` ${year}: ${count}`);
});
Error Responses
Invalid Parameters
{
"error": "Invalid grouping. Allowed values: product_type, state, program_area, country",
"status_code": 400
}
Status: 400 Bad Request
Method Not Allowed
{
"error": "Method not allowed",
"status_code": 405
}
Status: 405 Method Not Allowed
Performance
| Metric | Target |
|---|---|
| Benchmarks response time | < 2 seconds |
| Analytics summary response time | < 3 seconds |
| Data freshness | Updated with each pipeline run |
| Timeout | 30 seconds |
Use Cases
Industry Benchmarking:
- Assess facility performance vs industry peers
- Identify high-risk product types or operations
- Set realistic compliance improvement targets
- Support executive reporting and KPIs
Cross-Dataset Analytics:
- Get a high-level overview of all 483 intelligence data
- Track citation trends by fiscal year
- Understand risk distribution across all facilities
- Monitor data freshness and coverage
Planned: POST /v1/483/observations/regulatory-mapping
Regulatory mapping is a planned capability that will map FDA 483 observations to CTWise regulatory rules with remediation guidance. Share your feedback →
This endpoint will accept observation text and return:
- CFR identification and categorization
- Mapped CTWise regulatory rules with similarity scores
- Remediation guidance with prioritized actions
- Industry best practices and regulatory references
Related Endpoints
- POST /v1/483/observations/search - Search observations
- GET /v1/483/risk-scores - Facility risk scores
- GET /v1/483/cfr-references - CFR references
- GET /v1/483/facilities - Facility profiles