DC Member API
Server Details
Read and act on your own Dynamite Circle membership data via the public DC Member API.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- dynamitecircle/dc
- GitHub Stars
- 5
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.4/5 across 78 of 78 tools scored. Lowest: 3.5/5.
Each of the 78 tools has a clearly distinct purpose, with no two tools performing the same operation. The resource-oriented naming (e.g., event_, room_, trip_) paired with specific actions (e.g., _create, _delete, _bookmark) ensures agents can differentiate even among many tools.
Tool names follow a consistent snake_case pattern with resource prefixes and action suffixes. Plural nouns for lists, singular for single resources, and standard CRUD verbs (create, update, delete) are used uniformly across all domains. Minor deviations like 'announcements_latest' still fit the pattern.
With 78 tools, the API is quite large, but the domain (a community platform with announcements, events, trips, rooms, messaging, etc.) justifies the number. However, some tools might be consolidated (e.g., separate search endpoints), and the count exceeds typical well-scoped ranges, making it borderline heavy.
The API covers all major member-facing resources: announcements, calendar, chapters, events, follows, inbox, invites, location, membership, notifications, places, profile, rooms, search, tickets, trips, and virtual events. Notable gaps include the inability to send messages or create rooms, but these appear intentional given the read-heavy design. Overall, the surface is comprehensive for its purpose.
Available Tools
85 toolsalertsInspect
GET /alerts — List your alerts
Returns the user's alerts, ordered by creation date (newest first). Maximum 50 results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
alerts_by_id_deleteInspect
DELETE /alerts/:alertID — Deactivate an alert
Soft-delete an alert by setting active: false. The alert's history is preserved for past digests. Use PATCH /alerts/:alertID with active: true to reactivate.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| alertID | Yes | The alert ID to delete |
alerts_by_id_updateInspect
PATCH /alerts/:alertID — Update an alert
Update one or more fields on an existing alert. Only provide the fields you want to change.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New alert name | |
| active | No | Whether the alert is active | |
| alertID | Yes | The alert ID to update | |
| frequency | No | New delivery frequency | |
| description | No | New alert description |
alerts_createInspect
POST /alerts — Create an alert
Create a new alert. The system will search for matching content and deliver digests on the configured frequency. Maximum 10 active alerts per user.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Alert name (max 100 chars) | |
| frequency | Yes | Digest delivery frequency | |
| description | Yes | Alert description — what the alert should look for (max 500 chars) |
announcementsInspect
GET /announcements — List recent announcements
Returns the most recent announcements from DC's broadcast channels — official updates from the DC team and chapter staff (DC, DCBKK, DCMEX, DC BLACK, etc.). Same content you see in the app's announcements channels, in a flat newest-first feed.
Visibility mirrors the app: DC members see DC-scope announcements; DC BLACK members and staff additionally see DC BLACK announcements. There is no posting, replying, or per-channel filtering — announcements are intentionally one-way and minimal.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max announcements to return (1-50) | |
| cursor | No | Opaque cursor from a previous response's `nextCursor` |
announcements_latestInspect
GET /announcements/latest — Latest announcement per channel (quick overview)
Returns the single most recent announcement from each visible channel — a one-shot overview rather than a paged feed. Useful as a "what's new across DC?" quick check before drilling into the full feed via GET /announcements.
Visibility rules are identical to /announcements: DC members see DC-scope channels; DC BLACK members and staff additionally see DC BLACK channels. No pagination — the result size equals the number of dispatch channels you can see (currently ~4).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
calendarInspect
GET /calendar — Get your iCalendar feed URL + settings
Returns your iCalendar feed URLs and the toggles that control which event categories the feed includes.
Three URLs are returned:
httpsURL— paste into any calendar app that accepts an HTTPS subscriptionwebcalURL— same URL with thewebcal://scheme; macOS / iOS Calendar opens it directlygoogleURL— one-click Google Calendar subscribe link
The feed includes events you have tickets to, virtual calls, your trips, chapter events, and flagship events — exactly what each include* toggle below controls. Tokens are deterministic, so the URLs never change for a given member.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
calendar_updateInspect
PATCH /calendar — Update calendar feed settings
Update any subset of your calendar feed toggles. Send only the toggles you want to change — omitted fields are left untouched. Returns { updated: true } on success; re-fetch GET /calendar if you need the full toggle set + feed URLs (the URLs themselves are stable and don't change when toggles update).
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| includeMyTrips | No | Boolean | |
| includeMyTickets | No | Boolean | |
| includeEventAgenda | No | Boolean | |
| includeVirtualCalls | No | Boolean | |
| includeDCBlackEvents | No | Boolean | |
| includeFlagshipEvents | No | Boolean | |
| includeHomeChapterEvents | No | Boolean | |
| includeOtherChapterEvents | No | Boolean | |
| includeFollowedChapterEvents | No | Boolean |
chapterInspect
GET /chapters/:cityID — Get a single chapter
Get full details for a single chapter, including up to 100 home-chapter members and the list of DCers currently visiting via active trips.
members— DCers whose home chapter is this city (up to 100).currentVisitors— DCers with an active trip to this city (startDate <= now <= endDate). Each entry carries a miniprofileblock, the visitor'stripID, and trip start/end dates. Use this to answer "who is in right now?" — both locals (viamembers) and visitors (here).
Hidden + guest profiles are filtered from both lists.
| Name | Required | Description | Default |
|---|---|---|---|
| cityID | Yes | Chapter ID (same as Google Place ID) |
chaptersInspect
GET /chapters — List chapters
List all DC chapters (city-based community hubs), sorted by member count. Each chapter has a Google Place ID — pass it to POST /trips to create a trip to that chapter's city.
See also: For a chapter by city or country name (q='Lisbon', q='Thailand'), POST /search/chapters searches city + country names directly — faster than paginating this member-count-sorted list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max chapters to return (1-100). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
eventInspect
GET /events/:eventID — Get event details
Returns full details for a specific event, including your ticket status.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | The event ID |
event_agendaInspect
GET /events/:eventID/agenda — Get your personal agenda for an event
Returns the sessions and meetups YOU have on your personal agenda for an event:
Sessions you bookmarked from the schedule.
Meetups you RSVPd to.
Access: caller must hold a valid ticket to the event.
Use POST /events/:eventID/schedule/:sessionID/bookmark and POST /events/:eventID/meetups/:meetupID/rsvp to manage entries.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID |
event_agenda_getInspect
GET /events/:eventID/agenda/:userID — Get another attendee's agenda for an event
Returns another attendee's personal agenda for an event — the sessions they bookmarked + meetups they RSVPd to. Use this so an AI agent can plan together with another DCer (find a coffee window, suggest sessions to overlap, propose a meetup).
Access: open to any active DCer who can see the event. The target must hold a valid ticket — otherwise there is no agenda to return (404).
| Name | Required | Description | Default |
|---|---|---|---|
| userID | Yes | Target attendee userID | |
| eventID | Yes | Event ID |
event_agendasInspect
GET /events/:eventID/agendas — Get multiple attendees' agendas in one call
Returns the agendas (bookmarked sessions + meetup RSVPs) for multiple attendees in a single call. Use when an AI agent needs to plan around several DCers at once — comparing schedules, finding shared sessions, building a meetup invite list.
Query: userIDs=A,B,C — comma-separated. Max 20 IDs per call.
Behavior: silently drops IDs that don't hold a valid ticket (so the AI doesn't need to pre-filter). Returns only the agendas for confirmed attendees, in the order requested.
Access: open to any active DCer who can see the event (non-attendee target IDs are silently dropped).
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID | |
| userIDs | Yes | Required. Comma-separated userIDs (max 20). Non-attendees are silently dropped. |
event_attendeesInspect
GET /events/:eventID/attendees — List event attendees
List the confirmed attendees of an event — DCers holding a valid paid ticket OR a valid/maybe RSVP status. Refunded/canceled tickets are excluded. Hidden and guest profiles are filtered out.
Profiles returned use the same shape as the rest of the API (GET /profile-match, GET /trips/:tripID/discovery, etc.) — full public-other-person view including businessName, socials, expertise, plus privacy-gated annualRevenue + teamSize where shared.
Access: any active DCer can view event attendees, matching the in-app attendee tab.
Pagination: newest first; page with ?limit= (1-100, default 100) plus the opaque ?cursor= from the previous response's nextCursor (null when there are no more).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. | |
| eventID | Yes | The event ID |
event_free_slots_createInspect
POST /events/:eventID/free-slots — Find shared free time slots across attendees
Computes shared free slots across a set of event attendees — the time windows where they're NOT in a bookmarked session or meetup. Use to find a coffee window with one DCer, or a junto-style lunch slot for a group.
Body: userIDs[] (1-20), minDurationMinutes (default 30, min 15, max 480), optional eventDayDate: YYYY-MM-DD to scope to a single event day.
Slot grid: derived from the event's session schedule, partitioned into minDurationMinutes windows. For each window we subtract each user's bookmarked sessions + meetup RSVPs.
Sort: slots ranked by len(freeFor) desc — fully-shared windows first, then partial overlaps.
Auth: caller must hold a valid ticket. Non-attendee IDs are silently dropped.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID | |
| userIDs | Yes | Attendee userIDs to compare (1-20). Non-attendees silently dropped. | |
| eventDayDate | No | Optional. Scope to a single event day (YYYY-MM-DD venue-local). Omit for the full event range. | |
| minDurationMinutes | No | Minimum slot duration in minutes (default 30, range 15-480) |
event_meetup_attendeesInspect
GET /events/:eventID/meetups/:meetupID/attendees — List meetup attendees
Returns the list of attendees who have RSVPd to a specific meetup. Same profile shape as /events/:eventID/attendees.
Access: any active DCer who can see the event.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID | |
| meetupID | Yes | Meetup ID |
event_meetup_rsvpInspect
POST /events/:eventID/meetups/:meetupID/rsvp — RSVP to / leave a meetup
Join or leave a meetup. Requires a valid ticket for the event. The meetup's rsvpCount is updated atomically and idempotently.
When the meetup has a linked chat channel, this mirrors the DC app side effects too: joining subscribes you to the meetup chat and leaving removes you from it.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| joined | Yes | `true` to join, `false` to leave | |
| eventID | Yes | Event ID | |
| meetupID | Yes | Meetup ID |
event_meetupsInspect
GET /events/:eventID/meetups — List event meetups
Returns the approved member-organized meetups for an event, sorted chronologically. Only approved meetups are returned.
Access: any active DCer who can see the event can view approved meetup listings + attendee lists. Only RSVPing to a meetup (and the resulting chat-channel access) requires a valid ticket.
Time-zone handling: meetups use explicit wall-clock fields (date = YYYY-MM-DD, startTime / endTime = HH:mm) plus the event's timezone (IANA). Pair them when localizing.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID |
event_rsvpInspect
POST /events/:eventID/rsvp — RSVP to a free event
RSVP to an event that uses free RSVP (not ticketed). Only works for events with rsvpEnabled: true.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | RSVP status | |
| eventID | Yes | The event ID |
eventsInspect
GET /events — List upcoming events
Returns upcoming DC events, sorted by date. Add ?past=true to include past events.
See also: For events by name or topic (q='productivity', q='DCBKK 2026'), POST /search/events searches title + description directly — faster than paginating this date-sorted list. Combine with ?cityID, ?country, ?since, ?until filters for narrower scopes.
| Name | Required | Description | Default |
|---|---|---|---|
| past | No | Include past events. | |
| limit | No | Max results (1-50). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
event_scheduleInspect
GET /events/:eventID/schedule — Get event schedule
Returns the full schedule (sessions) for an event, sorted chronologically.
Access: any active DCer who can see the event can view its public schedule. Personal agenda actions still require a valid ticket.
Time-zone handling: session startAt / endAt are returned as ISO 8601 strings whose digits represent the venue-local wall-clock time (e.g. a 9 AM Mexico City session returns 2026-05-08T09:00:00.000Z, NOT 15:00:00Z). The session's timezone field carries the IANA zone (e.g. America/Mexico_City) — pair them when localizing. This matches the convention used by the DC ICS feed.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID |
event_schedule_attendeesInspect
GET /events/:eventID/schedule/:sessionID/attendees — List session attendees (people who bookmarked it)
Returns the list of attendees who have bookmarked a specific session into their agenda. Same profile shape as /events/:eventID/attendees.
Access: any active DCer who can see the event.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID | |
| sessionID | Yes | Session ID |
event_schedule_bookmarkInspect
POST /events/:eventID/schedule/:sessionID/bookmark — Bookmark / unbookmark a session
Add or remove a session from your personal agenda — this is the API equivalent of the bookmark/star icon on a session card in the DC app.
Requires a valid ticket for the event. Counter rsvpCount on the session doc is updated atomically and idempotently: repeating the same desired state does not increment or decrement the counter again.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID | |
| sessionID | Yes | Session ID | |
| bookmarked | Yes | `true` to add to agenda, `false` to remove |
event_sponsorsInspect
GET /events/:eventID/sponsors — List event sponsors
Returns the sponsors for an event, ordered by tier (primary → supporting) then display order. Deleted sponsors are filtered out.
Access: any active DCer who can see the event — sponsors are public.
| Name | Required | Description | Default |
|---|---|---|---|
| eventID | Yes | Event ID |
follows_chapter_createInspect
POST /follows/chapters/:cityID — Follow a chapter
Follow a DC chapter (city hub). Idempotent. Target must exist in the chapters list (discover via GET /chapters). Cap 50 — hitting it returns 409 follow_limit_reached.
This list also drives the /locator/digest favoritePeople and favoriteCities sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| cityID | Yes | Chapter ID (Google Place ID). Get from `GET /chapters` (each entry has `cityID`) or `GET /places/search` (`type === "city"`). |
follows_chapter_deleteInspect
DELETE /follows/chapters/:cityID — Unfollow a chapter
Unfollow a DC chapter. Idempotent — unfollowing a chapter you weren't following is a no-op.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| cityID | Yes | Chapter ID to unfollow. |
follows_chaptersInspect
GET /follows/chapters — List followed chapters
List the DC chapters (city hubs) you are currently following. Each entry is a mini-chapter with the chapter's Google Place ID — useful for creating trips or surfacing activity in that city. Cap: 50 follows.
This list also drives the /locator/digest favoritePeople and favoriteCities sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
follows_profilesInspect
GET /follows/profiles — List followed DCers
List the DCers you are currently following. Returns the same mini-profile shape used by every other list endpoint, so each entry roundtrips cleanly with GET /profile/:userID or POST /follows/profiles/:userID. Cap: 150 follows; the response cap echoes that so a client can warn the user as they approach the limit.
This list also drives the /locator/digest favoritePeople and favoriteCities sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
follows_profiles_by_id_createInspect
POST /follows/profiles/:userID — Follow a DCer
Follow a DCer. Idempotent — calling it twice with the same userID is safe (no-op the second time). Target must exist and be publicly visible (hidden + guest profiles are refused with 404). You cannot follow yourself.
When the cap of 150 is reached, returns 409 follow_limit_reached with a hint to unfollow someone first. The response includes the new profile mini-card and updated count so the caller can render the change without re-fetching.
This list also drives the /locator/digest favoritePeople and favoriteCities sections — surface trip + event activity from DCers and cities you care about without scrolling everywhere.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| userID | Yes | userID of the DCer to follow. Discover via `GET /profile-match` or `GET /chapters/:cityID` members lists. |
follows_profiles_by_id_deleteInspect
DELETE /follows/profiles/:userID — Unfollow a DCer
Unfollow a DCer. Idempotent — unfollowing someone you weren't following is a no-op (still returns 200 with the updated count). Use it whenever you want to stop seeing a DCer in your /locator/digest favoritePeople section.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| userID | Yes | userID of the DCer to unfollow. |
inbox_unreadInspect
GET /inbox/unread — Get unread counts
Returns your total unread message count and per-room breakdown. Only includes rooms you are subscribed to or are a member of.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rooms to return (1-100). |
interestsInspect
GET /interests — Get your interests config
Returns the user's interests configuration — the set of tags they have subscribed or unsubscribed from. Returns an empty { tags: {}, createdAt: null, updatedAt: null } shape when no config exists yet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
interests_createInspect
POST /interests — Subscribe or unsubscribe from interests
Subscribe or unsubscribe from interest tags in a single call. Pass a updates map of { slug: { subscribed: boolean } } with up to 20 entries. Slugs that are not in the known interest definitions are silently ignored at the name-lookup step (the subscription is still recorded).
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| updates | Yes | Map of interest tag slug → `{ subscribed: boolean }`. Max 20 entries. Keys must match `/^[a-z0-9-]+$/`. |
invitesInspect
GET /invites — List your invites
List the referral invites credited to you. Two source types appear:
manual— invites you sent viaPOST /invites(the explicit email-an-invitee flow).permaCode— applicants who signed up through your shareable permacode link (GET /invites/permacode).
Each record tracks where the prospective member is in the funnel (new → invited → started → submitted → approved/rejected/expired), the invite type, the invitee's name + email, and timestamps. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
invites_createInspect
POST /invites — Send an invite
Send a referral invite to someone. The server queues a templated email (delivered via a background task) that points the invitee at the apply flow with you pre-credited as the referrer. The created invite shows up in GET /invites immediately at status new.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Invitee email address. Where the invite email is sent. | ||
| whyDC | No | Optional. Short note about why they would be a good fit for DC — surfaces in the admin review queue if the application reaches it. | |
| fullName | Yes | Invitee full name. Used in the email greeting + matched against existing applications for dedup. |
invites_permacodeInspect
GET /invites/permacode — Get your permacode
Returns your permanent referral code. Share this link to let people apply with your referral.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
limitsInspect
GET /limits — Get your effective rate limits + current usage
Returns the effective per-minute and per-day rate limits for your API key, plus current usage (how many calls you have already made in the current minute and day windows, when each window resets, and how many calls you have left). Limits derive from your membership tier (DC member: 10/min, 300/day; DC BLACK member and staff: 60/min, 3000/day) unless an admin has set per-key overrides — overrides win when present.
The same usage data is also exposed on every API response via the X-RateLimit-Remaining, X-RateLimit-Reset, X-RateLimit-Daily-Remaining, and X-RateLimit-Daily-Reset headers. Use this endpoint when you want a JSON snapshot, or the headers when you want to read it on every call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
locator_digestInspect
GET /locator/digest — Get locator digest
Returns your weekly locator digest — the same data that powers the Friday locator email. Use this to surface trip/event activity around the people and cities a member already follows.
The response is composed of four independent sections; pass ?sections=<csv> to skip any you don't need.
Each section is described in full below.
homeCity— Activity in the city you have set as your home chapter. Null if you have no home city, or if you don't belong to any chapter yet.favoriteCities— Per-city digest for cities you have favorited (besides your home city). Each entry lists upcoming trips/events into that city + new ones added since last week.favoritePeople— Recent activity from members you follow: their new trips, upcoming trips, recently purchased tickets, and events they've RSVPd to.myTrips— For each of your own upcoming trips, the people you're likely to overlap with (chapter leads, local members, and other DCers visiting the same city in the same window).
Pass a comma-separated subset to ?sections=... to omit sections you don't use — useful for narrow integrations and faster responses.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | No | Comma-separated list of sections to include. Defaults to all four sections when omitted. |
locator_settingsInspect
GET /locator/settings — Get your Friday locator email settings
Returns the four toggles that control the Friday locator email digest. The digest is a weekly outbound email surfacing new events, tickets, and trips relevant to you.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
locator_settings_updateInspect
PATCH /locator/settings — Update your Friday locator email settings
Update any subset of the Friday locator email toggles. Send only the fields you want to change.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| trips | No | Include new trips to your area | |
| events | No | Include new events in your area | |
| enabled | No | Master toggle for the Friday digest | |
| tickets | No | Include DCers you follow getting event tickets |
membershipInspect
GET /membership — Get your membership state
Returns your full membership state: role, lifecycle dates, trial status, billing/subscription details, and a link to the Stripe Customer Portal where you can manage your subscription, payment methods, and download invoices.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
membership_invoicesInspect
GET /membership/invoices — List your Stripe invoices
Returns your Stripe invoices, newest first. Each entry includes a hosted-invoice URL and a PDF link, both safe to share — perfect for self-serve receipts. Returns an empty array for legacy paypal/chargify members or members with no Stripe customer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) |
notificationsInspect
GET /notifications — Get your notification preferences
Returns your push + email preferences per notification category. Defaults are applied for any preference you have never explicitly set. Email is null for reaction / myReaction because email is not supported for those categories.
For the Friday locator email digest, see GET /locator/settings — that's a separate concern (outbound digest, not per-event push/email).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
notifications_updateInspect
PATCH /notifications — Update your notification preferences
Update any subset of your notification preferences. Send only the categories/channels you want to change — the rest stay as-is. Email is rejected for reaction / myReaction (not supported).
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| categories | Yes | Per-category push/email toggles. Pass only the categories + channels you want to change. |
placeInspect
GET /places/:placeID — Get place details
Fetch full details for one Google Place ID. Useful for verifying a placeID before sending it to POST /trips (which only accepts type: "city" placeIDs and rejects venues with a 400). Same shape as a single entry from GET /places/search.
| Name | Required | Description | Default |
|---|---|---|---|
| placeID | Yes | Google Place ID. Get one from `GET /places/search` or from a previous response (e.g. `event.city.placeID`). |
places_searchInspect
GET /places/search — Search Google Places
Search for places by name. Use this to look up a Google Place ID before creating a trip or referencing a venue.
Results include a type field that classifies each match as city (a chapter-level locality usable for trips) or venue (a specific establishment, address, or country/region match — usable for events/meetups but rejected by POST /trips). Filter on type === "city" if you're building a trip-creation flow; pass either type to event/meetup APIs.
Every result also includes the full enriched location (description, lat, lon, region, regionCode, utcOffsetMins) so the same payload can be passed straight to POST /trips without a follow-up GET /places/:placeID lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query (city name, country, address, etc.) | |
| limit | No | Max results (1-20) |
profileInspect
GET /profile — Get your own profile
Returns your own full profile — every field the in-app profile editor surfaces to you, plus tier-derived state. Same shape regardless of tier (DC and DC BLACK members get identical own-profile payloads). Use PATCH /profile to update editable fields.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
profile_match_createInspect
POST /profile-match — Match DCers from a description (or recommend if omitted)
AI-powered profile matchmaker. Match DCers against a natural-language description, or — when query is omitted — recommend DCers based on your own profile (chapter, industry, expertise, goals).
Returns ranked results from a profile-vector search (Gemini embeddings + reranking under the hood). The caller's LLM synthesizes any narrative on top. Stricter rate limits than the standard CRUD endpoints because of the embedding/rerank cost.
Two modes:
With
query: free-form description ("DCers in Lisbon who run SaaS").Without
query: AI builds an implicit query from your profile and returns "DCers you should meet". Useful for cold-start "who should I message this week?" prompts.
Optional structured filters (combine with either mode, all AND-ed):
locationChapterPlaceID— narrow to DCers whose home / base location matches this Google Place ID. Use for "based in X" queries. Resolve viaGET /places/search.locationCurrentPlaceID— narrow to DCers currently in this place (auto-derived from their last GPS / active trip). Use for "currently in X" / "visiting X" queries.eventID— narrow to DCers holding a valid ticket to this event ("DCers attending DCMEX who run logistics"). Refunded / canceled tickets are excluded.isDCB— whentrue, narrow to DC BLACK members only.businessIndustry— exact match on the DCer's primary business industry.minTeamSize— "at least this size" filter on team headcount (only matches DCers whose team-size visibility is shared with all DCers).minAnnualRevenue— "at least this revenue" filter on annual revenue (only matches DCers whose revenue visibility is shared with all DCers).gender— exact match on the DCer's self-reported gender. Note: Gender is sparsely populated — most DCers leave it blank. Use this as a "narrow if set" hint rather than a hard requirement; combine withqueryfor best results.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| isDCB | No | Optional. When `true`, narrows results to DC BLACK members only. | |
| limit | No | Max results (1-50, default 50). Hard cap at 50 — match is expensive; narrow with filters instead of paginating. | |
| query | No | Free-form description of the DCers you want to find. Omit to get recommendations based on your own profile. | |
| gender | No | Optional. Exact-match filter on the DCer's self-reported gender. Allowed values: `Man`, `Woman`, `Non-binary`, `Prefer not to say`. **Note: Gender is sparsely populated — most DCers leave it blank** — combine with `query` rather than relying on this alone. | |
| eventID | No | Optional. DC event ID — narrows results to DCers with a valid ticket (RSVP yes/maybe or paid). Pair with `query` for "DCers attending X who do Y". | |
| minTeamSize | No | Optional. "At least this team size" filter — matches DCers whose team-size bucket is >= this value, ordered as `None < 1-2 < 3-5 < 6-9 < 10-14 < 15-19 < 20-34 < 35-49 < 50-74 < 75-99 < 100+`. `Prefer not to say` also exists in the bucket vocabulary but is treated as "unknown" and always filtered out. Only DCers who set their team-size visibility to "all DCers" are matched; the rest are excluded silently. | |
| skipReranking | No | Optional. When `true`, skip the keyword reranker and return results in raw vector-similarity order. Useful when the query is fuzzy/semantic (where exact keyword overlap would add noise) or when comparing reranked vs raw ordering. | |
| businessIndustry | No | Optional. Exact-match filter on the DCer's primary business industry. Allowed values: `SaaS & Tech`, `Marketing Agency`, `Productized Services`, `Ecommerce & Amazon`, `Courses and Info Products`, `Affiliate, Content Creation, or Ad Revenue`, `Professional Services & Industry Specific Consulting`, `Real Estate and Investing`, `Coaching`, `Other`. | |
| minAnnualRevenue | No | Optional. "At least this revenue" filter on annual revenue. Pass any revenue label (e.g. `$1M+`, `$250K+`, `$100K+`); the filter parses to a number and matches DCers at-or-above. Only DCers who set their revenue visibility to "all DCers" are matched; the rest are excluded silently. | |
| locationChapterPlaceID | No | Optional. Google Place ID — narrows results to DCers based here ("based in X"). Resolve via `GET /places/search`. | |
| locationCurrentPlaceID | No | Optional. Google Place ID — narrows results to DCers currently here, whether they live there or are visiting. **Sparsely populated** — `currentLocation` is self-reported and most DCers leave it null, so this filter under-recalls. For "who is in <city> right now?" prefer creating a trip via `POST /trips` and reading `GET /trips/:tripID` — the `discovery.fullPool` block lists locals AND visitors during the trip window. Resolve placeIDs via `GET /places/search`. |
profile_updateInspect
PATCH /profile — Update profile fields
Update allowed profile fields. Only the fields you include will be changed. Location, photo, and gender cannot be updated via API.
⚠️ WRITE operation: this mutates your DC account data.
| Name | Required | Description | Default |
|---|---|---|---|
| diet | No | Dietary restrictions — used when DC plans event meals. | |
| github | No | GitHub username only (no URL prefix). 1-39 chars per GitHub's rules: letters, digits, `-`. Required to be granted access to the public DC client repo — set this to opt in. | |
| hobbies | No | Your non-business hobbies — games, camping, art, sports, anything (up to 1600 chars). | |
| No | Twitter/X username only (no URL prefix). 1-15 chars: letters, digits, `_`. | ||
| No | Facebook username only (no URL prefix). 5-50 chars: letters, digits, `.`. | ||
| headline | No | One-sentence elevator pitch shown at the top of your DC profile (max 64 chars). | |
| No | LinkedIn username only (no URL prefix). 1-50 chars: letters, digits, `.`, `_`, `-`. | ||
| nickname | No | Display name override — what other DCers see in addition to your real name (max 256 chars). | |
| teamSize | No | Number of full-time and part-time team members in your primary business. Predefined bracket. | |
| No | WhatsApp phone number in international format — `+` followed by 5-16 digits, no dashes or spaces. Required if you want to be added to the DC WhatsApp community. Always private — only visible to DC staff. | ||
| expertise | No | Areas you might consider yourself an expert in — skills you can use to help other members (up to 1600 chars). | |
| focusmate | No | Focusmate username only (no URL prefix). 3-50 chars: letters, digits, `_`, `-`. | |
| No | Instagram username only (no URL prefix). 1-30 chars: letters, digits, `.`, `_`. | ||
| shirtSize | No | T-shirt size — used when DC sends event swag. | |
| spouseName | No | Name of your spouse or partner — used only for the DCBKK partner pass. Always private (DC staff only). | |
| businessName | No | Name of the main business you run or are primarily focused on right now (max 256 chars). You can list other businesses in `otherBusinesses`. | |
| annualRevenue | No | Approximate annual revenue (in U.S. dollars) of your primary business over the last 12 months. Predefined bracket. | |
| businessWebsite | No | Public website for your primary business — single URL only (max 256 chars). | |
| otherBusinesses | No | Other businesses you currently operate. Feel free to share URL, short description, and year started for each (up to 1600 chars). | |
| yearsInBusiness | No | How long you have been on the entrepreneurial path. Used for matching with other members. Predefined bracket. | |
| businessIndustry | No | Category your primary business fits into. Must be one of the predefined industries. | |
| currentChallenge | No | Your current business challenge or goal. Used internally to match you with other members who can help (up to 1600 chars). | |
| peopleOfInterest | No | What kinds of community members you would like to connect with. Used to send recommendations of relevant DCers (up to 1600 chars). Set `peopleOfInterestIsPrivate: true` to keep this visible only to DC staff. | |
| relevantLocations | No | Cities or regions you frequently visit. Helps surface trip overlaps with other members (up to 1600 chars). | |
| teamSizeIsPrivate | No | Visibility of your team size. `true` = hidden from other DCers (only DC staff can see it); `false` = visible to all DCers. | |
| previousBusinesses | No | Previous business exits and entrepreneurial experience worth listing (up to 1600 chars). | |
| askMeAnythingTopics | No | Topics other members can ask you about, in your field of expertise (up to 1600 chars). | |
| businessDescription | No | Description of your primary business. Plain text or HTML, up to 1600 chars. | |
| annualRevenueIsPrivate | No | Visibility of your revenue. `true` = hidden from other DCers (only DC staff can see it); `false` = visible to all DCers. | |
| peopleOfInterestIsPrivate | No | Visibility of your "who I want to meet" answer. `true` = hidden from other DCers (only DC staff can see it); `false` = visible to all DCers. |
report_issue_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | A short description of the issue or feedback (1–4000 chars). | |
| context | No | Optional structured debug context — anything useful for triage (last error, request payload, endpoint, etc.). Up to 32 keys. | |
| severity | No | Severity: bug | feedback | question. Defaults to "bug". | |
| screenshot | No | Optional 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 EXIF. |
roomsInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100) | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
rooms_archive_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_browseInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Room type to browse. Allowed: `channel`, `discussion`, `quick-question`. | |
| limit | No | Max results (1-100) | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
rooms_by_idInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_inboxInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Room type filter. Allowed: `channel`, `dm`, `group`, `discussion`, `quick-question`, `event`. | |
| limit | No | Max results (1-100) | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
rooms_messagesInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-50) | |
| before | No | Cursor from a previous response's `nextCursor` (encodes the previous page's oldest message timestamp). Pass to fetch the next older page. | |
| roomID | Yes | Room 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`. |
rooms_mute_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_pin_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_subscribe_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_summariesInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Summary type — `daily` or `weekly`. | |
| limit | No | Max results (1-50) | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next (older) page. | |
| roomID | Yes | Room ID |
rooms_summaryInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Summary type — `daily` or `weekly`. | |
| roomID | Yes | Room ID |
rooms_unarchive_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_unmute_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_unpin_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
rooms_unsubscribe_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roomID | Yes | Room ID |
searchInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text (1-500 chars). Required. | |
| limit | No | Per-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. | |
| userID | No | Scope 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. |
search_chaptersInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text. Required. | |
| page | No | 1-indexed page number. | |
| limit | No | Max hits per page (1-100). |
search_eventsInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text. Required. | |
| page | No | 1-indexed page number. | |
| limit | No | Max hits per page (1-100). | |
| since | No | Events ending on or after this date (ISO 8601). | |
| until | No | Events starting on or before this date (ISO 8601). | |
| cityID | No | Events whose chapter city is this Google Place ID. | |
| userID | No | Scope to events hosted by this DCer. | |
| country | No | ISO 3166-1 alpha-2 country code (e.g. `TH`, `MX`). |
search_messagesInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text. Required. | |
| page | No | 1-indexed page number. | |
| limit | No | Max hits per page (1-100). | |
| roomID | No | Scope 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`. | |
| userID | No | Scope to messages authored by this DCer. |
search_profilesInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text. Required. | |
| page | No | 1-indexed page number. | |
| limit | No | Max hits per page (1-50). |
search_roomsInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search text. Required. | |
| page | No | 1-indexed page number. | |
| type | No | Room type filter. Allowed: `channel`, `dm`, `group`, `discussion`, `quick-question`, `event`. | |
| limit | No | Max hits per page (1-100). | |
| userID | No | Scope to rooms created by this DCer. |
ticketsInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. | |
| status | No | Filter by a single ticket status. With no value, returns the tickets you're holding (`valid` and `maybe`). `refunded` is available on request. | valid,maybe |
tripInspect
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 carryingscore(higher = better match), miniprofile(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 aspeoplebut noscore.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/overlapsreturns, 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 (~seconds — call POST /trips/:tripID/refresh to force-recompute). Open to any authenticated DCer (you can read other DCers' trips too).
| Name | Required | Description | Default |
|---|---|---|---|
| tripID | Yes | The trip ID |
trip_deleteInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tripID | Yes | The trip ID to delete |
trip_discoveryInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tripID | Yes | The trip ID | |
| include | No | Optional. Comma-separated subset of `people,fullPool,whyToMeet,events,overlappingTrips`. Default = all five. |
trip_refresh_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tripID | Yes | The trip ID to refresh |
tripsInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| past | No | Include past trips. | |
| limit | No | Max results (1-100). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
trips_createInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Trip note | |
| points | No | Optional. 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 at write time. Notes without a place are valid. | |
| endDate | Yes | End date (ISO 8601) | |
| eventID | No | DC event ID. Server uses the event's city placeID. **Pass exactly one of `placeID` or `eventID`** — sending both rejects with 400. | |
| placeID | No | Google Place ID for the destination. Look one up via `GET /places/search`. **Pass exactly one of `placeID` or `eventID`** — sending both rejects with 400. | |
| startDate | Yes | Start date (ISO 8601) |
trips_overlapsInspect
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?".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max trips to check (1-20) |
trip_updateInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Updated note | |
| points | No | Optional. Replace the entire `points` array (not a patch within). Up to 20 items, same shape as `POST /trips`. Pass `[]` to clear all points. | |
| tripID | Yes | The trip ID to update | |
| endDate | No | New end date (ISO 8601) | |
| eventID | No | New destination — DC event ID (uses event's city). Pass `null` to unlink without changing the location. | |
| placeID | No | New destination — Google Place ID | |
| startDate | No | New start date (ISO 8601) |
virtual_eventInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionID | Yes | The Live Call session ID. Find IDs via `GET /virtual-events`. |
virtual_event_attendeesInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-100). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. | |
| sessionID | Yes | The Live Call session ID. Find IDs via `GET /virtual-events`. |
virtual_event_rsvpInspect
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 inattendeeCount.maybe— soft attendance signal.no— you're declining. Use this to back out after a prioryesormaybe.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Your RSVP status for this session. | |
| sessionID | Yes | The Live Call session ID. Find IDs via `GET /virtual-events`. |
virtual_eventsInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| past | No | Include past Live Calls. | |
| limit | No | Max results (1-100). | |
| cursor | No | Cursor from a previous response's `nextCursor`. Pass to fetch the next page. |
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!