Skip to main content
API quickstart

Elvesora Enrichment API Docs

Send a business domain through the REST API or authenticated remote MCP tool and receive company-level fields for CRM cleanup, segmentation, routing, and reporting.

Company-level profile

POST /api/v1/enrichment/company Input: a business domain, optionally protected with an Idempotency-Key.
result_type: ENRICHED Map company_name, industry, headquarters, size, and website fields into the destination system.
Boundary: company data only No individual profiles, private contact records, or person-level attributes. Optional public company contact channels may be returned.

First request

Use a business domain for the v1 API endpoint. Send an Idempotency-Key header when retrying a request that should replay the cached result without another credit during the 24-hour cache window.

POST /api/v1/enrichment/company
Authorization: Bearer $ELVESORA_API_KEY
Idempotency-Key: enrich-acme-001
Content-Type: application/json

{
  "domain": "acme.com"
}

Success response

Read result_type first, then map only the returned company fields your workflow needs.

{
  "success": true,
  "result_type": "ENRICHED",
  "message": "Company enrichment completed successfully",
  "data": {
    "company_name": "Acme Corporation",
    "legal_name": "Acme Corporation",
    "domain": "acme.com",
    "website_url": "https://acme.com",
    "company_description": "Industrial equipment manufacturer.",
    "industry": "Manufacturing",
    "sub_industry": "Industrial Equipment",
    "sector": "Industrials",
    "hq_city": "Chicago",
    "hq_region": "Illinois",
    "hq_country": "United States",
    "employee_count": 1200,
    "contacts": {
      "emails": ["info@acme.com"],
      "phones": ["+1-312-555-0100"]
    },
    "tech_stacks": [],
    "competitors": []
  },
  "credits": {
    "limit": 100,
    "used": 5,
    "remaining": 95,
    "consumed_by_request": 1,
    "period_started_at": "2026-06-01",
    "period_ends_at": "2026-07-01"
  },
  "remaining": 95,
  "limit": 100
}

Supported input formats

The API expects a domain. Bulk workflows can start from domains or business emails and normalize them before enrichment.

API request

Send domain as a string in the domain field, optionally with an Idempotency-Key header for replay protection during the 24-hour cache window.

MCP tool

Call enrich_company with a required domain and optional idempotency_key from a client that can attach the team API bearer token. Replay protection uses the same 24-hour cache window.

Bulk upload

Upload CSV, XLS, or XLSX files up to 10 MB with domains or business emails in the first column or a mapped domain_email, domain, or email header.

Business email

Bulk workflows can extract the domain portion from a business email before enrichment.

Result types

Use result_type as the durable routing value for enrichment jobs, exports, and retries.

result_type Meaning
ENRICHED Company data was returned for the submitted domain.
NOT_FOUND The domain was valid, but company data was not available.
FREE_EMAIL_PROVIDER The input used a consumer email provider that does not identify a business domain.
DISPOSABLE The input domain matched a temporary or disposable domain pattern.
INVALID_EMAIL The submitted email format could not be parsed into a usable domain.
INVALID_DOMAIN The submitted domain format was invalid or unsupported.
LIMIT_EXCEEDED The plan allowance was exhausted before enrichment could run.
UNAUTHORIZED The bearer token was missing, invalid, or revoked.
VALIDATION_ERROR The request payload failed validation before enrichment could run.
IDEMPOTENCY_KEY_CONFLICT The same Idempotency-Key was previously used with a different domain.
UPSTREAM_ERROR The internal enrichment service returned an error response. Retry according to your workflow policy.
SERVICE_UNAVAILABLE The enrichment service could not be reached. Retry according to your workflow policy.

Company-field dictionary

Fields may be absent when a source does not have enough reliable company data. Build exports to handle blank values without failing the whole job.

Field Description
data.company_name Common company name returned for display and CRM account records.
data.legal_name Legal or registered name when available and different from the display name.
data.domain Business domain used for the enrichment result.
data.website_url Company website URL when available.
data.logo_url Company logo URL when available.
data.company_description Short company description when available.
data.duns_number Dun & Bradstreet D-U-N-S number when available.
data.industry Primary industry category.
data.sub_industry More specific industry segment when available.
data.sector Broader sector classification when available.
data.lei_number Legal Entity Identifier when available.
data.employee_count Employee-count value or range when available.
data.founded_year Company founding year when available.
data.revenue_range Revenue range when available.
data.ipo_status Public-company IPO status when available.
data.stock_symbol Public-market ticker or stock symbol when available.
data.hq_city Headquarters city when available.
data.hq_region Headquarters state, province, or region when available.
data.hq_country Headquarters country when available.
data.keywords Company keywords when returned by source data.
data.social_links Public social or business profile links when available.
data.tags Company tags or classification labels when returned.
data.fundings Recent funding entries when available.
data.contacts Public company-level email addresses and phone numbers when returned; these are not person profiles or private contact records.
data.addresses Company address records, including headquarters address details when available.
data.tech_stacks Grouped company technology signals when returned.
data.competitors Company competitor records when returned.

