V 2.0

Masking

Introduction

The Masking API provides the facility to mask phone numbers for temporary, anonymous communication channels. This API is useful for call centers, customer support, and privacy-focused applications.

Error Codes

Specific error codes for the Masking API, taken from the SarvErrors.js file:

Error Code Description
1501 m1 and m2 cannot be the same
1502 Expiry must be an integer value
1503 Your masking request could not be expired until now. So you cannot make another request
1504 Masking could not be inserted
1505 Masking number not available

Is there anything else you would like me to help you with regarding this document?

Unset

{{brand}}/api/v2/Masking/unset

Endpoint

Description

Unset Masking is a feature that removes or modifies an existing number masking. It allows users to terminate or update the duration of a previously created masking, providing flexibility in managing temporary communication channels.

Parameters

Parameter Type Parameter Name Type Required Description
Authentication ssid String Conditional* Session ID for authentication
Authentication userId String Conditional* User identifier for authentication
Authentication token String Conditional* Authentication token
Optional m1 String Conditional** First masked phone number
Optional m2 String Conditional** Second masked phone number
Optional mask String Conditional** Specific masked number
Optional expiry_time Timestamp No New expiry date and time for masking
Optional expiry_duration Integer No New expiry duration in minutes

Note: Either _ssid_ or _userId_ with _token_ _must be provided for authentication.__*_Note: At least one of m1, m2, or mask must be provided.

Additional Notes

Unset

var axios = require('axios');
var data = '{"ssid": "{{ssid}}","mask": {{callernumber}},"expiry_duration": -1}';

var config = {
 method: 'post',
 url: '{{brand}}/api/v2/Masking/unset',
 headers: { 
'Content-Length': ''
 },
 data : data
};

axios(config)
.then(function (response) {
 console.log(JSON.stringify(response.data));
})
.catch(function (error) {
 console.log(error);
});
setUrl('{{brand}}/api/v2/Masking/unset');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
 'follow_redirects' => TRUE
));
$request->setHeader(array(
 'Content-Length' => ''
));
$request->setBody('{"ssid": "{{ssid}}","mask": {{callernumber}},"expiry_duration": -1}');
try {
 $response = $request->send();
 if ($response->getStatus() == 200) {
echo $response->getBody();
 }
 else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
 }
}
catch(HTTP_Request2_Exception $e) {
 echo 'Error: ' . $e->getMessage();
}
import http.client

conn = http.client.HTTPSConnection("{{brand}}")
payload = "{\"ssid\": \"{{ssid}}\",\"mask\": {{callernumber}},\"expiry_duration\": -1}"
headers = {
 'Content-Length': ''
}
conn.request("POST", "/api/v2/Masking/unset", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var client = new RestClient("{{brand}}/api/v2/Masking/unset");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
var body = @"{" + "\n" +
@"    ""ssid"": ""{{ssid}}""," + "\n" +
@"    ""mask"": {{callernumber}}," + "\n" +
@"    ""expiry_duration"": -1" + "\n" +
@"" + "\n" +
@"}";
request.AddParameter("text/plain", body,  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
curl --location -g --request POST '{{brand}}/api/v2/Masking/unset' \
--data-raw '{
    "ssid": "{{ssid}}",
    "mask": {{callernumber}},
    "expiry_duration": -1

}'
var request = http.Request('POST', Uri.parse('{{brand}}/api/v2/Masking/unset'));
request.body = '''{\n    "ssid": "{{ssid}}",\n    "mask": {{callernumber}},\n    "expiry_duration": -1\n\n}''';

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
   print(await response.stream.bytesToString());
}
else {
   print(response.reasonPhrase);
}
package main

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

func main() {

   url := "%7B%7Bbrand%7D%7D/api/v2/Masking/unset"
   method := "POST"

   payload := strings.NewReader(`{
    "ssid": "{{ssid}}",
    "mask": {{callernumber}},
    "expiry_duration": -1

}`)

   client := &http.Client {
   }
   req, err := http.NewRequest(method, url, payload)

   if err != nil {
      fmt.Println(err)
      return
   }
   res, err := client.Do(req)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer res.Body.Close()

   body, err := ioutil.ReadAll(res.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(string(body))
}
POST /api/v2/Masking/unset HTTP/1.1
Host: {{brand}}
Content-Length: 84

{
    "ssid": "{{ssid}}",
    "mask": {{callernumber}},
    "expiry_duration": -1

}
OkHttpClient client = new OkHttpClient().newBuilder()
   .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n    \"ssid\": \"{{ssid}}\",\n    \"mask\": {{callernumber}},\n    \"expiry_duration\": -1\n\n}");
Request request = new Request.Builder()
   .url("{{brand}}/api/v2/Masking/unset")
   .method("POST", body)
   .addHeader("Content-Length", "")
   .build();
Response response = client.newCall(request).execute();
var myHeaders = new Headers();
myHeaders.append("Content-Length", "");

var raw = "{\n    \"ssid\": \"{{ssid}}\",\n    \"mask\": {{callernumber}},\n    \"expiry_duration\": -1\n\n}";

