Skip to main content

What Are Integrations?

Integrations connect Feather AI to external services and platforms, enabling your agents to interact with your existing business tools. Unlike custom tools that call your APIs, integrations are pre-configured connections to popular third-party services. Integrations allow your agents to:
  • Sync with CRMs - Update Salesforce, HubSpot, or Pipedrive records
  • Schedule meetings - Book appointments via Calendly or Google Calendar
  • Send notifications - Post to Slack or Microsoft Teams
  • Manage tasks - Create tickets in Jira or Asana
  • Process payments - Handle transactions through Stripe
  • Access data - Pull information from Google Sheets or Airtable

Integration Architecture

Integration Types vs Integration Instances

Feather uses a two-level structure:
  • Integration Type: The service you’re connecting to (e.g., “Salesforce”, “HubSpot”)
  • Integration Instance: Your specific configuration for that service
This allows you to:
  • Have multiple instances of the same integration (e.g., separate Salesforce instances for different departments)
  • Share integration configurations across agents
  • Manage credentials centrally
  • Enable/disable integrations without removing configuration

Available Integrations

List Available Integration Types

See which integrations Feather supports:
const response = await fetch('https://prod.featherhq.com/api/v1/integrations', {
  headers: {
    'X-API-Key': API_KEY
  }
});

const integrations = await response.json();

integrations.forEach(integration => {
  console.log(`${integration.name} - ${integration.category}`);
  console.log(`  ${integration.description}`);
});

Setting Up Integrations

Create an Integration Instance

Configure a connection to a third-party service:
const instance = {
  integrationTypeId: "salesforce",
  name: "Main Salesforce Account",
  credentials: {
    clientId: "your_salesforce_client_id",
    clientSecret: "your_salesforce_client_secret",
    refreshToken: "your_refresh_token",
    instanceUrl: "https://your-instance.salesforce.com"
  },
  config: {
    defaultLeadSource: "Voice AI Agent",
    autoCreateLeads: true,
    syncInterval: 300 // seconds
  }
};

