***
id: 0f948677-5818-4ce4-9727-40516a8c1278
title: transfer
slug: /reference/transfer
description: >-
Transfer the execution of the script to a different `SWML section`, `URL`, or
`RELAY application`.
max-toc-depth: 3
----------------
Transfer the execution of the script to a different `SWML section`, `URL`, or `RELAY application`. Once
the transfer is complete, the script will continue executing SWML from the new location.
## **Properties**
An object that accepts the following properties.
Specifies where to transfer to. The value can be one of:
* `""` - section in the SWML document to jump to
* A URL (http or https) - URL to fetch next document from. Sends HTTP POST. Authentication can also be set in the url in the format of `username:password@url`.
* An inline SWML document (as a JSON string) - SWML document provided directly as a JSON string
Named parameters to send to a section, URL, or application.
User data, ignored by SignalWire. Accepts an object mapping variable names to values.
## **Valid Destination Values**
The destination string can be one of:
* `"section_name"` - section in the current document to execute.
(For example: `execute: main`)
* `"relay:"` - relay application to notify (currently not implemented)
* `"https://example.com/sub-swml.yaml"` - URL pointing to the document to execute.
An HTTP POST request will be sent to the URL. Authentication can also be set in the url in the format of `username:password@url`.
The `params` object is passed, along with the variables and the [`Call`](/docs/swml/reference/variables#variables-list) object.
***
## **Examples**
### Basic transfer to a URL
```yaml
version: 1.0.0
sections:
main:
- transfer:
dest: "https://example.com/next"
```
```json
{
"version": "1.0.0",
"sections": {
"main": [
{
"transfer": {
"dest": "https://example.com/next"
}
}
]
}
}
```
### Basic transfer to a section
```yaml
version: 1.0.0
sections:
main:
- play:
url: 'say:Transferring you to another section'
- transfer:
dest: subsection
- play:
url: 'say:Back!'
subsection:
- play:
url: 'say:inside a subsection'
```
```json
{
"version": "1.0.0",
"sections": {
"main": [
{
"play": {
"url": "say:Transferring you to another section"
}
},
{
"transfer": {
"dest": "subsection"
}
},
{
"play": {
"url": "say:Back!"
}
}
],
"subsection": [
{
"play": {
"url": "say:inside a subsection"
}
}
]
}
}
```
### Named parameter with sub-parameters
```yaml
version: 1.0.0
sections:
main:
- transfer:
- dest: "https://example.com/next"
- params:
- foo: "bar"
```
```json
{
"version": "1.0.0",
"sections": {
"main": [
{
"transfer": [
{
"dest": "https://example.com/next"
},
{
"params": [
{
"foo": "bar"
}
]
}
]
}
]
}
}
```
### Transfer to a SWML script hosted on a server
```yaml
version: 1.0.0
sections:
main:
- prompt:
play: >-
say: Press 1 to be transfered to the Sales department, 2 for marketing
department or anything else to listen to some music.
- switch:
variable: prompt_value
case:
'1':
- transfer:
dest: 'https://.ngrok-free.app'
params:
where: sales
'2':
- transfer:
dest: 'https://.ngrok-free.app'
params:
where: marketing
- play:
url: 'https://cdn.signalwire.com/swml/April_Kisses.mp3'
```
```json
{
"version": "1.0.0",
"sections": {
"main": [
{
"prompt": {
"play": "say: Press 1 to be transfered to the Sales department, 2 for marketing department or anything else to listen to some music."
}
},
{
"switch": {
"variable": "prompt_value",
"case": {
"1": [
{
"transfer": {
"dest": "https://.ngrok-free.app",
"params": {
"where": "sales"
}
}
}
],
"2": [
{
"transfer": {
"dest": "https://.ngrok-free.app",
"params": {
"where": "marketing"
}
}
}
]
}
}
},
{
"play": {
"url": "https://cdn.signalwire.com/swml/April_Kisses.mp3"
}
}
]
}
}
```
A minimal server for this SWML script can be written as follows:
```python
from flask import Flask, request
from waitress import serve
app = Flask(__name__)
@app.route("/", methods=['POST'])
def swml():
content = request.get_json(silent=True)
print(content)
return '''
version: 1.0.0
sections:
main:
- answer: {}
- play:
url: 'say: Welcome to the {} department.'
'''.format(content['params']['where'])
if __name__ == "__main__":
serve(app, host='0.0.0.0', port=6000)
```
```javascript
const express = require("express");
const app = express();
app.use(express.json());
// note the POST method
app.post("/", (req, res) => {
const data = req.body;
console.log(data);
res.send(`
version: 1.0.0
sections:
main:
- answer: {}
- play:
url: 'say: Welcome to the {} department.'
`);
});
const port = 6000;
app.listen(port);
```
This server (running on `localhost`) can be made accessible to the wider web (and thus this SWML script) using forwarding tools like `ngrok`.
Visit [ngrok.com](https://ngrok.com) to learn how.
The server will be sent the payload in the following format:
```json
{
"call": {
"call_id": "",
"node_id": "",
"segment_id": "",
"call_state": "answered",
"direction": "inbound",
"type": "phone",
"from": "",
"to": "",
"from_number": "",
"to_number": "",
"headers": [],
"project_id": "",
"space_id": ""
},
"vars": {
"answer_result": "success",
"prompt_result": "match_digits",
"prompt_value_raw": "2",
"prompt_value": "2"
},
"params": { "where": "marketing" }
}
```
The `call` object is described in detail in the [introduction](/docs/swml/reference/transfer).
All variables created within the SWML document are passed inside `vars`,
and the `params` object contains the parameters defined in the `params` parameter of `transfer`.