MCPサーバー

carrierscore

io.carrierscore/carrierscore
ビジネス・業務 データ・分析 公開・接続可能 MCP 2025-11-25

このMCPでできること

Looks up FMCSA carriers, calculates safety and crash risk indices, generates evidence reports, and monitors carrier lists.

audit_entries
List Archived Evidence Reports
List the immutable audit-archive entries for the caller's API key: every Montgomery evidence report the key generated (text or json), newest first, each with its entry id, generation timestamp, DOT number, scoring date, methodology version and the SHA-256 of the archived report text. Requires a paid CarrierScore API key. Use it to answer "which carriers did we generate evidence for, and when?" and to find the entry id to cite or verify for a given carrier and date. Monitor keys see the last 90 days; Compliance keys see everything ever archived. Args: - dot_number (optional): only entries for this US DOT number - since (optional): YYYY-MM-DD; only entries generated on/after this date (UTC) - limit (optional): 1-500, default 50 Returns JSON: { tier, retention_days, total_entries, matched, count, entries: [{ entry_id, generated_at, dot_number, sha256, format_requested, scored_as_of, score_version }] }. Errors: 403 without a paid key; 400 if since is malformed.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Max entries to return (default 50)'}, 'since': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only entries generated on/after this date (YYYY-MM-DD, UTC)'}, 'dot_number': {'type': 'string', 'pattern': '^\\d{1,8}$', 'description': 'US DOT number of the carrier, digits only (e.g. "1234567")'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tier', 'retention_days', 'total_entries', 'matched', 'count', 'entries'], 'properties': {'tier': {'type': 'string', 'description': "Caller's tier (monitor / compliance)"}, 'count': {'type': 'number', 'description': 'Entries returned (<= limit)'}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['entry_id', 'generated_at', 'dot_number', 'sha256'], 'properties': {'tier': {'type': 'string'}, 'sha256': {'type': 'string', 'description': 'SHA-256 of the archived plain-text report'}, 'entry_id': {'type': 'string', 'description': 'Archive entry id: <dot>_<UTC timestamp>_<sha8>'}, 'dot_number': {'type': 'string'}, 'generated_at': {'type': 'string', 'description': 'When the report was generated (ISO 8601 UTC)'}, 'scored_as_of': {'type': ['string', 'null'], 'description': 'Scoring run the report was built from'}, 'score_version': {'type': ['string', 'null']}, 'format_requested': {'type': 'string', 'description': '"text" or "json" as originally requested'}}, 'additionalProperties': True}, 'description': 'Newest first'}, 'matched': {'type': 'number', 'description': 'Entries matching the filters within the retention window'}, 'total_entries': {'type': 'number', 'description': 'All entries ever archived for this key'}, 'retention_days': {'type': ['number', 'null'], 'description': 'Retrieval window in days (monitor 90; compliance null = unlimited)'}}, 'additionalProperties': False}
carrier_lookup
Look Up Carrier Identity
Look up an FMCSA-registered motor carrier's identity by US DOT number: legal name, DBA, operating status, FMCSA safety rating, fleet size (power units, drivers), physical address, and registration dates. Use this first when a booking/dispatch agent needs to confirm WHO a carrier is — that a DOT number is real, active, and matches the company name on a rate confirmation. It does not return risk indices (use carrier_score for those). Returns JSON: { dot_number, legal_name, dba_name, status_code, safety_rating, power_units, total_drivers, phy_street, phy_city, phy_state, phy_zip, add_date, mcs150_date }. Errors: 404 if the DOT is not in the FMCSA census (likely a typo or a fraudulent/never-registered carrier — treat as a red flag for booking).
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dot_number'], 'properties': {'dot_number': {'type': 'string', 'pattern': '^\\d{1,8}$', 'description': 'US DOT number of the carrier, digits only (e.g. "1234567")'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dot_number'], 'properties': {'phy_zip': {'$ref': '#/properties/phy_street'}, 'add_date': {'$ref': '#/properties/legal_name', 'description': 'Date added to the FMCSA census (YYYY-MM-DD)'}, 'dba_name': {'$ref': '#/properties/legal_name', 'description': 'Doing-business-as name, if any'}, 'phy_city': {'$ref': '#/properties/phy_street'}, 'phy_state': {'$ref': '#/properties/phy_street'}, 'dot_number': {'type': 'string', 'description': 'US DOT number'}, 'legal_name': {'type': ['string', 'null'], 'description': 'Registered legal name'}, 'phy_street': {'$ref': '#/properties/legal_name'}, 'mcs150_date': {'$ref': '#/properties/legal_name', 'description': 'Latest MCS-150 filing date (YYYY-MM-DD)'}, 'power_units': {'type': ['number', 'null'], 'description': 'Fleet size: number of power units'}, 'status_code': {'$ref': '#/properties/legal_name', 'description': 'FMCSA operating status code (e.g. "A" = active)'}, 'safety_rating': {'$ref': '#/properties/legal_name', 'description': 'FMCSA safety rating code (e.g. "S" = satisfactory)'}, 'total_drivers': {'$ref': '#/properties/power_units', 'description': 'Total drivers reported'}}, 'additionalProperties': False}
carrier_score
Get Carrier Risk Indices
Get the CarrierScore risk indices for a carrier by US DOT number: two first-class, separately validated indices (0-100, HIGHER = RISKIER), each with a full component breakdown. This is the core "is this carrier safe to book?" signal for AI booking agents. Served methodology v0.5 returns TWO indices, both population-relative and built from point-in-time public FMCSA data: - inspection_risk — inspection / compliance risk: violations and out-of-service rates per roadside inspection (24-month chronic, 6-month acute). Historically validated against the carrier's future out-of-service rate (validation block on the index). - crash_risk — crash risk: reportable crashes, fatal/injury crashes and tow-away crashes per roadside inspection (24 months). Historically validated against future reportable crashes (validation block on the index). Present BOTH indices; do not collapse them into one number. Hard flags (active out-of-service order, no active insurance filing, high-confidence reincarnated-carrier link) add explicit surcharges — a carrier with any flag deserves extra scrutiny regardless of index values. Returns JSON: { dot_number, legal_name, inspection_risk: { label, description, score, base, surcharge, percentile_basis, band, band_note, data_sufficiency, components: { <name>: { label, value, percentile, weight } }, validation: { auc_holdout, label, holdout_origins, post_selection_origin, source, text } }, crash_risk: { ...same shape... }, legacy_composite: { score, base_score, surcharge, rule, rule_text, validated: false, note }, carrier_score (backward-compatible: == legacy_composite.score under v0.5), base_score, surcharge, score_version ("0.5"), methodology_note, components (flat, backward-compatible), flags: string[], data_sufficiency (0-1, share of the components resting on observed vs neutral-imputed data), scored_as_of, disclaimer }. Older opt-in methodologies keep their shapes: v0 (six components), v0.3 (sub_indices), v0.4 (indices + composite). Interpreting for booking decisions: treat the indices as documented decision-support evidence, not an approve/deny verdict. legacy_composite / carrier_score is NOT validated and is kept only so older integrations keep working — never present it as the carrier's risk score. Low data_sufficiency means limited inspection history — common for new carriers, itself a risk signal. Always relay each index's validation text and the disclaimer when presenting the result. Errors: 404 if the DOT is not in the scored population; 503 if scores have not been computed yet.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dot_number'], 'properties': {'dot_number': {'type': 'string', 'pattern': '^\\d{1,8}$', 'description': 'US DOT number of the carrier, digits only (e.g. "1234567")'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dot_number', 'components', 'flags'], 'properties': {'flags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hard flags (OOS order, no insurance, reincarnation link)'}, 'indices': {'type': 'object', 'description': 'v0.4 only: inspection_risk / crash_risk first-class indices (0-100), each with components, percentile basis and band', 'additionalProperties': {'$ref': '#/properties/inspection_risk'}}, 'composite': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'rule': {'type': 'string'}, 'rule_text': {'type': 'string'}, 'surcharge': {'type': ['number', 'null']}, 'base_score': {'type': ['number', 'null']}, 'carrier_score': {'type': ['number', 'null']}}, 'description': 'v0.4 only: how the headline carrier_score is derived from the two indices', 'additionalProperties': True}, 'surcharge': {'$ref': '#/properties/carrier_score', 'description': 'Additional points from hard flags'}, 'base_score': {'$ref': '#/properties/carrier_score', 'description': 'Score before hard-flag surcharges (v0.5: legacy composite base)'}, 'components': {'type': 'object', 'description': 'Flat component map keyed by component name (v0.5: within-index weights of both indices, for backward compatibility; the per-index components live under inspection_risk / crash_risk)', 'additionalProperties': {'$ref': '#/properties/inspection_risk/properties/components/additionalProperties'}}, 'crash_risk': {'$ref': '#/properties/inspection_risk', 'description': 'v0.5 (served default): CRASH RISK index 0-100 (higher = riskier) — crashes, fatal/injury and tow-away crashes per roadside inspection relative to the population; validated against future reportable crashes. Read this second.'}, 'disclaimer': {'type': 'string', 'description': 'Methodology disclaimer — relay verbatim'}, 'dot_number': {'type': 'string', 'description': 'US DOT number'}, 'legal_name': {'type': ['string', 'null']}, 'sub_indices': {'type': 'object', 'description': 'v0.3 only: inspection_risk / crash_risk sub-indices (0-100) and their weights', 'additionalProperties': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'value': {'type': ['number', 'null'], 'description': 'Sub-index 0-100, population-relative'}, 'weight': {'type': 'number', 'description': 'Sub-index weight in the composite'}}, 'additionalProperties': True}}, 'scored_as_of': {'$ref': '#/properties/legal_name', 'description': 'Date of the scoring run (YYYY-MM-DD)'}, 'carrier_score': {'type': ['number', 'null'], 'description': "0-100, higher = riskier. Under v0.5 this equals legacy_composite.score (kept for backward compatibility); under v0/v0.3/v0.4 it is that version's headline score"}, 'score_version': {'$ref': '#/properties/legal_name', 'description': 'Documented methodology version ("0.5" is the served default; "0", "0.3", "0.4" are opt-in)'}, 'inspection_risk': {'type': 'object', 'properties': {'band': {'type': ['string', 'null'], 'description': "Carrier's 24m inspection-count band"}, 'base': {'type': ['number', 'null'], 'description': 'Percentile blend before surcharge (0-100)'}, 'label': {'type': 'string'}, 'score': {'type': ['number', 'null'], 'description': 'Index 0-100 incl. its own surcharge, higher = riskier'}, 'band_note': {'type': 'string'}, 'surcharge': {'type': ['number', 'null']}, 'components': {'type': 'object', 'additionalProperties': {'type': 'object', 'required': ['label'], 'properties': {'label': {'type': 'string', 'description': 'Human-readable component label'}, 'value': {'type': ['number', 'null'], 'description': 'Raw component value'}, 'weight': {'type': 'number', 'description': 'Component weight in the base score'}, 'percentile': {'type': ['number', 'null'], 'description': 'Population percentile of the value, 0-1'}}, 'additionalProperties': True}}, 'validation': {'type': 'object', 'properties': {'text': {'type': 'string', 'description': 'One-line validation statement — relay with the index'}, 'label': {'type': 'string', 'description': 'The future outcome the index was validated against'}, 'source': {'type': 'string', 'description': 'Path of the validation report in docs/research'}, 'auc_holdout': {'type': 'string', 'description': "Held-out AUC range on the index's own outcome"}, 'holdout_origins': {'type': 'array', 'items': {'type': 'string'}}, 'top_decile_lift': {'type': 'string'}, 'post_selection_origin': {'type': ['string', 'null']}, 'auc_post_selection_holdout': {'type': 'string'}}, 'description': "v0.5: this index's own historical validation (point-in-time backtest, held-out cohorts)", 'additionalProperties': True}, 'description': {'type': 'string'}, 'data_sufficiency': {'type': ['number', 'null']}, 'percentile_basis': {'type': 'string', 'description': '"global" or "banded" (24m inspection-activity band)'}, 'surcharges_applied': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'v0.5 (served default): INSPECTION / COMPLIANCE RISK index 0-100 (higher = riskier) — violations and out-of-service rates per roadside inspection relative to the population; validated against future out-of-service rate. Read this first.', 'additionalProperties': True}, 'data_sufficiency': {'$ref': '#/properties/carrier_score', 'description': '0-1: share of the score resting on observed vs neutral-imputed data'}, 'legacy_composite': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'rule': {'type': 'string'}, 'score': {'type': ['number', 'null'], 'description': 'Legacy composite 0-100 (== top-level carrier_score)'}, 'rule_text': {'type': 'string'}, 'surcharge': {'type': ['number', 'null']}, 'validated': {'type': 'boolean', 'description': 'Always false: the composite is not validated or gated'}, 'base_score': {'type': ['number', 'null']}}, 'description': "v0.5: backward-compatible legacy composite (0.70 x higher index + 0.30 x lower index + surcharges). Not validated, not the headline — do not present it as the carrier's risk score.", 'additionalProperties': True}, 'methodology_note': {'$ref': '#/properties/legal_name', 'description': 'One-line description of the weighting used'}}, 'additionalProperties': False}
list_alerts
Get Alerts for a Saved Carrier List
Retrieve the alert history for a saved carrier list (see save_carrier_list), newest first. Requires the same paid API key that saved the list. Each alert records one change detected between consecutive daily scoring runs for one carrier: type (oos_order_activated, authority_lost, insurance_lapsed, status_changed, inspection_risk_jump, crash_risk_jump, score_jump, reincarnation_link), severity (critical / high / medium / low), the field that changed with its before/after values, the DOT and legal name, and the scoring dates compared. inspection_risk_jump / crash_risk_jump (index base up >= 10 points, medium) are the primary deterioration signals; score_jump on the legacy composite is emitted at low severity for backward compatibility. Use it to answer "did anything change on my carrier list?" — critical alerts (new OOS order, authority lost) mean the carrier should not be dispatched until verified; follow up with carrier_score or montgomery_file for the full picture. Args: - list_id: the lst_... id returned by save_carrier_list - since (optional): YYYY-MM-DD; only alerts from scoring runs on/after this date Returns JSON: { list_id, since, count, alerts: [{ ts, as_of, prev_as_of, list_id, list_name, dot, legal_name, type, severity, field, before, after }] }. An empty alerts array means no monitored change since the given date (alerts only exist once two daily scoring runs have happened). Errors: 403 without a paid key; 404 if the list id is unknown for this key; 400 if since is not YYYY-MM-DD.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id'], 'properties': {'since': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Only alerts from scoring runs on/after this date (YYYY-MM-DD)'}, 'list_id': {'type': 'string', 'pattern': '^lst_[A-Za-z0-9_-]+$', 'description': 'Saved list id from save_carrier_list'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'count', 'alerts'], 'properties': {'count': {'type': 'number', 'description': 'Number of alerts returned'}, 'since': {'type': ['string', 'null'], 'description': 'Lower bound applied (YYYY-MM-DD) or null'}, 'alerts': {'type': 'array', 'items': {'type': 'object', 'required': ['ts', 'as_of', 'list_id', 'dot', 'type', 'severity'], 'properties': {'ts': {'type': 'string', 'description': 'When the alert was recorded (ISO 8601 UTC)'}, 'dot': {'type': 'string', 'description': 'US DOT number'}, 'type': {'type': 'string', 'description': 'oos_order_activated | authority_lost | insurance_lapsed | status_changed | score_jump | reincarnation_link'}, 'after': {'description': 'Value in the current scoring run'}, 'as_of': {'type': 'string', 'description': 'Scoring run date that surfaced the change (YYYY-MM-DD)'}, 'field': {'type': 'string', 'description': 'Score field that changed'}, 'before': {'description': 'Value in the previous scoring run'}, 'list_id': {'type': 'string'}, 'severity': {'type': 'string', 'description': 'critical | high | medium'}, 'list_name': {'type': 'string'}, 'legal_name': {'type': ['string', 'null']}, 'prev_as_of': {'type': 'string', 'description': 'Previous scoring run date compared against'}}, 'additionalProperties': True}, 'description': 'Alert history, newest first'}, 'list_id': {'type': 'string'}}, 'additionalProperties': False}
monitor_carriers
Monitor Carrier List
Batch risk check for a list of carriers by US DOT number (max 100 per call): score summary and hard flags for each. Use when an agent is screening multiple candidate carriers for a load, or re-checking a broker's active carrier roster ("did any of my carriers pick up an out-of-service order or drop insurance?"). For a full breakdown of any single carrier that looks risky here, follow up with carrier_score or montgomery_file. Args: - dot_numbers: array of DOT number strings, 1-100 entries Returns JSON: { scored_as_of, requested, found, carriers: [{ dot_number, legal_name, inspection_risk (0-100 inspection / compliance risk index, higher = riskier), crash_risk (0-100 crash risk index), carrier_score (legacy composite under v0.5 — backward compatibility only; use the two indices), data_sufficiency, flags: string[] }], not_found: string[], disclaimer }. DOTs in not_found are absent from the scored population — verify them with carrier_lookup; an unknown DOT on your roster is itself a red flag. Errors: 400 if the list is empty or exceeds 100 (split into batches); 503 if scores are not computed yet.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dot_numbers'], 'properties': {'dot_numbers': {'type': 'array', 'items': {'type': 'string', 'pattern': '^\\d{1,8}$', 'description': 'US DOT number of the carrier, digits only (e.g. "1234567")'}, 'maxItems': 100, 'minItems': 1, 'description': 'US DOT numbers to check, 1-100 per call'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['requested', 'found', 'carriers', 'not_found'], 'properties': {'found': {'type': 'number', 'description': 'How many were found in the scored population'}, 'carriers': {'type': 'array', 'items': {'type': 'object', 'required': ['dot_number'], 'properties': {'flags': {'type': 'array', 'items': {'type': 'string'}}, 'crash_risk': {'type': ['number', 'null'], 'description': 'Crash risk index 0-100 (v0.5 headline; also present for v0.3/v0.4 parquets)'}, 'dot_number': {'type': 'string'}, 'legal_name': {'type': ['string', 'null']}, 'carrier_score': {'type': ['number', 'null'], 'description': '0-100, higher = riskier (v0.5: legacy composite, backward compatibility only — use the two indices)'}, 'inspection_risk': {'type': ['number', 'null'], 'description': 'Inspection / compliance risk index 0-100 (v0.5 headline; also present for v0.3/v0.4 parquets)'}, 'data_sufficiency': {'type': ['number', 'null']}}, 'additionalProperties': True}, 'description': 'Score summary per found carrier'}, 'not_found': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Requested DOTs absent from the scored population'}, 'requested': {'type': 'number', 'description': 'How many DOT numbers were requested'}, 'disclaimer': {'type': 'string', 'description': 'Methodology disclaimer — relay verbatim'}, 'scored_as_of': {'type': ['string', 'null'], 'description': 'Date of the scoring run (YYYY-MM-DD)'}}, 'additionalProperties': False}
montgomery_file
Generate Montgomery Evidence File
Generate a timestamped Montgomery file — a carrier-selection evidence report — for a carrier by US DOT number. Since Montgomery v. Caribe Transport II (SCOTUS, May 2026), freight brokers are exposed to state-law negligent-selection claims and need documented, timestamped, safety-data-based carrier selection. This report is that artifact: the two risk indices (inspection / compliance risk and crash risk, each with its components, percentiles, activity-band context and its own historical-validation line), the legacy composite (labelled backward-compatibility only), hard flags, FMCSA safety rating, and the methodology disclaimer, dated as of the scoring run. A booking agent should generate and retain this file at the moment a carrier is selected for a load. Args: - dot_number: US DOT number, digits only - format: "text" (default; the filing-ready plain-text report, available on the free tier) or "json" (structured fields; requires an API key on the monitor or compliance tier) Returns: format="text" gives the plain-text report (structured field report_text); format="json" gives structured fields { report, generated, dot_number, legal_name, dba_name, safety_rating, status_code, power_units, inspection_risk, crash_risk, legacy_composite (v0.5), carrier_score (backward-compatible), components, flags, data_sufficiency, score_version, scored_as_of, disclaimer } (v0.4 parquets return indices + composite instead). Every report embeds the disclaimer verbatim — keep it when storing or quoting the report. Audit archive (paid tiers): every report generated with an API key is stored immutably server-side and the result carries audit_entry_id + sha256 (SHA-256 of the plain-text report). Quote both when citing the report; later, verify_evidence(entry_id) proves the archived copy is unchanged and audit_entries lists what was generated. Monitor keys can retrieve the last 90 days (2,000 reports/month); Compliance keys have unlimited retention and reports. Errors: 403 if format=json without an API key; 404 unknown DOT; 429 if a Monitor key has used its 2,000 reports this month (upgrade hint in the message); 503 if scores are not computed yet.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dot_number'], 'properties': {'format': {'enum': ['text', 'json'], 'type': 'string', 'default': 'text', 'description': '"text" = filing-ready report (free tier); "json" = structured fields (requires API key)'}, 'dot_number': {'type': 'string', 'pattern': '^\\d{1,8}$', 'description': 'US DOT number of the carrier, digits only (e.g. "1234567")'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'flags': {'type': 'array', 'items': {'type': 'string'}}, 'report': {'type': 'string', 'description': 'Report title line (format="json")'}, 'sha256': {'type': 'string', 'description': 'Paid tiers: SHA-256 of the archived plain-text report — cite it alongside the entry id'}, 'indices': {'type': 'object', 'additionalProperties': {'$ref': '#/properties/inspection_risk'}}, 'dba_name': {'$ref': '#/properties/legal_name'}, 'composite': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'rule': {'type': 'string'}, 'rule_text': {'type': 'string'}, 'surcharge': {'type': ['number', 'null']}, 'base_score': {'type': ['number', 'null']}, 'carrier_score': {'type': ['number', 'null']}}, 'additionalProperties': True}, 'generated': {'type': ['string', 'null'], 'description': 'Report generation date (YYYY-MM-DD)'}, 'surcharge': {'$ref': '#/properties/power_units'}, 'base_score': {'$ref': '#/properties/power_units'}, 'components': {'type': 'object', 'additionalProperties': {'$ref': '#/properties/inspection_risk/properties/components/additionalProperties'}}, 'crash_risk': {'$ref': '#/properties/inspection_risk', 'description': 'v0.5: crash risk index with components and validation'}, 'disclaimer': {'type': 'string'}, 'dot_number': {'type': 'string'}, 'legal_name': {'$ref': '#/properties/generated'}, 'power_units': {'type': ['number', 'null']}, 'report_text': {'type': 'string', 'description': 'Filing-ready plain-text evidence report (format="text")'}, 'status_code': {'$ref': '#/properties/legal_name'}, 'sub_indices': {'type': 'object', 'additionalProperties': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'value': {'type': ['number', 'null'], 'description': 'Sub-index 0-100, population-relative'}, 'weight': {'type': 'number', 'description': 'Sub-index weight in the composite'}}, 'additionalProperties': True}}, 'scored_as_of': {'$ref': '#/properties/legal_name'}, 'carrier_score': {'$ref': '#/properties/power_units', 'description': '0-100, higher = riskier (v0.5: == legacy_composite.score)'}, 'safety_rating': {'$ref': '#/properties/legal_name'}, 'score_version': {'$ref': '#/properties/legal_name'}, 'audit_entry_id': {'type': 'string', 'description': 'Paid tiers: id of the immutable archived copy of this report (use with verify_evidence / audit_entries)'}, 'inspection_risk': {'type': 'object', 'properties': {'band': {'type': ['string', 'null'], 'description': "Carrier's 24m inspection-count band"}, 'base': {'type': ['number', 'null'], 'description': 'Percentile blend before surcharge (0-100)'}, 'label': {'type': 'string'}, 'score': {'type': ['number', 'null'], 'description': 'Index 0-100 incl. its own surcharge, higher = riskier'}, 'band_note': {'type': 'string'}, 'surcharge': {'type': ['number', 'null']}, 'components': {'type': 'object', 'additionalProperties': {'type': 'object', 'required': ['label'], 'properties': {'label': {'type': 'string', 'description': 'Human-readable component label'}, 'value': {'type': ['number', 'null'], 'description': 'Raw component value'}, 'weight': {'type': 'number', 'description': 'Component weight in the base score'}, 'percentile': {'type': ['number', 'null'], 'description': 'Population percentile of the value, 0-1'}}, 'additionalProperties': True}}, 'validation': {'type': 'object', 'properties': {'text': {'type': 'string', 'description': 'One-line validation statement — relay with the index'}, 'label': {'type': 'string', 'description': 'The future outcome the index was validated against'}, 'source': {'type': 'string', 'description': 'Path of the validation report in docs/research'}, 'auc_holdout': {'type': 'string', 'description': "Held-out AUC range on the index's own outcome"}, 'holdout_origins': {'type': 'array', 'items': {'type': 'string'}}, 'top_decile_lift': {'type': 'string'}, 'post_selection_origin': {'type': ['string', 'null']}, 'auc_post_selection_holdout': {'type': 'string'}}, 'description': "v0.5: this index's own historical validation (point-in-time backtest, held-out cohorts)", 'additionalProperties': True}, 'description': {'type': 'string'}, 'data_sufficiency': {'type': ['number', 'null']}, 'percentile_basis': {'type': 'string', 'description': '"global" or "banded" (24m inspection-activity band)'}, 'surcharges_applied': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'v0.5: inspection / compliance risk index with components and validation', 'additionalProperties': True}, 'data_sufficiency': {'$ref': '#/properties/power_units'}, 'legacy_composite': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'rule': {'type': 'string'}, 'score': {'type': ['number', 'null'], 'description': 'Legacy composite 0-100 (== top-level carrier_score)'}, 'rule_text': {'type': 'string'}, 'surcharge': {'type': ['number', 'null']}, 'validated': {'type': 'boolean', 'description': 'Always false: the composite is not validated or gated'}, 'base_score': {'type': ['number', 'null']}}, 'description': 'v0.5: legacy composite, backward compatibility only', 'additionalProperties': True}, 'methodology_note': {'$ref': '#/properties/legal_name'}}, 'additionalProperties': False}
save_carrier_list
Save Carrier List for Daily Monitoring
Save a named list of carriers (by US DOT number) for continuous monitoring. Requires a paid CarrierScore API key (Monitor or Compliance tier) — connect with your key via OAuth (or set CARRIERSCORE_API_KEY on a self-hosted server); the free tier gets a 403 with an upgrade link. Once saved, CarrierScore diffs every carrier on the list against the previous day's scoring run after each daily run and records alerts: new out-of-service order (critical), operating authority lost (critical), insurance filing lapsed (high), operating status leaving Active (high), risk score up 10+ points (medium), high-confidence reincarnated-carrier link appearing (medium). Alerts are always retrievable with list_alerts; optionally they are also pushed to a webhook (JSON POST, HMAC-signed via the X-CarrierScore-Signature header with the per-key secret from GET /v1/lists) and/or summarized in one daily digest email. Use this when a broker asks to "watch" or "keep an eye on" their carrier roster. Caps: 500 DOTs total across all lists on the Monitor tier, 5000 on Compliance; up to 50 lists per key. Saving the same DOT twice in one list is deduped. Args: - name: short label for the list (1-100 chars) - dot_numbers: array of DOT number strings (1-8 digits each) - webhook_url (optional): https URL to POST new alerts to - email (optional): address for the daily digest Returns JSON: { list_id, name, dots, created, updated, webhook_url?, email? }. Keep list_id — list_alerts needs it. Errors: 403 without a paid key; 400 on invalid DOTs, empty list, or exceeding the tier cap (message says which); 401 bad key.
外部アクセスあり
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'dot_numbers'], 'properties': {'name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'List name, e.g. "Active roster Q3"'}, 'email': {'type': 'string', 'format': 'email', 'description': 'Optional daily digest email'}, 'dot_numbers': {'type': 'array', 'items': {'type': 'string', 'pattern': '^\\d{1,8}$', 'description': 'US DOT number of the carrier, digits only (e.g. "1234567")'}, 'maxItems': 5000, 'minItems': 1, 'description': 'US DOT numbers to monitor'}, 'webhook_url': {'type': 'string', 'format': 'uri', 'description': 'Optional https URL to receive alert POSTs'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['list_id', 'name', 'dots'], 'properties': {'dots': {'type': 'array', 'items': {'type': 'string'}, 'description': 'US DOT numbers on the list (deduped)'}, 'name': {'type': 'string', 'description': 'List name'}, 'email': {'type': 'string', 'description': 'Daily digest email, if configured'}, 'created': {'type': 'string', 'description': 'Creation timestamp (ISO 8601 UTC)'}, 'list_id': {'type': 'string', 'description': 'Saved list id (lst_...) — use with list_alerts'}, 'updated': {'type': 'string', 'description': 'Last update timestamp (ISO 8601 UTC)'}, 'webhook_url': {'type': 'string', 'description': 'Alert webhook URL, if configured'}}, 'additionalProperties': False}
verify_evidence
Verify Archived Evidence Report Hash
Verify an archived Montgomery evidence report by its audit entry id: CarrierScore re-reads the immutable stored copy, recomputes its SHA-256 and reports whether it matches the hash recorded at generation time (and, optionally, a hash the caller supplies — e.g. the sha256 printed on a broker's filed copy). Requires the same paid API key that generated the report. Use it when a broker or auditor needs to prove that a filed evidence report is exactly what CarrierScore produced on the stated date. match=true means the archived report is byte-identical to what was served; match_supplied compares against the caller's own hash. Follow up with the audit_entries list to find ids, or with montgomery_file to generate a fresh report. Args: - entry_id: the audit_entry_id returned by montgomery_file (also listed by audit_entries) - sha256 (optional): a 64-hex SHA-256 to compare against the archived report (text or canonical json) Returns JSON: { entry_id, dot_number, generated_at, scored_as_of, score_version, format_requested, sha256_stored, sha256_computed, match, sha256_json_stored, sha256_json_computed, match_json, sha256_supplied?, match_supplied? }. Errors: 403 without a paid key, or (Monitor tier) if the entry is older than the 90-day retrieval window; 404 if the entry id is unknown for this key.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['entry_id'], 'properties': {'sha256': {'type': 'string', 'pattern': '^[0-9a-fA-F]{64}$', 'description': 'Optional SHA-256 to compare against the archived report'}, 'entry_id': {'type': 'string', 'pattern': '^\\d{1,8}_\\d{8}T\\d{12}Z_[0-9a-f]{8}$', 'description': 'Audit entry id from montgomery_file / audit_entries'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['entry_id', 'sha256_computed', 'match'], 'properties': {'match': {'type': 'boolean', 'description': 'true = the archived report is byte-identical to what was served'}, 'entry_id': {'type': 'string'}, 'dot_number': {'type': ['string', 'null']}, 'match_json': {'type': ['boolean', 'null']}, 'generated_at': {'type': ['string', 'null']}, 'scored_as_of': {'type': ['string', 'null']}, 'score_version': {'type': ['string', 'null']}, 'sha256_stored': {'type': ['string', 'null'], 'description': 'Hash recorded when the report was archived'}, 'match_supplied': {'type': 'boolean', 'description': 'Whether the supplied hash matches the archived report'}, 'sha256_computed': {'type': 'string', 'description': 'Hash recomputed now from the stored report text'}, 'sha256_supplied': {'type': 'string', 'description': 'Echo of the hash the caller supplied, if any'}, 'format_requested': {'type': ['string', 'null']}, 'sha256_json_stored': {'type': ['string', 'null']}, 'sha256_json_computed': {'type': ['string', 'null']}}, 'additionalProperties': False}
追加
verify_evidence
2026年9月17日12:40
追加
audit_entries
2026年9月17日12:40
追加
list_alerts
2026年9月17日12:40
追加
save_carrier_list
2026年9月17日12:40
追加
monitor_carriers
2026年9月17日12:40
追加
montgomery_file
2026年9月17日12:40
追加
carrier_score
2026年9月17日12:40
追加
carrier_lookup
2026年9月17日12:40