{"data":{"message":"Node.js Supabase CRUD API - Leads Management","version":"1.0.0","status":"running","database":"Supabase ready","authentication":{"required":true,"type":"Bearer Token","header":"Authorization: Bearer YOUR_TOKEN","note":"All API endpoints require authorization header except this root endpoint"},"endpoints":{"GET /api/leads":"Get all leads with populated batch and tags (Teable format)","POST /api/leads":"Create new lead","GET /api/leads/:id":"Get lead by ID with populated batch and tags (Teable format)","PUT /api/leads/:id":"Update lead by ID (full update)","PATCH /api/leads/:id":"Partially update lead by ID","DELETE /api/leads/:id":"Delete lead by ID","DELETE /api/leads/bulk":"Bulk delete multiple leads","PATCH /api/leads/:id/assign-tags":"Assign tags to a lead","PATCH /api/leads/:id/remove-tags":"Remove tags from a lead","PATCH /api/leads/:id/assign-batch":"Assign batch to a lead","PATCH /api/leads/:id/remove-batch":"Remove batch from a lead","GET /api/lead-tags":"Get all lead tags (with optional filtering)","POST /api/lead-tags":"Create new lead tag","POST /api/lead-tags/bulk-assign":"Bulk assign tags to multiple leads","POST /api/lead-tags/bulk-remove":"Bulk remove tags from multiple leads","GET /api/lead-tags/:id":"Get lead tag by ID","PUT /api/lead-tags/:id":"Update lead tag by ID","DELETE /api/lead-tags/:id":"Delete lead tag by ID","PATCH /api/lead-tags/:id/assign-leads":"Assign leads to a tag","PATCH /api/lead-tags/:id/remove-leads":"Remove leads from a tag","GET /api/leads/:leadId/tags":"Get all tags for a specific lead","GET /api/leads-batch":"Get all leads batches (with optional filtering)","POST /api/leads-batch":"Create new leads batch","GET /api/leads-batch/:id":"Get leads batch by ID","PUT /api/leads-batch/:id":"Update leads batch by ID","DELETE /api/leads-batch/:id":"Delete leads batch by ID","PATCH /api/leads-batch/:id/assign-leads":"Assign leads to a batch","PATCH /api/leads-batch/:id/remove-leads":"Remove leads from a batch","GET /api/leads-batch/search/:batchName":"Search leads batches by name","GET /api/future-leads":"Get all future leads (with optional filtering)","POST /api/future-leads":"Create new future lead","GET /api/future-leads/:id":"Get future lead by ID","PUT /api/future-leads/:id":"Update future lead by ID","DELETE /api/future-leads/:id":"Delete future lead by ID","GET /api/future-leads/batch/:batchId":"Get future leads by batch ID","GET /api/future-leads/execution/:execution":"Get future leads by execution status","GET /api/connections":"Get all connections (with optional filtering)","POST /api/connections":"Create new connection","GET /api/connections/:id":"Get connection by ID","PUT /api/connections/:id":"Update connection by ID (full update)","PATCH /api/connections/:id":"Partially update connection by ID","DELETE /api/connections/:id":"Delete connection by ID","GET /api/connections/default":"Get the default connection","PATCH /api/connections/:id/set-default":"Set a connection as default","GET /api/campaigns":"Get all campaigns (with optional filtering)","POST /api/campaigns":"Create new campaign","GET /api/campaigns/:id":"Get campaign by ID","PUT /api/campaigns/:id":"Update campaign by ID","DELETE /api/campaigns/:id":"Delete campaign by ID","GET /api/campaigns/status/:status":"Get campaigns by status","GET /api/campaigns/type/:type":"Get campaigns by type","GET /api/campaign-connection-joins":"Get all campaign-connection relationships","GET /api/campaigns/:campaignId/connections":"Get all connections assigned to a campaign","GET /api/campaigns/:campaignId/connections/:connectionId":"Get specific campaign-connection relationship","POST /api/campaigns/:campaignId/connections/:connectionId":"Assign connection to campaign","DELETE /api/campaigns/:campaignId/connections/:connectionId":"Remove connection from campaign","POST /api/campaigns/:campaignId/connections/bulk-assign":"Bulk assign multiple connections to campaign","GET /api/connections/:connectionId/campaigns":"Get all campaigns assigned to a connection","POST /api/connections/:connectionId/campaigns/:campaignId":"Assign campaign to connection","DELETE /api/connections/:connectionId/campaigns/:campaignId":"Remove campaign from connection","POST /api/connections/:connectionId/campaigns/bulk-assign":"Bulk assign multiple campaigns to connection","GET /api/campaign-schedules":"Get all campaign schedules (with optional filtering)","POST /api/campaign-schedules":"Create new campaign schedule","GET /api/campaign-schedules/:id":"Get campaign schedule by ID","PUT /api/campaign-schedules/:id":"Update campaign schedule by ID","DELETE /api/campaign-schedules/:id":"Delete campaign schedule by ID","GET /api/campaign-schedules/status/:status":"Get campaign schedules by status","GET /api/campaign-schedules/batch/:batchId":"Get campaign schedules by batch ID","GET /api/campaign-schedules/campaign/:campaignId":"Get campaign schedules by campaign ID","GET /api/campaign-schedules/step/:stepId":"Get campaign schedules by step ID (foreign key)","GET /api/campaign-schedules/activity/:activityId":"Get campaign schedules by activity ID (join)","GET /api/campaign-schedules/:scheduleId/activities":"Get campaign activities by schedule ID (join)","GET /api/campaign-schedules/with-steps":"Get all campaign schedules with populated step data","GET /api/campaign-schedules/:id/with-step":"Get campaign schedule with populated step data","POST /api/campaign-schedules/:scheduleId/assign/:activityId":"Assign activity to campaign schedule","DELETE /api/campaign-schedules/:scheduleId/remove/:activityId":"Remove activity from campaign schedule","POST /api/campaign-schedules/activities/:activityId/assign/:scheduleId":"Assign schedule to activity (reverse)","DELETE /api/campaign-schedules/activities/:activityId/remove/:scheduleId":"Remove schedule from activity (reverse)","POST /api/campaign-schedules/:scheduleId/bulk-assign":"Bulk assign multiple activities to schedule","DELETE /api/campaign-schedules/:scheduleId/bulk-remove":"Bulk remove multiple activities from schedule","GET /api/activities":"Get all post data activities (with optional filtering)","POST /api/activities":"Create new post data activity","GET /api/activities/:id":"Get post data activity by ID","PUT /api/activities/:id":"Update post data activity by ID","DELETE /api/activities/:id":"Delete post data activity by ID","GET /api/activities/author/:author":"Get activities by author","GET /api/activities/step-type/:stepType":"Get activities by step type","GET /api/activities/social/:socialId":"Get activities by social ID","GET /api/activities/:activityId/schedules":"Get campaign schedules by activity ID (join)","POST /api/activities/:activityId/assign/:scheduleId":"Assign schedule to activity","DELETE /api/activities/:activityId/remove/:scheduleId":"Remove schedule from activity","POST /api/activities/schedules/:scheduleId/assign/:activityId":"Assign activity to schedule (reverse)","DELETE /api/activities/schedules/:scheduleId/remove/:activityId":"Remove activity from schedule (reverse)","POST /api/activities/:activityId/bulk-assign":"Bulk assign multiple schedules to activity","DELETE /api/activities/:activityId/bulk-remove":"Bulk remove multiple schedules from activity","GET /api/campaign-steps":"Get all campaign steps (with optional filtering)","POST /api/campaign-steps":"Create new campaign step","GET /api/campaign-steps/:id":"Get campaign step by ID","PUT /api/campaign-steps/:id":"Update campaign step by ID","DELETE /api/campaign-steps/:id":"Delete campaign step by ID","GET /api/campaign-steps/type/:stepType":"Get campaign steps by type","GET /api/campaign-steps/order/:stepOrder":"Get campaign steps by order","GET /api/campaign-steps/delay/:minDays/:maxDays":"Get campaign steps by delay range","GET /api/profile-limits":"Get all profile limits (with optional filtering)","POST /api/profile-limits":"Create new profile limit","GET /api/profile-limits/:id":"Get profile limit by ID","PUT /api/profile-limits/:id":"Update profile limit by ID","DELETE /api/profile-limits/:id":"Delete profile limit by ID","GET /api/profile-limits/type/:limitType":"Get profile limits by type","GET /api/profile-limits/status/:status":"Get profile limits by status","GET /api/profile-limits/remaining/:threshold":"Get profile limits with remaining above threshold","GET /api/profile-limits/user-set/:minLimit/:maxLimit":"Get profile limits by user set range","GET /api/profile-limits/connection/:connectionId":"Get profile limits by connection ID (join)","GET /api/profile-limits/:profileLimitId/connections":"Get connections by profile limit ID (join)","POST /api/profile-limits/:profileLimitId/assign/:connectionId":"Assign connection to profile limit","DELETE /api/profile-limits/:profileLimitId/remove/:connectionId":"Remove connection from profile limit","POST /api/profile-limits/connections/:connectionId/assign/:profileLimitId":"Assign profile limit to connection (reverse)","DELETE /api/profile-limits/connections/:connectionId/remove/:profileLimitId":"Remove profile limit from connection (reverse)","POST /api/profile-limits/:profileLimitId/bulk-assign":"Bulk assign multiple connections to profile limit","DELETE /api/profile-limits/:profileLimitId/bulk-remove":"Bulk remove multiple connections from profile limit","GET /api/connections/:connectionId/profile-limits":"Get profile limits by connection ID (join)","POST /api/connections/:connectionId/assign/:profileLimitId":"Assign profile limit to connection","DELETE /api/connections/:connectionId/remove/:profileLimitId":"Remove profile limit from connection","POST /api/connections/:connectionId/bulk-assign":"Bulk assign multiple profile limits to connection","DELETE /api/connections/:connectionId/bulk-remove":"Bulk remove multiple profile limits from connection","GET /api/campaign-recipients":"Get all campaign recipients (with optional filtering including lead_id)","POST /api/campaign-recipients":"Create new campaign recipient (with optional lead_id)","GET /api/campaign-recipients/:id":"Get campaign recipient by ID","PUT /api/campaign-recipients/:id":"Update campaign recipient by ID (can update lead_id)","DELETE /api/campaign-recipients/:id":"Delete campaign recipient by ID","GET /api/campaign-recipients/campaign/:campaignId":"Get campaign recipients by campaign ID","GET /api/campaign-recipients/status/:status":"Get campaign recipients by status","GET /api/campaign-recipients/lead/:leadId":"Get campaign recipients by lead ID (foreign key)","GET /api/campaign-recipients/with-leads":"Get all campaign recipients with populated lead data","GET /api/campaign-recipients/:recipientId/with-lead":"Get campaign recipient with populated lead data","PUT /api/campaign-recipients/:recipientId/assign-lead/:leadId":"Assign lead to campaign recipient (one-to-one)","DELETE /api/campaign-recipients/:recipientId/remove-lead":"Remove lead from campaign recipient (set to null)","DELETE /api/campaign-recipients/campaign/:campaignId/bulk-delete":"Bulk delete campaign recipients by campaign ID","PATCH /api/campaign-recipients/campaign/:campaignId/bulk-update-status":"Bulk update status for campaign recipients","GET /api/leads/tag/:tagId":"Get all leads assigned to a specific tag","GET /api/leads/batch/:batchId/join":"Get all leads assigned to a specific batch (using join table)","POST /api/leads/tags/multiple":"Get all leads assigned to multiple tags (no duplicates)","POST /api/leads/batches/multiple":"Get all leads assigned to multiple batches (no duplicates)","POST /api/unipile/hosted-auth":"Unipile hosted authentication","POST /api/unipile/insert-lead-by-url":"Insert lead by LinkedIn URL via Unipile","POST /api/unipile/visit-lead-linkedin-profile":"Visit lead LinkedIn profile via Unipile","POST /api/unipile/sent-linkedin-invite-with-note":"Send LinkedIn invite with note via Unipile","POST /api/unipile/sent-linkedin-text-message":"Send LinkedIn text message via Unipile","POST /api/unipile/get-list-of-all-linkedin-reletion":"Get list of all LinkedIn relations via Unipile","POST /api/unipile/get-post-by-keywords":"Get LinkedIn posts by keywords via Unipile","POST /api/unipile/get-post-by-providerId":"Get LinkedIn posts by providerId via Unipile","POST /api/unipile/commenters-on-post":"Get commenters on LinkedIn post via Unipile","POST /api/unipile/react-on-post":"React on LinkedIn post via Unipile","POST /api/unipile/add-post-by-id":"Add LinkedIn post by ID via Unipile","POST /api/unipile/get-post-by-id":"Get LinkedIn post by ID via Unipile","POST /api/unipile/headless-get-info":"Get info using Unipile headless browser","POST /api/unipile/headless-send-headless-message":"Send message using Unipile headless browser"}},"success":true,"message":"API Documentation","timestamp":"2026-05-01T15:21:53.287Z"}