> ## Documentation Index
> Fetch the complete documentation index at: https://docs.creditbenchmark.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introducing the Entity Resolution API

> Resolve external company names to Credit Benchmark entity IDs with the Entity Resolution API, returning ranked candidates and a confidence score per name.

<div className="post-byline">
  <img className="post-avatar" src="https://mintcdn.com/creditbenchmark/MBcrXm7PNn_QJihI/images/blog/03_CB_Symbol_Down_SG_pos_RGB.png?fit=max&auto=format&n=MBcrXm7PNn_QJihI&q=85&s=3390b8615aa74c3c052766dc5ca17bce" alt="Credit Benchmark" width="1370" height="1470" data-path="images/blog/03_CB_Symbol_Down_SG_pos_RGB.png" />

  <div className="post-byline-meta">
    <span className="post-author">Credit Benchmark</span>
    <span className="post-date">May 1, 2026 - 2 min read</span>
  </div>
</div>

The Entity Resolution API resolves external company names to Credit Benchmark reference entities - so you can standardize identifiers before portfolios load, before analytics run, before anything downstream depends on the data being clean.

<Tip>
  **Endpoint:** `POST /matching/text/match_external`

  Returns ranked candidates with `CBId`, `CBEntityName`, `CBCountryOfRiskISO`, and a `confidence` score. Pass optional hints - `country`, `industry`, `lei` - to sharpen results when names are ambiguous.
</Tip>

