API Documentation

Intelligence Middleware
API Reference

POST a company name. Get back a structured intelligence profile: company type, ICP score, strategic narrative, firmographic data, and qualification signals.

Base URL https://enrich.lodestoneiq.com
Overview

What is the Intelligence Middleware API?

The Lodestone IQ Intelligence Middleware API takes a company name (or domain) and returns a structured intelligence profile designed for financial services, fintech, and adjacent verticals.

Every response includes firmographic data, a deterministic company type classification, an ICP lead score (0–100) with explicit qualification signals, and a strategic narrative — all in a single API call. No chaining, no secondary lookups.

Currently in production use by a leading fintech intelligence platform to power their company registry layer.

Authentication

All requests require a Bearer token passed in the Authorization header. Tokens are provisioned per customer.

Authorization Header
Authorization: Bearer <your-api-token>

To request an API token, email [email protected] or see the pricing page.

Endpoints

POST /enrich

Enrich a single company by name. Returns a full intelligence profile including firmographic data, company type classification, ICP score, qualification signals, and strategic narrative.

POST https://enrich.lodestoneiq.com/enrich
Content-Type: application/json Auth: Bearer token required Rate limit: 60 req/min per IP
Request Body JSON
{
  "company_name": "Acme Corp"
}
Response — 200 OK JSON
{
  "input": {
    "company_name": "Acme Corp"
  },
  "firmographic": {
    "name": "Acme Corporation",
    "domain": "acme.com",
    "industry": "financial services",
    "employee_count": 450,
    "hq_city": "New York",
    "hq_state": "New York",
    "hq_country": "United States",
    "founded_year": 1998,
    "description": "Acme Corporation provides..."
  },
  "intelligence": {
    "company_type": "asset_manager",
    "industry_display": "Asset Management & Investment",
    "tokenization_relevance": "high",
    "narrative": "Acme is a mid-sized asset manager with growing exposure to alternative assets...",
    "confidence": "high"
  },
  "lead_score": 72,
  "qualification_signals": [
    "Company type: asset_manager (2.5x ICP multiplier)",
    "Employee count: 450 (institutional scale)",
    "High tokenization relevance"
  ]
}

POST /batch

Enrich up to 10 companies in a single request. Accepts an array of company objects. Returns an array of intelligence profiles in the same order as the input.

POST https://enrich.lodestoneiq.com/batch
Content-Type: application/json Auth: Bearer token required Max batch size: 10 companies
Request Body JSON
[
  { "company_name": "Acme Corp" },
  { "company_name": "Beta Capital" }
]
Response — 200 OK JSON
[
  {
    "input": { "company_name": "Acme Corp" },
    "firmographic": { /* ... */ },
    "intelligence": { /* ... */ },
    "lead_score": 72,
    "qualification_signals": [ /* ... */ ]
  },
  {
    "input": { "company_name": "Beta Capital" },
    "firmographic": { /* ... */ },
    "intelligence": { /* ... */ },
    "lead_score": 58,
    "qualification_signals": [ /* ... */ ]
  }
]
Reference

Response Field Reference

Complete field reference for the /enrich response. The /batch endpoint returns an array of the same structure.

Field Type Description
input.company_name string The company name as submitted in the request body.
firmographic.name string Resolved legal or operating name of the company.
firmographic.domain string Primary web domain associated with the company.
firmographic.industry string Industry category (e.g. "financial services", "fintech").
firmographic.employee_count integer Estimated employee headcount. Used in ICP scoring.
firmographic.hq_city string Headquarters city.
firmographic.hq_state string Headquarters state or province.
firmographic.hq_country string Headquarters country.
firmographic.founded_year integer Year the company was founded.
firmographic.description string Short company description based on public information.
intelligence.company_type string Classified company type (e.g. asset_manager, broker_dealer, fintech). Drives ICP multipliers.
intelligence.industry_display string Human-readable industry label for display in UIs.
intelligence.tokenization_relevance string Relevance to tokenization/RWA. One of: high, medium, low.
intelligence.narrative string 2–4 sentence strategic narrative describing the company's positioning, asset exposure, and market signals.
intelligence.confidence string Confidence level of the classification. One of: high, medium, low.
lead_score integer ICP lead score from 0–100. Higher = stronger ICP fit. Calibrated to financial services / RWA vertical by default.
qualification_signals array[string] Labeled reasons contributing to the lead score. Each string identifies a signal and its scoring impact.
Code Examples

