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

# Assign Resource to phone route

POST https://%7BYour_Space_Name%7D.signalwire.com/api/fabric/resources/{id}/phone_routes
Content-Type: application/json

Assigns an existing Fabric resource as a phone number's calling or messaging handler. Use it when inbound traffic to an owned number should run an AI Agent, script, Call Flow, Relay Application, or another resource. This operation does not purchase or import the number; use [Purchase phone number](/docs/apis/rest/phone-numbers/purchase-phone-number) or [Import phone number](/docs/apis/rest/phone-numbers/create-imported-phone-number) first when needed.

#### Permissions

The API token used to authenticate must have the following scope(s) enabled to make a successful request: _Voice_, _Messaging_, _Fax_, or _Video_.

[Learn more about API scopes](/docs/platform/your-signalwire-api-space).

Reference: https://signalwire.com/docs/apis/rest/phone-routes/assign-resource-phone-route

## Authentication

- `Authorization` header (basic auth, required) — SignalWire Basic Authentication using Project ID and API Token. The client sends HTTP requests with the Authorization header containing the word Basic followed by a space and a base64-encoded string of project_id:token. The project ID will be used as the username and the API token as the password. Example: ``` Authorization: Basic base64(project_id:token) ```

## Request

### Path parameters

- `id` (string, required) — The unique identifier of the Resource.

### Body (application/json)

- `phone_route_id` (string, required) — The id of the phone route.
- `handler` (enum, required) — Indicates if the resource should be assigned to a `calling` or `messaging` handler.
  - Allowed values: `calling`, `messaging`

## Response

### 200

The request has succeeded.

- `id` (string, required) — Unique ID of the Fabric Address.
- `name` (string, required) — Name of the Fabric Address.
- `display_name` (string, required) — Display name of the Fabric Address.
- `cover_url` (string, required) — Cover url of the Fabric Address.
- `preview_url` (string, required) — Preview url of the Fabric Address.
- `locked` (boolean, required) — Locks the Fabric Address. This is used to prevent the Fabric Address from accepting calls.
- `channels` (object or object or object, required) — Channels of the Fabric Address.
  - AudioChannel
    - `audio` (string, required) — Audio Channel of Fabric Address
  - MessagingChannel
    - `messaging` (string, required) — Messaging Channel of Fabric Address
  - VideoChannel
    - `video` (string, required) — Video Channel of Fabric Address
- `created_at` (datetime, required) — Fabric Address Creation Date.
- `type` (enum, required) — The display type of a fabric address pointing to an application.
  - Allowed values: `app`

## Examples

**Request**

```json
{
  "phone_route_id": "691af061-cd86-4893-a605-173f47afc4c2",
  "handler": "calling"
}
```

**Response**

```json
{
  "id": "691af061-cd86-4893-a605-173f47afc4c2",
  "name": "justice-league",
  "display_name": "Justice League",
  "cover_url": "https://coverurl.com",
  "preview_url": "https://previewurl.com",
  "locked": true,
  "channels": {
    "audio": "/external/resource_name?channel=audio"
  },
  "created_at": "2024-05-06T12:20:00Z",
  "type": "app"
}
```

**SDK Code**

```python
import requests

url = "https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes"

payload = {
    "phone_route_id": "691af061-cd86-4893-a605-173f47afc4c2",
    "handler": "calling"
}
headers = {
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers, auth=("<project_id>", "<api_token>"))

print(response.json())
```

```javascript
const url = 'https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes';
const credentials = btoa("<project_id>:<api_token>");

const options = {
  method: 'POST',
  headers: {
    Authorization: `Basic ${credentials}`,
    'Content-Type': 'application/json'
  },
  body: '{"phone_route_id":"691af061-cd86-4893-a605-173f47afc4c2","handler":"calling"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes"

	payload := strings.NewReader("{\n  \"phone_route_id\": \"691af061-cd86-4893-a605-173f47afc4c2\",\n  \"handler\": \"calling\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.SetBasicAuth("<project_id>", "<api_token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request.basic_auth("<project_id>", "<api_token>")
request["Content-Type"] = 'application/json'
request.body = "{\n  \"phone_route_id\": \"691af061-cd86-4893-a605-173f47afc4c2\",\n  \"handler\": \"calling\"\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes")
  .basicAuth("<project_id>", "<api_token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"phone_route_id\": \"691af061-cd86-4893-a605-173f47afc4c2\",\n  \"handler\": \"calling\"\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes', [
  'body' => '{
  "phone_route_id": "691af061-cd86-4893-a605-173f47afc4c2",
  "handler": "calling"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
    'auth' => ['<project_id>', '<api_token>'],
]);

echo $response->getBody();
```

```csharp
using RestSharp;
using RestSharp.Authenticators;

var client = new RestClient("https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes");
client.Authenticator = new HttpBasicAuthenticator("<project_id>", "<api_token>");
var request = new RestRequest(Method.POST);

request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"phone_route_id\": \"691af061-cd86-4893-a605-173f47afc4c2\",\n  \"handler\": \"calling\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let credentials = Data("<project_id>:<api_token>".utf8).base64EncodedString()

let headers = [
  "Authorization": "Basic \(credentials)",
  "Content-Type": "application/json"
]
let parameters = [
  "phone_route_id": "691af061-cd86-4893-a605-173f47afc4c2",
  "handler": "calling"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```