Skip to main content

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.

Tier Access

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

ParameterTypeRequiredDescription
groupingstringNoFilter by grouping dimension: product_type, state, program_area, country
group_valuestringNoFilter by specific group value (e.g., Drugs, NJ, CDER)
limitintegerNoResults per page (default: 20, max: 100)
offsetintegerNoPagination offset (default: 0)

Available Groupings

GroupingDescriptionExample Values
product_typeFDA product classificationDrugs, Devices, Biologics
stateUS state (2-letter code)NJ, CA, TX, PA
program_areaFDA program areaDrugs, Devices, Biologics
countryCountry of facilityUnited 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

FieldTypeDescription
resultsarrayList of benchmark records
results[].groupingstringGrouping dimension (product_type, state, etc.)
results[].group_valuestringSpecific group (e.g., "Drugs", "NJ")
results[].metricsobjectAggregate metrics for this peer group
results[].metrics.avg_oai_ratenumberAverage OAI rate across peer group
results[].metrics.median_oai_ratenumberMedian OAI rate (robust to outliers)
results[].metrics.avg_risk_scorenumberAverage composite risk score [0-100]
results[].metrics.median_risk_scorenumberMedian risk score
results[].metrics.avg_citations_per_inspectionnumberAverage citations per inspection
results[].metrics.total_facilitiesintegerNumber of facilities in peer group
results[].metrics.percentile_25number25th percentile risk score
results[].metrics.percentile_75number75th percentile risk score
results[].metrics.percentile_90number90th percentile risk score
results[].peer_group_sizeintegerNumber of facilities in peer group
results[].insufficient_databooleantrue if <10 facilities (interpret with caution)
results[].last_updatedstringWhen benchmarks were last computed
totalintegerTotal matching records
offsetintegerCurrent pagination offset
limitintegerCurrent page size
Insufficient Data Flag

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

FieldTypeDescription
total_citationsintegerTotal 483 citation records
total_facilitiesintegerTotal unique facilities
total_cfr_referencesintegerTotal unique CFR sections cited
risk_distributionobjectFacility count by risk level
top_cited_cfrarrayMost frequently cited CFR sections
fiscal_year_breakdownobjectCitation counts by fiscal year
data_freshnessobjectRecord 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

MetricTarget
Benchmarks response time< 2 seconds
Analytics summary response time< 3 seconds
Data freshnessUpdated with each pipeline run
Timeout30 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

Coming Soon

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