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.

MonitoringWebhook delivered
GBExample Retail Ltdstatus change
DEExample Trading GmbHsanctions match
SEExample Logistics ABcorporate event
DissolutionExample Industrial S.A. · ES
Illustrative
A sample alert arriving. Monitoring covers every live country except France and Chile. Example content, not a recording of the product.

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.

Customer dashboard screenshot: a list of monitored companiesCustomer dashboard screenshot: a list of monitored companies
POST /monitor in the dashboard: the watchlist and what each company is watched for. Monitoring covers every live country except France and Chile; a sanctions match is beta. Shown with a demo account. Open it in the dashboard

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.

Customer dashboard screenshot: a company's register historyCustomer dashboard screenshot: a company's register history
One company's events in the dashboard's Register history tab, here BODACC announcements for a French company: the list GET /company-events/search returns. Open it in the dashboard

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