API Reference
164 endpoints across 9 services.
/registerRegister a new user account.
/loginAuthenticate user and receive JWT token.
/verifyVerify JWT token and return user info.
/users/:idGet user profile by ID.
/users/:idUpdate user profile.
/preferences/request-typesGet user's request type subscriptions (v9.0).
/preferences/request-typesUpdate a single request type subscription.
/preferences/request-types/bulkBulk update request type subscriptions.
/preferences/interestsGet user's interest categories (service_category, item_category, event_type).
/preferences/interestsAdd a new interest.
/preferences/interests/:idRemove an interest.
/preferences/feed (ADR-022)Get user's feed visibility preferences for multi-tier feed.
/preferences/feed (ADR-022)Update user's feed visibility preferences.
/auth/push-tokensRegister an Expo push token for the authenticated user (Sprint 41).
/auth/push-tokensRemove an Expo push token for the authenticated user (Sprint 41).
/healthService health check.
/communitiesGet all communities with optional filters.
/communities/tagsReturn all distinct tags in use across active communities (Sprint 36).
/communities/:id/tagsUpdate community interest tags (admin only, Sprint 36). Tags are normalized to lowercase and deduplicated.
/communities/:id/locationUpdate community geographic coordinates (admin only, Sprint 36). Enables geography-mode discovery and distance sorting.
/communities/my/communitiesGet communities the user is a member of.
/communities/:idGet specific community with all members.
/communitiesCreate new community.
/communities/:idUpdate community details (admin only).
/communities/:idArchive community (admin only, soft delete).
/communities/:communityId/membersGet all members of a community.
/communities/:communityId/joinJoin a community (public: immediate, private: pending approval).
/communities/:communityId/membersAdd member to community (invite).
/communities/:communityId/members/:userIdUpdate member role or status.
/communities/:communityId/members/:userIdRemove member from community (self-leave or admin kick).
/communities/:communityId/normsGet all norms for a community.
/communities/:communityId/norms/:normIdGet specific norm with all approvals.
/communities/:communityId/normsPropose a new community norm.
/communities/:communityId/norms/:normId/approveApprove a proposed norm (requires simple majority >50% of members).
/communities/:communityId/norms/:normIdArchive a norm (admin or creator only).
/communities/:id/configGet community configuration.
/communities/:id/configUpdate community configuration (founder only for Phase 1).
/communities/config-templatesBrowse available configuration templates.
/communities/:id/config/copy-from/:source_community_idCopy configuration from another community.
/communities/configs/publicBrowse configurations from thriving communities.
/healthService health check.
/communities/:communityId/linksPropose a link from this community to another (admin-only). Creates a `pending` link awaiting approval by the other community's admin.
/communities/:communityId/links/:linkIdApprove a pending link (other community's admin), or update `trust_carry_factor`/`show_in_sister_feeds`. Use `action: "approve"` or `action: "deactivate"` in the body.
/communities/:communityId/linksList all links involving this community. Optional `?status=pending|active|inactive` filter. Returns `partner_community_id` and `partner_community_name` for convenience.
/communities/:communityId/links/:linkIdRemove a link (sets status to `inactive`). Either community's admin can do this.
/communities/trust-questionsReturns active trust questionnaire questions with choices, ordered by `display_order`. Public endpoint — no auth required.
/communities/trust-questionsCreate a trust question. Platform admin only.
/communities/trust-questions/:idUpdate question text, subtext, display_order, or active status. Platform admin only.
/communities/trust-questions/:idDeactivate a trust question (sets active=false). Platform admin only.
/communities/trust-questions/:id/choicesAdd a choice to a question. Platform admin only.
/communities/trust-questions/:id/choices/:choiceIdUpdate a choice's label, description, config_delta, or display_order. Platform admin only.
/communities/trust-questions/:id/choices/:choiceIdRemove a choice permanently. Platform admin only.
/requestsGet all help requests with optional filters.
/requests/matched/for-userGet requests matching user's skills from their communities (skill-based matching algorithm).
/requests/curated (v9.18 + ADR-048 Feed Ranking v2)Get curated feed scored on 7 signals: skill match, trust distance, community relevance, urgency, requester trust, prior interaction, and recency. Response includes `priorInteractionScore` and `recenc
/requests/:idGet specific request details.
/requests (v9.0 Polymorphic + ADR-022 Visibility)Create new polymorphic help request (supports 5 types) with visibility scope.
/requests/:idUpdate help request (requester only).
/requests/:idCancel help request (requester only).
/requests/:id/privacyUpdate privacy settings for a request (Social Karma v2.0).
/requests/:id/admin-triageOverride request urgency and/or add a community-scoped admin note (Sprint 25).
/requests/:id/boostBoost a request for 48 hours, adding a +0.3 feed score bonus via the feed-service boost scoring rule (Sprint 36). Admin only.
/requests/:id/boostRemove an active boost from a request (Sprint 36). Admin only.
/requests/:id/propose-matchAdmin proposes a specific community member as a helper (Sprint 36). Creates a real `requests.matches` row with `status='proposed'`.
/requests/:id/urgentToggle request urgency between `urgent` and `medium` (Sprint 36). Admin only.
/offersGet all help offers with optional filters.
/offers/:idGet specific offer details.
/offersCreate new help offer.
/offers/:id/privacyUpdate privacy settings for an offer (Social Karma v2.0).
/matchesGet all matches with optional filters.
/matches/:idGet specific match details.
/matchesCreate a match between request and responder.
/matches/:id/completeTwo-phase match completion. Each party calls this independently; the match
/requests/:id/offersList pending provider offers on a specific help request. Requester only.
/requests/offers/:id/acceptAccept a pending provider offer. Creates a match between the requester and the provider.
/requests/offers/:id/declineDecline a pending provider offer.
/providers/offersSubmit a provider offer on an open help request.
/providers/offersList offers submitted by the authenticated provider.
/providers/offers/:id/withdrawWithdraw a pending provider offer.
/requests/:id/dibs-candidateReturns the top-scored dibs candidate for a scheduled request. Returns `null` if no eligible candidate exists.
/requests/:id/dibsSend dibs to a specific provider. Only valid for scheduled requests.
/requests/dibs/:id/acceptProvider accepts dibs. Creates a `requests.matches` record directly and sets request status to `matched`.
/requests/dibs/:id/declineProvider declines dibs. Reverts request status to `open` for public broadcast.
/requests/dibs/pending-for-providerReturns the authenticated provider's pending dibs records (status = `pending`).
/requests/dibs/:id/expireTEST-ONLY: Force-expire a dibs record regardless of `expires_at`. Sets status to `expired` and reverts request to `open`.
/matches/:id/feedbackSubmit interaction feedback for a completed match.
/matches/:id/feedbackGet feedback for a match.
/providersList all provider profiles. Optional query param: service_type.
/providers/myGet the authenticated user's own provider profiles. Auth required.
/providers/:idGet a single provider profile by ID, including ride details if applicable.
/providersCreate a provider profile for the authenticated user.
/providers/:idUpdate a provider profile. Owner only.
/providers/:idDelete a provider profile. Owner only.
/collectivesList all provider collectives. Optional query param: service_type.
/collectives/myGet collectives the authenticated user belongs to (via their provider profiles). Auth required.
/collectives/:idGet a collective with members and communities served.
/collectivesCreate a new provider collective.
/collectives/:idUpdate a collective. Collective admin only.
/collectives/:idDelete a collective. Collective admin only.
/collectives/:id/membersJoin a collective as a member.
/collectives/:id/members/:providerIdRemove a member from a collective. Collective admin only.
/collectives/:id/communitiesLink a collective to a community.
/collectives/:id/communities/:communityIdUnlink a collective from a community. Auth: collective admin OR community admin (Sprint 26).
/collectives/:id/statsReturns aggregate performance stats for a collective: `total_requests_matched`, `fulfillment_rate`, `avg_completion_hours` (null if no completed matches), `communities_served_count`, `available_membe
/providers/:providerId/availabilityToggle a provider's availability status. Body: `{ is_available: boolean }`. Auth: owner only (provider_profiles.user_id must match JWT userId). Returns `{ id, is_available }`. (Sprint 26)
/requests/providers/:providerId/rate-cardsList active rate cards for a provider (public). Owner can pass `?include_inactive=true` to include deactivated cards.
/requests/providers/:providerId/rate-cardsCreate a new rate card for a provider. Auth: owner only. Body: `{ label, pricing_model, rate_amount?, rate_unit?, currency?, notes? }`.
/requests/providers/:providerId/rate-cards/:cardIdUpdate an existing rate card. Auth: owner only.
/requests/providers/:providerId/rate-cards/:cardIdSoft-delete a rate card — sets `is_active = false`. Auth: owner only. Card remains in database for historical reference.
/healthService health check.
/reputation/karma/:userIdGet user's total karma across all communities.
/reputation/trust/:userIdGet user's overall trust score — weighted average across all communities, weighted by recent interaction count.
/reputation/trust/:userId/:communityIdGet user's trust score in a specific community.
/reputation/leaderboard/:communityIdGet top karma earners in a community.
/reputation/history/:userIdGet karma transaction history for a user.
/reputation/users/:userId/badgesGet all prestige badges earned by a user (public). Phase 1 badge types: `first_helper`, `milestone_10`, `milestone_50`, `milestone_100`, `connector`.
/reputation/community-health/:communityIdGet community health metrics and trends.
/reputation/milestones/:communityIdGet community milestone achievements.
/reputation/trust/:userId/:communityIdEnhanced trust score with interaction quality (UPDATED).
/reputation/network-metrics/:communityIdGet the network cohesion score for a community (ADR-045). Four graph topology metrics — reciprocity, density, clustering coefficient, and path score — over a rolling 90-day window.
/reputation/community-trust/:communityIdGet the community trust score (ADR-040). Computed daily; recalculates on demand if no score exists yet.
/reputation/feedback (Authenticated)Submit a private quality rating after a completed interaction. Ratings are internal trust signals — never exposed to users (ADR-036).
/healthService health check.
/reputation/trust-config/:userId/:communityIdGet user trust config and effective parameters (merged community defaults + per-user overrides).
/reputation/trust-config/:userId/:communityIdToggle `evolution_enabled` for a user in a community (user or admin).
/reputation/trust-config/:userId/:communityId/historyReturn the immutable evolution log for a user — every parameter adjustment with trigger signal and event ID.
/reputation/communities/:communityId/trust-evolutionGet community-level evolution status (admin only). Returns whether evolution is enabled and the community cross_community_prior.
/reputation/communities/:communityId/trust-evolutionToggle community evolution on/off (admin only).
/reputation/community/:communityId/evolution/historyAdmin — paginated community evolution log showing parameter changes over time.
/reputation/community/:communityId/evolution/summaryAdmin — drift summary: first evolution date, evolved parameter count, last contributing member count.
/reputation/community/:communityId/evolution/toggleAdmin — enable/disable community evolution engine. Body: `{ "enabled": boolean }`.
/reputation/users/:userId/effective-params?communityId=Returns blended trust params from Redis cache (4h TTL), falls back to DB on cache miss. Auth: self only.
/reputation/users/:userId/evolution-globalReturns the user's global evolution opt-in preference. Missing row = true (default opt-in). Auth: self only.
/reputation/users/:userId/evolution-globalSet global evolution enabled/disabled for the user. Body: `{ "global_evolution_enabled": boolean }`. Auth: self only.
/notifications/stream/:userIdServer-Sent Events (SSE) endpoint for real-time notifications.
/notifications/:userIdGet user's notifications (paginated).
/notifications/:userId/unread-countGet count of unread notifications.
/notifications/:notificationId/readMark specific notification as read.
/notifications/:userId/read-allMark all notifications as read for a user.
/notifications/:notificationIdDelete a notification.
/notifications/:userId/preferencesGet user's notification preferences.
/notifications/:userId/preferencesUpdate user's global notification preferences.
/notifications/push/send (internal)Send Expo push notifications to a list of users. Internal use only (called by event handlers within the notification service itself, not exposed publicly).
/healthService health check.
/messages/conversations/:userIdGet all conversations for a user.
/messages/:conversationIdGet all messages in a conversation (paginated).
/messagesCreate new conversation (usually auto-created when match occurs).
/messages/:conversationId/mark-readMark all messages in conversation as read.
/feedGet personalized feed for user.
/feed/dismissDismiss item from feed.
/feed/preferencesGet user's feed preferences.
/feed/preferencesUpdate feed preferences.
/healthHealth check endpoint.
/search?q={query}Search for geocoded addresses. Returns cached results if available, otherwise calls Nominatim API and caches the result.
/cacheManually cache a geocoding result (used by frontend for fire-and-forget caching).
/statsGet cache statistics and analytics.
/cleanupRemove expired cache entries (older than 30 days).
/invitations/generateGenerate a new invitation code for current user.
/invitations/acceptAccept an invitation code during user signup.
/invitationsGet invitation history for current user.
/invitations/statsGet inviter statistics for current user (gamification metrics).
/paths/:targetUserIdGet shortest path between current user and target user.
/paths/batchGet paths for multiple target users (optimized for feed ranking).
/networkGet the current user's local network graph from the materialized connections table.