API Overview
The Discoperi M&A Intelligence API gives you programmatic access to the full verified deal database, sector analytics, advisor league tables, and real-time deal webhooks. All responses are JSON.
The API is built around standard REST conventions. All timestamps are ISO 8601 UTC. All monetary values are in USD millions unless otherwise stated.
Authentication
Authenticate all requests using your API key in the Authorization header as a Bearer token. Find your API key in your account dashboard under Settings β API.
# Include on every request Authorization: Bearer dsc_live_xxxxxxxxxxxxxxxxxxxxxxxx
curl -X GET "https://api.discoperi.com/v1/deals" \ -H "Authorization: Bearer dsc_live_xxxxxxxx" \ -H "Content-Type: application/json"
API key prefixes
dsc_live_ β production key, calls against live datadsc_test_ β test key, returns sample/fixture data, never billed
Base URL
https://api.discoperi.com/v1
All endpoints are prefixed with /v1/. We version the API to allow non-breaking changes. When a breaking change is necessary, we release a new version and maintain the previous version for at least 12 months.
Rate limits
| Plan | Requests/minute | Requests/day | Webhook concurrency |
|---|---|---|---|
| Corporate | 120 | 50,000 | 5 webhooks |
| Team (export only) | N/A | N/A | N/A |
Rate limit headers are returned on every response:
X-RateLimit-Limit: 120 X-RateLimit-Remaining: 114 X-RateLimit-Reset: 1711123200
If you exceed the rate limit, you receive a 429 Too Many Requests response. Use exponential backoff with an initial delay of 1 second.
Errors
The API returns standard HTTP status codes and a consistent error envelope:
{
"error": {
"code": "invalid_filter",
"message": "Unknown sector value: 'fintech'. Valid values: Technology, Healthcareβ¦",
"status": 400
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_filter | A query parameter has an invalid value |
| 401 | unauthorized | Missing or invalid API key |
| 403 | plan_required | This endpoint requires Corporate plan |
| 404 | not_found | Deal or resource not found |
| 429 | rate_limited | Too many requests β use X-RateLimit-Reset |
| 500 | server_error | Internal error β contact [email protected] |
Endpoints
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| sector | string | optional | Filter by sector. One of: Technology, Healthcare, Financial Services, Industrials, Energy, Consumer, Real Estate, Media, Other |
| type | string | optional | Deal type: Acquisition, Merger, Buyout, LBO, Carve-out, Spin-off, Tender Offer |
| min_value | number | optional | Minimum deal value in USD millions |
| max_value | number | optional | Maximum deal value in USD millions |
| from_date | string | optional | ISO 8601 date β earliest close date (e.g. 2026-01-01) |
| to_date | string | optional | ISO 8601 date β latest close date |
| acquirer_country | string | optional | ISO 3166-1 alpha-2 country code (e.g. US, DE, GB) |
| min_sources | integer | optional | Minimum source count (1β6). Default: 1 |
| sort | string | optional | Sort field: close_date (default), value, sources |
| order | string | optional | asc or desc (default: desc) |
| limit | integer | optional | Results per page: 1β100 (default: 20) |
| cursor | string | optional | Pagination cursor from previous response |
curl -X GET "https://api.discoperi.com/v1/deals?sector=Healthcare&min_value=500&limit=10" \ -H "Authorization: Bearer dsc_live_xxxxxxxx"
{
"data": [
{
"id": "deal_abc123",
"acquirer": "Siemens AG",
"acquirer_country": "DE",
"target": "Varian Medical Systems",
"target_country": "US",
"sector": "Healthcare",
"deal_type": "Acquisition",
"value_usd_m": 2100,
"close_date": "2026-03-14",
"advisors_buy": ["Goldman Sachs"],
"advisors_sell": ["JPMorgan"],
"source_count": 3,
"quality_score": 0.923,
"verified": true
}
],
"meta": {
"total": 847,
"cursor": "eyJpZCI6ImRlYWxfYWJjMTIzIn0",
"has_more": true
}
}curl https://api.discoperi.com/v1/deals/deal_abc123 \
-H "Authorization: Bearer dsc_live_xxxxxxxx"Returns the complete deal record including all 39 structured fields, all source URLs, rationale, key terms, and the full quality score breakdown.
Returns deal count, total value, average deal size, and YoY change for each sector. Optional ?period=ytd|1y|3y|all parameter.
Returns ranked advisor data. Filter by ?role=buy|sell|legal, ?sector=Healthcare, or date range. Returns deal count, total value advised, market share, and top sectors.
curl "https://api.discoperi.com/v1/search?q=oncology+acquisition&limit=5" \ -H "Authorization: Bearer dsc_live_xxxxxxxx"
Searches across acquirer name, target name, advisors, deal rationale, and key terms. Returns ranked results by relevance. Supports quoted phrases.
Webhooks fire within minutes of a new matching deal being published. Each webhook POST contains the full deal object.
curl -X POST https://api.discoperi.com/v1/webhooks \ -H "Authorization: Bearer dsc_live_xxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://yourserver.com/hooks/discoperi", "filters": { "sectors": ["Healthcare", "Technology"], "min_value": 500, "acquirer_country": "US" }, "secret": "your_webhook_signing_secret" }'
Every webhook request is signed with HMAC-SHA256 using your secret. Verify signatures server-side to confirm authenticity.
Returns total deal count, total tracked value, last ingestion timestamp, and source health. Available on all plans including test keys.
Deal schema
Every deal record exposes up to 39 fields. Some fields are only populated when disclosed in source material.
- idstringUnique deal identifier (stable, permanent)
- acquirerstringAcquiring entity name (normalised)
- acquirer_countrystringISO 3166-1 alpha-2 country code
- targetstringTarget entity name
- target_countrystringISO 3166-1 alpha-2 country code
- sectorstringOne of 9 standardised sector values
- deal_typestringAcquisition, Merger, Buyout, LBO, Carve-out, Spin-off, Tender Offer
- value_usd_mnumber|nullDeal value in USD millions. Null if undisclosed.
- value_originalnumber|nullValue in original disclosed currency
- currency_originalstring|nullISO 4217 currency code of original value
- close_datestringISO 8601 date of deal closing
- announcement_datestring|nullISO 8601 date of original announcement
- advisors_buystring[]Buy-side financial advisors (array)
- advisors_sellstring[]Sell-side financial advisors (array)
- legal_buystring[]Buy-side legal counsel (array)
- legal_sellstring[]Sell-side legal counsel (array)
- rationalestringAI-extracted deal rationale (2β3 sentences)
- key_termsstringExtracted deal terms (consideration type, conditions, etc.)
- source_countintegerNumber of independent sources that reported this deal
- quality_scorenumberComposite quality score 0.0β1.0
- source_urlsstring[]All source URLs used for verification
- verifiedbooleantrue when source_count β₯ 2 and quality_score β₯ 0.75
- published_atstringISO 8601 timestamp when published to database
SDKs & code examples
import requests client = requests.Session() client.headers.update({"Authorization": "Bearer dsc_live_xxxxxxxx"}) # Get all Healthcare deals above $500M resp = client.get("https://api.discoperi.com/v1/deals", params={ "sector": "Healthcare", "min_value": 500, "limit": 20, }) deals = resp.json()["data"] for deal in deals: print(f"{deal['acquirer']} β {deal['target']}: ${deal['value_usd_m']}M")
const resp = await fetch('https://api.discoperi.com/v1/deals?sector=Technology&min_value=1000', { headers: { 'Authorization': 'Bearer dsc_live_xxxxxxxx' } }); const { data, meta } = await resp.json(); console.log(`${meta.total} deals found`); data.forEach(d => console.log(d.acquirer, 'β', d.target));
const crypto = require('crypto'); app.post('/hooks/discoperi', express.raw({ type: 'application/json' }), (req, res) => { // Verify signature const sig = req.headers['x-discoperi-signature']; const expected = crypto .createHmac('sha256', process.env.WEBHOOK_SECRET) .update(req.body).digest('hex'); if (sig !== `sha256=${expected}`) return res.status(401).send('Invalid signature'); const deal = JSON.parse(req.body); console.log('New deal:', deal.acquirer, 'β', deal.target, deal.value_usd_m); res.json({ received: true }); });
Changelog
Initial API release. Endpoints: /deals, /deals/{id}, /sectors, /advisors, /search, /webhooks, /stats.
Breaking changes will always be announced at least 90 days in advance via email and the API changelog. Subscribe to API updates in your account settings.