***

title: SwmlTransferSkill
slug: /reference/typescript/agents/skills/swml-transfer
description: Transfer calls using SWML transfer actions.
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[add-skill]: /docs/server-sdks/reference/typescript/agents/agent-base/add-skill

Transfer calls using SWML transfer actions. Supports named pattern-based transfers
with friendly destination names, or arbitrary direct-destination transfers.

**Class:** `SwmlTransferSkill`

**Tools:** `transfer_call` (always), `list_transfer_destinations` (when `patterns` are configured)

**Env vars:** None

<ParamField path="patterns" type={"Record<string, unknown>[]"} toc={true}>
  Array of named transfer patterns. Each object has:

  * `name` (string, required) -- Friendly name for the destination.
  * `destination` (string, required) -- SIP URI, phone number, or agent URL.
  * `description` (string, optional) -- Human-readable description.
</ParamField>

<ParamField path="allow_arbitrary" type="boolean" toc={true}>
  Whether to allow transfers to arbitrary destinations not in the patterns list.
  Defaults to `true` when no patterns are configured, `false` when patterns exist.
</ParamField>

<ParamField path="default_message" type="string" default="Transferring your call now." toc={true}>
  Default message to say before transferring.
</ParamField>

```typescript {6-16}
import { AgentBase, SwmlTransferSkill } from '@signalwire/sdk';

const agent = new AgentBase({ name: 'assistant', route: '/assistant' });
agent.setPromptText('You are a helpful assistant.');

await agent.addSkill(new SwmlTransferSkill({
  patterns: [
    {
      name: 'sales',
      destination: 'https://your-server.com/sales-agent',
      description: 'Sales team',
    },
    {
      name: 'support',
      destination: '+15551234567',
      description: 'Technical support line',
    },
  ],
  default_message: 'Let me connect you now.',
}));

agent.run();
```