Download OpenAPI specification:
Machine-readable access to Intangic's company/cyber/financial data -- an alternative channel to the Rosie dashboard. See the "Intangic API Product" Linear project (INT) for full background; conventions here are decided in INT-410. STATUS: draft, in progress. Only endpoints/fields listed here are actually decided -- see the "Not yet included" note at the bottom of this file for what's deliberately left out.
Per-company financial impact across 4 severity tiers (Minor/Medium/Major/Catastrophic -- Low/Medium/High/HighestSeverity internally), each with its dollar economical_loss value and an NPV computed as the integral from 0 to that tier's economical_loss (clamped so implied frequency never exceeds 100%, reusing Rosie's existing formula as-is). All 4 sizes are returned by default; impact_size filters to one -- the response shape (an array under "impact") stays the same either way, so clients don't need to branch parsing logic based on whether a filter was applied. One entitlement grant covers all 4 sizes, not gated per-tier. Decided in INT-398/INT-399.
| clientCompanyId required | string The customer's own identifier for this company (their CustomerCompanyID mapping, not Intangic's internal CompanyID). |
| impact_size | string Enum: "Minor" "Medium" "Major" "Catastrophic" Filter the response to a single impact size. Omit to receive all 4. |
{- "client_company_id": "acme-42",
- "impact": [
- {
- "impact_size": "Minor",
- "economical_loss": 150000,
- "npv": 42000
}, - {
- "impact_size": "Medium",
- "economical_loss": 850000,
- "npv": 210000
}, - {
- "impact_size": "Major",
- "economical_loss": 4200000,
- "npv": 890000
}, - {
- "impact_size": "Catastrophic",
- "economical_loss": 18000000,
- "npv": 3100000
}
]
}Per-company, per-month cyber risk time series: cyber_risk (Cy-Rank level) plus 2 breach frequency values -- minor_breach_probability (cbh.BreachProbability. FullBreachProbability / 100, the full/unsampled cohort) and major_breach_probability (cbh.BreachProbability.BreachProbability / 100, the main sampled cohort). Divided by 100 from the raw DB columns (which are stored on a 0-100+ scale) to express a true annual frequency instead -- e.g. 1.2 means "1.2 expected breaches per year," not "120%." Despite the field name, this is technically an expected frequency (a rate), not a probability in the strict sense, since it can exceed 1 -- kept as "Breach Probability" to match existing client-facing terminology. Both are broadcast per company from the shared CyRankLevel- segment value for that month (not independently computed per company) -- otherwise pure relabeling of already-production columns, no new computation. Formerly "Breach Probability," merged with Cy-Rank in the last redesign since Cy-Rank is the join key that determines which probability applies.
Returns the most recent limit months by default (default 60 -- 5 years of monthly data). Filter with from_date/to_date (YYYY-MM-DD, inclusive) or with period=CURRENT/PREVIOUS (the most recent available month, or the one before it) -- period and from_date/to_date are mutually exclusive. A date range wider than limit still only returns the most recent limit months within it. Response shape (an array under "risk") stays the same regardless of filtering, so clients don't need to branch parsing logic based on which filter was used.
clientCompanyId identifies which company -- the calling customer's identity itself (ClientID) is never a parameter here or anywhere in this API: it's resolved server-side from the x-api-key by the request-time authorizer, not supplied by the client, so it can't be omitted, mismatched, or spoofed.
| clientCompanyId required | string The customer's own identifier for this company. |
| from_date | string <date> Inclusive lower bound (YYYY-MM-DD). Mutually exclusive with period. |
| to_date | string <date> Inclusive upper bound (YYYY-MM-DD). Mutually exclusive with period. |
| period | string Enum: "CURRENT" "PREVIOUS" Mutually exclusive with from_date/to_date. CURRENT = most recent available month, PREVIOUS = the one before it. |
| limit | integer [ 1 .. 240 ] Default: 60 Maximum number of months returned, most recent first. Default 60 (5 years), max 240 (20 years). To reach older history beyond the limit, narrow with from_date/to_date. |
{- "client_company_id": "acme-42",
- "risk": [
- {
- "date": "2026-07-01",
- "cyber_risk": "Medium-High Risk",
- "minor_breach_probability": 1.34,
- "major_breach_probability": 0.42
}, - {
- "date": "2026-06-01",
- "cyber_risk": "Medium Risk",
- "minor_breach_probability": 1.12,
- "major_breach_probability": 0.35
}
]
}Backbone feed underneath every other feed -- current firmographic snapshot for one company. Bundled into every subscription regardless of tier: the feed itself is never entitlement_denied, but the company must still be in the customer's tracked list (entitlement_denied for one that isn't, company_not_found for one that doesn't exist at all in Intangic's universe). company_name is the company's current name only (cbh.CompanyName.NewName where IsCurrent=TRUE) -- no name-history array in v1. sector is the raw CbhSector tag (INT-397 -- no scored variant); industry is GicIndustry. revenue/revenue_peer_group are TotalRevenue (raw) and TotalRevenueGroup (peer-relative quintile within Region+CbhSector, 1=smallest to 5=largest) -- both copied verbatim via ETL, not recomputed (INT-396). A fixed absolute-dollar revenue band was considered and deferred, not built for v1 (INT-417). peer_revenue_range (formerly scoped as a separate "Peer Benchmarking" feed, folded in here) is the [min, max] TotalRevenue among companies sharing this company's peer group (same Region + CbhSector + TotalRevenueGroup) -- the actual dollar range revenue_peer_group's quintile spans, not a methodology cutoff. Named distinctly from "revenue band" (INT-396/417) to avoid confusion with that deferred fixed-tier methodology -- this is a different concept: the range this specific company's existing peer group happens to span.
| clientCompanyId required | string The customer's own identifier for this company. |
{- "client_company_id": "acme-42",
- "company_name": "Acme Corp",
- "country": "United States",
- "sector": "Technology",
- "industry": "Software",
- "revenue": 82000000,
- "revenue_peer_group": 4,
- "peer_revenue_range": [
- 50000000,
- 120000000
]
}Core v1 feed. Per-company, per-week, per-signal-type time series (INT-390) -- weekly, not monthly, unlike Company Risk. Field contract decided independently of the sibling "Production pipeline for Z-scores" project's completion status (still in progress) -- the pipeline determines how these values get computed, not what shape the API returns.
signal_type is OVERALL plus 6 dark-web signal categories (incomingDarkWebTraffic, forumPosts, darkWebMarketListings, pasteResults, osintResults, outgoingDarkWebTraffic) -- these names are provisional, not yet officially formalized. Filterable, all 7 returned by default -- same pattern as impact_size on Financial Impact.
z_score_percentile is a percentile rank (0-100). status_cutoffs and percentiles are both arrays of raw Z-score values (NOT percentile ranks), each associated with a different reference population: status_cutoffs (exactly 5 values: minimum, OK-to-Monitor, Monitor-to-Elevated, Elevated-to-Critical, maximum) is derived from a breach-conditioned subset (companies that had an actual breach) and is the operative determinant of status; percentiles (exactly 3 values: the Z-scores at the 25th/50th/75th percentile) is computed against the full/general company population -- contextual, not itself the status determinant.
Returns the most recent limit weeks by default (default 200 -- roughly 4 years of weekly data). Filter with from_date/to_date (YYYY-MM-DD, inclusive) or with period=CURRENT/PREVIOUS (the most recent available week, or the one before it) -- period and from_date/to_date are mutually exclusive. A date range wider than limit still only returns the most recent limit weeks within it. Response shape (an array under "scores") stays the same regardless of filtering.
| clientCompanyId required | string The customer's own identifier for this company. |
| from_date | string <date> Inclusive lower bound (YYYY-MM-DD). Mutually exclusive with period. |
| to_date | string <date> Inclusive upper bound (YYYY-MM-DD). Mutually exclusive with period. |
| period | string Enum: "CURRENT" "PREVIOUS" Mutually exclusive with from_date/to_date. CURRENT = most recent available week, PREVIOUS = the one before it. |
| limit | integer [ 1 .. 1000 ] Default: 200 Maximum number of weeks returned, most recent first. Default 200 ( |
| signal_type | string Enum: "OVERALL" "incomingDarkWebTraffic" "forumPosts" "darkWebMarketListings" "pasteResults" "osintResults" "outgoingDarkWebTraffic" Filter the response to a single signal type. Omit to receive all 7. |
{- "client_company_id": "acme-42",
- "scores": [
- {
- "date": "2026-07-27",
- "signal_type": "OVERALL",
- "z_score": 0.4,
- "z_score_percentile": 48,
- "status": "Elevated",
- "status_cutoffs": [
- -3,
- -0.03,
- 0.03,
- 0.7,
- 3
], - "percentiles": [
- -0.4,
- 0.5,
- 2.4
]
}
]
}