483 Facility Endpoints
Retrieve facility inspection history and risk scores for FDA-regulated establishments.
Tier Access
Required Tier: Starter+ (Starter, Pro, Enterprise)
Rate limits apply per tier — see Rate Limits for details.
GET /v1/483/facilities/{fei_number}/inspections
Get complete inspection history and compliance track record for a specific facility.
Request
GET https://api.ctwise.ai/v1/483/facilities/3005012345/inspections?classification=OAI&include_citations=true
X-Api-Key: YOUR_API_KEY
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
fei_number | string | Yes | FDA Establishment Identifier (FEI) |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
classification | string | No | Filter by classification: NAI, VAI, or OAI |
date_from | string | No | Start date for inspection range (ISO 8601) |
date_to | string | No | End date for inspection range (ISO 8601) |
include_citations | boolean | No | Include detailed observation citations (default: false) |
include_compliance_actions | boolean | No | Include warning letters, recalls, etc. (default: false) |
Response
{
"fei_number": "3005012345",
"facility": {
"legal_name": "Acme Pharmaceutical Manufacturing",
"city": "Boston",
"state": "MA",
"country": "USA",
"product_types": ["drug", "biologics"],
"parent_company": "Acme Holdings Inc.",
"registration_status": "active",
"establishment_type": "manufacturer"
},
"summary": {
"total_inspections": 12,
"nai_count": 5,
"vai_count": 4,
"oai_count": 3,
"warning_letters": 1,
"import_alerts": 0,
"last_inspection_date": "2024-03-15",
"last_classification": "OAI",
"trend": "deteriorating"
},
"inspections": [
{
"inspection_id": "483-2024-001234",
"inspection_start_date": "2024-03-11",
"inspection_end_date": "2024-03-15",
"classification": "OAI",
"program_area": "CDER",
"inspection_type": "Pre-Approval Inspection",
"lead_investigator_id": "INV-00456",
"team_size": 3,
"total_citations": 8,
"citations": [
{
"observation_id": "483-2024-001234-obs-003",
"act_cfr_number": "21 CFR 211.113",
"short_description": "Sterile manufacturing area lacks adequate environmental monitoring",
"categories": [
"Aseptic Processing",
"Environmental Monitoring",
"Sterility Assurance"
],
"severity_score": 8.5
},
{
"observation_id": "483-2024-001234-obs-001",
"act_cfr_number": "21 CFR 211.160",
"short_description": "Laboratory controls inadequate for stability testing",
"categories": [
"Laboratory Controls",
"Stability Studies"
],
"severity_score": 7.2
}
],
"compliance_actions": [
{
"action_type": "warning_letter",
"action_date": "2024-05-10",
"action_id": "WL-2024-456",
"status": "pending_response",
"response_deadline": "2024-06-09"
}
]
},
{
"inspection_id": "483-2022-009876",
"inspection_start_date": "2022-08-15",
"inspection_end_date": "2022-08-19",
"classification": "VAI",
"program_area": "CDER",
"inspection_type": "Routine Surveillance",
"lead_investigator_id": "INV-00789",
"team_size": 2,
"total_citations": 3,
"citations": [
{
"observation_id": "483-2022-009876-obs-001",
"act_cfr_number": "21 CFR 211.192",
"short_description": "Production record review procedures need improvement",
"categories": [
"Documentation",
"Quality Systems"
],
"severity_score": 5.8
}
],
"compliance_actions": []
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
fei_number | string | FDA Establishment Identifier |
facility | object | Facility information |
facility.legal_name | string | Registered legal name |
facility.city | string | City location |
facility.state | string | State/province |
facility.country | string | Country |
facility.product_types | string[] | Types of products manufactured |
facility.parent_company | string | Parent company name |
summary | object | Inspection summary statistics |
summary.total_inspections | integer | Total number of inspections |
summary.nai_count | integer | No Action Indicated count |
summary.vai_count | integer | Voluntary Action Indicated count |
summary.oai_count | integer | Official Action Indicated count |
summary.warning_letters | integer | Warning letters issued |
summary.trend | string | Compliance trend (improving/stable/deteriorating) |
inspections | array | Array of inspection records |
inspections[].inspection_id | string | Unique inspection identifier |
inspections[].classification | string | Inspection classification |
inspections[].citations | array | Observation citations (if requested) |
inspections[].compliance_actions | array | Regulatory actions (if requested) |
GET /v1/483/facilities/{fei_number}/citations
Get all FDA 483 observation citations for a specific facility, sorted by inspection date.
Request
GET https://api.ctwise.ai/v1/483/facilities/3005012345/citations?limit=20&sort_order=desc
X-Api-Key: YOUR_API_KEY
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
fei_number | string | Yes | FDA Establishment Identifier (FEI) |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Maximum number of citations to return (default: 100, max: 1000) |
sort_order | string | No | Sort order: asc or desc (default: desc) |
category | string | No | Filter by citation category |
date_from | string | No | Start date for inspection range (ISO 8601) |
date_to | string | No | End date for inspection range (ISO 8601) |
Response
{
"fei_number": "3005012345",
"facility_name": "Acme Pharmaceutical Manufacturing",
"total": 45,
"results": [
{
"citation_id": "CIT-2024-12345",
"inspection_id": "INS-2024-67890",
"inspection_end_date": "2024-03-15",
"fiscal_year": 2024,
"act_cfr_number": "21 CFR 211.113",
"short_description": "Sterile manufacturing area lacks adequate environmental monitoring procedures as required",
"program_area": "Human Drugs",
"classification": "OAI",
"category": "Sterility Assurance",
"source": "FDA Inspection Database",
"source_url": "https://datadashboard.fda.gov/ora/cd/inspections.htm",
"data_attribution": {
"api_version": "v1.0",
"data_source_name": "FDA ORA Inspection Database",
"data_source_url": "https://datadashboard.fda.gov/ora/cd/inspections.htm",
"last_updated": "2024-09-15T00:00:00Z"
}
},
{
"citation_id": "CIT-2024-12346",
"inspection_id": "INS-2024-67890",
"inspection_end_date": "2024-03-15",
"fiscal_year": 2024,
"act_cfr_number": "21 CFR 211.160",
"short_description": "Laboratory controls inadequate for stability testing program",
"program_area": "Human Drugs",
"classification": "OAI",
"category": "Laboratory Controls",
"source": "FDA Inspection Database",
"source_url": "https://datadashboard.fda.gov/ora/cd/inspections.htm",
"data_attribution": {
"api_version": "v1.0",
"data_source_name": "FDA ORA Inspection Database",
"data_source_url": "https://datadashboard.fda.gov/ora/cd/inspections.htm",
"last_updated": "2024-09-15T00:00:00Z"
}
}
],
"query_metadata": {
"execution_time_ms": 120,
"limit": 20,
"sort_order": "desc"
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
fei_number | string | FDA Establishment Identifier |
facility_name | string | Facility legal name |
total | integer | Total number of citations for this facility |
results | array | Array of citation records |
results[].citation_id | string | Unique citation identifier |
results[].inspection_id | string | Inspection identifier |
results[].inspection_end_date | string | Date inspection ended (ISO 8601) |
results[].fiscal_year | integer | FDA fiscal year |
results[].act_cfr_number | string | CFR section cited (21 CFR format) |
results[].short_description | string | Citation description |
results[].program_area | string | FDA program area (Human Drugs, Biologics, etc.) |
results[].classification | string | Inspection classification (NAI, VAI, OAI) |
results[].category | string | NLP-classified citation category |
results[].source | string | Data source name |
results[].source_url | string | Link to FDA data source |
results[].data_attribution | object | Data attribution metadata |
results[].data_attribution.api_version | string | API version |
results[].data_attribution.data_source_name | string | Source database name |
results[].data_attribution.data_source_url | string | Source URL |
results[].data_attribution.last_updated | string | Last data refresh date |
query_metadata | object | Query execution metadata |
Examples
Get All Citations for a Facility
curl -X GET "https://api.ctwise.ai/v1/483/facilities/3005012345/citations?limit=50" \
-H "X-Api-Key: YOUR_API_KEY"
Filter by Category
curl -X GET "https://api.ctwise.ai/v1/483/facilities/3005012345/citations?category=Data%20Integrity&limit=20" \
-H "X-Api-Key: YOUR_API_KEY"
Get Citations for Date Range
curl -X GET "https://api.ctwise.ai/v1/483/facilities/3005012345/citations?date_from=2023-01-01&date_to=2024-12-31" \
-H "X-Api-Key: YOUR_API_KEY"
Python Example
import requests
API_KEY = "your_api_key"
BASE_URL = "https://api.ctwise.ai/v1"
# Get all citations for a facility
fei_number = "3005012345"
response = requests.get(
f"{BASE_URL}/483/facilities/{fei_number}/citations",
headers={"X-Api-Key": API_KEY},
params={"limit": 50, "sort_order": "desc"}
)
data = response.json()
print(f"{data['facility_name']}: {data['total']} total citations\n")
for citation in data["results"]:
print(f"Date: {citation['inspection_end_date']}")
print(f"CFR: {citation['act_cfr_number']}")
print(f"Category: {citation['category']}")
print(f"Description: {citation['short_description'][:80]}...")
print()
JavaScript Example
const API_KEY = 'your_api_key';
const BASE_URL = 'https://api.ctwise.ai/v1';
const feiNumber = '3005012345';
const response = await fetch(
`${BASE_URL}/483/facilities/${feiNumber}/citations?limit=50&sort_order=desc`,
{ headers: { 'X-Api-Key': API_KEY } }
);
const data = await response.json();
console.log(`${data.facility_name}: ${data.total} total citations`);
data.results.forEach(citation => {
console.log(`${citation.inspection_end_date}: ${citation.act_cfr_number}`);
console.log(` ${citation.short_description.substring(0, 80)}...`);
});
Error Responses
Facility Not Found
{
"error": {
"code": "NOT_FOUND",
"message": "Facility with FEI number '3005012345' not found"
}
}
Status: 404 Not Found
GET /v1/483/facilities/{fei_number}/score
Get AI-powered predictive risk score and recommended actions for a facility.
Request
GET https://api.ctwise.ai/v1/483/facilities/3005012345/score
X-Api-Key: YOUR_API_KEY
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
fei_number | string | Yes | FDA Establishment Identifier (FEI) |
Response
{
"fei_number": "3005012345",
"facility_name": "Acme Pharmaceutical Manufacturing",
"risk_score": 78,
"risk_level": "high",
"confidence": 0.87,
"score_components": {
"historical_pattern": {
"score": 82,
"weight": 0.35,
"factors": [
"3 OAI inspections in last 5 years",
"1 warning letter in last 24 months",
"Deteriorating trend in classification"
]
},
"time_since_inspection": {
"score": 65,
"weight": 0.15,
"factors": [
"Last inspection: 11 months ago",
"Average inspection interval: 18 months",
"Due for routine inspection in ~7 months"
]
},
"citation_severity": {
"score": 85,
"weight": 0.25,
"factors": [
"Average severity score: 7.8/10",
"Repeat citations in aseptic processing",
"Critical CFR violations (211.113, 211.160)"
]
},
"industry_benchmark": {
"score": 70,
"weight": 0.15,
"factors": [
"OAI rate: 25% vs industry avg 12%",
"Citations per inspection: 6.7 vs avg 3.2",
"Warning letter rate: 8% vs avg 3%"
]
},
"enforcement_trend": {
"score": 75,
"weight": 0.10,
"factors": [
"Pending warning letter response",
"No import alerts currently active",
"No consent decrees"
]
}
},
"next_best_actions": [
{
"priority": 1,
"action": "Conduct comprehensive gap assessment against 21 CFR 211.113 (aseptic processing)",
"rationale": "Repeat citations in this area with high severity scores indicate systemic deficiency",
"estimated_remediation_days": 90
},
{
"priority": 2,
"action": "Engage external consultant for environmental monitoring program review",
"rationale": "Critical observation in latest inspection; external expertise recommended",
"estimated_remediation_days": 60
},
{
"priority": 3,
"action": "Prepare for likely follow-up inspection within 6-9 months",
"rationale": "OAI classification and pending warning letter response typically trigger follow-up",
"estimated_remediation_days": 180
},
{
"priority": 4,
"action": "Implement trending dashboard for environmental monitoring excursions",
"rationale": "Proactive monitoring can prevent future citations in this high-risk area",
"estimated_remediation_days": 45
}
],
"calculated_at": "2025-02-14T10:30:00Z",
"valid_until": "2025-03-14T10:30:00Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
fei_number | string | FDA Establishment Identifier |
facility_name | string | Facility name |
risk_score | integer | Overall risk score (0-100, higher = more risk) |
risk_level | string | Risk level: low (0-40), medium (41-65), high (66-85), critical (86-100) |
confidence | number | Model confidence (0.0-1.0) |
score_components | object | Detailed scoring breakdown |
score_components.*.score | integer | Component score (0-100) |
score_components.*.weight | number | Component weight in overall score |
score_components.*.factors | string[] | Contributing factors |
next_best_actions | array | Recommended actions prioritized by impact |
next_best_actions[].priority | integer | Priority ranking |
next_best_actions[].action | string | Recommended action |
next_best_actions[].rationale | string | Why this action is recommended |
next_best_actions[].estimated_remediation_days | integer | Estimated days to complete |
calculated_at | string | Timestamp when score was calculated |
valid_until | string | Score expiration (refreshed monthly) |
Examples
Get Facility Inspection History
curl -X GET "https://api.ctwise.ai/v1/483/facilities/3005012345/inspections?include_citations=true&include_compliance_actions=true" \
-H "X-Api-Key: YOUR_API_KEY"
Get OAI Inspections Only
curl -X GET "https://api.ctwise.ai/v1/483/facilities/3005012345/inspections?classification=OAI&date_from=2020-01-01" \
-H "X-Api-Key: YOUR_API_KEY"
Get Facility Risk Score
curl -X GET "https://api.ctwise.ai/v1/483/facilities/3005012345/score" \
-H "X-Api-Key: YOUR_API_KEY"
Python Example - Inspection History
import requests
API_KEY = "your_api_key"
BASE_URL = "https://api.ctwise.ai/v1"
# Get inspection history
response = requests.get(
f"{BASE_URL}/483/facilities/3005012345/inspections",
headers={"X-Api-Key": API_KEY},
params={
"include_citations": True,
"include_compliance_actions": True
}
)
data = response.json()
facility = data['facility']
summary = data['summary']
print(f"{facility['legal_name']} ({facility['city']}, {facility['state']})")
print(f"Total Inspections: {summary['total_inspections']}")
print(f"OAI Rate: {summary['oai_count'] / summary['total_inspections'] * 100:.1f}%")
print(f"Trend: {summary['trend']}")
print("\nRecent Inspections:")
for inspection in data['inspections'][:5]:
print(f" {inspection['inspection_end_date']}: {inspection['classification']} - {inspection['total_citations']} citations")
if 'compliance_actions' in inspection and inspection['compliance_actions']:
for action in inspection['compliance_actions']:
print(f" → {action['action_type']}: {action['action_id']}")
Python Example - Risk Score
import requests
API_KEY = "your_api_key"
BASE_URL = "https://api.ctwise.ai/v1"
# Get risk score
response = requests.get(
f"{BASE_URL}/483/facilities/3005012345/score",
headers={"X-Api-Key": API_KEY}
)
data = response.json()
print(f"Facility: {data['facility_name']}")
print(f"Risk Score: {data['risk_score']}/100 ({data['risk_level'].upper()})")
print(f"Confidence: {data['confidence']:.0%}")
print("\nTop Recommended Actions:")
for action in data['next_best_actions'][:3]:
print(f"{action['priority']}. {action['action']}")
print(f" Why: {action['rationale']}")
print(f" Timeline: ~{action['estimated_remediation_days']} days\n")
JavaScript Example
const API_KEY = 'your_api_key';
const BASE_URL = 'https://api.ctwise.ai/v1';
// Get inspection history
const historyResponse = await fetch(
`${BASE_URL}/483/facilities/3005012345/inspections?include_citations=true`,
{
headers: { 'X-Api-Key': API_KEY }
}
);
const history = await historyResponse.json();
console.log(`${history.facility.legal_name}: ${history.summary.total_inspections} inspections`);
// Get risk score
const scoreResponse = await fetch(
`${BASE_URL}/483/facilities/3005012345/score`,
{
headers: { 'X-Api-Key': API_KEY }
}
);
const score = await scoreResponse.json();
console.log(`Risk Level: ${score.risk_level} (${score.risk_score}/100)`);
console.log('Top Action:', score.next_best_actions[0].action);
Error Responses
Facility Not Found
{
"error": {
"code": "NOT_FOUND",
"message": "Facility with FEI number '3005012345' not found"
}
}
Status: 404 Not Found
Invalid FEI Format
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid FEI number format. Expected 10-digit number."
}
}
Status: 400 Bad Request
Invalid API Key
{
"message": "Unauthorized"
}
Status: 401 Unauthorized
Performance
| Metric | Target |
|---|---|
| Response time | < 2 seconds |
| Data freshness | Updated weekly |
| Timeout | 30 seconds |
Notes on Risk Scoring
- Risk scores are recalculated monthly using the latest inspection data
- Scores incorporate both historical patterns and forward-looking indicators
- Component weights are calibrated using FDA enforcement patterns
- High/critical scores do not guarantee regulatory action, but indicate elevated risk
- Use scores as one input in overall compliance strategy, not sole decision factor
Related Endpoints
- POST /v1/483/observations/search - Search observations
- POST /v1/483/watchlist - Monitor facilities
- GET /v1/483/analytics/benchmarks - Industry benchmarking