# Create a Call POST https://YOUR_SPACE.signalwire.com/api/laml/2010-04-01/Accounts/{AccountSid}/Calls Content-Type: application/x-www-form-urlencoded Create a call. #### 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/compatibility-api/rest/calls/create-a-call ## OpenAPI Specification ```yaml openapi: 3.1.0 info: title: compatibility version: 1.0.0 paths: /Accounts/{AccountSid}/Calls: post: operationId: create-a-call summary: Create a Call description: >- Create a call. #### 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_calls parameters: - name: AccountSid in: path description: The Project ID that uniquely identifies the Account. required: true schema: type: string format: uuid - 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: '200': description: The request has succeeded. content: application/json: schema: $ref: '#/components/schemas/CallResponse' '400': description: >- The request was invalid. Review the errors array for specific issues with your request. content: application/json: schema: $ref: '#/components/schemas/CompatibilityErrorArrayResponse' '401': description: Authentication failed. Please verify your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/CompatibilityErrorResponse' '422': description: >- The request could not be processed due to validation errors. Check the error details for more information. content: application/json: schema: $ref: '#/components/schemas/CompatibilityErrorResponse' requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateCallRequest' servers: - url: https://YOUR_SPACE.signalwire.com/api/laml/2010-04-01 components: schemas: CreateCallRequestMethod: type: string enum: - GET - POST default: POST description: Whether the request to `Url` is a `GET` or a `POST`. Default is `POST`. title: CreateCallRequestMethod CreateCallRequestFallbackMethod: type: string enum: - GET - POST default: POST description: >- Whether the request to `FallbackUrl` is a `GET` or a `POST`. Default is `POST`. title: CreateCallRequestFallbackMethod CreateCallRequestStatusCallbackMethod: type: string enum: - GET - POST default: POST description: >- Whether the request to `StatusCallback` URL is a `GET` or a `POST`. Default is `POST`. title: CreateCallRequestStatusCallbackMethod CreateCallRequestMachineDetection: type: string enum: - Enable - DetectMessageEnd - none default: none description: Whether a human or machine picked up the call. Default is `none`. title: CreateCallRequestMachineDetection CreateCallRequestAsyncAmdStatusCallbackMethod: type: string enum: - GET - POST default: POST description: >- Whether the request to `AsyncAmdStatusCallback` is a `GET` or a `POST`. Default is `POST`. title: CreateCallRequestAsyncAmdStatusCallbackMethod CreateCallRequestRecordingChannels: type: string enum: - mono - dual default: mono description: The number of channels in the recording. Default is `mono`. title: CreateCallRequestRecordingChannels CreateCallRequestRecordingTrack: type: string enum: - inbound - outbound - both default: both description: >- Specifies whether to record the `inbound`, `outbound`, or `both` audio. Default is `both`. title: CreateCallRequestRecordingTrack CreateCallRequestRecordingStatusCallbackMethod: type: string enum: - GET - POST default: POST description: >- Whether the request to `RecordingStatusCallback` URL is a `GET` or a `POST`. Default is `POST`. title: CreateCallRequestRecordingStatusCallbackMethod CreateCallRequestTrim: type: string enum: - trim-silence - do-not-trim default: trim-silence description: >- Whether leading and trailing silence is trimmed from a recording. Default is `trim-silence`. title: CreateCallRequestTrim CreateCallRequest: type: object properties: To: type: string description: >- The address that received the call. Can be a phone number in E.164 format, a SIP URI, or a client identifier. From: type: string description: >- The address that initiated the call. Must be a phone number in E.164 format for PSTN calls. Url: type: string format: uri description: >- The URL to handle the call. Required if `ApplicationSid` and `Laml`/`Twiml` are not used. ApplicationSid: type: string format: uuid description: >- The unique identifier of the application used to handle the call. Required if `Url` and `Laml`/`Twiml` are not used. Method: $ref: '#/components/schemas/CreateCallRequestMethod' description: >- Whether the request to `Url` is a `GET` or a `POST`. Default is `POST`. FallbackUrl: type: string format: uri description: >- The URL SignalWire will request if errors occur when fetching the `Url`. FallbackMethod: $ref: '#/components/schemas/CreateCallRequestFallbackMethod' description: >- Whether the request to `FallbackUrl` is a `GET` or a `POST`. Default is `POST`. StatusCallback: type: string format: uri description: >- The URL SignalWire will send webhooks to on every requested `StatusCallbackEvent` event. See the [Voice status callback](/docs/compatibility-api/rest/calls/webhooks/voice-status-callback) webhook for the payload your URL will receive. StatusCallbackMethod: $ref: '#/components/schemas/CreateCallRequestStatusCallbackMethod' description: >- Whether the request to `StatusCallback` URL is a `GET` or a `POST`. Default is `POST`. StatusCallbackEvent: type: array items: type: string description: >- The status events that trigger a SignalWire webhook. Valid values: initiated, ringing, answered, completed, ringing_forwarded, ringing_queued. Defaults to `completed`. CallerId: type: string description: >- The number, in E.164 format, or identifier of the caller. Used to override the From for caller ID purposes. SendDigits: type: string description: >- The digits to press after a call is connected. Valid characters are 0-9, #, *, w (wait 0.5s), and W (wait 1s). Timeout: type: integer default: 60 description: >- The time in seconds SignalWire will wait before assuming the call has no answer. Default is `60` seconds. MachineDetection: $ref: '#/components/schemas/CreateCallRequestMachineDetection' description: Whether a human or machine picked up the call. Default is `none`. MachineDetectionTimeout: type: integer default: 30 description: >- The time in seconds SignalWire will wait for machine detection before timing out. Default is `30` seconds. MachineDetectionSpeechThreshold: type: integer default: 2400 description: >- How many milliseconds of voice to decide it is a machine. Default is `2400` milliseconds. MachineDetectionSpeechEndThreshold: type: integer default: 1200 description: >- Number of milliseconds to wait for voice to finish. Default is `1200` milliseconds. MachineDetectionSilenceTimeout: type: integer default: 5000 description: >- Number of milliseconds to wait for initial voice before giving up. Default is `5000` milliseconds. MachineWordsThreshold: type: integer default: 6 description: How many words to count to decide it is a machine. Default is `6`. AsyncAmd: type: boolean default: false description: >- Whether or not to execute machine detection asynchronously. Default is `false`. AsyncAmdStatusCallbackMethod: $ref: '#/components/schemas/CreateCallRequestAsyncAmdStatusCallbackMethod' description: >- Whether the request to `AsyncAmdStatusCallback` is a `GET` or a `POST`. Default is `POST`. AsyncAmdStatusCallback: type: string format: uri description: The URL to request when the machine detection is completed. AsyncAmdPartialResults: type: boolean default: false description: >- Whether or not to report partial (interim) results to the callback url. Default is `false`. Record: type: boolean default: false description: Whether or not to record a call. Default is `false`. RecordingChannels: $ref: '#/components/schemas/CreateCallRequestRecordingChannels' description: The number of channels in the recording. Default is `mono`. RecordingTrack: $ref: '#/components/schemas/CreateCallRequestRecordingTrack' description: >- Specifies whether to record the `inbound`, `outbound`, or `both` audio. Default is `both`. RecordingStatusCallback: type: string format: uri description: >- The URL to request when recording is available. See the [Recording status callback](/docs/compatibility-api/rest/recordings/webhooks/recording-status-callback) webhook for the payload your URL will receive. RecordingStatusCallbackMethod: $ref: '#/components/schemas/CreateCallRequestRecordingStatusCallbackMethod' description: >- Whether the request to `RecordingStatusCallback` URL is a `GET` or a `POST`. Default is `POST`. RecordingStatusCallbackEvent: type: string default: completed description: >- The recording status events that trigger a webhook. Space-separated list. Valid values: completed, in-progress, absent. Default is `completed`. Trim: $ref: '#/components/schemas/CreateCallRequestTrim' description: >- Whether leading and trailing silence is trimmed from a recording. Default is `trim-silence`. SipAuthUsername: type: string description: >- The username to authenticate the caller when making an outbound SIP call. SipAuthPassword: type: string description: >- The password to authenticate the caller when making an outbound SIP call. MaxPricePerMinute: type: string description: >- The maximum price in USD acceptable for the call to be created. Format: up to 4 decimal places. required: - To - From description: Request body for creating a call. title: CreateCallRequest CallStatus: type: string enum: - queued - ringing - in-progress - canceled - completed - busy - failed - no-answer description: Call status. title: CallStatus CallDirection: type: string enum: - inbound - outbound description: Call direction. title: CallDirection AnsweredBy: type: string enum: - human - machine description: Who/what answered the call. title: AnsweredBy CallSubresourceUris: type: object properties: notifications: type: - string - 'null' description: The URI for notifications. Always null. recordings: type: string description: The URI for recordings. required: - notifications - recordings description: Call subresource URIs. title: CallSubresourceUris CallResponse: type: object properties: sid: type: string format: uuid description: The unique identifier for the call. account_sid: type: string format: uuid description: The unique identifier for the account that created this call. date_created: type: string description: The date, in RFC 2822 GMT format, this call was created. date_updated: type: string description: The date, in RFC 2822 GMT format, this call was updated. parent_call_sid: type: - string - 'null' format: uuid description: The unique identifier for the call that created this call. to: type: string description: The address that received the call. formatted_to: type: string description: The formatted number that received the call. to_formatted: type: string description: The formatted number that received the call. Alias for formatted_to. from: type: string description: The address that initiated the call. formatted_from: type: string description: The formatted number that initiated the call. from_formatted: type: string description: >- The formatted number that initiated the call. Alias for formatted_from. phone_number_sid: type: - string - 'null' format: uuid description: The unique identifier for the phone number. status: $ref: '#/components/schemas/CallStatus' description: The status of the call. start_time: type: - string - 'null' description: The time, in RFC 2822 GMT format, on which the call began. end_time: type: - string - 'null' description: The time, in RFC 2822 GMT format, on which the call was terminated. duration: type: integer description: The duration, in seconds, of the call. price: type: - number - 'null' format: double description: The charge for the call. price_unit: type: string description: The currency, in ISO 4127 format, for the price of the call. direction: $ref: '#/components/schemas/CallDirection' description: The direction of the call. answered_by: oneOf: - $ref: '#/components/schemas/AnsweredBy' - type: 'null' description: Who/what the call was answered by. api_version: type: string description: The version of the SignalWire API. forwarded_from: type: - string - 'null' description: The number this call was forwarded from. Always null. caller_name: type: - string - 'null' description: The caller name. Always null. uri: type: string description: The URI for the call. subresource_uris: $ref: '#/components/schemas/CallSubresourceUris' description: A Map of available sub-resources. annotation: type: - string - 'null' description: The annotation for the call. Always null. group_sid: type: - string - 'null' description: The group SID for the call. Always null. audio_in_mos: type: - number - 'null' format: double description: The Mean Opinion Score for audio quality (1.0-5.0). sip_result_code: type: - string - 'null' description: The SIP result code for the call. audio_rtt_avg: type: - integer - 'null' description: The average round-trip time for audio in milliseconds. audio_rtt_min: type: - integer - 'null' description: The minimum round-trip time for audio in milliseconds. audio_rtt_max: type: - integer - 'null' description: The maximum round-trip time for audio in milliseconds. audio_out_jitter_min: type: - integer - 'null' description: The minimum outbound audio jitter in milliseconds. audio_out_jitter_max: type: - integer - 'null' description: The maximum outbound audio jitter in milliseconds. audio_out_jitter_avg: type: - integer - 'null' description: The average outbound audio jitter in milliseconds. audio_out_lost: type: - integer - 'null' description: The number of outbound audio packets lost. required: - sid - account_sid - date_created - date_updated - parent_call_sid - to - formatted_to - to_formatted - from - formatted_from - from_formatted - phone_number_sid - status - start_time - end_time - duration - price - price_unit - direction - answered_by - api_version - forwarded_from - caller_name - uri - subresource_uris - annotation - group_sid - audio_in_mos - sip_result_code - audio_rtt_avg - audio_rtt_min - audio_rtt_max - audio_out_jitter_min - audio_out_jitter_max - audio_out_jitter_avg - audio_out_lost description: Response containing a single call. title: CallResponse CompatibilityErrorArrayItem: type: object properties: code: type: string description: The numeric string identifying the API error code message: type: string description: Error text more_info: type: string description: Url for more information on error code description: Error item in the errors array format. title: CompatibilityErrorArrayItem CompatibilityErrorArrayResponse: type: object properties: errors: type: array items: $ref: '#/components/schemas/CompatibilityErrorArrayItem' description: A list of errors description: Error response with errors array format. title: CompatibilityErrorArrayResponse CompatibilityErrorResponse: type: object properties: code: type: integer description: Error code. message: type: string description: Error message. more_info: type: string description: URL for more information about the error. status: type: integer description: HTTP status code. required: - code - message - more_info - status description: Error response model. title: CompatibilityErrorResponse 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 url = "https://your_space.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls" payload = "" headers = { "Authorization": "Basic :", "Content-Type": "application/x-www-form-urlencoded" } response = requests.post(url, data=payload, headers=headers) print(response.json()) ``` ```javascript const url = 'https://your_space.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls'; const options = { method: 'POST', headers: { Authorization: 'Basic :', 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams('') }; 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" "net/http" "io" ) func main() { url := "https://your_space.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls" req, _ := http.NewRequest("POST", url, nil) req.Header.Add("Authorization", "Basic :") req.Header.Add("Content-Type", "application/x-www-form-urlencoded") 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.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Basic :' request["Content-Type"] = 'application/x-www-form-urlencoded' 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.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls") .header("Authorization", "Basic :") .header("Content-Type", "application/x-www-form-urlencoded") .asString(); ``` ```php request('POST', 'https://your_space.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls', [ 'form_params' => null, 'headers' => [ 'Authorization' => 'Basic :', 'Content-Type' => 'application/x-www-form-urlencoded', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://your_space.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Basic :"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = [ "Authorization": "Basic :", "Content-Type": "application/x-www-form-urlencoded" ] let request = NSMutableURLRequest(url: NSURL(string: "https://your_space.signalwire.com/api/laml/2010-04-01/Accounts/AccountSid/Calls")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers 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() ```