<div className="blog-body">
  ## The problem

  Company names are messy. "JPMorgan", "JP Morgan Chase & Co.", and "JPMorgan Chase" are the same entity - but not to a system that needs exact identifiers. Before this API, resolving that ambiguity meant manual work or custom matching logic built outside CB entirely.

  ## What it does

  Send a name, get back a ranked list of entity candidates. The API runs a three-stage pipeline: candidate retrieval, feature engineering, and ML scoring.

  <div style={{display: 'flex', alignItems: 'stretch', padding: '32px 24px', background: 'transparent', gap: '0', fontFamily: 'inherit', fontSize: '12px'}}>
    <div style={{flexShrink: 0, display: 'flex', flexDirection: 'column', justifyContent: 'center', minWidth: '130px'}}>
      <div style={{position: 'relative', marginLeft: '24px', marginBottom: '24px'}}>
        <div style={{position: 'absolute', inset: 0, transform: 'translate(-24px, 24px)', border: '1px solid rgba(51,65,85,0.22)', background: 'transparent'}} />

        <div style={{position: 'absolute', inset: 0, transform: 'translate(-12px, 12px)', border: '1px solid rgba(51,65,85,0.3)', background: 'transparent'}} />

        <div style={{position: 'relative', zIndex: 1, border: '1.5px solid #334155', background: '#1e293b', color: '#f8fafc', padding: '12px 14px'}}>
          <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase', marginBottom: '8px', borderBottom: '1px solid rgba(255,255,255,0.1)', paddingBottom: '6px'}}>Entity</div>

          <div style={{fontSize: '10px', lineHeight: '1.9', color: '#94a3b8', fontFamily: 'monospace'}}>
            <div><span style={{color: '#7dd3fc'}}>entity\_name</span></div>
            <div><span style={{color: '#86efac'}}>country</span> <span style={{color: '#94a3b8'}}>(opt)</span></div>
            <div><span style={{color: '#86efac'}}>industry</span> <span style={{color: '#94a3b8'}}>(opt)</span></div>
            <div><span style={{color: '#86efac'}}>lei</span> <span style={{color: '#94a3b8'}}>(opt)</span></div>
          </div>
        </div>
      </div>
    </div>

    <div style={{flexShrink: 0, display: 'flex', alignItems: 'center', padding: '0 10px'}}>
      <div style={{width: '20px', height: '1.5px', background: '#94a3b8'}} />

      <div style={{width: 0, height: 0, borderTop: '4px solid transparent', borderBottom: '4px solid transparent', borderLeft: '6px solid #94a3b8'}} />
    </div>

    <div style={{flex: 1, display: 'flex', flexDirection: 'column', gap: '16px'}}>
      {/* Step 1: Candidate Retrieval */}

      <div style={{border: '1px solid #e2e8f0'}}>
        <div style={{background: '#1e3a8a', color: '#f8fafc', padding: '10px 14px'}}>
          <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase'}}>1 — Candidate Entity Retrieval</div>
        </div>

        <div style={{padding: '8px 14px', background: 'transparent', fontSize: '11px', lineHeight: '1.6'}}>
          <div>Searches the CB Entity Database for likely candidates</div>
        </div>
      </div>

      {/* Step 2: Feature Engineering */}

      <div style={{border: '1px solid #e2e8f0'}}>
        <div style={{background: '#1e40af', color: '#f8fafc', padding: '10px 14px'}}>
          <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase'}}>2 — Feature Engineering</div>
        </div>

        <div style={{padding: '8px 14px', background: 'transparent', fontSize: '11px', lineHeight: '1.6'}}>
          <div>Measures name similarity and metadata alignment per candidate</div>
        </div>
      </div>

      {/* Step 3: ML scoring */}

      <div style={{border: '1px solid #e2e8f0'}}>
        <div style={{background: '#4c1d95', color: '#f8fafc', padding: '10px 14px'}}>
          <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase'}}>3 — ML Scoring</div>
        </div>

        <div style={{padding: '8px 14px', background: 'transparent', fontSize: '11px', lineHeight: '1.6'}}>
          <div>Scores each candidate as a match probability</div>
        </div>
      </div>
    </div>

    <div style={{flexShrink: 0, display: 'flex', alignItems: 'center', padding: '0 10px'}}>
      <div style={{width: '20px', height: '1.5px', background: '#94a3b8'}} />

      <div style={{width: 0, height: 0, borderTop: '4px solid transparent', borderBottom: '4px solid transparent', borderLeft: '6px solid #94a3b8'}} />
    </div>

    <div style={{flexShrink: 0, display: 'flex', flexDirection: 'column', justifyContent: 'center', minWidth: '130px'}}>
      <div style={{position: 'relative', marginLeft: '24px', marginBottom: '24px'}}>
        <div style={{position: 'absolute', inset: 0, transform: 'translate(-24px, 24px)', border: '1px solid rgba(51,65,85,0.22)', background: 'transparent'}} />

        <div style={{position: 'absolute', inset: 0, transform: 'translate(-12px, 12px)', border: '1px solid rgba(51,65,85,0.3)', background: 'transparent'}} />

        <div style={{position: 'relative', zIndex: 1, border: '1.5px solid #334155', background: '#1e293b', color: '#f8fafc', padding: '12px 14px'}}>
          <div style={{fontWeight: 700, fontSize: '11px', letterSpacing: '0.04em', textTransform: 'uppercase', marginBottom: '8px', borderBottom: '1px solid rgba(255,255,255,0.1)', paddingBottom: '6px'}}>Top Result</div>

          <div style={{fontSize: '10px', lineHeight: '1.9', color: '#94a3b8', fontFamily: 'monospace'}}>
            <div><span style={{color: '#7dd3fc'}}>CBId</span></div>
            <div><span style={{color: '#7dd3fc'}}>CBEntityName</span></div>
            <div><span style={{color: '#fbbf24'}}>confidence</span></div>
            <div><span style={{color: '#94a3b8'}}>rank</span></div>
          </div>
        </div>
      </div>
    </div>
  </div>

  Each result includes:

  * **`CBId`** - the canonical CB identifier
  * **`CBEntityName`** - the standardized entity name
  * **`CBCountryOfRiskISO`** - country of risk
  * **`confidence`** - a score you can use to automate decisions: accept high matches, flag low ones for review

  ## Use cases

  * **Portfolio onboarding** - map client-supplied names to CB identifiers before loading, so data enters clean rather than requiring cleanup after
  * **Automated workflows** - any pipeline ingesting external entity lists can run a matching pass upfront and carry reliable identifiers forward
  * **One-off lookups** - resolve a single name before pulling analytics or checking coverage, without leaving the API

  ## Getting started

  1. Get a bearer token - `POST /api/security/token`
  2. Submit names - [POST /matching/text/match\_external](https://gateway.creditbenchmark.com/matching/text/match_external)
  3. Read the schema - [API reference](/api-reference/intro)
</div>

***

[Back to all release notes](/product-updates)
