Skip to main content

API Reference

The Tap backend exposes a REST API running on Express (port 3001). Endpoints are organized into multiple groups: campaigns, conversations, mission wizard, analysis, metrics, integrations (Slack and Teams), plus supporting resources.

Authentication: Endpoints marked "Required" expect a Supabase JWT in the Authorization: Bearer <token> header. Token-based endpoints use a unique participant token instead.

Campaign Management

MethodEndpointAuthDescription
GET/api/campaignsRequiredList all campaigns for the authenticated user
GET/api/campaigns?archived=trueRequiredList archived campaigns
GET/api/campaigns/:idRequiredGet a single campaign by ID
POST/api/campaignsRequiredCreate a new campaign
PUT/api/campaigns/:idRequiredUpdate campaign details
DELETE/api/campaigns/:idRequiredDelete a campaign
POST/api/campaigns/:id/launchRequiredLaunch campaign (sends invitations)
PATCH/api/campaigns/:id/statusRequiredChange campaign status
POST/api/campaigns/:id/cloneRequiredClone a campaign's settings
POST/api/campaigns/:id/pauseRequiredPause an active campaign
POST/api/campaigns/:id/resumeRequiredResume a paused campaign
POST/api/campaigns/:id/archiveRequiredArchive a completed campaign
POST/api/campaigns/:id/unarchiveRequiredUnarchive a campaign

Participants

MethodEndpointAuthDescription
POST/api/campaigns/:id/participantsRequiredUpload participants via CSV file
GET/api/campaigns/:id/participantsRequiredList all participants for a campaign
POST/api/campaigns/:id/send-invitationsRequiredSend invitation emails to all participants

Conversations (Authenticated)

For campaign creators viewing conversation data.

MethodEndpointAuthDescription
GET/api/conversations/campaign/:campaignIdRequiredList all conversations for a campaign
GET/api/conversations/:idRequiredGet a single conversation with messages
POST/api/conversations/startRequiredStart a new conversation

Conversations (Public / Token-Based)

For participants responding to campaigns. No login required.

Token validation includes anti-scanner logic -- email security tools that pre-fetch links won't accidentally start conversations. The GET /token/:token/validate endpoint checks token validity without side effects, and POST /token/:token/begin requires an explicit user action to create the conversation.

MethodEndpointAuthDescription
GET/api/conversations/token/:tokenNoneGet conversation by participant token
POST/api/conversations/:id/messagesNoneAdd a message to a conversation
POST/api/conversations/:id/respondNoneSubmit a final response
GET/api/conversations/token/:token/validateNoneValidate a token without starting a conversation
POST/api/conversations/token/:token/beginNoneExplicitly begin a conversation (prevents scanner ghost engagement)

Mission Wizard

AI-powered endpoints for crafting campaign questions. The unified endpoint handles the full wizard flow; the legacy endpoints are kept for backward compatibility.

MethodEndpointAuthDescription
POST/api/mission/unifiedRequiredFull conversational wizard -- clarify, refine, and select in one flow
POST/api/mission/clarifyNoneAnalyze initial input, extract topic/audience/criteria
POST/api/mission/refineNoneGenerate unbiased question options
POST/api/mission/generate-summaryNoneGenerate engaging email summary for invitations

Analysis

MethodEndpointAuthDescription
GET/api/campaigns/:id/analysisRequiredGet full AI analysis (sentiment, themes, summary, groups)
POST/api/campaigns/:id/queryRequiredAsk a natural language question about campaign responses

Health Check

MethodEndpointAuthDescription
GET/healthNoneReturns backend status

Metrics

Developer productivity metrics ingestion for correlation with feedback data.

MethodEndpointAuthDescription
POST/api/v1/metrics/previewRequiredPreview a metrics file upload without writing data
POST/api/v1/metrics/uploadRequiredProcess and import a metrics file
GET/api/v1/metrics/runsRequiredList ingestion runs for the organization
GET/api/v1/metrics/runs/:idRequiredGet details of a specific ingestion run

Rate limit: 10 uploads per hour per organization. Files must be under 50MB.

Integrations

Slack

MethodEndpointAuthDescription
GET/api/slack/installRequiredInitiate Slack OAuth installation flow
GET/api/slack/oauth/callbackNoneHandle OAuth callback from Slack
POST/api/slack/eventsNoneReceive Slack event webhooks (signature-verified)

Microsoft Teams

MethodEndpointAuthDescription
GET/api/teams/installRequiredInitiate Teams OAuth installation flow
GET/api/teams/oauth/callbackNoneHandle OAuth callback from Teams
POST/api/teams/webhookNoneReceive Teams webhook notifications

Supporting Resources

MethodEndpointAuthDescription
GET/api/users/meRequiredGet current user profile
POST/api/invites/acceptRequiredAccept an organization invitation
POST/api/feedbackRequiredSubmit product feedback

Route Files

The API is organized into route files, each with a corresponding controller or service:

Route FileController/ServiceHandles
routes/campaigns.jscampaignController.jsCampaign CRUD, lifecycle, participants
routes/conversations.jsconversationController.jsConversation management, messages, token validation
routes/mission.jsmissionController.jsMission wizard AI endpoints
routes/analysis.jsanalysisController.jsAnalysis generation and Q&A
routes/metrics.jsmetricsController.jsMetrics upload, preview, ingestion runs
routes/slack.jsslackService.jsSlack OAuth, events, message delivery
routes/teams.jsteamsService.jsTeams OAuth, webhooks, message delivery
routes/users.js--User profile
routes/invites.js--Organization invitation acceptance
routes/feedback.js--Product feedback collection