Integration Examples

Examples for the /enrich endpoint. Replace YOUR_TOKEN with your API token.

Python

enrich_company.py Python
import requests

# Replace with your Lodestone IQ API token
API_TOKEN = "YOUR_TOKEN"
BASE_URL = "https://enrich.lodestoneiq.com"

def enrich_company(company_name: str) -> dict:
    response = requests.post(
        f"{BASE_URL}/enrich",
        headers={
            "Authorization": f"Bearer {API_TOKEN}",
            "Content-Type": "application/json",
        },
        json={"company_name": company_name},
    )
    response.raise_for_status()
    return response.json()

# Single enrichment
result = enrich_company("Acme Corp")
print(f"Company type: {result['intelligence']['company_type']}")
print(f"Lead score: {result['lead_score']}")
print(f"Narrative: {result['intelligence']['narrative']}")


# Batch enrichment (up to 10 companies)
def enrich_batch(companies: list) -> list:
    response = requests.post(
        f"{BASE_URL}/batch",
        headers={
            "Authorization": f"Bearer {API_TOKEN}",
            "Content-Type": "application/json",
        },
        json=[{"company_name": c} for c in companies],
    )
    response.raise_for_status()
    return response.json()

results = enrich_batch(["Acme Corp", "Beta Capital", "Gamma Fund"])
for r in results:
    print(f"{r['firmographic']['name']}: {r['lead_score']}")

JavaScript (fetch)

enrich.js JavaScript
const API_TOKEN = 'YOUR_TOKEN';
const BASE_URL = 'https://enrich.lodestoneiq.com';

// Single enrichment
async function enrichCompany(companyName) {
  const response = await fetch(`${BASE_URL}/enrich`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ company_name: companyName }),
  });

  if (!response.ok) {
    throw new Error(`HTTP error: ${response.status}`);
  }

  return response.json();
}

// Batch enrichment (up to 10 companies)
async function enrichBatch(companies) {
  const response = await fetch(`${BASE_URL}/batch`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(companies.map(name => ({ company_name: name }))),
  });

  if (!response.ok) {
    throw new Error(`HTTP error: ${response.status}`);
  }

  return response.json();
}

// Usage
enrichCompany('Acme Corp').then(result => {
  console.log('Company type:', result.intelligence.company_type);
  console.log('Lead score:', result.lead_score);
  console.log('Signals:', result.qualification_signals);
});
Rate Limits

Rate Limits

60 requests per minute per IP address. Batch calls to /batch count as a single request regardless of how many companies are included (max 10 per call).

If you exceed the rate limit, the API returns a 429 Too Many Requests response. Wait until the next minute window to resume requests. For higher rate limits, contact us to discuss your use case.

Limit Value Scope
Requests per minute 60 Per IP address
Batch size 10 companies Per /batch request
Monthly enrichments Tier-dependent Per API token (see pricing)
Reference

Error Codes

The API uses standard HTTP status codes. Error responses include a JSON body with a message field.

Status Code Meaning Resolution
401 Unauthorized Missing or invalid Bearer token. Check that your Authorization header includes a valid token. Tokens are provisioned on signup.
429 Too Many Requests You've exceeded the rate limit of 60 requests/min. Wait for the next minute window, or use the /batch endpoint to reduce individual calls.
400 Bad Request Malformed request body or missing required fields. Ensure the request body is valid JSON and includes company_name. Batch requests must be a JSON array.
Error Response Example JSON
{
  "error": "Unauthorized",
  "message": "Invalid or missing Bearer token",
  "status": 401
}

Ready to integrate?

Request your API token and get started. We'll respond within one business day and help you get set up on the right tier.

Get Your API Token →