Use case · Counterparty risk
Counterparty Monitoring API
Watch every B2B counterparty in your portfolio for capital changes, director changes, dissolutions, and insolvency in real time. Daily-fresh multi-country feed via one REST endpoint.
The problem
KYB at onboarding tells you what a counterparty looked like the day they signed up. Two months later they may have reduced capital by 80%, lost their CFO, changed registered address, or filed for insolvency — and your underwriting model has no idea. The legacy fix is buying a "monitoring" subscription from Creditsafe / Iberinform / Pappers — annual, expensive, with batch FTP delivery and event-type taxonomies that vary by vendor.
The Prometiam approach: daily query of the official-gazette feed, normalized into a single typed-event schema across countries. One cron, one endpoint, predictable cost.
The watchlist pattern
Two endpoints power the entire flow:
# Events for one counterparty since your last sweep curl 'https://api.prometiam.com/functions/v1/risk-api/company-events/search?company_name=telefonica&country=ES&date_from=2026-04-28&limit=100' \ -H 'Authorization: Bearer rk_live_...' # Or the full lifecycle timeline for that company curl 'https://api.prometiam.com/functions/v1/risk-api/company-events/timeline?company_name=telefonica&country=ES&limit=50' \ -H 'Authorization: Bearer rk_live_...'
Both event endpoints are company-scoped: every call names a counterparty through company_name or company_number. There is no un-scoped "give me everything published yesterday" sweep, so the operational shape is to walk your own watchlist — a daily cron that iterates your counterparties, passes date_from as the moment you last swept, and alerts on anything returned.
For a version you do not have to schedule, POST /monitor subscribes a company and pushes signed webhooks on events, status changes and sanctions hits instead. See the API documentation.


A real Cloudflare Worker example
export default {
async scheduled(event, env) {
// 1. Your watchlist drives the sweep — KV keys hold {name, country} per counterparty.
// The event endpoints are company-scoped, so there is nothing to filter client-side:
// you only ever ask about companies you already care about.
const listed = await env.WATCHLIST.list()
const watchlist = listed.keys.map(k => JSON.parse(k.name)) // [{ name, country }, …]
// 2. Pull yesterday's events for each of them
const hits = await fetchEvents(env, watchlist)
// 3. Alert via your channel of choice (Slack/Telegram/email/Sentry)
if (hits.length) {
await fetch(env.SLACK_WEBHOOK, {
method: 'POST',
body: JSON.stringify({
text: `${hits.length} watchlist event(s) today:\n` +
hits.map(h => `• ${h.company_name} — ${h.event_type} on ${h.event_date}`).join('\n')
})
})
}
}
}
// The event endpoints are COMPANY-SCOPED: each call names a counterparty. There is no
// un-scoped "everything published yesterday" query, so the sweep walks your own watchlist.
async function fetchEvents(env, watchlist) {
const yesterday = new Date(Date.now() - 86400000).toISOString().slice(0, 10)
const out = []
for (const { name, country } of watchlist) {
const url = `https://api.prometiam.com/functions/v1/risk-api/company-events/search`
+ `?company_name=${encodeURIComponent(name)}&country=${country}`
+ `&date_from=${yesterday}&limit=100`
const r = await fetch(url, { headers: { Authorization: `Bearer ${env.PROMETIAM_API_KEY}` } })
const j = await r.json()
out.push(...(j.data || []))
}
return out
}About 30 lines for a daily watchlist alert that runs on Cloudflare's free tier. One company-scoped call per counterparty per country costs 2 credits, so a 20-name book is about 1,200 credits a month, inside Professional, and a 1,000-name book does not fit any plan this way. For larger books use the paginated pull below. If you would rather not schedule anything, POST /monitor subscribes a company (25 on Starter, 250 on Professional, 2,500 on Scale) and pushes signed webhooks instead.
Event types that matter for risk
- capital_change — registered capital up or down. Down ≥50% is a red flag.
- director_change — appointments and resignations. Mass resignations are a leading indicator of trouble.
- insolvency — Spanish concurso, French procédure collective, UK administration filings.
- dissolution / liquidation — terminal events.
- name_change / address_change — sometimes innocent, sometimes a sign of restructuring under stress.
- merger / demerger — your counterparty's legal entity is shifting.
- status_change — generic status transitions captured from the registry.
Each event includes previous_value and new_value where applicable, plus a notice_url to the original gazette PDF for audit.


Pricing fit
For a portfolio of 1,000 counterparties refreshed daily, the daily call shape is ~10 paginated calls per country (100 events per page × ~10 pages = ~1,000 daily events × the join). At 30 calls/day across the event-stream countries (Spain, France and the UK; ~900 calls/month, 2 credits each, ~1,800 credits/month), you fit inside Professional (€29.99/mo, 10,000 credits/month), with room for a monthly sanctions pass (beta, 3 credits per name) over 1,000 counterparties. For 5,000 counterparties, the pulls cost the same, and the monthly sanctions pass (15,000 credits) puts you on Scale (€99.99/mo, 50,000 credits/month).
Creditsafe and Iberinform sell annual contracts on quote and don’t publish rate cards; Pappers sells credits consumed per lookup. None of them publish a figure we could compare against, which is the point: ours is on the pricing page.
FAQ
What is counterparty monitoring?
Continuous post-onboarding watch on every B2B counterparty for events that change their risk profile.
How fresh are the events?
BORME and BODACC updated daily within hours of publication. UK Companies House: monthly bulk + daily delta.
How many counterparties can I monitor?
Every plan has webhooks. The 14-day trial: 3 monitored companies. Starter: 25 monitored companies. Professional: 250 monitored companies, or ~1,000 counterparties by daily event pulls. Scale: 2,500 monitored companies, ~5,000 counterparties by daily pulls. Enterprise: custom.
Does it support webhooks?
Webhooks are live for every live country except France and Chile via POST /monitor (HMAC-signed). For France, which monitoring does not cover, daily cron + diff is the recommended pattern. See the company monitoring API.
Which event types are covered?
new_incorporation, director_change, capital_change, address_change, name_change, merger, demerger, dissolution, liquidation, insolvency, status_change, filing, correction, object_change, bylaws_change, legal_form_change, ownership_change, power_of_attorney, sale_of_business, debt_default, registry_closure, registry_reopening, reactivation, litigation, securities_issue, branch, charge, resolution, website, other (19 finer types since 9 Oct 2026; status_change only where no finer type fits).
Related
- KYB onboarding — the upstream verification step
- Sanctions screening — standalone sanctions API pattern
- Director-network analysis
- Creditsafe alternative
- Companies House API alternative