Purpose
Two questions about one country’s defense position: how much military capacity does it fund and field, and who does it depend on for major weapons. The first comes from World Bank annual indicators, the second from SIPRI’s arms-transfer register reduced to supplier shares. Served fromGET /api/military/v1/get-defense-industrial-base?country_code=<ISO2> and MCP get_defense_industrial_base. Both require a Pro subscription.
This route’s query parameter is
country_code, in snake_case — unlike its
siblings in this suite, which use countryCode. The name is fixed per route by
the proto’s sebuf.http.query option, and the generated server reads that key
only. Sending countryCode here is not rejected: the handler sees an empty
country code, fails its ^[A-Z]{2}$ check, and returns HTTP 200 with
available: false, which reads as “no data for this country” rather than as a
bad request.Part A — military capacity
World BankMS.MIL.* series, one observation per country per year:
Each metric carries
value, year, previousValue, previousYear, source and its own available flag. The previous observation is served alongside the current one so a caller can show direction without a second request. Years differ per metric — World Bank does not publish the whole family on one clock.
Part B — supplier dependency
SIPRI publishes supplier-to-recipient transfers by year. For each importer the seeder computes, over a trailing five-year window:suppliers— each supplier’s share of the importer’s total TIVsupplierHhi— concentration of that dependencywindowStartYear/windowEndYear— the window actually used
TIV is not money
The Trend Indicator Value measures transfer volume — it is a proxy for military capability delivered, calibrated to known unit production costs. It is not a price, not a contract value, and not comparable to the USD expenditure figures in Part A. Never render it with a currency symbol.Mapping coverage
supplierHhi is computed over the full positive-TIV denominator. suppliers lists only rows whose supplier resolved to an ISO-2 country. supplierMappingCoverage is the share of positive TIV that mapped.
The two are deliberately not reconciled: dropping unmapped TIV from the denominator would understate concentration by pretending the unmapped transfers did not happen. Read supplierMappingCoverage before treating the listed suppliers as exhaustive — at 0.97 the list is essentially complete; well below that, it is a sample.
Retention
supplierRetained: true means this importer’s previously published row was not refreshed in this tick. The seeder carries every prior importer forward and overlays only the current chunk as fresh, so retention is normally chunk carry-forward; a failed importer request is only one possible reason. supplierFetchedAt then reports the retained row’s original timestamp, not this tick. A retained row is real data with a known age, which is why it is served instead of an empty response.
Clocks
fetchedAt is the oldest source timestamp among the values served, so it is safe to treat as “nothing here is older than this”. Another part may be newer. industrialFetchedAt and supplierFetchedAt give the per-part clocks. The World Bank and SIPRI parts update on different schedules — SIPRI’s annual update lands each March.
Licensing
SIPRI’s terms require attribution and prohibit redistributing the full database. WorldMonitor therefore stores and serves derived per-country supplier shares, never the trade register itself. The licensing table in Data sources records the terms.Related
- Pro Intelligence Suite
- Five-factor scorecard — consumes supplier diversity as its defense-pillar input
- Data sources
