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: Bearer <your-api-token>
To request an API token, email [email protected] or see the pricing page.
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.
{
"company_name": "Acme Corp"
}
{
"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.
[
{ "company_name": "Acme Corp" },
{ "company_name": "Beta Capital" }
]
[
{
"input": { "company_name": "Acme Corp" },
"firmographic": { /* ... */ },
"intelligence": { /* ... */ },
"lead_score": 72,
"qualification_signals": [ /* ... */ ]
},
{
"input": { "company_name": "Beta Capital" },
"firmographic": { /* ... */ },
"intelligence": { /* ... */ },
"lead_score": 58,
"qualification_signals": [ /* ... */ ]
}
]
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. |
Integration Examples
Examples for the /enrich endpoint. Replace YOUR_TOKEN with your API token.
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)
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
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) |
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": "Unauthorized",
"message": "Invalid or missing Bearer token",
"status": 401
}