> ## Documentation Index
> Fetch the complete documentation index at: https://docs.beam.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Integrations

> Build custom API connections for proprietary systems and services not available in the integration catalog

When you need connections to proprietary systems, internal tools, or services not in Beam's integration catalog, custom integrations let you build direct API connections.

<iframe src="https://app.supademo.com/embed/cmgj612mf10clkrn9np4rulwe" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen style={{width: "100%", height: "450px"}} />

## When to Build Custom Integrations

<CardGroup cols={2}>
  <Card title="Internal Systems" icon="building">
    Connect proprietary business systems and internal platforms
  </Card>

  <Card title="Specialized Services" icon="flask">
    Integrate industry-specific platforms not in the catalog
  </Card>

  <Card title="Custom APIs" icon="code">
    Work with custom-built APIs and microservices
  </Card>

  <Card title="Custom Auth" icon="key">
    Implement specialized authentication requirements
  </Card>
</CardGroup>

**Before Building:**

* Check if the service exists in Beam's 1500+ integration catalog
* Have API documentation ready (OpenAPI spec preferred)
* Confirm authentication credentials and permissions

## Building a Custom Integration

<Steps>
  <Step title="Access Integration Builder">
    Navigate to **Integrations** → **"Create custom integration"**

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.20.12.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=1fa56fe9eaa5b4d447a16dfcc38ef219" alt="Create custom integration button" width="2898" height="1560" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.20.12.png" />
    </Frame>
  </Step>

  <Step title="Configure Basics">
    **Name**: Clear, descriptive (e.g., "Acme CRM API")

    **Icon**: Optional, for visual identification

    **Category**: Select appropriate category for filtering

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.20.54.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=7c71c4bd743f427bd309bae74cfbd25f" alt="Integration basic configuration" width="2902" height="1574" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.20.54.png" />
    </Frame>
  </Step>

  <Step title="Configure Authentication">
    Choose authentication method:

    **API Key** (Most common):

    * Send via: Default, Bearer, Query, or Header
    * Supports custom header names

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.22.28.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=88c2e8067afbf7af574d800e930342be" alt="API Key authentication configuration" width="2346" height="1502" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.22.28.png" />
    </Frame>

    **Basic**: Username and password (legacy systems)

    **OAuth 2.0**: Modern standard requiring Authorization URL, Access Token URL, Client ID/Secret, and Scopes

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.25.38.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=3e1810a7e426b469ade230876d41ebf4" alt="OAuth 2.0 authentication configuration" width="2370" height="1558" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.25.38.png" />
    </Frame>

    **None**: Public APIs without authentication
  </Step>

  <Step title="Define Tools and Actions">
    **Manual Creation:**

    * Click "Add tool"
    * Define name, description, endpoint, parameters

    **OpenAPI Import:**

    * Click "Import from URL"
    * Provide OpenAPI spec URL
    * System auto-generates tools

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.26.16.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=973164d61d367122cf17d3cab4d30224" alt="Tools section with activation" width="2332" height="560" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.26.16.png" />
    </Frame>
  </Step>

  <Step title="Configure Tool Details">
    **API Endpoint:**

    * HTTP Method: GET, POST, PUT, PATCH, DELETE
    * Endpoint URL with parameter placeholders
    * Example: `https://api.vendor.com/orders/{order_id}`

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.26.59.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=8b1ba19119e9a59eb6ed166fd8b792c5" alt="Tool configuration with endpoint and parameters" width="2346" height="1546" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.26.59.png" />
    </Frame>

    **Parameters:**

    * **URL**: Path variables (`{order_id}`)
    * **Query**: URL parameters (`?status=completed`)
    * **Body**: JSON for POST/PUT/PATCH

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.28.59.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=105d6ae616e07627548207757ea984ac" alt="Query parameters configuration" width="2356" height="1548" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.28.59.png" />
    </Frame>

    Each parameter needs:

    * Key (name)
    * Type (String, Number, Boolean, Object, Array)
    * Parameter hint (AI context)
    * Required toggle

    **Test Tool**: Validate with sample values before saving
  </Step>

  <Step title="Save and Add Connection">
    Click **"Save"** to create the integration

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.32.01.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=90edc437987e7fa78ca02f8eec50c8d1" alt="Success notification" width="2412" height="1556" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.32.01.png" />
    </Frame>

    Your integration appears in the catalog:

    <Frame>
      <img src="https://mintcdn.com/beamai/19PRqq2Lu11IakoJ/02-building-agents/advanced-patterns/custom-integrations/Screenshot%202025-11-07%20at%2020.32.13.png?fit=max&auto=format&n=19PRqq2Lu11IakoJ&q=85&s=993a2aeac33cb39fe7122947263b8807" alt="Custom integration in catalog" width="2474" height="1382" data-path="02-building-agents/advanced-patterns/custom-integrations/Screenshot 2025-11-07 at 20.32.13.png" />
    </Frame>

    **Add Connection:**

    1. Find your custom integration
    2. Click "Add a connection"
    3. Provide credentials
    4. Test and save
  </Step>
