Overview
- Data is researched once a week per company and served read-only. Reading never triggers new research.
- Base URL:
https://api.alertedly.com/api/v1. - Weeks are ISO weeks in UTC. A
weekparameter accepts any date and uses the first day of that ISO week. - API keys are available on the Pro plan and on VC plans. See Pricing.
- OpenAPI 3 spec:
/docs/openapi.yaml. Postman collection:/docs/alertedly-api.postman.json. - For AI assistants, the MCP server gives the same data with per-person sign-in.
Authentication
Every endpoint except /health needs an API key:
curl -H "X-API-Key: $ALERTEDLY_API_KEY" https://api.alertedly.com/api/v1/companiesAuthorization: Bearer YOUR_KEY also works.
- Key
- Personal key
- Created by
- You
- Where
- Dashboard → API key
- Sees
- Your tracked companies; your firm's if you belong to one
- Key
- Organization key
- Created by
- A firm admin
- Where
- Team settings
- Sees
- The firm's portfolio and dealflow
Keys are stored as hashes and shown once at creation. Revoke a key at any time where you created it; it stops working immediately.
Scopes and expiry
- Scope
read- Allows
- GET requests
- Scope
write- Allows
- POST, PUT, PATCH and DELETE requests (adding, updating, converting and removing companies; VC workflow changes)
A request without the needed scope returns 403 with INSUFFICIENT_SCOPE. Keys can have an expiry date; expired keys return 401. Use read-only keys with an expiry for automations.
Firms and ?org=
A personal key of someone in one firm sees that firm. If you belong to several firms, add ?org= with the firm's name or slug to any request; without it, your earliest membership is used.
curl -H "X-API-Key: $ALERTEDLY_API_KEY" "https://api.alertedly.com/api/v1/signals?org=fund-ii"Report endpoints return only your account's reports (personal scope) or reports belonging to your firm's members (firm scope). You never see another account's or another firm's data.
Rate limits
- Limit
- Per person
- Applies to
- Each signed-in user, or each organization API key
- Value
- 60 requests / minute
- Limit
- Per firm
- Applies to
- All members and keys of one firm together
- Value
- 600 requests / minute
Over the limit, the API returns 429 with a Retry-After header. Responses include X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, plus X-Request-ID and X-API-Version.
Usage logging
Every request is logged with the key, the endpoint, the status and the time. Logging never blocks a response. See your usage with GET /usage; firm admins also see the firm's AI and API activity in Team settings.
Channels
Alertedly collects 16 channels. Careers, Meta ads, Google ads, LinkedIn ads, Reddit, reviews (G2 and Trustpilot) and trademarks are Pro and VC channels. The /channels endpoint uses the keys below; report returns the cross-channel weekly report.
- Channel
- Press and news
- Weekly data key
press- /channels key
- news
- Channel
- Website and blog
- Weekly data key
website_blog- /channels key
- website_blog (alias blog)
- Channel
- Changelog
- Weekly data key
changelog- /channels key
- changelog
- Channel
- Website changes
- Weekly data key
website_screenshot- /channels key
- website_changes (alias website)
- Channel
- Careers
- Weekly data key
careers- /channels key
- careers
- Channel
- Weekly data key
linkedin- /channels key
- Channel
- X
- Weekly data key
twitter- /channels key
- Channel
- Weekly data key
instagram- /channels key
- Channel
- YouTube
- Weekly data key
youtube- /channels key
- youtube
- Channel
- TikTok
- Weekly data key
tiktok- /channels key
- tiktok
- Channel
- Meta ads
- Weekly data key
meta_ads- /channels key
- meta_ads (alias meta-ads)
- Channel
- Google ads
- Weekly data key
google_ads- /channels key
- google_ads
- Channel
- LinkedIn ads
- Weekly data key
linkedin_ads- /channels key
- linkedin_ads
- Channel
- Weekly data key
reddit- /channels key
- Channel
- Reviews (G2 and Trustpilot)
- Weekly data key
reviews- /channels key
- reviews
- Channel
- Trademarks (USPTO)
- Weekly data key
trademarks- /channels key
- use /signals and /metrics?channel=trademarks
Health
/healthscope readNo auth required. Returns API status and version.
{
"status": "healthy",
"version": "1.12.0",
"timestamp": "2026-10-08T09:28:58.712Z",
"request_id": "uuid"
}Companies
List companies
/companies?status=portfolio&limit=100&offset=0scope read- Param
status- Default
- all
- Description
- portfolio or dealflow (firm scope)
- Param
limit- Default
- 100
- Description
- Max 500
- Param
offset- Default
- 0
- Description
- Pagination offset
{
"companies": [
{
"id": "uuid",
"name": "Northwind",
"website": "northwind.example",
"status": "portfolio",
"added_at": "2026-01-15T...",
"last_researched_at": "2026-10-05T...",
"social_urls": { "linkedin": "https://linkedin.com/company/...", "twitter": "https://x.com/..." }
}
],
"pagination": { "total": 12, "limit": 100, "offset": 0, "has_more": false }
}Get company
/companies/{id}scope readCompany details, discovered social URLs and per-channel data freshness.
Add company
/companiesscope write{ "name": "Acme Labs", "website": "acmelabs.example", "status": "dealflow" }- Field
name- Required
- yes
- Description
- Company name
- Field
website- Required
- yes
- Description
- Company website
- Field
status- Required
- no
- Description
- portfolio or dealflow (default dealflow). Portfolio needs a firm admin.
Returns 201 with { id, name, website, status, message }. Counts against your plan's or firm's company limit.
Update company
/companies/{id}scope write{ "status": "portfolio" }Moves a dealflow company to the portfolio when the firm invests (firm scope, admins). One way, as in the dashboard: a portfolio company never moves back to dealflow (409 ONE_WAY_MOVE; remove it and add it again if it went on the wrong list). Returns { id, previous_status, new_status, updated: true }.
Delete company
/companies/{id}scope writeStops tracking the company. Returns { id, deleted: true }.
Convert status
/companies/{id}/convertscope writeMoves a dealflow company to the portfolio (firm scope, admins; personal scope returns 400 NOT_SUPPORTED). A portfolio company answers 409 ONE_WAY_MOVE. Returns { id, previous_status, new_status }.
Channel data
/channels/{channel}/{company_id}?days=30scope read- Param
days- Default
- 30
- Description
- Look-back period
Structured intelligence for one channel. See Channels for keys.
{
"channel": "reddit",
"company_id": "uuid",
"time_range": { "days": 30, "from": "...", "to": "..." },
"metrics": { "sentiment_score": 0, "thread_count": 5, "net_sentiment": "positive" },
"analysis": "...",
"last_updated": "2026-10-05T...",
"data_points": 3,
"raw_items": 12,
"history": [ { "generated_at": "...", "content": { } } ]
}Events
/companies/{id}/events?days=7&severity=mediumscope readGET /events/{company_id} is an equivalent alias.
- Param
days- Default
- 7
- Description
- Look-back period
- Param
severity- Default
- all
- Description
- low, medium, high or critical
Signal types written by the weekly pipeline:
- Signal type
raise_detected- Meaning
- A funding round was announced or reported
- Signal type
product_launch- Meaning
- A new product, feature or major release
- Signal type
pricing_change- Meaning
- Pricing or plans changed
- Signal type
hiring_spree- Meaning
- Open roles grew sharply
- Signal type
hiring_slowdown- Meaning
- Open roles fell sharply
- Signal type
layoffs- Meaning
- Layoffs reported
- Signal type
leadership_change- Meaning
- Executive hires or departures
- Signal type
partnership- Meaning
- A new partnership or integration
- Signal type
acquisition- Meaning
- Acquired something, or was acquired
- Signal type
legal_regulatory- Meaning
- Lawsuits, regulatory or compliance news
- Signal type
sentiment_shift- Meaning
- Public sentiment moved noticeably
- Signal type
competitor_move- Meaning
- A competitor did something relevant to this company
Older reports may contain other types (for example hiring_surge). Treat event_type as an open string.
Ads and reviews
Pro and VC firms. The same answers as the MCP tools get_ads and get_reviews. Ad copy and review text come from the web and are cleaned like every other third-party text.
/companies/{id}/ads?platforms=google,linkedin&since=2026-09-01&detail=briefscope read- Param
platforms- Default
- meta,google,linkedin
- Description
- Comma-separated ad libraries
- Param
since- Default
- every ad of the latest weekly collection
- Description
- Only ads started on or after this date (and signals since it; default 30 days)
- Param
detail- Default
- brief
- Description
- brief (25 creatives per platform) or full (100)
Both cover the latest weekly report window: exactly 7 days (the last completed ISO week, or for a first report the 7 days before it ran). Per platform: status (active, quiet = no ads in the window, not_tracked = never researched for this company, unavailable = no research newer than 8 days (see as_of), this week's run could not read it, or the Google advertiser could not be verified), counts by freshness (newly_launched = launch date inside the window, newly_observed = first seen this week with an unknown launch date, existing_unknown), coverage (how much of the library was read; sample when the read was capped), Google advertiser verification and third_party_ads (never counted), notes, the weekly summary and the creatives, newly launched first, each with its freshness and ad library link in url. A count that could not be determined is null, never 0.
{
"company_id": "uuid",
"company": "Northwind",
"since": "2026-09-08",
"platforms": [
{
"platform": "google", "channel": "google_ads", "status": "active", "as_of": "2026-10-05", "week": "2026-10-05",
"window": { "start": "2026-09-28T00:00:00.000Z", "end": "2026-10-05T00:00:00.000Z", "mode": "scheduled", "from": "2026-09-28", "to": "2026-10-04" },
"counts": { "active_ads": 4, "newly_launched": null, "newly_observed": null, "existing_unknown": null, "new_ads": null },
"coverage": { "retrieved": 40, "vendor_total": 300, "vendor_total_label": "Google's estimate, all-time", "cap": 2, "cap_unit": "pages", "capped": true, "complete": false, "sample": true },
"advertiser": { "status": "verified", "verified": [{ "id": "AR13...", "name": "Northwind, Inc.", "count": 40 }], "unverified": [] },
"third_party_ads": { "count": 0, "advertisers": [], "without_advertiser_id": null },
"notes": ["Google: how many ads were newly launched could not be determined this week (a capped sample was read): unknown, not zero."],
"metrics": { "active_ads": 4, "coverage_complete": 0, "ads_estimate": 300 },
"summary": { "activity": "active", "summary": "...", "highlights": [], "signals": [], "generated": "2026-10-05" },
"creatives": [
{ "platform": "google", "ad_id": "CR0922...", "url": "https://adstransparency.google.com/advertiser/.../creative/...",
"format": "video", "body": "", "first_shown": "2026-06-16T...", "last_shown": "2026-10-05T...", "regions": ["US"],
"impressions_min": null, "impressions_max": null, "freshness": "existing_unknown", "new_this_week": false }
],
"creatives_total": 4
}
],
"totals": { "active_ads": 4, "newly_launched": null, "new_ads": null, "active_platforms": ["google"], "unknown": { "active_ads": [], "newly_launched": ["google"] } },
"signals": [],
"request_id": "uuid"
}/companies/{id}/reviews?platform=trustpilot&max_rating=2&since=2026-09-01scope read- Param
platform- Default
- both
- Description
- g2 or trustpilot
- Param
min_rating / max_rating- Default
- none
- Description
- Stars, 0-5 (max_rating=2 for complaints)
- Param
since- Default
- every review of the latest weekly collection
- Description
- Only reviews published on or after this date (and signals since it; default 30 days)
- Param
detail- Default
- brief
- Description
- brief (25 reviews) or full (100)
{
"company_id": "uuid",
"company": "Northwind",
"since": "2026-09-01",
"review_status": "active",
"as_of": "2026-10-05",
"window": { "start": "2026-09-28T00:00:00.000Z", "end": "2026-10-05T00:00:00.000Z", "mode": "scheduled", "from": "2026-09-28", "to": "2026-10-04" },
"metrics": { "g2_new_reviews": 6, "g2_avg_rating_week": 4.83, "trustpilot_new_reviews": 1, "trustpilot_avg_rating_week": 1, "low_ratings_week": 1, "replied_pct_week": 0, "platforms_read": 2 },
"by_platform": [
{ "platform": "g2", "status": "ok", "new_reviews": 6, "avg_rating_week": 4.83, "coverage": { "retrieved": 6, "cap": 15, "capped": false, "complete": true, "sample": false } },
{ "platform": "trustpilot", "status": "ok", "new_reviews": 1, "avg_rating_week": 1, "trust_score": 2.2, "late_arrivals_added": 1 }
],
"summary": { "activity": "active", "summary": "...", "highlights": ["..."], "signals": [], "generated": "2026-10-05" },
"reviews": [
{ "platform": "trustpilot", "review_id": "...", "url": "https://www.trustpilot.com/reviews/...", "rating": 1, "title": "...",
"body": "...", "published_at": "2026-10-01T10:27:18Z", "has_reply": false, "reply": null, "new_this_week": true }
],
"reviews_total": 1,
"signals": [ { "title": "...", "type": "sentiment_shift", "severity": "high", "channel": "reviews", "source_urls": ["https://..."] } ],
"request_id": "uuid"
}Portfolio (bulk)
Intelligence or events for every tracked company in one call.
/portfolio/intelligence?scope=all&channels=careers,changelog&since=2026-09-01&full=false&limit=50&offset=0scope read- Param
scope- Default
- all
- Description
- all, portfolio or dealflow
- Param
channels- Default
- all channels
- Description
- Comma-separated channel keys
- Param
since- Default
- 7 days ago
- Description
- ISO date; only data generated since
- Param
full- Default
- false
- Description
- true returns full content instead of a summary
- Param
limit- Default
- 50 (max 100); 25 when full=true
- Description
- Companies per page
- Param
offset- Default
- 0
- Description
- Pagination offset (by company)
/portfolio/events?scope=all&days=7&severity=high&limit=100&offset=0scope read- Param
scope- Default
- all
- Description
- all, portfolio or dealflow
- Param
days- Default
- 7
- Description
- Look-back period
- Param
severity- Default
- all
- Description
- low, medium, high or critical
- Param
channels- Default
- all
- Description
- Comma-separated channels, e.g. reviews, google_ads; ads = Meta, Google and LinkedIn ads
- Param
limit- Default
- 100 (max 200)
- Description
- Companies per page
- Param
offset- Default
- 0
- Description
- Pagination offset
VC: signals, metrics, leaderboard, digest
Weekly views across everything you track. All four take week (any date, normalized to the start of its ISO week; default: the current week). Invalid parameters return 400 with INVALID_WEEK or INVALID_PARAMETER.
Signals
/signals?week=2026-10-05&company_id=uuid&severity=high&limit=200scope read- Param
week- Default
- current week
- Description
- Any date in the week
- Param
company_id- Default
- all companies
- Description
- Limit to one tracked company (404 if not in your tracking)
- Param
severity- Default
- all
- Description
- Exactly this severity: critical, high, medium or low
- Param
channels- Default
- all
- Description
- Comma-separated channels; ads = Meta, Google and LinkedIn ads
- Param
limit- Default
- 200
- Description
- 1-500
Sorted by severity, then newest first. counts covers all signals of the week, before limit.
{
"week": "2026-10-05",
"total": 14,
"counts": { "critical": 0, "high": 3, "medium": 6, "low": 5, "total": 14 },
"signals": [
{
"id": "uuid",
"company_id": "uuid",
"company_name": "Northwind",
"lens": "portfolio",
"channel": "website_screenshot",
"type": "pricing_change",
"severity": "high",
"title": "Enterprise tier added",
"summary": "...",
"source_urls": ["https://..."],
"created_at": "2026-10-06T...",
"is_actionable": true
}
],
"request_id": "uuid"
}lens is portfolio or dealflow for firm scope, and null for personal scope.
Metrics
/metrics?week=2026-10-05&channel=careers&company_id=uuidscope read- Param
week- Default
- current week
- Description
- Any date in the week
- Param
channel- Default
- all channels
- Description
- Channel key, e.g. careers, meta_ads, trademarks, linkedin; ads = the three ad libraries; social = the company's own LinkedIn, X, Instagram, YouTube and TikTok, with posts summed per company (social.posts, per channel, unknown channels listed, never 0) and most posts first
- Param
company_id- Default
- all companies
- Description
- Limit to one tracked company
{
"week": "2026-10-05",
"channel": "careers",
"companies": [
{
"company_id": "uuid",
"name": "Northwind",
"lens": "portfolio",
"channels": {
"careers": { "open_roles": 41, "new_roles": 9, "removed_roles": 2, "leadership_roles": 2 }
}
}
],
"request_id": "uuid"
}Leaderboard
/leaderboard?week=2026-10-05&limit=5scope read- Param
week- Default
- current week
- Description
- Any date in the week; compared with the week before
- Param
limit- Default
- 5
- Description
- Entries per ranking, 1-50 (ties at the cut-off are kept)
- Ranking
hiring_growth- Meaning
- Largest increase in open roles versus last week
- Ranking
hiring_slowdown- Meaning
- Largest decrease in open roles (value is negative)
- Ranking
social_activity- Meaning
- Posts across LinkedIn, X, Instagram, TikTok and YouTube
- Ranking
ads- Meaning
- Active ads on Meta, Google and LinkedIn together
- Ranking
new_trademarks- Meaning
- New USPTO trademark applications
{
"week": "2026-10-05",
"prev_week": "2026-09-28",
"companies": [
{
"company_id": "uuid",
"name": "Northwind",
"hiring": { "source": "board", "open_roles": 41, "prev_open_roles": 32, "delta": 9, "new_roles": 9, ... },
"social": { "posts": 14, "engagement": 820, "by_channel": { "linkedin": { "posts": 6, "engagement": 540 } } },
"ads": { "active_ads": 12, "new_ads": 3 },
"trademarks": { "filings": 4, "new_applications": 1 },
"signals": { "critical": 0, "high": 1, "medium": 2, "low": 0, "total": 3 }
}
],
"rankings": {
"hiring_growth": [ { "company_id": "uuid", "name": "Northwind", "value": 9, "rank": 1 } ],
"hiring_slowdown": [],
"social_activity": [],
"ads": [],
"new_trademarks": []
},
"request_id": "uuid"
}Hiring delta is only computed when last week used the same source and this week isn't zero; otherwise it is null.
Digest (the week's signals)
/digest?week=2026-10-05&limit=5scope readThe week's raw material for the firm: each company's report status and signals, by portfolio and dealflow, and the hiring and activity rankings. For the written Portfolio and Dealflow round-ups and the combined firm report, use GET /weekly-reports. Firm scope only; personal scope returns 403 FORBIDDEN.
- Param
week- Default
- current week
- Description
- Any date in the week
- Param
limit- Default
- 5
- Description
- Entries per leaderboard ranking, 1-50
{
"org": { "id": "uuid", "name": "Example Ventures" },
"week": "2026-10-05",
"groups": {
"portfolio": {
"companies": [
{
"company_id": "uuid",
"name": "Northwind",
"lens": "portfolio",
"status": "ready",
"headline": "...",
"report_url": "https://alertedly.com/...",
"signals": { "critical": 0, "high": 1, "medium": 2, "low": 0, "total": 3 }
}
],
"signals": [ { "company_name": "Northwind", "type": "pricing_change", "severity": "high", "source_urls": ["https://..."], ... } ]
},
"dealflow": { "companies": [], "signals": [] }
},
"pending": [ { "name": "Acme Labs", "status": "pending", ... } ],
"leaderboard": { "week": "2026-10-05", "prev_week": "2026-09-28", "companies": [], "rankings": { } },
"totals": { "companies": 24, "ready": 22, "signals": { "critical": 0, "high": 3, "medium": 6, "low": 5, "total": 14 } },
"request_id": "uuid"
}Company status is ready, pending (this week's run hasn't finished) or failed.
VC workflow (v1.7.0)
The same features as the VC dashboard and the MCP server, built on the same database functions, so the numbers and the role rules match everywhere. Full request and response shapes are in the OpenAPI file (tag VC workflow).
- Firms only. Use a firm key, or a personal key of a firm member (
?org=picks the firm). Personal accounts get403 ORG_ONLY. - Writes need a person. Changes need a personal key of a member with
writescope, so every change is recorded under that person and checked against their role. Firm-wide keys can read; their writes get403 USER_KEY_REQUIRED. - Roles. Any member may triage, add notes, edit dealflow companies, create personal alert rules and share links (unless the firm limits sharing to admins). Portfolio company details, firm-wide alert rules, firm settings and the jobs board need an admin (
403 ADMIN_REQUIRED). - Confirm. Changes to portfolio companies, alert rules, revoking links, import commits, CRM pushes and firm settings need
"confirm": truein the body (?confirm=trueon DELETE). Without it you get428 CONFIRM_REQUIREDand apreviewof what would change. - Agents draft, humans send. Only
POST /lp-highlights/generatemay write prose (once per firm and period, within a monthly allowance)./board-packand/founder-draftreturn the saved text or a template and never generate. - Rate limits. Each key has its own per-minute limit, and the whole firm shares 600 requests a minute across every member and key, the REST API and MCP together. Over a limit the answer is
429 RATE_LIMITEDwithRetry-After(seconds) and a message saying when to retry. - Private. Notes and reviews (triage) stay in the firm: notes only come back from
/companies/{id}/notes. Secrets (Slack URLs, CRM keys) go in on the site or withPOST /integrationsand are never sent back. API keys are created on the site only. - Not installed yet. If a feature has not reached your firm yet the answer is
501 FEATURE_NOT_AVAILABLE.
- Endpoint
GET /momentum?status=&sort=&flags=- Scope
- read
- What it does
- Momentum 0-100, change vs 4 weeks ago, flags, drivers, why it needs attention; companies building a baseline listed separately
- Endpoint
GET /movers?week=&lens=- Scope
- read
- What it does
- This week's top movers (signal points plus hiring change, with the reason and source) and the companies that went quiet, as Home shows them
- Endpoint
GET /ai-usage?days=&limit=- Scope
- read
- What it does
- MCP and API calls by the firm (admins: everyone plus a per-member summary; members: their own)
- Endpoint
GET /board-pack?company=&from=&to=- Scope
- read
- What it does
- Since the last board meeting (or a range): changes, competitor moves, activity, silence, founder questions, saved summary if any
- Endpoint
GET /period-summary?type=&period=&lens=&tags=- Scope
- read
- What it does
- Month, quarter or year numbers and highlights
- Endpoint
GET /review?type=&period=&lens=- Scope
- read
- What it does
- Month, Quarter or Year in Review cards
- Endpoint
GET /weekly-reports?kind=&week=- Scope
- read
- What it does
- The weekly round-up: portfolio, dealflow or the combined firm report (default), newest week by default
- Endpoint
GET /weekly-reports/weeks- Scope
- read
- What it does
- The weeks with a round-up, newest first, with their kinds
- Endpoint
GET /value-report?type=&period=- Scope
- read
- What it does
- Research checks covered, signals caught early, firm activity
- Endpoint
GET /jobs?function=&location=&company=&new_since=- Scope
- read
- What it does
- Open roles across portfolio companies
- Endpoint
GET /lp-highlights?type=&period=- Scope
- read
- What it does
- The firm's saved LP highlights draft (never generates)
- Endpoint
POST /lp-highlights/generate- Scope
- write
- What it does
- Writes the LP draft once per firm and period, or returns the saved one
- Endpoint
GET /founder-draft?signal=&intent=- Scope
- read
- What it does
- Saved or template founder message, with placeholders
- Endpoint
GET, POST /share-links · DELETE /share-links/{id}- Scope
- read / write
- What it does
- List, create (one click, reused) and revoke (confirm) read-only links
- Endpoint
POST /signals/{id}/triage- Scope
- write
- What it does
- Review a signal (the dashboard's Review): acted_on, check_in, watching, ignore or clear; assignee and note
- Endpoint
GET, POST /companies/{id}/notes- Scope
- read / write
- What it does
- Firm-private notes
- Endpoint
PATCH /companies/{id}- Scope
- write
- What it does
- Owner, stage, board dates, tags, fund (portfolio: admin + confirm)
- Endpoint
POST /companies/import- Scope
- write
- What it does
- Up to 200 companies; dry run by default, commit with confirm
- Endpoint
POST /portfolio/from-site- Scope
- write
- What it does
- Find the companies on the firm's website portfolio page (admins; 10 an hour per firm; waits up to 40 s, else 202 with scan_id; nothing added: import the confirmed ones with POST /companies/import)
- Endpoint
GET /portfolio/from-site/{scan_id}- Scope
- read
- What it does
- A website scan's result: the companies found (200), or still reading (202)
- Endpoint
POST /companies/{id}/crm-sync- Scope
- write
- What it does
- Note with public signals to Attio, HubSpot or Notion (confirm)
- Endpoint
POST /companies/{id}/crm-match- Scope
- write
- What it does
- Candidate CRM records for a company; save or remove a match, or add it to the CRM as a new record (admin + confirm)
- Endpoint
GET /crm/sync-log?company=&crm=&status=&limit=- Scope
- read
- What it does
- What was sent to the CRM: notes added, skipped and failed, each with its fix
- Endpoint
GET /crm/matches?crm=- Scope
- read
- What it does
- Which companies the CRM matches and which need matching (up to 50, portfolio first; admin)
- Endpoint
GET, POST /alert-rules · PATCH, DELETE /alert-rules/{id}- Scope
- read / write
- What it does
- Alert rules (changes need confirm)
- Endpoint
GET /alert-deliveries- Scope
- read
- What it does
- Alert delivery log
- Endpoint
GET /integrations- Scope
- read
- What it does
- Connection status and delivery heartbeats, no secrets
- Endpoint
GET, PATCH /settings- Scope
- read / write
- What it does
- Firm settings: time zone, alert quiet hours, admin-only share links, jobs board (changes: admin + confirm)
- Endpoint
GET, PATCH /preferences- Scope
- read / write
- What it does
- Your email preferences (including the Portfolio and Dealflow round-ups)
- Endpoint
GET /team- Scope
- read
- What it does
- Members, your role, seats; for admins the pending invites
- Endpoint
POST /team/invites- Scope
- write
- What it does
- Invite up to 500 people and email each an invite (admin + confirm)
- Endpoint
DELETE /team/invites/{id} · POST /team/invites/{id}/resend- Scope
- write
- What it does
- Withdraw or resend an invite (admin + confirm)
- Endpoint
PATCH, DELETE /team/members/{id} · POST /team/leave- Scope
- write
- What it does
- Change a role, remove a member, leave the firm (confirm)
- Endpoint
GET /team/members/{id}/offboarding- Scope
- read
- What it does
- What removing a member would revoke
- Endpoint
DELETE /notes/{id}- Scope
- write
- What it does
- Delete a note (author or admin + confirm)
- Endpoint
PUT /lp-highlights · POST /lp-highlights/pending- Scope
- write
- What it does
- Edit the LP highlights draft, or take or dismiss a newer one
- Endpoint
GET /triage-counts · GET /companies/{id}/triage-log- Scope
- read
- What it does
- What is left to review (To review); a company's review history (Decisions)
- Endpoint
GET /companies/{id}/momentum-history · GET /periods · GET /attention- Scope
- read
- What it does
- Momentum week by week, report periods, what needs attention this week
- Endpoint
PATCH /firm- Scope
- write
- What it does
- Rename the firm (admin + confirm)
- Endpoint
POST /integrations · PATCH, DELETE /integrations/{id}- Scope
- write
- What it does
- Connect, change or remove Slack, webhooks and CRMs (admin + confirm); secrets are never sent back
- Endpoint
GET /api-keys · DELETE /api-keys/{id}- Scope
- read / write
- What it does
- The firm's API keys, and revoking one (admin); keys are created on the site
Example: board prep and a confirmed change
# Board pack since the last board meeting
curl -H "X-API-Key: $ALERTEDLY_API_KEY" "https://api.alertedly.com/api/v1/board-pack?company=COMPANY_ID"
# Set the next board meeting on a portfolio company: preview first (428 CONFIRM_REQUIRED with a preview)
curl -X PATCH -H "X-API-Key: $ALERTEDLY_API_KEY" -H "Content-Type: application/json" -d '{"next_board_meeting":"2026-11-12"}' "https://api.alertedly.com/api/v1/companies/COMPANY_ID"
# ...then confirm
curl -X PATCH -H "X-API-Key: $ALERTEDLY_API_KEY" -H "Content-Type: application/json" -d '{"next_board_meeting":"2026-11-12","confirm":true}' "https://api.alertedly.com/api/v1/companies/COMPANY_ID"Competitors
/companies/{id}/competitorsscope readDiscovered competitors, sorted by confidence score.
{
"company_id": "uuid",
"competitors": [
{
"id": "uuid",
"name": "Copperleaf",
"domain": "copperleaf.example",
"reason": "Same buyer, overlapping features",
"confidence_score": 92,
"first_discovered": "2026-01-15T...",
"last_updated": "2026-09-20T...",
"tracked_company_id": "uuid or null"
}
],
"total": 10
}Markdown (agent-ready)
/companies/{id}/markdown?channel=redditscope read- Param
channel- Default
- none
- Description
- Optional channel key. Omit for the full weekly report.
Returns { company_id, channel, source, generated_at, markdown, format: "text/markdown" }.
Reports
Report endpoints return only your account's reports, or your firm members' reports for firm scope.
List reports
/reports?company_id=uuid&limit=50&offset=0scope readlimit max 200 (default 50); company_id optional. Returns { reports: [{ id, company_id, company_name, report_date, file_type, created_at }], pagination }.
Latest reports
/reports/latest?scope=portfolio&since=2026-09-01&limit=50&offset=0scope read- Param
scope- Default
- portfolio
- Description
- portfolio, dealflow or all
- Param
since- Default
- 7 days ago
- Description
- ISO date
- Param
limit- Default
- 50
- Description
- Max 100
- Param
offset- Default
- 0
- Description
- Pagination offset
Get report
/reports/{id}scope readReport metadata plus all channel data for that report's period. An investor report (portfolio or dealflow) opens with What changed: since last week and since your firm added the company, every number computed from stored weekly data (channel metrics with their trend, new and continuing developments, signals by severity; the first week tracked says so). Then Alertedly's take, our labeled interpretation with what would confirm it, kept apart from the facts. It ends with a coverage line: when it was researched, how many channels had data and which did not, and how many items were read. MCP get_company_brief returns the same as changes, alertedly_take and coverage.
Latest report for a company
/companies/{id}/latest-reportscope readReturns { id, company_id, report_date, file_url, file_type, created_at }.
Voice summary
/voice-summary/{report_id}scope readThe audio briefing for one of your reports: { report_id, report_date, voice_generated, audio_url, script, format }.
Usage
/usage?days=30&all=truescope read- Param
days- Default
- 30
- Description
- Historical window
- Param
all- Default
- false
- Description
- true for firm-wide stats (organization keys)
{
"summary": { "total_requests": 1248, "period_requests": 312, "avg_latency": 142, "rate_limit": 60, "last_used_at": "..." },
"recent_usage": [ { "endpoint": "/companies", "method": "GET", "status_code": 200, "created_at": "...", "response_time_ms": 120 } ],
"request_id": "uuid"
}Errors
{
"error": { "message": "...", "error_code": "INSUFFICIENT_SCOPE" },
"request_id": "uuid"
}- Code
UNAUTHORIZED- Status
- 401
- Meaning
- Missing, invalid, revoked or expired API key
- Code
INSUFFICIENT_SCOPE- Status
- 403
- Meaning
- The key lacks the scope this method needs (read for GET, write otherwise)
- Code
FORBIDDEN- Status
- 403
- Meaning
- Not allowed for this key or person (e.g. /digest without firm scope, portfolio without admin, org you are not in)
- Code
NOT_FOUND- Status
- 404
- Meaning
- Resource not found, or not in your tracking
- Code
VALIDATION_ERROR- Status
- 400
- Meaning
- Missing or invalid parameters
- Code
INVALID_PARAMETER / INVALID_WEEK- Status
- 400
- Meaning
- A VC endpoint parameter is out of range or malformed
- Code
INVALID_CHANNEL- Status
- 400
- Meaning
- Unknown channel key
- Code
NOT_SUPPORTED- Status
- 400
- Meaning
- Operation not supported for this key type
- Code
ORG_ONLY- Status
- 403
- Meaning
- VC workflow endpoint called with a personal (non-firm) account
- Code
USER_KEY_REQUIRED- Status
- 403
- Meaning
- VC workflow change with a firm-wide key: use a member's personal key
- Code
ADMIN_REQUIRED- Status
- 403
- Meaning
- The change needs a firm admin
- Code
CONFIRM_REQUIRED- Status
- 428
- Meaning
- Send
"confirm": trueto apply; the body carries apreview
- Code
FEATURE_NOT_AVAILABLE- Status
- 501
- Meaning
- The feature has not reached your firm yet
- Code
RATE_LIMITED- Status
- 429
- Meaning
- Too many requests; wait for
Retry-After
- Code
DATABASE_ERROR / INTERNAL_ERROR- Status
- 500
- Meaning
- Server error; retry, and contact support with the request_id if it persists
Quick start
export ALERTEDLY_API_KEY="your_key"
# Your companies
curl -H "X-API-Key: $ALERTEDLY_API_KEY" https://api.alertedly.com/api/v1/companies
# This week's signals, highest severity first
curl -H "X-API-Key: $ALERTEDLY_API_KEY" "https://api.alertedly.com/api/v1/signals"
# Who is hiring fastest this week
curl -H "X-API-Key: $ALERTEDLY_API_KEY" "https://api.alertedly.com/api/v1/leaderboard?limit=10"
# The firm's weekly digest (organization scope)
curl -H "X-API-Key: $ALERTEDLY_API_KEY" "https://api.alertedly.com/api/v1/digest"
# Agent-ready markdown for a company's latest report
curl -H "X-API-Key: $ALERTEDLY_API_KEY" https://api.alertedly.com/api/v1/companies/{company_id}/markdown