Bulk upload and export workflow

Bulk enrichment works best when each row has one domain or business email, a predictable header, and a destination mapping before export.

Before a list starts, the review step normalizes and deduplicates pasted values or CSV, XLS, and XLSX rows, separates valid and invalid inputs, shows correction guidance, estimates the maximum credit use, and warns when the available balance may pause the run. Invalid rows remain visible as validation outcomes and do not consume enrichment credits.

List export downloads a 17-column XLSX workbook with nested company fields, result status, LinkedIn and social links, plus public company email addresses and phone numbers when returned.

Restart Processing retries unfinished rows and transient service or limit errors. It does not rerun successful, invalid, or NOT_FOUND rows; reimport a corrected domain or business email as a new row.

Lists can pause when credits run out. Check the paused_credits or pending_no_credits state before assuming a list failed for data-quality reasons.

Feature-gated Salesforce mapping

When the Salesforce integration flag and credentials are enabled for the deployment, exports support OAuth or client-credentials connections, dry-run planning, fill-only or replace writes, and before/after reconciliation exports for Account updates.

company_name Account Name or custom display-name field
legal_name Legal name custom field
domain / website_url Website or company-domain fields
industry / sub_industry / sector Industry and segmentation fields
employee_count / company_size_band Size segmentation fields
hq_city / hq_region / hq_country Billing or headquarters location fields
routing_region Territory or routing-region custom field
company_description Company description field
data_freshness_date Last enriched date or data freshness field

Operational events and developer assets

The app exposes implementation assets and operational signals for teams that run enrichment as a recurring workflow, not only as a one-off API call.

The signed-in API workroom can run a live enrichment test from a company domain or business email and show the response, HTTP status, duration, result type, and credits used. Its usage view summarizes requests, successes, errors, and credits, and filters sanitized request activity by current billing period, the last 7 or 30 days, domain or email, HTTP status, and result type. The activity payload does not expose raw request or response bodies, IP addresses, user agents, or token IDs.

List quality and restart

List detail pages calculate total, processed, pending, enriched, match_rate, result_counts, invalid_breakdown, failure_reasons, field_completeness, and suggested_actions. Restart Processing dispatches unfinished rows plus ERROR, LIMIT_EXCEEDED, RATE_LIMITED, SERVICE_UNAVAILABLE, and UPSTREAM_ERROR rows without rerunning successful or NOT_FOUND rows.

Signed webhooks

Teams can configure one endpoint for list.completed and credits.low. X-Elvesora-Signature is sha256=<HMAC-SHA256 of the raw JSON body>; failed deliveries retry after 60, 300, and 900 seconds. credits.low fires once per billing period when remaining credits reach 10% or less.

Developer assets

The Enrichment app API screen exposes the OpenAPI YAML and Postman collection for the v1 enrichment API, including idempotency and credit examples.

Remote MCP server

POST https://enrichment.elvesora.com/api/mcp/enrichment accepts Streamable HTTP MCP requests with a team API bearer token. The enrich_company tool accepts domain plus optional idempotency_key, returns structured company and credit data, and uses the REST API credit and replay rules.

Authenticated health check

GET https://enrichment.elvesora.com/api/v1/enrichment/ping verifies that a bearer token can reach the v1 API and returns status ok with version v1.

Current authentication scope: the remote endpoint works with MCP clients that can attach the team API token as an Authorization bearer header. Direct ChatGPT developer-mode linking and public plugin distribution are not yet available because authenticated ChatGPT apps require OAuth 2.1 discovery and an authorization-code flow with PKCE, which the deployed endpoint does not currently expose.

Product boundary

Elvesora Enrichment returns company-level data. It may include public company email addresses or phone numbers when source data provides them, but it does not return individual profiles, private contact lists, personal email discovery, or person-level attributes.

Credits

Credits are consumed by ENRICHED REST or MCP responses. Monitor credits.remaining, credits.consumed_by_request, and the X-Credits-* headers before starting large imports.

Troubleshooting

Check token status, domain formatting, free-provider inputs, disposable domains, CSV headers, usage limits, and failed jobs before retrying.