</Steps>

## Using in Workflows

### Adding Custom Integration to Nodes

1. **Select Tool**: Browse to your custom integration in node configuration
2. **Choose Action**: Pick specific API operation
3. **Map Inputs**: Use variable fill methods to pass data
4. **Select Connection**: Choose which credentials to use

### Accessing Outputs

Custom integration outputs are accessible to downstream nodes:

```
${node_name.field_name}
```

**Example:**

```
Order ID: ${get_order.order_id}
Status: ${get_order.status}
Total: ${get_order.total}
```

## Authentication Methods

### API Key

Most common method. Configure where the key is sent:

* **Bearer**: `Authorization: Bearer {api_key}`
* **Header**: Custom header name
* **Query**: URL parameter

**Best Practice**: Use connection-level storage, rotate regularly, separate keys for environments

### OAuth 2.0

Secure, user-authorized access:

**Authorization Code**: User explicitly authorizes, supports token refresh

**Client Credentials**: Machine-to-machine, no user authorization

**Required**: Authorization URL, Access Token URL, Scopes, Client ID/Secret

### Basic

Username/password for legacy systems. Less secure than modern methods.

## Schema Definition

### OpenAPI Import

Fastest setup for documented APIs:

1. Provide OpenAPI spec URL
2. System generates tools automatically
3. Review and activate endpoints

Supports OpenAPI 3.0.x, 2.0 (Swagger), JSON or YAML

### Manual Schema

For APIs without OpenAPI specs:

```json theme={null}
{
  "tool_name": "Get Order Details",
  "description": "Retrieve order information",
  "required_extracted_args": [
    "order_id: string // Order identifier"
  ],
  "integration_provider_details": {
    "request": {
      "method": "GET",
      "endpoint": "https://api.vendor.com/orders/{order_id}"
    },
    "response": {
      "order_id": "{{result.data.id}}",
      "status": "{{result.data.status}}"
    }
  }
}
```

## Testing

**Test Tool Feature:**

1. Open tool configuration
2. Click "Test tool" tab
3. Provide sample values
4. Verify response structure

**Test in Workflow:**

* Build minimal flow with static data
* Run task manually
* Review execution results
* Verify data flows to next nodes

## Common Errors

**401 Unauthorized**: Check credentials, token expiration, OAuth scopes

**400 Bad Request**: Verify required parameters, types, formats

**429 Too Many Requests**: Add delays, use caching, batch operations

**Request Timeout**: Check endpoint accessibility, optimize queries

## Advanced Patterns

**Dynamic Endpoints**: Use variable substitution

```
https://api.vendor.com/tenants/{tenant_id}/orders/{order_id}
```

**Pagination**: Loop through pages, extract next token, aggregate results

**Response Transformation**: Use Custom GPT tools to process raw API data into structured outputs

## Best Practices

**Security:**

* Never expose API keys in logs
* Separate credentials for dev/staging/prod
* Rotate credentials regularly

**Performance:**

* Minimize unnecessary requests
* Cache frequently accessed data
* Respect rate limits

**Maintenance:**

* Document API version in integration name
* Test after API updates
* Monitor provider changelogs

## Examples

### Internal CRM

* **Auth**: API Key (Header)
* **Tools**: Get Customer, Create Customer, Update Status
* **Use**: Workflow creates CRM record on signup

### Legacy ERP

* **Auth**: Basic Authentication
* **Tools**: Query Inventory, Create PO, Update Status
* **Use**: Check inventory before order, create PO if low

### Microservices

* **Auth**: OAuth 2.0 (Client Credentials)
* **Tools**: Process Order, Calculate Shipping, Validate Payment
* **Use**: E-commerce workflow orchestrates multiple services

## Next Steps

<CardGroup cols={2}>
  <Card title="Multi-Agent Collaboration" icon="users" href="/02-building-agents/advanced-patterns/multi-agent-collaboration/multi-agent-collaboration">
    Enable agents to call other agents for complex workflows
  </Card>

  <Card title="Integrations" icon="plug" href="/02-building-agents/agent-configuration/integrations/integrations">
    Learn about pre-built integration catalog
  </Card>

  <Card title="Structured Outputs" icon="brackets-curly" href="/02-building-agents/agent-configuration/structured-outputs/structured-outputs">
    Design predictable output schemas for integrations
  </Card>

  <Card title="Multi-Agent Collaboration" icon="users" href="/02-building-agents/advanced-patterns/multi-agent-collaboration/multi-agent-collaboration">
    Enable agents to share data and coordinate workflows
  </Card>
</CardGroup>
