Generate on-demand AI-synthesised intelligence on one or more companies simultaneously — selectively requesting product portfolios, launch timelines, strategic initiatives, partnerships, business models, key customers, leadership profiles, and employee or product sentiment in a single composable request.
The Company Deep Intelligence API generates structured, source-cited intelligence on any company or set of companies. Where Company Instant Enrichment returns raw firmographic data, this API returns AI-synthesised narratives — product portfolios, strategic moves, launch timelines, key customer profiles, leadership analysis, and employee sentiment — going well beyond what structured databases can provide.This is an asynchronous POST API — submitting a request returns a request_id (a UUID string) and an initial "PENDING" status immediately. You then poll the Request Status endpoint until status becomes "COMPLETED", at which point the full result is embedded directly in the status response.The two-step workflow:
Step 1: POST /api/enterprise/company/enrich/ → returns request_id + status: "PENDING"Step 2: GET /api/enterprise/request/status/ → poll until status = "COMPLETED"; result embedded in response
This API uses the same async pattern as Industry Deep Intelligence — request_id (UUID string), polls request/status/, and embeds the completed result directly in the status response. It does not use the Workflow API infrastructure (report_id, get_notebook_status, download_report). The two patterns are not interchangeable.
Two capabilities make this API architecturally distinct from all others in Wokelo:
Multi-company in one request — pass an array of company identifiers (companies) to enrich 1–N companies simultaneously. Results are returned as a dict keyed by each company identifier.
Section-selective output — choose exactly which of the 9 section types to generate. Request only what you need; each additional section adds processing time.
The nine available sections:
Section
What you get
products_and_services
Full product portfolio — overview narrative with screenshot, categorised product areas with per-product titles and summaries, and source citations
product_launches
Dated release timeline — recent launches with initiative names, bullet-point summaries, and source URLs; plus future announcements array
strategic_initiatives
Operational moves — office expansions, hiring activity, layoffs, M&A, awards, and other named strategic areas, each with sourced bullet points
partnerships
Partnership ecosystem — technology partners, channel partners, and strategic alliances with context and sourcing
business_model
Revenue model analysis — pricing strategy, monetisation approach, and go-to-market structure
key_customers
Major customer identification — named accounts with industry context, deal details, and source citations
management_profiles
Leadership team analysis — background, track record, tenure, and career trajectory for key executives
employee_sentiment
Workplace culture analysis — synthesised from employee reviews and Glassdoor data
product_sentiment
Market perception analysis — synthesised from product reviews, G2, Capterra, and social signals
Common use cases:
Pre-IC product intelligence sweep — for a set of target companies, request products_and_services + product_launches + strategic_initiatives to understand product trajectory and roadmap signals before a committee meeting
Competitive diligence on multiple players at once — send 3–5 competitors in a single companies array and get parallel product and business model analysis without chaining calls
Leadership due diligence — request management_profiles for an acquisition target and its key executives to surface background, tenure, and track record data
Customer and partner mapping — request key_customers + partnerships to identify major accounts and technology alliances before outreach or deal structuring
Employee health monitoring — request employee_sentiment across a portfolio to catch early cultural warning signals or compare workplace satisfaction across peers
CRM enrichment pipeline — batch enrich a watchlist of companies on specific sections and push results into Salesforce, HubSpot, or DealCloud records automatically
Step 2 — Poll until completed and retrieve the result
import time, requestsdef poll_until_complete(request_id, api_key, poll_interval=10, timeout=600): headers = {"Authorization": f"Bearer {api_key}"} elapsed = 0 while elapsed < timeout: r = requests.get( "https://api.wokelo.ai/api/enterprise/request/status/", headers=headers, params={"request_id": request_id} ) data = r.json() status = data.get("status", "") print(f"[{elapsed}s] Status: {status}") if status == "COMPLETED": return data["result"] # result is embedded in the status response if status == "FAILED": raise Exception(f"Request {request_id} failed") time.sleep(poll_interval) elapsed += poll_interval raise TimeoutError(f"Request {request_id} did not complete within {timeout}s")result = poll_until_complete(request_id, api_key="<YOUR_API_TOKEN>")print(f"Companies enriched: {list(result.keys())}")
Step 3 — Work with the result
# Result is keyed by the company identifier you submittedcompany_data = result["https://tesla.com"] # or result["tesla"] if you used a permalinkfirmographics = company_data["firmographics"]print(f"Company: {firmographics['name']}")print(f"Type: {firmographics['type']} | Status: {firmographics['operating_status']}")enrichment = company_data["CP enrichment"]# Products overviewif "products_and_services" in enrichment: overview = enrichment["products_and_services"]["product_overview"]["summary"] print(f"\nProducts overview:\n{overview[:400]}...")# Recent launchesif "product_launches" in enrichment: launches = enrichment["product_launches"]["product_launches_and_initiatives"]["released_products"] print(f"\nRecent launches ({len(launches)}):") for launch in launches[:3]: print(f" [{launch['date']}] {launch['initiative']}")
All requests must include a Bearer token in the Authorization HTTP header.
Authorization: Bearer <YOUR_API_TOKEN>
API tokens are issued from your Wokelo account. Navigate to Account Details → API Credentials in the Wokelo dashboard to get your client id and client secret. Contact support@wokelo.ai if you do not yet have API access.
Never expose your token in client-side code, browser requests, or public repositories. A missing or invalid token returns 401 Unauthorized. A valid token without sufficient plan permissions returns 403 Forbidden.
POST https://api.wokelo.ai/api/enterprise/company/enrich/
All parameters are passed as JSON in the request body.
Parameter
Type
Required
Description
companies
string[]
Required
Array of company identifiers. Each entry is either a permalink (e.g. "zendesk", "stripe") or a website URL (e.g. "https://tesla.com"). Permalinks resolve faster — use the Company Search API to look them up. Multiple companies are processed in parallel; results are keyed by the identifier you provide.
sections
string[]
Required
Array of one or more section identifiers to include in the output. Request only what you need — each section adds processing time. See the supported sections table in Section 1.
There is no hard-coded limit on the number of companies per request, but processing time scales with the number of companies × sections. For large watchlists, consider batching into groups of 5–10 companies and running requests concurrently.
Unique identifier for this request. Use with the Request Status endpoint to poll for completion. This is a UUID string — not an integer report_id. The two are not interchangeable.
When status is "COMPLETED", the polling response includes a result object. The result is a dict keyed by company identifier — one entry per company submitted in the companies array:
The result key matches the identifier you submitted. If you sent "https://tesla.com", the result key is "https://tesla.com". If you sent "tesla", the result key is "tesla". Use the same identifier to look up each company’s data.
Each company object contains three top-level keys:firmographicsA lean identity card for the company. No financials — for financial data use Peer Comparison or Company Research.
The sources field on each product area item is a string range (e.g. "1-3", "4-6") referencing IDs in the product_overview.source array — not a standalone citations array.product_launches
summary inside each launch is an array of strings (bullet points), not a single string. sources here is an array of citation objects (not the string-range pattern used in products_and_services).strategic_initiatives
strategic_moves is an array of area objects. Area is a string label (e.g. "Layoffs", "Hiring", "Office expansion", "Awards and recognitions"). Details is an array of sourced bullet-point objects.
The sources field schema differs between sections. In products_and_services items, sources is a string range like "1-3". In product_launches and strategic_initiatives, sources is an array of citation objects with url, title, publisher, and publishedDate. Always check the type before iterating.
Monitor workplace health signals across portfolio companies.
submit = requests.post( "https://api.wokelo.ai/api/enterprise/company/enrich/", headers=HEADERS, json={ "companies": ["salesforce", "hubspot", "zendesk", "freshworks"], "sections": ["employee_sentiment", "product_sentiment"] })request_id = submit.json()["request_id"]result = poll_until_complete(request_id, API_KEY)for company_key, company_data in result.items(): name = company_data["firmographics"]["name"] enrichment = company_data["CP enrichment"] print(f"\n{name}") for section in ["employee_sentiment", "product_sentiment"]: if section in enrichment: # Navigate to summary — structure varies; iterate to find it for sub_key, sub_val in enrichment[section].items(): if isinstance(sub_val, dict) and "summary" in sub_val: print(f" [{section}] {sub_val['summary'][:200]}...")
The API uses standard HTTP status codes. The submission endpoint returns a 202 on success and synchronous errors for invalid requests. Processing errors appear as "FAILED" when polling.
Status
Meaning
Cause & Resolution
202 Accepted
Request accepted
request_id and "PENDING" status returned. Proceed to polling.
400 Bad Request
Invalid parameters
Missing companies, empty companies array, invalid sections value, or unrecognised company identifier. Check the detail field.
401 Unauthorized
Auth failed
The Authorization header is missing or contains an invalid token. Verify your key in Settings → API Keys.
403 Forbidden
Insufficient access
Your plan does not include access to this endpoint or the requested sections. Contact support@wokelo.ai.
429 Too Many Requests
Rate limit exceeded
Implement exponential back-off. The response includes a Retry-After header.
500 Internal Server Error
Server error
Retry after a brief delay. If the issue persists, contact support@wokelo.ai.
Request only the sections you need — each section adds processing timeUnlike Workflow APIs that produce a fixed full report, this API generates only the sections you explicitly request. A focused two-section request (e.g. products_and_services + product_launches) completes significantly faster than all nine:
# Fast pre-IC check — two sectionsjson={"companies": ["zendesk"], "sections": ["products_and_services", "product_launches"]}# Full intelligence sweep — all nine sections, expect longer processingjson={"companies": ["zendesk"], "sections": [ "products_and_services", "product_launches", "strategic_initiatives", "partnerships", "business_model", "key_customers", "management_profiles", "employee_sentiment", "product_sentiment"]}
Use permalinks over website URLs for faster resolutionPermalinks (e.g. "zendesk", "stripe") resolve faster and more reliably than website URLs, particularly for companies with complex domain structures. Use the Company Search API to look up a company’s permalink when you only have its name:
Batch companies into a single request rather than making separate callsThis is the most important efficiency pattern for this API. Sending five companies in one companies array is significantly faster than five separate requests, because companies are processed in parallel on Wokelo’s infrastructure:
# ❌ Inefficient — five separate round-tripsfor company in ["zendesk", "freshworks", "intercom", "servicenow", "atlassian"]: submit_request([company], sections)# ✅ Efficient — one request, five companies processed in parallelsubmit_request(["zendesk", "freshworks", "intercom", "servicenow", "atlassian"], sections)
Result keys match the identifier you submitted — use it consistentlyIf you submit "https://tesla.com", the result key is "https://tesla.com". If you submit "tesla", the key is "tesla". Mixing identifier formats in the same request (some URLs, some permalinks) produces result keys in the format you used. Be consistent within a request to simplify downstream processing:
# ❌ Mixed formats — inconsistent result keyscompanies=["https://zendesk.com", "freshworks", "https://intercom.com"]# ✅ Consistent — all permalinks, all result keys are permalinkscompanies=["zendesk", "freshworks", "intercom"]
sources schema differs between sections — check type before iteratingIn products_and_services, the sources field on each product area item is a string range (e.g. "1-3") referencing the product_overview.source array by ID. In product_launches and strategic_initiatives, sources is an array of citation objects. Always check the type before iterating:
sources = product_area.get("sources", "")# products_and_services — string rangeif isinstance(sources, str): print(f"Source IDs: {sources}") # e.g. "1-3"# product_launches / strategic_initiatives — array of citation objectselif isinstance(sources, list): for cite in sources: print(f" {cite['title']} ({cite['publishedDate']})")
product_launches.summary is an array of strings, not a single stringEach launch object’s summary field is a list of bullet-point strings, not a single narrative string. Iterate it rather than printing directly:
# ❌ TypeError — summary is a list, not a stringprint(launch["summary"][:200])# ✅ Correctfor bullet in launch["summary"]: print(f" • {bullet}")
request_id is a UUID string — use the correct polling endpointThis API returns request_id (UUID string). The Workflow APIs return report_id (integer). They use completely different polling endpoints and cannot be swapped:
# ❌ Wrong endpoint for this APIrequests.get(".../api/assets/get_notebook_status/", params={"report_id": request_id})# ✅ Correct endpoint for Company Deep Intelligencerequests.get(".../api/enterprise/request/status/", params={"request_id": request_id})
Understand when to use Company Deep Intelligence vs Company ResearchBoth APIs generate company intelligence, but they serve different needs. Company Deep Intelligence is section-selective and multi-company — ideal for focused sweeps across watchlists where you need specific intelligence types quickly, with results returned in the polling response. Company Research always generates a fixed five-section deep-dive report for one company through the Workflow infrastructure and supports PDF/DOCX/PPT export. Use Company Deep Intelligence for flexible pipeline enrichment and competitive sweeps; use Company Research when you need a complete formatted deliverable for a single company.