const response = await fetch('https://prod.featherhq.com/api/v1/integration-instances', {
  method: 'POST',
  headers: {
    'X-API-Key': API_KEY,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(instance)
});

const created = await response.json();

List Your Integration Instances

View configured integrations:
const response = await fetch('https://prod.featherhq.com/api/v1/integration-instances', {
  headers: {
    'X-API-Key': API_KEY
  }
});

const instances = await response.json();

instances.forEach(instance => {
  console.log(`${instance.name} (${instance.integrationTypeId})`);
  console.log(`  Status: ${instance.status}`);
  console.log(`  Created: ${instance.createdAt}`);
});

Update an Integration Instance

Modify integration configuration:
const updates = {
  name: "Updated Salesforce Integration",
  config: {
    autoCreateLeads: false,
    syncInterval: 600
  }
};

const response = await fetch(
  `https://prod.featherhq.com/api/v1/integration-instances/${instanceId}`,
  {
    method: 'PATCH',
    headers: {
      'X-API-Key': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(updates)
  }
);

Delete an Integration Instance

Remove an integration:
const response = await fetch(
  `https://prod.featherhq.com/api/v1/integration-instances/${instanceId}`,
  {
    method: 'DELETE',
    headers: {
      'X-API-Key': API_KEY
    }
  }
);

Salesforce

CRM integration for lead and opportunity management:
{
  integrationTypeId: "salesforce",
  credentials: {
    clientId: "your_client_id",
    clientSecret: "your_client_secret",
    refreshToken: "your_refresh_token",
    instanceUrl: "https://yourcompany.salesforce.com"
  },
  config: {
    // Automatically create leads from calls
    autoCreateLeads: true,

    // Default lead source
    defaultLeadSource: "Voice AI",

    // Fields to sync
    syncFields: ["Email", "Phone", "Company", "Status"],

    // Update frequency
    syncInterval: 300
  }
}
Agent Usage:
{
  prompt: {
    system: "After qualifying leads, update their Salesforce record with conversation details and next steps."
  }
}

HubSpot

Marketing and sales CRM:
{
  integrationTypeId: "hubspot",
  credentials: {
    apiKey: "your_hubspot_api_key"
  },
  config: {
    // Pipeline to add deals to
    defaultPipeline: "sales-pipeline",

    // Deal stage for new opportunities
    defaultDealStage: "qualified",

    // Contact properties to sync
    syncProperties: [
      "phone",
      "email",
      "company",
      "lead_status",
      "last_contacted"
    ]
  }
}

Calendly

Appointment scheduling:
{
  integrationTypeId: "calendly",
  credentials: {
    apiKey: "your_calendly_api_key",
    personalAccessToken: "your_pat"
  },
  config: {
    // Default event type
    defaultEventType: "30min-demo",

    // Calendar to use
    calendarId: "your-calendar-id",

    // Timezone
    timezone: "America/New_York",

    // Confirmation behavior
    sendConfirmation: true
  }
}
Agent Usage:
{
  prompt: {
    system: "When customers show interest, offer to schedule a demo using Calendly. Share the booking link and confirm the scheduled time.",
    preBuiltTools: ["calendly"]
  }
}

Slack

Team notifications and alerts:
{
  integrationTypeId: "slack",
  credentials: {
    webhookUrl: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
    botToken: "xoxb-your-bot-token"
  },
  config: {
    // Default channel for notifications
    defaultChannel: "#sales-alerts",

    // Notification triggers
    notifyOn: [
      "qualified_lead",
      "demo_booked",
      "high_value_opportunity"
    ],

    // Mention users for urgent items
    mentionUsers: {
      "urgent": "@channel",
      "high_value": "@sales-team"
    }
  }
}

Google Calendar

Direct calendar integration:
{
  integrationTypeId: "google-calendar",
  credentials: {
    clientId: "your_google_client_id",
    clientSecret: "your_google_client_secret",
    refreshToken: "your_refresh_token"
  },
  config: {
    calendarId: "primary",
    defaultDuration: 30, // minutes
    bufferTime: 15, // minutes between meetings
    workingHours: {
      start: "09:00",
      end: "17:00",
      timezone: "America/New_York"
    }
  }
}

Using Integrations in Agents

Automatic Sync

Some integrations sync automatically:
{
  integrationInstanceId: "salesforce-main",
  autoSync: true,
  syncEvents: [
    "call_completed",
    "lead_qualified",
    "demo_scheduled"
  ]
}

Manual Tool Calls

Others require explicit tool usage:
{
  prompt: {
    system: "When a lead is qualified, use the Salesforce tool to create or update their record.",
    tools: ["salesforce-update-lead"]
  }
}

Event-Driven Workflows

Trigger actions based on integration events:
// When Salesforce opportunity stage changes
if (salesforceEvent.type === 'opportunity_stage_changed' &&
    salesforceEvent.newStage === 'Closed Won') {

  // Trigger celebration workflow
  await startWorkflow({
    workflowId: 'customer-onboarding',
    leadId: salesforceEvent.leadId
  });
}

Common Integration Patterns

CRM Bidirectional Sync

Keep Feather and CRM in sync:
// Before call: Pull lead data from CRM
const crmData = await integrations.salesforce.getContact(leadId);

// During call: Agent has access to CRM data
await dispatchAgent({
  leadId: leadId,
  customData: crmData
});

// After call: Push results back to CRM
await integrations.salesforce.updateContact(leadId, {
  lastCallDate: call.endedAt,
  callDisposition: call.disposition,
  notes: call.summary
});

Calendar + CRM Workflow

Book meetings and update CRM:
// 1. Agent books meeting via Calendly
const meeting = await integrations.calendly.scheduleMeeting({
  leadEmail: lead.email,
  eventType: "demo-30min"
});

// 2. Update CRM with meeting details
await integrations.salesforce.createTask({
  contactId: lead.crmId,
  subject: "Product Demo Scheduled",
  dueDate: meeting.scheduledTime,
  description: `Demo scheduled via voice AI agent. Meeting link: ${meeting.joinUrl}`
});

// 3. Send Slack notification
await integrations.slack.sendMessage({
  channel: "#sales-demos",
  text: `📅 New demo scheduled with ${lead.name} for ${meeting.scheduledTime}`
});

Multi-Tool Lead Enrichment

Enrich leads with data from multiple sources:
// Get basic info from conversation
const leadInfo = {
  name: extractedName,
  company: extractedCompany,
  phone: callerPhone
};

// Enrich with Clearbit
const enrichedData = await integrations.clearbit.enrich(leadInfo.email);

// Update Salesforce
await integrations.salesforce.createLead({
  ...leadInfo,
  ...enrichedData,
  leadSource: "Voice AI Agent"
});

// Add to marketing automation
await integrations.hubspot.addToWorkflow({
  email: leadInfo.email,
  workflowId: "new-lead-nurture"
});

Best Practices

Security

  1. Credential management - Store credentials securely, never in code
  2. Least privilege - Grant minimum required permissions
  3. Regular rotation - Rotate API keys and tokens periodically
  4. Audit logs - Monitor integration usage
  5. Encrypted storage - Ensure credentials are encrypted at rest

Performance

  1. Rate limits - Respect third-party API rate limits
  2. Batch operations - Group updates when possible
  3. Async processing - Don’t block calls waiting for integrations
  4. Caching - Cache frequently accessed data
  5. Error handling - Handle integration failures gracefully

Reliability

  1. Retry logic - Implement retries for failed requests
  2. Fallback behavior - Define what happens when integration fails
  3. Health checks - Monitor integration connection status
  4. Timeout management - Set appropriate timeouts
  5. Circuit breakers - Prevent cascading failures

Data Consistency

  1. Idempotency - Ensure operations can safely retry
  2. Conflict resolution - Handle conflicting updates
  3. Data validation - Validate before syncing
  4. Audit trail - Track what changed and when
  5. Reconciliation - Periodically verify data consistency

Troubleshooting

Integration Not Working

Check:
  • Credentials are valid and not expired
  • Integration instance is active
  • API permissions are sufficient
  • Rate limits not exceeded
  • Network connectivity is working
Verify:
const instance = await getIntegrationInstance(instanceId);
console.log('Status:', instance.status);
console.log('Last Sync:', instance.lastSyncAt);
console.log('Errors:', instance.errors);

Authentication Failures

Common causes:
  • Expired OAuth tokens
  • Invalid API keys
  • Insufficient permissions
  • IP whitelist restrictions
Solutions:
  • Refresh OAuth tokens
  • Generate new API keys
  • Grant required permissions
  • Add Feather IPs to allowlist

Sync Issues

Symptoms:
  • Data not updating
  • Partial syncs
  • Duplicate records
  • Stale data
Debug:
// Check sync logs
const logs = await getIntegrationLogs(instanceId);
logs.forEach(log => {
  console.log(`${log.timestamp}: ${log.operation} - ${log.status}`);
  if (log.error) console.error(log.error);
});

Common Use Cases

CRM Sync

Bidirectional sync between Feather and your CRM

Meeting Scheduling

Automated appointment booking with calendar services

Team Notifications

Real-time alerts to Slack or Teams channels

Task Creation

Automatic ticket/task creation in project management tools

Payment Processing

Handle payments during or after calls

Data Enrichment

Enhance lead data with third-party information

Next Steps