Published data only
The JSON routes expose Annolyse publication data. They do not expose internal working files, private storage paths, or unpublished review states.
API Reference
Use the public JSON routes to read covered company profiles, latest metrics, historical metric rows, source lineage, market-data snapshots, and cross-company metric tables.
https://www.annolyse.ai
The API is intentionally narrow: it reads the same published coverage used by Annolyse pages, with explicit status codes, rate-limit headers, and documented null handling.
The JSON routes expose Annolyse publication data. They do not expose internal working files, private storage paths, or unpublished review states.
The public routes support browser-side reads with CORS. Treat the service as rate-limited public data rather than a private application backend.
Unavailable, unsupported, or not meaningful values are returned as null. Do not coerce null into zero in ranking or chart logic.
Metric rows can carry caveats such as basis discontinuity, denominator distortion, insufficient history, or non-comparable periods.
These routes require no API key. They are read-only and return published company and metric data.
/api/v1/companies/SCTReturns a covered company's profile, latest briefing, longitudinal metrics history, and market-data snapshot when available.
/api/v1/metrics/ocf_ebitda_pctReturns one metric across all covered companies, sorted with available values first.
/api/v1/openapi.jsonDownloadable OpenAPI 3.1 contract for the public JSON routes.
Use the canonical HTTPS origin. The bare domain and HTTP URLs may redirect before returning data.
curl -L -sS https://www.annolyse.ai/api/v1/openapi.jsoncurl -L -sS https://www.annolyse.ai/api/v1/companies/SCTcurl -L -sS https://www.annolyse.ai/api/v1/metrics/ocf_ebitda_pctCheck both the HTTP status and the ok field so malformed requests, missing coverage, and rate limits fail loudly in your application.
async function annolyseGet(path) {
const response = await fetch(`https://www.annolyse.ai${path}`, {
headers: { Accept: "application/json" },
});
const data = await response.json();
if (!response.ok || data.ok === false) {
throw new Error(data.error ?? `Annolyse API error ${response.status}`);
}
return data;
}
const company = await annolyseGet("/api/v1/companies/SCT");
const metric = await annolyseGet("/api/v1/metrics/ocf_ebitda_pct");The OpenAPI route is the machine-readable source of truth. These summaries highlight the fields most integrations should care about.
okboolean / required / -
True on success.
company.slugstring / required / -
Lowercase company route slug.
company.tickerstring / required / -
NZX ticker.
company.companystring / required / -
Display company name.
company.sectorLabelstring / nullable / -
Readable sector / sub-sector label.
latestBriefingobject / required / -
Most recent published briefing, including title, subtitle, markdown content, and source-document links.
latestMetrics.metricsobject / required / mixed
Latest normalized metric map. Missing or inapplicable values are null.
latestMetrics.metricQualityFlagsobject / required / -
Metric-keyed quality flags warning about basis discontinuity, denominator distortion, insufficient history, and other comparability limits.
latestMetrics.historicalAnalyticalContextobject / nullable / -
Legacy internal-shaped historical context retained for compatibility. Prefer the stable top-level historicalContext field for new integrations.
metricsHistory[]array / required / mixed
Chronological metric entries for the covered published periods.
historicalContext.latestobject / nullable / -
Sanitized historical-context observations for the latest published period.
historicalContext.history[]array / required / -
Sanitized historical-context observations by published period.
sourceLineage.latest.sourceDocuments[]array / required / -
Public source documents backing the latest period.
sourceLineage.history[]array / required / -
Public source-document lineage by published period.
marketData.pricenumber / nullable / quoted currency
Latest available share price snapshot.
marketData.asOfstring / nullable / ISO date-time
Provider quote timestamp for the latest available share price.
marketData.feedRefreshedAtstring / nullable / ISO date-time
Annolyse market-data feed refresh timestamp.
marketData.marketCapNzdmnumber / nullable / NZD millions
Latest available market-cap snapshot.
marketData.priceChange12moPctnumber / nullable / %
Share price percentage change over the available 12-month trading window.
marketData.fiftyTwoWeekHighnumber / nullable / quoted currency
Highest daily share price in the available 52-week trading window.
marketData.fiftyTwoWeekLownumber / nullable / quoted currency
Lowest daily share price in the available 52-week trading window.
okboolean / required / -
True on success.
metric.keystring / required / -
Requested metric key.
metric.labelstring / required / -
Human-readable metric label.
metric.formatstring / required / -
One of money, percent, ratio, days, or cents.
rows[].tickerstring / required / -
NZX ticker.
rows[].companySlugstring / required / -
Lowercase company route slug.
rows[].sectorLabelstring / nullable / -
Readable sector / sub-sector label.
rows[].periodstring / required / -
Latest published reporting period used for the value.
rows[].briefingSlugstring / required / -
Briefing route slug backing the value.
rows[].valuenumber / nullable / metric.format
Metric value, sorted with available values first.
rows[].qualityFlags[]array / required / -
Additive metric-quality flags for the requested value; empty when no known quality caveat applies.
rows[].historicalObservationobject / nullable / -
Sanitized preserved historical-context observation for the requested metric, when available.
rows[].sourceDocuments[]array / required / -
Public source documents backing the row's value.
429 responses after the number of seconds in the Retry-After header.historicalContext field over the legacy latestMetrics.historicalAnalyticalContext shape.marketData.asOf, marketData.stale, marketData.priceKind, and marketData.publicDisplaySuppressionReason before presenting valuation views.The metric endpoint accepts the keys listed below. Units and display formats are included in the OpenAPI contract.
revenuemoney / NZD millions
revenue_growth_pctpercent / %
ebitdamoney / NZD millions
ebitda_margin_pctpercent / %
pbtmoney / NZD millions
pbt_growth_pctpercent / %
npatmoney / NZD millions
npat_growth_pctpercent / %
ocfmoney / NZD millions
ocf_ebitda_pctpercent / %
fcf_pre_leasemoney / NZD millions
fcf_post_leasemoney / NZD millions
dps_centscents / cents per share
payout_ratio_npat_pctpercent / %
annual_payout_ratio_eps_pctpercent / %
roe_pctpercent / %
net_debtmoney / NZD millions
net_debt_ebitdaratio / x
debtor_daysdays / days
inventory_daysdays / days
total_assetsmoney / NZD millions
These are useful for distribution and embeds, but they are not part of the JSON API contract.
/feed.xmlRSS feed of newly published briefings.
/embed/sct-hy26Minimal iframe-friendly briefing widget with key metadata and linkback.