Alethinx Deal Intelligence API · v1

Score any acquisition target in under 8 seconds.

The Alethinx API is the same AI deal-scoring engine that powers app.alethinx.ai — exposed as a clean REST endpoint. Submit a deal listing (URL or pasted text), receive a structured assessment: composite score, four-dimensional analysis, an explainable verdict, and the strengths and risks your team needs to make a go/no-go call.

Base URL · https://api.alethinx.ai Current version · v1 Auth · Bearer token Payload · JSON

What you get back#

Every scored deal returns a four-dimensional analysis derived from our CLAW Architecture — the same patent-pending framework underwriters and search funds use inside the Alethinx web app.

  • Composite score — single 0–100 number summarizing the opportunity.
  • Dimension scores — independent 0–100 scores across Financial, Operational, Strategic, and Risk dimensions.
  • VerdictPURSUE, INVESTIGATE, or PASS with a one-sentence rationale.
  • Highlighted strengths & risks — surfaced findings ready to drop into your underwriting memo.
  • Normalized financials — extracted TTM revenue, SDE, asking price, and industry classification when available.

Need an API key? Access is currently invite-based for strategic partners and pilot customers. Reach out to partnerships@alethinx.ai with a brief description of your use case and expected volume.

Quickstart#

Score your first deal in under sixty seconds. Replace $ALETHINX_API_KEY with the key issued to your organization, then run:

curl -X POST https://api.alethinx.ai/v1/deals/score \
  -H "Authorization: Bearer $ALETHINX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "deal_text": "Established HVAC services business, 12 yrs operating, $1.85M TTM revenue, $520K SDE, asking $2.4M. Recurring B2B contracts with 47% of revenue from top 3 customers.",
    "ttm_revenue": 1850000,
    "sde": 520000,
    "asking_price": 2400000,
    "industry": "HVAC Services"
  }'
const response = await fetch('https://api.alethinx.ai/v1/deals/score', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.ALETHINX_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    deal_text: 'Established HVAC services business...',
    ttm_revenue: 1850000,
    sde: 520000,
    asking_price: 2400000,
    industry: 'HVAC Services',
  }),
});

const { data, meta } = await response.json();
console.log(`Composite score: ${data.composite_score} (${data.verdict})`);
import os, requests

response = requests.post(
    'https://api.alethinx.ai/v1/deals/score',
    headers={
        'Authorization': f'Bearer {os.environ["ALETHINX_API_KEY"]}',
        'Content-Type': 'application/json',
    },
    json={
        'deal_text': 'Established HVAC services business...',
        'ttm_revenue': 1850000,
        'sde': 520000,
        'asking_price': 2400000,
        'industry': 'HVAC Services',
    },
    timeout=30,
)

result = response.json()
print(f'Composite score: {result["data"]["composite_score"]} ({result["data"]["verdict"]})')
package main

import (
    "bytes"
    "encoding/json"
    "net/http"
    "os"
)

func main() {
    payload, _ := json.Marshal(map[string]interface{}{
        "deal_text":     "Established HVAC services business...",
        "ttm_revenue":   1850000,
        "sde":           520000,
        "asking_price":  2400000,
        "industry":      "HVAC Services",
    })

    req, _ := http.NewRequest("POST", "https://api.alethinx.ai/v1/deals/score", bytes.NewReader(payload))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("ALETHINX_API_KEY"))
    req.Header.Set("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    // Decode resp.Body as needed
}

A successful response includes data.composite_score, data.dimension_scores, data.verdict, and data.highlighted_risks / data.highlighted_strengths — everything you need to populate an IC memo or trigger a pursuit workflow.

Authentication#

All requests must include a Bearer token in the Authorization header. Keys are issued per organization and are prefixed with ax_pen_live_ so they're easy to identify in logs and secret scanners.

Header
Authorization: Bearer ax_pen_live_a1b2c3d4e5f6...

Never expose your API key client-side. Treat it like a database password: keep it in server-side environment variables or a secret manager. Any key observed in browser network traffic, public repositories, or client bundles will be revoked without notice.

Access tiers

Every key is scoped to a tier that determines monthly and hourly quotas. The tier is returned in every response as the X-Alethinx-Tier header.

TierMonthly quotaHourly quotaIntended for
free10010Evaluation and integration testing
pro5,000100Individual searchers and small funds
founder25,000500Strategic channel partners and platforms
enterpriseCustomCustomHigh-volume integrations, white-label, SLA

Quotas are enforced per calendar month (UTC) and per rolling hour. See Rate limits for details on how to read and respect quota headers.

Environments & base URL#

