> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # 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) This endpoint expects a PhoneRouteAssignRequest. - `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 ### 201 The request has succeeded and a new resource has been created as a result. - `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` (AddressChannel, required) — Channels of the 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` ## Errors ### 401 Unauthorized Error Access is unauthorized. - `error` (enum, required) - Allowed values: `Unauthorized` ### 404 Not Found Error The server cannot find the requested resource. - `error` (enum, required) - Allowed values: `Not Found` ### 422 Unprocessable Entity Error The request contains invalid parameters. See errors for details. - `errors` (list of Types.StatusCodes.RestApiErrorItem, required) — List of validation errors. ### 500 Internal Server Error An internal server error occurred. - `error` (enum, required) - Allowed values: `Internal Server Error` ## Types ### AddressChannel ### Types.StatusCodes.RestApiErrorItem Details about a specific error. - `type` (string, required) — The category of error. - `code` (string, required) — A specific error code. - `message` (string, required) — A description of what caused the error. - `url` (string, required) — A link to documentation about this error. - `attribute` (string, optional, nullable) — The request parameter that caused the error, if applicable. ### 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 ## 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=("", "")) print(response.json()) ``` ```javascript const url = 'https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes'; const credentials = btoa(":"); 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("", "") 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("", "") 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 response = Unirest.post("https://{your_space_name}.signalwire.com/api/fabric/resources/id/phone_routes") .basicAuth("", "") .header("Content-Type", "application/json") .body("{\n \"phone_route_id\": \"691af061-cd86-4893-a605-173f47afc4c2\",\n \"handler\": \"calling\"\n}") .asString(); ``` ```php 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' => ['', ''], ]); 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("", ""); 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(":".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() ```