Compass DocsBy Mesa

πŸ“‚ 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. Passing include=private here is rejected with 400 by 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, or null), createdAt, and the lock flags isLocked, hasEmail, hasPhone, hasTelegram, hasLinkedin. The private fields email, phone, telegram, linkedinUrl are always null on the list.
  • slug is the person's handle on compass.mesa.so/people/{slug}. It is null for 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=private reveals email, 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[] }. The has* flags tell you which channels exist before you pay to reveal them. On a self-billed reveal, creditsCharged and creditsBalance sit 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.
  • ticker is the token symbol ("TWT"), null where none is recorded. chains[] names the chains the project ships on. lifecycle is "defunct", "deceased", or null for a project we have no liveness signal against.
  • tokenLaunched is deliberately three-state: true, false, or null when nobody has checked. Do not read null as false.

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.
  • entityKind separates 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, ticker and chains[] 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[] }.

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.