The Alethinx API exposes a single production base URL. We deliberately do not operate a separate sandbox environment — instead, your free-tier key issues real scoring requests against production at a sufficient volume to integrate and test end-to-end.

PRODhttps://api.alethinx.ai

All endpoints are versioned under /v1. We will never make breaking changes within a major version — see Versioning for our compatibility policy.

Rate limits#

Every successful response includes rate-limit headers so you can introspect your remaining quota and plan accordingly:

HeaderDescription
X-RateLimit-LimitYour hourly quota.
X-RateLimit-RemainingRequests remaining in the current hour.
X-RateLimit-ResetUnix timestamp (seconds) when the hourly window resets.
X-Alethinx-TierThe tier of the key making the request (free, pro, founder, enterprise).
X-Request-IDUnique ID for this request — include in support tickets.

When you exceed your hourly or monthly quota, the API returns 429 Too Many Requests with a Retry-After header indicating the number of seconds until your next allowable request.

Recommended backoff

For production integrations, implement exponential backoff with jitter on 429 and 5xx responses. A reasonable policy: retry up to 3 times with delays of 1s, 2s, 4s plus 0–500ms of random jitter, abandoning after the third failure and surfacing the underlying error.

Errors#

The API uses standard HTTP status codes. The response body for any non-2xx status follows a consistent error envelope:

Error response
{
  "request_id": "req_01HXYZ8K3Q4M7P2N1R6T9V0W3X",
  "error": {
    "code": "invalid_api_key",
    "message": "The API key provided is malformed or has been revoked.",
    "details": null
  }
}

Status codes

StatusMeaning
200Request succeeded.
400The request was malformed — usually a missing required field or invalid JSON.
401Authentication failed — missing, malformed, revoked, or expired API key.
403Authenticated but not authorized for this resource or tier feature.
413Payload exceeded the maximum size (50 KB for deal_text).
429Rate limit or monthly quota exceeded — back off and retry.
500An unexpected internal error occurred. Safe to retry.
502An upstream model or extraction service timed out. Safe to retry.

Error codes

CodeDescription
invalid_requestThe request body is not valid JSON or has the wrong shape.
missing_required_fieldRequired field absent — typically deal_text or deal_url.
invalid_api_keyAPI key is malformed or does not exist.
key_revokedThe key was valid but has been revoked.
key_expiredThe key has passed its expiration date.
rate_limit_exceededHourly quota exhausted — see Retry-After.
monthly_quota_exceededMonthly quota exhausted — resets on the 1st of the next month (UTC).
payload_too_largeThe deal_text field exceeded 50 KB.
upstream_timeoutA dependency timed out. Safe to retry with backoff.
internal_errorSomething unexpected — include the request_id when contacting support.

Response envelope#

Every successful response shares the same top-level shape: a request_id for tracing, a data object containing the endpoint-specific payload, and a meta object with timing and version information.

Envelope
{
  "request_id": "req_01HXYZ...",
  "data": { /* endpoint-specific */ },
  "meta": {
    "latency_ms": 5840,
    "api_version": "v1",
    "timestamp": "2026-05-26T07:42:18.342Z"
  }
}

Versioning#

The current major version is v1. Within a major version we will:

  • Add new endpoints, fields, headers, and error codes.
  • Loosen validation (e.g., make previously-required fields optional).
  • Improve underlying model quality and latency.

We will not, within v1:

  • Remove or rename existing fields.
  • Tighten validation in a way that breaks valid v1 requests.
  • Change the semantic meaning of existing fields or error codes.

Breaking changes ship as a new major version (/v2) with overlapping support windows announced via the changelog.


API Reference

Score a deal#

Submit a deal listing — either as pasted text or a public URL — and receive a structured assessment in under 8 seconds.

POSThttps://api.alethinx.ai/v1/deals/score

Request body

Send a JSON body. You must provide either deal_text or deal_url — providing both is allowed and the text takes precedence. All other fields are optional and, when provided, are used as hints to bias and validate the scoring.

FieldTypeDescription
deal_textrequired* string The full text of the deal listing, CIM excerpt, or investment memo. Maximum 50 KB. Required if deal_url is not provided.
deal_urlrequired* string A public URL to an M&A listing or company page. Required if deal_text is not provided. Alethinx fetches and parses the page on your behalf.
ttm_revenueoptional number Trailing-twelve-month revenue in USD. Used to validate extracted figures.
sdeoptional number Seller's Discretionary Earnings in USD.
ebitdaoptional number EBITDA in USD. Used when SDE is not applicable (typically deals above $5M revenue).
gross_marginoptional number Gross margin as a decimal (e.g., 0.45 for 45%).
asking_priceoptional number Listed asking price in USD.
industryoptional string Free-text industry classification. Examples: "HVAC Services", "SaaS", "Distribution".
geooptional string Geographic region in ISO 3166-2 format. Examples: "US-TX", "US-CA".