var requestOptions = {
   method: 'POST',
   headers: myHeaders,
   body: raw,
   redirect: 'follow'
};

fetch("{{brand}}/api/v2/Masking/unset", requestOptions)
   .then(response => response.text())
   .then(result => console.log(result))
   .catch(error => console.log('error', error));
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
   curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
   curl_easy_setopt(curl, CURLOPT_URL, "%7B%7Bbrand%7D%7D/api/v2/Masking/unset");
   curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
   curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
   struct curl_slist *headers = NULL;
   headers = curl_slist_append(headers, "Content-Length: ");
   curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
   const char *data = "{\n    \"ssid\": \"{{ssid}}\",\n    \"mask\": {{callernumber}},\n    \"expiry_duration\": -1\n\n}";
   curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
   res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
#import 

dispatch_semaphore_t sema = dispatch_semaphore_create(0);

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"%7B%7Bbrand%7D%7D/api/v2/Masking/unset"]
   cachePolicy:NSURLRequestUseProtocolCachePolicy
   timeoutInterval:10.0];
NSDictionary *headers = @{
   @"Content-Length": @""
};

[request setAllHTTPHeaderFields:headers];
NSData *postData = [[NSData alloc] initWithData:[@"{\n    \"ssid\": \"{{ssid}}\",\n    \"mask\": {{callernumber}},\n    \"expiry_duration\": -1\n\n}" dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postData];

[request setHTTPMethod:@"POST"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
   if (error) {
      NSLog(@"%@", error);
      dispatch_semaphore_signal(sema);
   } else {
      NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
      NSError *parseError = nil;
      NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
      NSLog(@"%@",responseDictionary);
      dispatch_semaphore_signal(sema);
   }
}];
[dataTask resume];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
open Lwt
open Cohttp
open Cohttp_lwt_unix

let postData = ref "{\n    \"ssid\": \"{{ssid}}\",\n    \"mask\": {{callernumber}},\n    \"expiry_duration\": -1\n\n}";;

let reqBody = 
   let uri = Uri.of_string "%7B%7Bbrand%7D%7D/api/v2/Masking/unset" in
   let headers = Header.init ()
      |> fun h -> Header.add h "Content-Length" ""
   in
   let body = Cohttp_lwt.Body.of_string !postData in

   Client.call ~headers ~body `POST uri >>= fun (_resp, body) ->
   body |> Cohttp_lwt.Body.to_string >|= fun body -> body

let () =
   let respBody = Lwt_main.run reqBody in
   print_endline (respBody)
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Length", "")

$body = "{`n    `"ssid`": `"{{ssid}}`",`n    `"mask`": {{callernumber}},`n    `"expiry_duration`": -1`n`n}"

$response = Invoke-RestMethod '{{brand}}/api/v2/Masking/unset' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
require "uri"
require "net/http"

url = URI("{{brand}}/api/v2/Masking/unset")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Length"] = ""
request.body = "{\n    \"ssid\": \"{{ssid}}\",\n    \"mask\": {{callernumber}},\n    \"expiry_duration\": -1\n\n}"

response = http.request(request)
puts response.read_body
printf '{
    "ssid": "{{ssid}}",
    "mask": {{callernumber}},
    "expiry_duration": -1

}'| http  --follow --timeout 3600 POST '{{brand}}/api/v2/Masking/unset' \
 Content-Length:
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

var semaphore = DispatchSemaphore (value: 0)

let parameters = "{\n    \"ssid\": \"{{ssid}}\",\n    \"mask\": {{callernumber}},\n    \"expiry_duration\": -1\n\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{brand}}/api/v2/Masking/unset")!,timeoutInterval: Double.infinity)
request.addValue("", forHTTPHeaderField: "Content-Length")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
   guard let data = data else {
      print(String(describing: error))
      semaphore.signal()
      return
   }
   print(String(data: data, encoding: .utf8)!)
   semaphore.signal()
}

task.resume()
semaphore.wait()

Example Response

 [{"key":"Date"
"value":"Thu
 28 Nov 2024 12:49:50 GMT"}
{"key":"Content-Type"
"value":"application\/json; charset=utf-8"}
{"key":"Content-Length"
"value":"51"}
{"key":"Connection"
"value":"keep-alive"}
{"key":"Access-Control-Allow-Origin"
"value":"*"}
{"key":"Access-Control-Allow-Methods"
"value":"POST
 GET
 OPTIONS
 PATCH
 DELETE"}
{"key":"Access-Control-Allow-Headers"
"value":"X-Requested-With
content-type"}
{"key":"Access-Control-Allow-Credentials"
"value":"true"}
{"key":"Vary"
"value":"Origin"}
{"key":"ETag"
"value":"W\/\"33-iVSeHn74crq18BBrCjWlZ6Ed1xo\""}
{"key":"Strict-Transport-Security"
"value":"max-age=31536000; includeSubDomains"}]
 {
    "status": "success",
    "message": "Your masking unset"
}