π Data Endpoints
The live data plane: search and read people, projects, and investors, and run a cross search. Every endpoint is GET, returns JSON, and costs 5 credits per call (a private contact reveal costs 10, once). Auth and shared conventions are in the Endpoint Reference.
Status: private beta. See Roadmap & Availability.
Shared shape. List endpoints return { data, total, page, totalPages, meta }. Single reads return the object plus meta. meta is { creditsCharged, creditsBalance }. Lists accept page and limit (default 30, max 100).
People
GET /v1/people
Search and filter people. Scope read:metadata. 5 credits.
- Query:
q(name / handle / title),contactType(analyst|team),roles(comma-separated),channels(comma-separated),sort(recent|name),page,limit. Passinginclude=privatehere is rejected with400by design: reveal one contact at a time on the detail route. - Each record:
id,slug,firstName,lastName,jobTitle,twitterHandle,avatarUrl,isCreator,creatorFollowerCount,companyId,company(a full project record, ornull),createdAt, and the lock flagsisLocked,hasEmail,hasPhone,hasTelegram,hasLinkedin. The private fieldsemail,phone,telegram,linkedinUrlare alwaysnullon the list. slugis the person's handle oncompass.mesa.so/people/{slug}. It isnullfor the minority of records that have not been given one.- Also returns
facets: { roles, channels }to drive filter UIs.
GET /v1/people/{id}
A full profile plus coworkers. Scope read:metadata; the reveal needs read:contacts. 5 credits, or 10 the first time you reveal private channels.
- Query:
include=privaterevealsemail,phone,telegram,linkedinUrl. The reveal is a permanent unlock: later reads of the same contact cost 5 and keep the channels. - Returns
data: { person, coworkers[] }. Thehas*flags tell you which channels exist before you pay to reveal them. On a self-billed reveal,creditsChargedandcreditsBalancesit at the top level.
Projects
GET /v1/projects
Search and filter projects. 5 credits.
- Query:
q,sector(repeatable),token(launched|pre),sort(recent|name),page,limit. - Each record:
id,name,slug,ticker,domain,sectors[],chains[],size,logoUrl,twitterHandle,communityLink,discordUrl,linkedinUrl,tokenLaunched,tokenLink,aiSummary,followers,handleHistory,twitterRisk,lifecycle,createdAt. tickeris the token symbol ("TWT"),nullwhere none is recorded.chains[]names the chains the project ships on.lifecycleis"defunct","deceased", ornullfor a project we have no liveness signal against.tokenLaunchedis deliberately three-state:true,false, ornullwhen nobody has checked. Do not readnullasfalse.
GET /v1/projects/{id}
One project with its team. 5 credits. Returns { project, team[] }. Team members show private channels only for contacts you have already unlocked.
Investors
GET /v1/investors
Search and filter funds. 5 credits.
- Query:
q,fundType,trustTier,sort(portfolio|roi|name|recent),page,limit. - Each record:
id,name,slug,logoUrl,domain,linkedinUrl,discordUrl,twitterHandle,communityLink,fundType,entityKind,fundAllTimeRoiPct,trustTier,trustTierRank,aiSummary,followers,handleHistory,twitterRisk,altRoles[],portfolioCount,lifecycle,createdAt. entityKindseparates a firm ("organization") from an angel ("individual").altRoles[]lists the other directories the same entity appears in, so a fund that also ships a product is reachable from both.
GET /v1/investors/{slug}
One fund, keyed by slug (not id). 5 credits. Returns { investor, team[], portfolio[] }. Each portfolio row: investmentId, company, roundType, roundEventName, amountUsd, announceDate, isLead.
Service providers
GET /v1/services
Search and filter service providers: auditors, legal counsel, KYC vendors, dev shops, agencies. 5 credits.
- Query:
q,sector(repeatable),sort(recent|name),page,limit. - Each record: the same shape as a project record above,
tickerandchains[]included. - The directory is wider than
companyType: a company whose primary role is something else but which also sells a service appears here too.
GET /v1/services/{slug}
One provider with its team, keyed by slug. 5 credits. Returns { service, team[] }.
Search
GET /v1/search?q=...
Cross search across projects and people. q is required (400 if missing). 5 credits. Returns { q, projects[], people[], meta } with up to 12 of each, in the same record shapes as the list endpoints above. People channels stay locked; reveal a person via /v1/people/{id}?include=private.
There is no total and no paging: this is a typeahead, capped at 12 + 12. For a complete, pageable result set use /v1/projects?q= or /v1/people?q=.
Network (planned)
A graph endpoint for the connections between people, companies and funds is planned and not yet live. Track it on the Roadmap & Availability page.