Response fields

On success (200 OK), the data object contains:

FieldTypeDescription
composite_scoreintegerOverall opportunity score from 0 (avoid) to 100 (exceptional).
dimension_scoresobjectFour independent 0–100 scores: financial, operational, strategic, risk.
verdictenumOne of PURSUE, INVESTIGATE, or PASS.
summarystringA two-to-three-sentence rationale for the verdict.
highlighted_strengthsstring[]Up to five surfaced strengths, ranked by materiality.
highlighted_risksstring[]Up to five surfaced risks, ranked by materiality.
ttm_revenuenumber | nullExtracted or echoed TTM revenue in USD.
sdenumber | nullExtracted or echoed SDE in USD.
asking_pricenumber | nullExtracted or echoed asking price in USD.
industrystring | nullNormalized industry classification.

Verdict semantics

VerdictWhen returned
PURSUEComposite score ≥ 75 and no critical risk flags. Worth immediate pursuit.
INVESTIGATEComposite score 50–74, or score ≥ 75 with one or more critical risk flags. Promising but warrants additional diligence before committing time.
PASSComposite score below 50, or risk flags severe enough to disqualify the deal regardless of headline score.

Full example

Request

Request body
{
  "deal_text": "Established commercial HVAC services business in DFW. 12 years operating history with consistent YoY growth. $1.85M TTM revenue, $520K SDE, asking $2.4M. Recurring B2B service contracts make up 60% of revenue but top 3 customers represent 47% of total billings. Owner-operator currently working 35hrs/week. No identified successor.",
  "ttm_revenue": 1850000,
  "sde": 520000,
  "asking_price": 2400000,
  "industry": "HVAC Services",
  "geo": "US-TX"
}

Response

200 OK
{
  "request_id": "req_01HXYZ8K3Q4M7P2N1R6T9V0W3X",
  "data": {
    "composite_score": 72,
    "dimension_scores": {
      "financial": 81,
      "operational": 68,
      "strategic": 74,
      "risk": 64
    },
    "verdict": "INVESTIGATE",
    "summary": "Strong cash conversion (28% SDE margin) and recurring revenue mix offset by meaningful customer concentration and key-person risk. Worth a deeper financial diligence pass before LOI.",
    "highlighted_strengths": [
      "12-year operating history with consistent YoY revenue growth",
      "28% SDE margin is above industry median for residential/light-commercial HVAC",
      "60% of revenue is recurring B2B service contracts (vs one-time installs)",
      "Multiple at 1.3x revenue / 4.6x SDE is reasonable for the geography and category"
    ],
    "highlighted_risks": [
      "Customer concentration: top 3 customers represent 47% of billings",
      "Owner-operator with no identified successor — transition risk on close",
      "35hr/week owner workload likely understates true operating hours; verify in QoE"
    ],
    "ttm_revenue": 1850000,
    "sde": 520000,
    "asking_price": 2400000,
    "industry": "HVAC Services"
  },
  "meta": {
    "latency_ms": 5840,
    "api_version": "v1",
    "timestamp": "2026-05-26T07:42:18.342Z"
  }
}

Scoring is deterministic per input. The same deal_text and optional hints will produce the same composite, dimensions, and verdict on every call within a major version. We surface model improvements through version bumps, not silent changes — your historical scores remain comparable.


Changelog#

v1.0 · May 19, 2026

  • Initial public release of the Alethinx Deal Intelligence API.
  • POST /v1/deals/score endpoint live with four-dimensional CLAW scoring.
  • Bearer-token authentication with tiered rate limiting (free / pro / founder / enterprise).
  • Stable response envelope with request_id, data, and meta.

SLA & status#

Real-time API status and historical uptime are published at status.alethinx.ai. Enterprise customers receive a contractual SLA with uptime commitments, incident credits, and dedicated escalation paths — contact partnerships@alethinx.ai to discuss.

Support#

ChannelFor
partnerships@alethinx.aiAPI access requests, commercial discussions, tier upgrades.
support@alethinx.aiIntegration help, bug reports, behavior questions.
security@alethinx.aiSecurity disclosures and vulnerability reports.
status.alethinx.aiLive API status and historical uptime.

When opening a support ticket, please include the X-Request-ID header from the response (or the request_id in the response body) — it lets us trace your request end-to-end through our infrastructure within seconds.