# Update SIP profile

PUT https://%7BYour_Space_Name%7D.signalwire.com/api/relay/rest/sip_profile
Content-Type: application/json

Updates the SIP profile settings for your project.

#### Permissions

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

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

Reference: https://signalwire.com/docs/apis/rest/sip-profile/update-sip-profile

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: signalwire-rest
  version: 1.0.0
paths:
  /api/relay/rest/sip_profile:
    put:
      operationId: update-sip-profile
      summary: Update SIP profile
      description: >-
        Updates the SIP profile settings for your project.


        #### Permissions


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


        [Learn more about API scopes](/docs/platform/your-signalwire-api-space).
      tags:
        - subpackage_sipProfile
      parameters:
        - name: Authorization
          in: header
          description: >-
            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)

            ```
          required: true
          schema:
            type: string
      responses:
        '201':
          description: >-
            The request has succeeded and a new resource has been created as a
            result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SipProfileResponse'
        '401':
          description: Access is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode401'
        '422':
          description: The request failed validation. See errors for details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.ValidationError'
        '500':
          description: An internal server error occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Types.StatusCodes.StatusCode500'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSipProfileRequest'
servers:
  - url: https://%7BYour_Space_Name%7D.signalwire.com
components:
  schemas:
    UpdateSipProfileRequestDefaultEncryption:
      type: string
      enum:
        - required
        - optional
      description: >-
        A string representing whether connections to an endpoint that uses this
        profile require encryption or if encryption is optional. Encryption will
        always be used if possible. Possible values are required or optional.
      title: UpdateSipProfileRequestDefaultEncryption
    UpdateSipProfileRequest:
      type: object
      properties:
        domain_identifier:
          type: string
          description: >-
            String representing the domain_identifier portion of the profile.
            Must be unique across your project.
        default_codecs:
          type: array
          items:
            type: string
          description: >-
            A list of codecs this profile will support. Currently supported
            values are: OPUS, G722, PCMU, PCMA, VP8, H264.
        default_ciphers:
          type: array
          items:
            type: string
          description: >-
            A list of encryption ciphers this profile will support. Currently
            supported values are: AEAD_AES_256_GCM_8, AES_256_CM_HMAC_SHA1_80,
            AES_CM_128_HMAC_SHA1_80, AES_256_CM_HMAC_SHA1_32,
            AES_CM_128_HMAC_SHA1_32.
        default_encryption:
          $ref: '#/components/schemas/UpdateSipProfileRequestDefaultEncryption'
          description: >-
            A string representing whether connections to an endpoint that uses
            this profile require encryption or if encryption is optional.
            Encryption will always be used if possible. Possible values are
            required or optional.
        default_send_as:
          type: string
          description: >-
            The e164 formatted number you wish to set as the originating number
            when dialing PSTN phone numbers from a SIP Endpoint that uses this
            profile. Specify null or an empty string to randomly choose a
            purchased or verified number from within the project.
      description: Request body for updating the SIP profile.
      title: UpdateSipProfileRequest
    SipProfileResponseDefaultEncryption:
      type: string
      enum:
        - required
        - optional
      description: >-
        A string representing whether connections to an endpoint that uses this
        profile require encryption or if encryption is optional. Encryption will
        always be used if possible. Possible values are required or optional.
      title: SipProfileResponseDefaultEncryption
    SipProfileResponse:
      type: object
      properties:
        domain:
          type: string
          description: >-
            A string representation of the fully qualified domain name for this
            profile.
        domain_identifier:
          type: string
          description: >-
            String representing the domain_identifier portion of the profile.
            Must be unique across your project.
        default_codecs:
          type: array
          items:
            type: string
          description: >-
            A list of codecs this profile will support. Currently supported
            values are: OPUS, G722, PCMU, PCMA, VP8, H264.
        default_ciphers:
          type: array
          items:
            type: string
          description: >-
            A list of encryption ciphers this profile will support. Currently
            supported values are: AEAD_AES_256_GCM_8, AES_256_CM_HMAC_SHA1_80,
            AES_CM_128_HMAC_SHA1_80, AES_256_CM_HMAC_SHA1_32,
            AES_CM_128_HMAC_SHA1_32.
        default_encryption:
          $ref: '#/components/schemas/SipProfileResponseDefaultEncryption'
          description: >-
            A string representing whether connections to an endpoint that uses
            this profile require encryption or if encryption is optional.
            Encryption will always be used if possible. Possible values are
            required or optional.
        default_send_as:
          type: string
          description: >-
            The e164 formatted number you wish to set as the originating number
            when dialing PSTN phone numbers from a SIP Endpoint that uses this
            profile. Specify null or an empty string to randomly choose a
            purchased or verified number from within the project.
      description: Response containing the SIP profile.
      title: SipProfileResponse
    TypesStatusCodesStatusCode401Error:
      type: string
      enum:
        - Unauthorized
      title: TypesStatusCodesStatusCode401Error
    Types.StatusCodes.StatusCode401:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/TypesStatusCodesStatusCode401Error'
      required:
        - error
      description: Access is unauthorized.
      title: Types.StatusCodes.StatusCode401
    Types.StatusCodes.SpaceApiErrorItem:
      type: object
      properties:
        detail:
          type: string
          description: A description of what caused the error.
        status:
          type: string
          description: The HTTP status code.
        title:
          type: string
          description: A short summary of the error type.
        code:
          type: string
          description: The error code.
      required:
        - detail
        - status
        - title
        - code
      description: Details about a specific validation error.
      title: Types.StatusCodes.SpaceApiErrorItem
    Types.StatusCodes.ValidationError:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Types.StatusCodes.SpaceApiErrorItem'
          description: List of validation errors.
      required:
        - errors
      description: The request failed validation. See errors for details.
      title: Types.StatusCodes.ValidationError
    TypesStatusCodesStatusCode500Error:
      type: string
      enum:
        - Internal Server Error
      title: TypesStatusCodesStatusCode500Error
    Types.StatusCodes.StatusCode500:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/TypesStatusCodesStatusCode500Error'
      required:
        - error
      description: An internal server error occurred.
      title: Types.StatusCodes.StatusCode500
  securitySchemes:
    SignalWireBasicAuth:
      type: http
      scheme: basic
      description: >-
        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)

        ```

