Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

DC Member API

REMOTE · API.DYNAMITECIRCLE.COM · SCANNED AUG 3

Read and act on your own Dynamite Circle membership data via the public DC Member API.

+9 this week 81 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security97
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
  • The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 15729 tokens (~185/item across 85 items; 85 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · api.dynamitecircle.com

# add to Claude Code
claude mcp add --transport http dynamitecircle-dc https://api.dynamitecircle.com/mcp
# ~/.codex/config.toml
[mcp_servers.dynamitecircle-dc]
url = "https://api.dynamitecircle.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dynamitecircle-dc": {
      "type": "remote",
      "url": "https://api.dynamitecircle.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add dynamitecircle-dc --url https://api.dynamitecircle.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  dynamitecircle-dc:
    url: "https://api.dynamitecircle.com/mcp"
// mcp.json
{
  "mcpServers": {
    "dynamitecircle-dc": {
      "type": "http",
      "url": "https://api.dynamitecircle.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +6
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 71

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://api.dynamitecircle.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.dynamitecircle.com CN=WR3,O=Google Trust Services,C=US 24 Jun 2026 22 Sept 2026 RSA 2048 SHA256-RSA 2c86fcfd3bb265571007474daf0c1435
SANs: api.dynamitecircle.com
CN=WR3,O=Google Trust Services,C=US (CA) CN=GTS Root R1,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 RSA 2048 SHA256-RSA 7ff005a91568d63abc22861684aa4b5a
CN=GTS Root R1,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 19 Jun 2020 28 Jan 2028 RSA 4096 SHA256-RSA 77bd0d6cdb36f91aea210fc4f058d30d
DNSSEC secure

Validation of api.dynamitecircle.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
dynamitecircle.com. present 64085 8 Verified
api.dynamitecircle.com. Verified address RRset verified with the apex keys
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://api.dynamitecircle.com/.well-known/oauth-protected-resource"

Bearer resource_metadata="https://api.dynamitecircle.com/.well-known/oauth-protected-resource"
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy no-referrer

Protected resource metadata

Document https://api.dynamitecircle.com/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://api.dynamitecircle.com/mcp
Authorisation server https://api.dynamitecircle.com
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.dynamitecircle.com/mcp Verified 200
http (plaintext) http://api.dynamitecircle.com/mcp HTTPS enforced 301 https://api.dynamitecircle.com/mcp
MCP tools — 85 exposed · ~15,729 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
report_issue_create ~246

POST /report-issue — Report an issue or feedback Submit a bug report, feedback, or question to the DC team. Optionally include a base64-encoded screenshot (PNG, JPEG, or WebP, up to 4 MB raw). **Privacy note:** Screenshots and report text are sent unredacted to the DC team. Don't include passwords, payment details, or other secrets. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
contextobjectOptional structured debug context — anything useful for triage (last error, request payload, endpoint, etc.). Up to 32 keys.
screenshotstringOptional base64-encoded screenshot. Accepts raw base64 OR a data URL (e.g. `data:image/png;base64,...`). PNG, JPEG, or WebP only. Max 4 MB raw, clamped to 4096×4096; re-encoded server-side to strip E…
severitystringSeverity: bug | feedback | question. Defaults to "bug".
textstringyesA short description of the issue or feedback (1–4000 chars).

No output schema declared.

No examples provided.

rooms ~122

GET /rooms — List your subscribed rooms Returns every room you are subscribed to (DMs, group DMs, channels you follow, discussions, activities, event rooms), sorted by `lastActivityAt` descending. Cursor-paginated. To filter by type use `GET /rooms/inbox/:type` (e.g. `/rooms/inbox/dm` for DMs only).

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next page.
limitnumberMax results (1-100)

No output schema declared.

No examples provided.

rooms_archive_create ~86

POST /rooms/:roomID/archive — Archive a room Archive a room — hides it from the inbox sidebar without unsubscribing. Use `unarchive` to bring it back. **Access:** the caller must be a member/subscriber. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_browse ~122

GET /rooms/browse/:type — Browse public channels by type Browse publicly-joinable rooms of a given type that you are NOT yet subscribed to. The same surface the in-app Browse Channels modal shows. DC BLACK rooms are filtered out for DC tier members.

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next page.
limitnumberMax results (1-100)
typestringyesRoom type to browse. Allowed: `channel`, `discussion`, `quick-question`.

No output schema declared.

No examples provided.

rooms_by_id ~248

GET /rooms/:roomID — Get a single room Get a single room's metadata + its latest daily AND weekly AI summaries (when they exist). **Access:** members and subscribers of the room, plus any DCer for browsable public channels/discussions/quick-questions. Private rooms, DMs, group DMs, and event/city rooms you are not a member of return 403. Reading this endpoint does **not** mark the room as read or modify any unread state. **AI summaries:** the latest daily digest is embedded under `aiSummaryDaily`, the latest weekly digest under `aiSummaryWeekly`. Rooms that don't have a given type yet return `null` for that slot. For history (older summaries), call `GET /rooms/:roomID/summaries/daily` or `/weekly`. **See also:** For specific content (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` is faster than paginating `/rooms/:roomID/messages` or reading summaries. The AI summaries cover broad activity per window; search is the tool for targeted lookup.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_inbox ~137

GET /rooms/inbox/:type — List your rooms by type Returns your subscribed rooms filtered to a single type. Same shape as `GET /rooms` but scoped — e.g. `/rooms/inbox/dm` returns DMs only, `/rooms/inbox/group` returns group DMs.

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next page.
limitnumberMax results (1-100)
typestringyesRoom type filter. Allowed: `channel`, `dm`, `group`, `discussion`, `quick-question`, `event`.

No output schema declared.

No examples provided.

rooms_messages ~365

GET /rooms/:roomID/messages — List messages in a room List messages in a room you are a member of. **Read-only — no write side effects, no unread-state mutation, no reactions/posts/edits.** Cursor-paginated newest-first. **Access:** strict — the caller must be a subscribed member of the room (same `seen` doc check used by the web inbox). For browsable public channels, any DCer can read. Private rooms, DMs (`dm`), group DMs (`group`), event rooms, and city/country/mastermind rooms hard-block non-members with 403. Hidden/deleted/sunk messages are excluded. **Pagination:** pass `?before=<nextCursor>` from a previous response to fetch the next (older) page. Default page size 50, max 50. **See also:** For specific content in this room (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` searches body text directly — far faster than paginating with `?before`. This endpoint is the right call when you want a chronological window (last N messages, conversation reconstruction); search is the right call when you want a topic.

NameTypeReqDescription
beforestringCursor from a previous response's `nextCursor` (encodes the previous page's oldest message timestamp). Pass to fetch the next older page.
limitnumberMax results (1-50)
roomIDstringyesRoom ID. Discover from `GET /rooms` (your subscribed list), `GET /inbox/unread`, `trip.roomID` on `GET /trips/:tripID`, or event chat-room IDs on `GET /events/:eventID`.

No output schema declared.

No examples provided.

rooms_mute_create ~110

POST /rooms/:roomID/mute — Mute a room Mute notifications for a room. Sets `mutedUntilAt` to a far-future timestamp (no expiry) — the room stays muted until explicitly unmuted. The room still appears in the inbox; only notifications are suppressed. **Access:** the caller must be a member/subscriber of the room. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_pin_create ~119

POST /rooms/:roomID/pin — Pin a room Pin a room to the top of the inbox. For subscription-type rooms the caller is auto-subscribed if not already (mirrors the in-app behavior — you can't pin what you don't follow). **Access:** the caller must already have an interaction history with the room (DMs and group DMs require having received at least one message). Idempotent. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_subscribe_create ~203

POST /rooms/:roomID/subscribe — Subscribe to a room Subscribe to a public channel, discussion, quick-question room, or event room. The caller is added to the room's `seen` subcollection with `flags.isSubscribed: true` and starts receiving its updates in their inbox. **Access:** the room must be enabled, non-archived, non-private, non-hidden, and of a subscribable type (`channel`, `discussion`, `quick-question`, `event`). Event rooms additionally require a valid ticket to the linked event — call `/events/:eventID` first to verify ticket status. DMs and group DMs cannot be subscribed/unsubscribed via the API; they are managed in-app only. **Idempotent:** subscribing when already subscribed is a no-op (returns 200 with the current state). ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_summaries ~230

GET /rooms/:roomID/summaries/:type — List past daily or weekly summaries List past summaries of a given type for a room, newest first. Cursor-paginated — pass `cursor` from the previous response to fetch the next (older) page. Each summary covers a non-overlapping window (one per day for daily, one per week for weekly). Use this for catch-up workflows ("show me the last 7 daily summaries before I rejoin the conversation"). Same access gate as `GET /rooms/:roomID`. **See also:** Summaries cover broad activity per window. For specific content (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` is faster than reading multiple summaries.

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next (older) page.
limitnumberMax results (1-50)
roomIDstringyesRoom ID
typestringyesSummary type — `daily` or `weekly`.

No output schema declared.

No examples provided.

rooms_summary ~172

GET /rooms/:roomID/summary/:type — Get the latest daily or weekly summary Get the latest single summary of a given type for a room. **Type is required** — daily and weekly summaries cover different windows and live in separate slots. Pass the type you want as a path segment. For history (multiple past summaries) use `GET /rooms/:roomID/summaries/:type`. Same access gate as `GET /rooms/:roomID`. **See also:** AI summaries cover broad activity per window. For specific content (`did anyone mention X?`), `POST /search/messages` with `q=` and `roomID=` is faster than reading summaries.

NameTypeReqDescription
roomIDstringyesRoom ID
typestringyesSummary type — `daily` or `weekly`.

No output schema declared.

No examples provided.

rooms_unarchive_create ~81

POST /rooms/:roomID/unarchive — Unarchive a room Unarchive a previously-archived room. Restores it to the inbox sidebar. **Access:** the caller must be a member/subscriber. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_unmute_create ~81

POST /rooms/:roomID/unmute — Unmute a room Unmute a previously-muted room. Clears `mutedUntilAt`. **Access:** the caller must be a member/subscriber of the room. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_unpin_create ~84

POST /rooms/:roomID/unpin — Unpin a room Unpin a previously-pinned room. Returns it to its normal place in the inbox sort order. **Access:** the caller must be a member/subscriber. Idempotent. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

rooms_unsubscribe_create ~140

POST /rooms/:roomID/unsubscribe — Unsubscribe from a room Unsubscribe from a public channel, discussion, quick-question, or event room. The caller's `seen` doc is updated to `flags.isSubscribed: false`, the badge count is cleared, and the room drops out of the inbox sidebar. **Access:** the caller must already be a subscriber. DMs and group DMs cannot be unsubscribed via the API. **Idempotent:** unsubscribing when already unsubscribed is a no-op. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
roomIDstringyesRoom ID

No output schema declared.

No examples provided.

search ~359

GET /search — Cross-resource omni-search Cross-resource search across profiles, rooms, messages (incl. private DMs + group DMs you're in), events, and chapters in one round trip. Returns the top-N matches per resource, grouped by resource. Use this when you don't yet know which resource carries the answer — agents typically call this first, then drill into a specific `GET /search/<resource>` for more depth on a single bucket. There's no page param: when you hit the per-resource limit and want more, switch to the per-resource endpoint for that one. The events slice has a baked-in forward-looking default (events ending in the last 30 days or later, and currently enabled) — this matches the in-app "Search across DC" surface. Use `GET /search/events` directly to look further back in time. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.

NameTypeReqDescription
limitnumberPer-resource hits cap (1-25). The same cap applies to each resource — so `limit=5` returns up to 5 profiles + 5 rooms + 5 messages + 5 events + 5 chapters.
qstringyesSearch text (1-500 chars). Required.
userIDstringScope each resource to this DCer's content — their profile, messages they authored, rooms they created, events they host, chapters they belong to. The @-mention pattern from the in-app search.

No output schema declared.

No examples provided.

search_chapters ~133

GET /search/chapters — Search chapters Search DC chapters by city or country name. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.

NameTypeReqDescription
limitnumberMax hits per page (1-100).
pagenumber1-indexed page number.
qstringyesSearch text. Required.

No output schema declared.

No examples provided.

search_events ~269

GET /search/events — Search events Search enabled DC events by name, description, host, and venue. No default time filter — pass `?since=` or `?until=` (ISO 8601 dates) to constrain. They compose: pass both for an explicit window. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.

NameTypeReqDescription
cityIDstringEvents whose chapter city is this Google Place ID.
countrystringISO 3166-1 alpha-2 country code (e.g. `TH`, `MX`).
limitnumberMax hits per page (1-100).
pagenumber1-indexed page number.
qstringyesSearch text. Required.
sincestringEvents ending on or after this date (ISO 8601).
untilstringEvents starting on or before this date (ISO 8601).
userIDstringScope to events hosted by this DCer.

No output schema declared.

No examples provided.

search_messages ~345

GET /search/messages — Search messages (incl. your private DMs) Search message bodies across every room you can access. **This is the key surface for "catch me up on what was said about X"** — your private DMs, group DMs, and any room you're a member of are all searchable. Messages from rooms you don't belong to are filtered out before any results return. Scope to one room with `?roomID=` (the room is double-gated against your membership — passing a roomID you're not in returns 403, not silently-empty results). Scope to one author with `?userID=`. The two compose: `?roomID=<id>&userID=<id>` returns just messages by that author in that one room. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.

NameTypeReqDescription
limitnumberMax hits per page (1-100).
pagenumber1-indexed page number.
qstringyesSearch text. Required.
roomIDstringScope to a single room. Must be a room you are a member of — otherwise returns 403. Discover roomIDs via `GET /rooms`, `GET /inbox/unread`, or `trip.roomID` on `GET /trips/:tripID`.
userIDstringScope to messages authored by this DCer.

No output schema declared.

No examples provided.

search_profiles ~201

GET /search/profiles — Search profiles Full-text search across DCer profiles — headlines, bios, business descriptions, expertise, hobbies, etc. Returns matching profile records with privacy gates applied (hidden + guest profiles filtered out). For structured/AI-driven matchmaking ("DCers in Lisbon who run SaaS"), prefer `POST /profile-match` — it has a richer ranking pipeline and filters. This endpoint is the plain full-text fallback. **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.

NameTypeReqDescription
limitnumberMax hits per page (1-50).
pagenumber1-indexed page number.
qstringyesSearch text. Required.

No output schema declared.

No examples provided.

search_rooms ~217

GET /search/rooms — Search rooms Search rooms by name, description, and topic. Returns rooms that match the query AND that you have access to (subscribed-or-browsable; private rooms / DMs / group DMs you're NOT a member of are filtered out). **Query syntax (`q=`):** plain words match with prefix + typo tolerance. Wrap a phrase in double quotes to require an exact ordered match — e.g. `q="remote work"`. AND/OR/NOT/parentheses are NOT parsed in `q=` — use the structured filter params below for boolean composition.

NameTypeReqDescription
limitnumberMax hits per page (1-100).
pagenumber1-indexed page number.
qstringyesSearch text. Required.
typestringRoom type filter. Allowed: `channel`, `dm`, `group`, `discussion`, `quick-question`, `event`.
userIDstringScope to rooms created by this DCer.

No output schema declared.

No examples provided.

tickets ~144

GET /tickets — List your tickets Returns your tickets across events, newest first. Defaults to the tickets you're holding (`valid` plus `maybe`) — "what am I attending". Pass `?status=valid`, `?status=maybe`, or `?status=refunded` to narrow to one.

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next page.
limitnumberMax results (1-100).
statusstringFilter by a single ticket status. With no value, returns the tickets you're holding (`valid` and `maybe`). `refunded` is available on request.

No output schema declared.

No examples provided.

trip ~532

GET /trips/:tripID — Get a single trip Single-trip read with the full payload. **This is the canonical endpoint for "who should I meet on this trip?"** — the response embeds a complete `discovery` block (ranked top-10 picks with AI summaries, the full pool of locals + visitors, events in town, and date-overlapping trips). If you only want the discovery block without the trip body, use `GET /trips/:tripID/discovery`. **Key discovery fields agents almost always want:** - `discovery.people` — **ranked top-10 DCers to meet** on this trip, each carrying `score` (higher = better match), mini `profile` (userID, userName, displayName, photo, headline), `reason` (`local` / `visiting` / `event-attendee`), `overlapDays`, `detail`. Sourced from a vector-search + business-context ranking, not just date overlap. - `discovery.whyToMeet` — **AI-written "why you should meet them" paragraph** for each of the top-10, keyed by userID, each `{ text, generatedAt }`. The most useful AI signal in the whole trip product — agents should surface this verbatim when introducing a match. - `discovery.fullPool` — every visible DCer travelling or local during the trip window (typically 5–10× larger than `/trips/overlaps`, which only returns date-window matches). Same row shape as `people` but no `score`. - `discovery.overlappingTrips` — other DCers travelling at the same time/place, each with mini profile attached so no second fetch is needed. This is the same data that `/trips/overlaps` returns, embedded here for convenience. - `discovery.events` — events in the destination city during the trip window. - `discovery.generatedAt` — when the discovery cache was last refreshed. **Also included:** `points` — up to 20 venue/idea notes with optional Google Place data, plus a linked `roomID` for the auto-created trip coordination room. Hidden + guest profiles are filtered out from all discovery lists. The `discovery` block is `null` for newly-created trips until the background sync task runs (~secon…

NameTypeReqDescription
tripIDstringyesThe trip ID

No output schema declared.

No examples provided.

trip_delete ~111

DELETE /trips/:tripID — Delete a trip Permanently delete one of your trips. Removes the trip doc and its linked chat room (`trip.roomID`). The destination chapter's upcoming-trip count is recomputed in the background. **Owner-only** — you can only delete trips you created. The action is irreversible; deleted trips don't go to a trash collection. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
tripIDstringyesThe trip ID to delete

No output schema declared.

No examples provided.

trip_discovery ~289

GET /trips/:tripID/discovery — Get the discovery block for a trip Discovery-only read for a trip. Returns the same `discovery` block as `GET /trips/:tripID` (people, fullPool, whyToMeet, events, overlappingTrips) without the trip body. Useful for callers that just want "who should I meet on this trip?" — the AI agent gets the ranked top-10 + their `whyToMeet` paragraphs in a single request. Use `?include=` to subset the response — comma-separated from `people,fullPool,whyToMeet,events,overlappingTrips`. Default is all. Common patterns: - `?include=people,whyToMeet` — top-10 picks + their AI-written "why you should meet them" paragraphs (keyed by userID, each carrying `{ text, generatedAt }`) - `?include=fullPool` — every visible DCer travelling/local during the trip window - `?include=events` — just events in the destination city during the trip window Open to any authenticated DCer; hidden + guest profiles are filtered out.

NameTypeReqDescription
includestringOptional. Comma-separated subset of `people,fullPool,whyToMeet,events,overlappingTrips`. Default = all five.
tripIDstringyesThe trip ID

No output schema declared.

No examples provided.

trip_refresh_create ~113

POST /trips/:tripID/refresh — Trigger a trip refresh Owner-only sync trigger. Enqueues a deduped background job that recomputes the trip's discovery (overlapping people, events, AI blurbs). Spammy reloads coalesce. Returns 202 Accepted immediately; the cached `discovery` block on the trip doc updates when the job completes. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
tripIDstringyesThe trip ID to refresh

No output schema declared.

No examples provided.

trip_update ~290

PATCH /trips/:tripID — Update a trip Update one or more fields on an existing trip. Only include the fields you want to change. To change destination, provide either `placeID` or `eventID` and the full location will be re-resolved. **Trip points**: passing `points` replaces the entire array (it's not a patch within the array). Up to 20 items, same shape as `POST /trips`: `{ note: string (max 280 chars), noteHTML?: string, placeID?: string }`. To clear all points, pass `points: []`. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
endDatestringNew end date (ISO 8601)
eventIDstringNew destination — DC event ID (uses event's city). Pass `null` to unlink without changing the location.
notestringUpdated note
placeIDstringNew destination — Google Place ID
pointsarrayOptional. Replace the entire `points` array (not a patch within). Up to 20 items, same shape as `POST /trips`. Pass `[]` to clear all points.
startDatestringNew start date (ISO 8601)
tripIDstringyesThe trip ID to update

No output schema declared.

No examples provided.

trips ~169

GET /trips — List your trips Returns your upcoming trips by default. Add `?past=true` to include past trips. **For "who should I meet on this trip?"** fetch `GET /trips/:tripID` (or the discovery-only `GET /trips/:tripID/discovery`) — both return the ranked top-10 DCers + AI-written summaries + the full pool of locals and visitors in town during the trip window. The list response below does NOT include the discovery block (lazy by design — discovery is a much heavier payload).

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next page.
limitnumberMax results (1-100).
pastbooleanInclude past trips.

No output schema declared.

No examples provided.

trips_create ~455

POST /trips — Create a trip Create a new trip. Provide exactly one of `placeID` or `eventID` — the server resolves the location (city, country, country code) automatically. Use `GET /places/search` to find a placeID by city/country name first, or pass an `eventID` from `/events` to create a trip to that event's city. **Trip points** (optional `points` array, up to 20 per trip): each item is `{ note: string (max 280 chars), noteHTML?: string, placeID?: string }`. The optional `placeID` is resolved against Google Places at write time and the full Place object (city, country, lat/lon, name, etc.) is stored on the trip — so reads don't do any lookups. `noteHTML` preserves the same rich text field the web trip editor stores for formatted notes, links, and mentions; `note` remains the required plain-text fallback. Notes without a placeID are valid ("remember to book a coworking space"). Pass an unknown / expired Google placeID → 400 with a clear error. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
endDatestringyesEnd date (ISO 8601)
eventIDstringDC event ID. Server uses the event's city placeID. **Pass exactly one of `placeID` or `eventID`** — sending both rejects with 400.
notestringTrip note
placeIDstringGoogle Place ID for the destination. Look one up via `GET /places/search`. **Pass exactly one of `placeID` or `eventID`** — sending both rejects with 400.
pointsarrayOptional. Up to 20 trip points (venues / ideas / notes). Each item: `{ note: string (max 280 chars), noteHTML?: string, placeID?: string }`. The optional `placeID` is resolved against Google Places a…
startDatestringyesStart date (ISO 8601)

No output schema declared.

No examples provided.

trips_overlaps ~227

GET /trips/overlaps — Find overlapping trips Find other members whose trips overlap with yours by city + date range. **This is a narrow date-window match, NOT the AI-ranked discovery pool.** For the full set of DCers you could meet on a trip — including locals in town and AI-written "why you should meet them" summaries — fetch `GET /trips/:tripID/discovery` (or `GET /trips/:tripID`, which embeds the same `discovery` block). The discovery pool is typically 5–10× larger than `/trips/overlaps` because it includes locals and event attendees in addition to date-overlap visitors, and it carries ranked top-10 picks with AI summaries that this endpoint does not. Use `/trips/overlaps` for the simple "who is travelling here at the same time as me" question. Use `/trips/:tripID/discovery` for "who should I meet on this trip?".

NameTypeReqDescription
limitnumberMax trips to check (1-20)

No output schema declared.

No examples provided.

virtual_event ~195

GET /virtual-events/:sessionID — Get Live Call details Returns the same payload shape as one entry from `GET /virtual-events` for a single online Live Call — `sessionID`, `name`, `description`, `kind` (which audience tier the session is open to), `scheduledAt` / `scheduledEndAt` (ISO 8601), `duration` in minutes, `attendeeCount`, `chatRoomID`, `isLive`, `meetUrl` (the video-call join link, returned regardless of your RSVP state), `myRsvp` (your current `yes`/`no`/`maybe` or `null`), and `status`. DC BLACK callers also see DC BLACK-only sessions; DC tier callers get `tier_restricted` (403) on those.

NameTypeReqDescription
sessionIDstringyesThe Live Call session ID. Find IDs via `GET /virtual-events`.

No output schema declared.

No examples provided.

virtual_event_attendees ~303

GET /virtual-events/:sessionID/attendees — List Live Call attendees List the attendees of a Live Call — the DCers who RSVPd `yes` or `maybe` (the same set behind `attendeeCount`, mirroring how `GET /events/:eventID/attendees` counts RSVPs). Profiles use the standard other-person shape (identical to `GET /events/:eventID/attendees` and `GET /profile-match`): public fields plus privacy-gated `annualRevenue` + `teamSize` where the member shares them. Hidden and guest profiles are filtered out. **Access:** any active DCer who can see the Live Call. DC BLACK-only calls stay tier-gated — DC-tier callers get `tier_restricted` (403). **Pagination:** page with `?limit=` (1-100, default 100) plus the opaque `?cursor=` from the previous response's `nextCursor` (`null` when there are no more). See `GET /virtual-events/:sessionID` for the call itself, and `GET /events/:eventID/attendees` for the in-person equivalent.

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next page.
limitnumberMax results (1-100).
sessionIDstringyesThe Live Call session ID. Find IDs via `GET /virtual-events`.

No output schema declared.

No examples provided.

virtual_event_rsvp ~250

POST /virtual-events/:sessionID/rsvp — RSVP to Live Call RSVP to a Live Call. The user is added to the matching attendance list on the session doc (`participantIDs` for `yes`, `maybeIDs` for `maybe`, `notIDs` for `no`) and removed from the others. Three statuses: - `yes` — you intend to attend; you'll show up in `attendeeCount`. - `maybe` — soft attendance signal. - `no` — you're declining. Use this to back out after a prior `yes` or `maybe`. **Note:** the `meetUrl` (join link) on `GET /virtual-events/:sessionID` is **not** gated on your RSVP — it's returned whenever the host has set one, regardless of attendance state. RSVPing is purely an attendance signal. **Idempotent** — re-RSVPing with the same status is a no-op. ⚠️ WRITE operation: this mutates your DC account data.

NameTypeReqDescription
sessionIDstringyesThe Live Call session ID. Find IDs via `GET /virtual-events`.
statusstringyesYour RSVP status for this session.

No output schema declared.

No examples provided.

virtual_events ~98

GET /virtual-events — List Live Calls Returns upcoming Live Calls (online sessions like Connect Calls, Happy Hour, Welcome Call, plus DC BLACK-only calls). Add `?past=true` to include past calls.

NameTypeReqDescription
cursorstringCursor from a previous response's `nextCursor`. Pass to fetch the next page.
limitnumberMax results (1-100).
pastbooleanInclude past Live Calls.

No output schema declared.

No examples provided.