```

## SDK Code Examples

```python
import requests
import base64

url = "https://{your_space_name}.signalwire.com/api/relay/rest/sip_profile"

payload = {}
credentials = base64.b64encode(f"<project_id>:<api_token>".encode()).decode()

headers = {
    "Authorization": f"Basic {credentials}",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://{your_space_name}.signalwire.com/api/relay/rest/sip_profile';
const credentials = btoa("<project_id>:<api_token>");

const options = {
  method: 'PUT',
  headers: {
    Authorization: `Basic ${credentials}`,
    'Content-Type': 'application/json'
  },
  body: '{}'
};

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/relay/rest/sip_profile"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("PUT", 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 'base64'
require 'net/http'

url = URI("https://{your_space_name}.signalwire.com/api/relay/rest/sip_profile")

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

request = Net::HTTP::Put.new(url)
request["Authorization"] = "Basic #{Base64.strict_encode64("<project_id>:<api_token>")}"
request["Content-Type"] = 'application/json'
request.body = "{}"

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

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

HttpResponse<String> response = Unirest.put("https://{your_space_name}.signalwire.com/api/relay/rest/sip_profile")
  .header("Authorization", "Basic " + Base64.getEncoder().encodeToString("<project_id>:<api_token>".getBytes()))
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://{your_space_name}.signalwire.com/api/relay/rest/sip_profile', [
  'body' => '{}',
  'headers' => [
    'Authorization' => 'Basic ' . base64_encode('<project_id>:<api_token>'),
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;
using System;
using System.Text;

var client = new RestClient("https://{your_space_name}.signalwire.com/api/relay/rest/sip_profile");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("<project_id>:<api_token>")));
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", 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 = [] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://{your_space_name}.signalwire.com/api/relay/rest/sip_profile")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
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()
```