{"id":6014,"date":"2022-11-15T17:53:13","date_gmt":"2022-11-15T17:53:13","guid":{"rendered":"https:\/\/serviceobjects.wpaladdin.com\/?page_id=6014"},"modified":"2025-09-26T16:09:07","modified_gmt":"2025-09-26T23:09:07","slug":"lvi-rest","status":"publish","type":"page","link":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/","title":{"rendered":"LVI &#8211; REST"},"content":{"rendered":"\n<div class=\"wp-block-create-block-tabs\"><ul class=\"tab-labels\" role=\"tablist\" aria-label=\"tabbed content\"><li class=\"tab-label active\" role=\"tab\" aria-selected=\"true\" aria-controls=\"C#\" tabindex=\"0\">C#<\/li><li class=\"tab-label\" role=\"tab\" aria-selected=\"false\" aria-controls=\"Python\" tabindex=\"0\">Python<\/li><li class=\"tab-label\" role=\"tab\" aria-selected=\"false\" aria-controls=\"NodeJS\" tabindex=\"0\">NodeJS<\/li><\/ul><div class=\"tab-content\">\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p><strong><strong>Lead Validation International C# Code Snippet<\/strong><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\ufeffusing System.Web;\n\nnamespace lead_validation_international_dot_net.REST\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ Provides functionality to call the ServiceObjects Lead Validation International REST API's ValidateLeadInternational endpoint,\n    \/\/\/ retrieving lead validation information (e.g., name, address, phone, email, and business details) with fallback to a backu endpoint\n    \/\/\/ for reliability in live mode.\n    \/\/\/ &lt;\/summary>\n    public class ValidateLeadInternational\n    {\n        private const string LiveBaseUrl = \"https:\/\/sws.serviceobjects.com\/lvi\/api.svc\/\";\n        private const string BackupBaseUrl = \"https:\/\/swsbackup.serviceobjects.com\/lvi\/api.svc\/\";\n        private const string TrailBaseUrl = \"https:\/\/trial.serviceobjects.com\/lvi\/api.svc\/\";\n\n        \/\/\/ &lt;summary>\n        \/\/\/ Synchronously calls the ValidateLeadInternational REST endpoint to retrieve lead validation information,\n        \/\/\/ attempting the primary endpoint first and falling back to the backup if the response is invalid\n        \/\/\/ (Error.Number == \"4\") in live mode.\n        \/\/\/ &lt;\/summary>\n        \/\/\/ &lt;param name=\"input\">The input parameters including full name, address, phone numbers, email, and license key.&lt;\/param>\n        \/\/\/ &lt;returns>Deserialized &lt;see cref=\"LVIResponse\"\/>.&lt;\/returns>\n        public static LVIResponse Invoke(ValidateLeadInternationalInput input)\n        {\n            string url = BuildUrl(input, input.IsLive ? LiveBaseUrl : TrailBaseUrl);\n            LVIResponse response = Helper.HttpGet&lt;LVIResponse>(url, input.TimeoutSeconds);\n\n            \/\/ Fallback on error payload in live mode\n            if (input.IsLive &amp;&amp; !IsValid(response))\n            {\n                var fallbackUr = BuildUrl(input, BackupBaseUrl);\n                LVIResponse fallbackResponse = Helper.HttpGet&lt;LVIResponse>(fallbackUr, input.TimeoutSeconds);\n                return fallbackResponse;\n            }\n\n            return response;\n        }\n\n        \/\/\/ &lt;summary>\n        \/\/\/ Asynchronously calls the ValidateLeadInternational REST endpoint to retrieve lead validation information,\n        \/\/\/ attempting the primary endpoint first and falling back to the backup if the response is invalid\n        \/\/\/ (Error.Number == \"4\") in live mode.\n        \/\/\/ &lt;\/summary>\n        \/\/\/ &lt;param name=\"input\">The input parameters including full name, address, phone numbers, email, and license key.&lt;\/param>\n        \/\/\/ &lt;returns>Deserialized &lt;see cref=\"LVIResponse\"\/>.&lt;\/returns>\n        public static async Task&lt;LVIResponse> InvokeAsync(ValidateLeadInternationalInput input)\n        {\n            \/\/Use query string parameters so missing\/options fields don't break\n            \/\/the URL as path parameters would.\n            string url = BuildUrl(input, input.IsLive ? LiveBaseUrl : TrailBaseUrl);\n            LVIResponse response = await Helper.HttpGetAsync&lt;LVIResponse>(url, input.TimeoutSeconds).ConfigureAwait(false);\n            if (input.IsLive &amp;&amp; !IsValid(response))\n            {\n                var fallbackUrl = BuildUrl(input, BackupBaseUrl);\n                LVIResponse fallbackResponse = await Helper.HttpGetAsync&lt;LVIResponse>(fallbackUrl, input.TimeoutSeconds).ConfigureAwait(false);\n                return fallbackResponse;\n            }\n\n            return response;\n        }\n\n        \/\/ Build the full request URL, including URL-encoded query string\n        public static string BuildUrl(ValidateLeadInternationalInput input, string baseUrl)\n        {\n            var qs = $\"JSON\/ValidateLeadInternational?FullName={HttpUtility.UrlEncode(input.FullName)}\" +\n                     $\"&amp;Salutation={HttpUtility.UrlEncode(input.Salutation)}\" +\n                     $\"&amp;FirstName={HttpUtility.UrlEncode(input.FirstName)}\" +\n                     $\"&amp;LastName={HttpUtility.UrlEncode(input.LastName)}\" +\n                     $\"&amp;BusinessName={HttpUtility.UrlEncode(input.BusinessName)}\" +\n                     $\"&amp;BusinessDomain={HttpUtility.UrlEncode(input.BusinessDomain)}\" +\n                     $\"&amp;BusinessEIN={HttpUtility.UrlEncode(input.BusinessEIN)}\" +\n                     $\"&amp;Address1={HttpUtility.UrlEncode(input.Address1)}\" +\n                     $\"&amp;Address2={HttpUtility.UrlEncode(input.Address2)}\" +\n                     $\"&amp;Address3={HttpUtility.UrlEncode(input.Address3)}\" +\n                     $\"&amp;Address4={HttpUtility.UrlEncode(input.Address4)}\" +\n                     $\"&amp;Address5={HttpUtility.UrlEncode(input.Address5)}\" +\n                     $\"&amp;Locality={HttpUtility.UrlEncode(input.Locality)}\" +\n                     $\"&amp;AdminArea={HttpUtility.UrlEncode(input.AdminArea)}\" +\n                     $\"&amp;PostalCode={HttpUtility.UrlEncode(input.PostalCode)}\" +\n                     $\"&amp;Country={HttpUtility.UrlEncode(input.Country)}\" +\n                     $\"&amp;Phone1={HttpUtility.UrlEncode(input.Phone1)}\" +\n                     $\"&amp;Phone2={HttpUtility.UrlEncode(input.Phone2)}\" +\n                     $\"&amp;Email={HttpUtility.UrlEncode(input.Email)}\" +\n                     $\"&amp;IPAddress={HttpUtility.UrlEncode(input.IPAddress)}\" +\n                     $\"&amp;Gender={HttpUtility.UrlEncode(input.Gender)}\" +\n                     $\"&amp;DateOfBirth={HttpUtility.UrlEncode(input.DateOfBirth)}\" +\n                     $\"&amp;UTCCaptureTime={HttpUtility.UrlEncode(input.UTCCaptureTime)}\" +\n                     $\"&amp;OutputLanguage={HttpUtility.UrlEncode(input.OutputLanguage)}\" +\n                     $\"&amp;TestType={HttpUtility.UrlEncode(input.TestType)}\" +\n                     $\"&amp;LicenseKey={HttpUtility.UrlEncode(input.LicenseKey)}\";\n            return baseUrl + qs;\n        }\n\n        private static bool IsValid(LVIResponse response) => response?.Error == null || response.Error.TypeCode != \"3\";\n\n        \/\/\/ &lt;summary>\n        \/\/\/ Lead Validation International (LVI) evaluates international lead data and scores the data quality into pass\/fail\/review categories. By evaluating the information quality of a contact, online marketers can more effectively weed-out fraudulent contacts.Online fraudsters are more likely to provide inaccurate contact information because the address and phone number can be easily traced. Unlike other validation services that perform simple data checks on single variables, Service Objects Lead Validation solution is able to cross-validate that a contact\u2019s name, address, phone numbers, e-mail and IP address are all matched each other and are related to the consumer.\n        \/\/\/ &lt;\/summary>\n        \/\/\/ &lt;param name=\"FullName\">The contact\u2019s full name. e.g. Jane Doe&lt;\/param>\n        \/\/\/ &lt;param name=\"Salutation\">Salutation of the contact. Dr, Esq, Mr, Mrs etc&lt;\/param>\n        \/\/\/ &lt;param name=\"FirstName\">First name of the contact. e.g. Jane&lt;\/param>\n        \/\/\/ &lt;param name=\"LastName\">Last name of the contact. e.g. Doe&lt;\/param>\n        \/\/\/ &lt;param name=\"BusinessName\">The contacts company. e.g. Service Objects&lt;\/param>\n        \/\/\/ &lt;param name=\"BusinessDomain\">Website domain associated with the business. e.g. serviceobjects.com&lt;\/param>\n        \/\/\/ &lt;param name=\"BusinessEIN\">Represents the Company Tax Number. Used for Tax exempt checks for US leads.&lt;\/param>\n        \/\/\/ &lt;param name=\"Address1\">The address 1 of the contact or business address.&lt;\/param>\n        \/\/\/ &lt;param name=\"Address2\">The address 2 of the contact or business address.&lt;\/param>\n        \/\/\/ &lt;param name=\"Address3\">The address 3 of the contact or business address.&lt;\/param>\n        \/\/\/ &lt;param name=\"Address4\">The address 4 of the contact or business address.&lt;\/param>\n        \/\/\/ &lt;param name=\"Address5\">The address 5 of the contact or business address.&lt;\/param>\n        \/\/\/ &lt;param name=\"Locality\">The city of the contact\u2019s postal address.&lt;\/param>\n        \/\/\/ &lt;param name=\"AdminArea\">The state of the contact\u2019s postal address.&lt;\/param>\n        \/\/\/ &lt;param name=\"PostalCode\">The zip code of the contact\u2019s postal address.&lt;\/param>\n        \/\/\/ &lt;param name=\"Country\">The country of the contact\u2019s postal address. e.g. United States, US or USA&lt;\/param>\n        \/\/\/ &lt;param name=\"Phone1\">The contact\u2019s primary phone number.&lt;\/param>\n        \/\/\/ &lt;param name=\"Phone2\">The contact\u2019s secondary phone number.&lt;\/param>\n        \/\/\/ &lt;param name=\"Email\">The contact\u2019s email address.&lt;\/param>\n        \/\/\/ &lt;param name=\"IPAddress\">The contact\u2019s IP address in IPv4. (IPv6 coming in a future release)&lt;\/param>\n        \/\/\/ &lt;param name=\"Gender\">Male, Female or Neutral&lt;\/param>\n        \/\/\/ &lt;param name=\"DateOfBirth\">The contact\u2019s date of birth&lt;\/param>\n        \/\/\/ &lt;param name=\"UTCCaptureTime\">The time the lead was submitted&lt;\/param>\n        \/\/\/ &lt;param name=\"OutputLanguage\">Language field indicating what language some of the output information will be.&lt;\/param>\n        \/\/\/ &lt;param name=\"TestType\">The name of the type of validation you want to perform on this contact.&lt;\/param>\n        \/\/\/ &lt;param name=\"LicenseKey\">Your license key to use the service.&lt;\/param>\n        \/\/\/ &lt;param name=\"IsLive\">Value to determine whether to use the live or trial servers&lt;\/param>\n        \/\/\/ &lt;param name=\"TimeoutSeconds\">Timeout, in seconds, for the call to the service.  &lt;\/param>\n\n        public record ValidateLeadInternationalInput(\n            string FullName = \"\",\n            string Salutation = \"\",\n            string FirstName = \"\",\n            string LastName = \"\",\n            string BusinessName = \"\",\n            string BusinessDomain = \"\",\n            string BusinessEIN = \"\",\n            string Address1 = \"\",\n            string Address2 = \"\",\n            string Address3 = \"\",\n            string Address4 = \"\",\n            string Address5 = \"\",\n            string Locality = \"\",\n            string AdminArea = \"\",\n            string PostalCode = \"\",\n            string Country = \"\",\n            string Phone1 = \"\",\n            string Phone2 = \"\",\n            string Email = \"\",\n            string IPAddress = \"\",\n            string Gender = \"\",\n            string DateOfBirth = \"\",\n            string UTCCaptureTime = \"\",\n            string OutputLanguage = \"\",\n            string TestType = \"\",\n            string LicenseKey = \"\",\n            bool IsLive = true,\n            int TimeoutSeconds = 15\n        );\n    }\n}\n\n\n\ufeffusing System.Runtime.Serialization;\nusing System.Linq;\n\nnamespace lead_validation_international_dot_net.REST\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ Response object for the Lead Validation International REST API, containing information components and phone contact details.\n    \/\/\/ &lt;\/summary>\n    [DataContract]\n    public class LVIResponse\n    {\n        public string OverallCertainty { get; set; }\n        public string OverallQuality { get; set; }\n        public string LeadType { get; set; }\n        public string LeadCountry { get; set; }\n        public string NoteCodes { get; set; }\n        public string NoteDesc { get; set; }\n        public string NameCertainty { get; set; }\n        public string NameQuality { get; set; }\n        public string FirstNameLatin { get; set; }\n        public string LastNameLatin { get; set; }\n        public string FirstName { get; set; }\n        public string LastName { get; set; }\n        public string NameNoteCodes { get; set; }\n        public string NameNoteDesc { get; set; }\n        public string AddressCertainty { get; set; }\n        public string AddressQuality { get; set; }\n        public string AddressResolutionLevel { get; set; }\n        public string AddressLine1 { get; set; }\n        public string AddressLine2 { get; set; }\n        public string AddressLine3 { get; set; }\n        public string AddressLine4 { get; set; }\n        public string AddressLine5 { get; set; }\n        public string AddressLocality { get; set; }\n        public string AddressAdminArea { get; set; }\n        public string AddressPostalCode { get; set; }\n        public string AddressCountry { get; set; }\n        public string AddressNoteCodes { get; set; }\n        public string AddressNoteDesc { get; set; }\n        public string EmailCertainty { get; set; }\n        public string EmailQuality { get; set; }\n        public string EmailCorrected { get; set; }\n        public string EmailNoteCodes { get; set; }\n        public string EmailNoteDesc { get; set; }\n        public string IPCertainty { get; set; }\n        public string IPQuality { get; set; }\n        public string IPLocality { get; set; }\n        public string IPAdminArea { get; set; }\n        public string IPCountry { get; set; }\n        public string IPNoteCodes { get; set; }\n        public string IPNoteDesc { get; set; }\n        public string Phone1Certainty { get; set; }\n        public string Phone1Quality { get; set; }\n        public string Phone1Locality { get; set; }\n        public string Phone1AdminArea { get; set; }\n        public string Phone1Country { get; set; }\n        public string Phone1NoteCodes { get; set; }\n        public string Phone1NoteDesc { get; set; }\n        public string Phone2Certainty { get; set; }\n        public string Phone2Quality { get; set; }\n        public string Phone2Locality { get; set; }\n        public string Phone2AdminArea { get; set; }\n        public string Phone2Country { get; set; }\n        public string Phone2NoteCodes { get; set; }\n        public string Phone2NoteDesc { get; set; }\n        public string BusinessCertainty { get; set; }\n        public string BusinessQuality { get; set; }\n        public string BusinessName { get; set; }\n        public string BusinessDomain { get; set; }\n        public string BusinessEmail { get; set; }\n        public string BusinessNoteCodes { get; set; }\n        public string BusinessNoteDesc { get; set; }\n        public InformationComponent[] InformationComponents { get; set; }\n        public PhoneContact PhoneContact { get; set; }\n        public Error Error { get; set; }\n\n        public override string ToString()\n        {\n            string informationComponents = InformationComponents?.Any() == true\n                ? string.Join(\", \", InformationComponents.Select(c => c.ToString()))\n                : \"None\";\n            string phoneContact = PhoneContact != null ? PhoneContact.ToString() : \"None\";\n            string error = Error != null ? Error.ToString() : \"None\";\n\n            return $\"LVI Response: OverallCertainty = {OverallCertainty}, OverallQuality = {OverallQuality}, \" +\n                   $\"LeadType = {LeadType}, LeadCountry = {LeadCountry}, NoteCodes = {NoteCodes}, NoteDesc = {NoteDesc}, \" +\n                   $\"NameCertainty = {NameCertainty}, NameQuality = {NameQuality}, FirstNameLatin = {FirstNameLatin}, \" +\n                   $\"LastNameLatin = {LastNameLatin}, FirstName = {FirstName}, LastName = {LastName}, \" +\n                   $\"NameNoteCodes = {NameNoteCodes}, NameNoteDesc = {NameNoteDesc}, AddressCertainty = {AddressCertainty}, \" +\n                   $\"AddressQuality = {AddressQuality}, AddressResolutionLevel = {AddressResolutionLevel}, \" +\n                   $\"AddressLine1 = {AddressLine1}, AddressLine2 = {AddressLine2}, AddressLine3 = {AddressLine3}, \" +\n                   $\"AddressLine4 = {AddressLine4}, AddressLine5 = {AddressLine5}, AddressLocality = {AddressLocality}, \" +\n                   $\"AddressAdminArea = {AddressAdminArea}, AddressPostalCode = {AddressPostalCode}, \" +\n                   $\"AddressCountry = {AddressCountry}, AddressNoteCodes = {AddressNoteCodes}, AddressNoteDesc = {AddressNoteDesc}, \" +\n                   $\"EmailCertainty = {EmailCertainty}, EmailQuality = {EmailQuality}, EmailCorrected = {EmailCorrected}, \" +\n                   $\"EmailNoteCodes = {EmailNoteCodes}, EmailNoteDesc = {EmailNoteDesc}, IPCertainty = {IPCertainty}, \" +\n                   $\"IPQuality = {IPQuality}, IPLocality = {IPLocality}, IPAdminArea = {IPAdminArea}, IPCountry = {IPCountry}, \" +\n                   $\"IPNoteCodes = {IPNoteCodes}, IPNoteDesc = {IPNoteDesc}, Phone1Certainty = {Phone1Certainty}, \" +\n                   $\"Phone1Quality = {Phone1Quality}, Phone1Locality = {Phone1Locality}, Phone1AdminArea = {Phone1AdminArea}, \" +\n                   $\"Phone1Country = {Phone1Country}, Phone1NoteCodes = {Phone1NoteCodes}, Phone1NoteDesc = {Phone1NoteDesc}, \" +\n                   $\"Phone2Certainty = {Phone2Certainty}, Phone2Quality = {Phone2Quality}, Phone2Locality = {Phone2Locality}, \" +\n                   $\"Phone2AdminArea = {Phone2AdminArea}, Phone2Country = {Phone2Country}, Phone2NoteCodes = {Phone2NoteCodes}, \" +\n                   $\"Phone2NoteDesc = {Phone2NoteDesc}, BusinessCertainty = {BusinessCertainty}, BusinessQuality = {BusinessQuality}, \" +\n                   $\"BusinessName = {BusinessName}, BusinessDomain = {BusinessDomain}, BusinessEmail = {BusinessEmail}, \" +\n                   $\"BusinessNoteCodes = {BusinessNoteCodes}, BusinessNoteDesc = {BusinessNoteDesc}, \" +\n                   $\"InformationComponents = [{informationComponents}], PhoneContact = {phoneContact}, Error = {error}\";\n        }\n    }\n\n    \/\/\/ &lt;summary>\n    \/\/\/ Represents an information component in the Lead Validation International REST API response.\n    \/\/\/ &lt;\/summary>\n    [DataContract]\n    public class InformationComponent\n    {\n        public string Name { get; set; }\n        public string Value { get; set; }\n\n        public override string ToString()\n        {\n            return $\"InformationComponent: Name = {Name}, Value = {Value}\";\n        }\n    }\n\n    \/\/\/ &lt;summary>\n    \/\/\/ Represents phone contact information in the Lead Validation International REST API response.\n    \/\/\/ &lt;\/summary>\n    [DataContract]\n    public class PhoneContact\n    {\n        public string Name { get; set; }\n        public string Address { get; set; }\n        public string City { get; set; }\n        public string State { get; set; }\n        public string Zip { get; set; }\n        public string Type { get; set; }\n\n        public override string ToString()\n        {\n            return $\"PhoneContact: Name = {Name}, Address = {Address}, City = {City}, State = {State}, Zip = {Zip}, Type = {Type}\";\n        }\n    }\n\n    \/\/\/ &lt;summary>\n    \/\/\/ Represents error information in the Lead Validation International REST API response.\n    \/\/\/ &lt;\/summary>\n    [DataContract]\n    public class Error\n    {\n        public string Type { get; set; }\n        public string TypeCode { get; set; }\n        public string Desc { get; set; }\n        public string DescCode { get; set; }\n        public string Number { get; set; }\n\n        public override string ToString()\n        {\n            return $\"Error: Type = {Type}, TypeCode = {TypeCode}, Desc = {Desc}, DescCode = {DescCode}\";\n        }\n    }\n}\n\n\n\ufeffusing System.Text.Json;\nusing System.Web;\n\nnamespace lead_validation_international_dot_net.REST\n{\n    public class Helper\n    {\n        public static T HttpGet&lt;T>(string url, int timeoutSeconds)\n        {\n            using var httpClient = new HttpClient\n            {\n                Timeout = TimeSpan.FromSeconds(timeoutSeconds)\n            };\n            using var request = new HttpRequestMessage(HttpMethod.Get, url);\n            using HttpResponseMessage response = httpClient\n                .SendAsync(request)\n                .GetAwaiter()\n                .GetResult();\n            response.EnsureSuccessStatusCode();\n            using Stream responseStream = response.Content\n                .ReadAsStreamAsync()\n                .GetAwaiter()\n                .GetResult();\n            var options = new JsonSerializerOptions\n            {\n                PropertyNameCaseInsensitive = true\n            };\n            object? obj = JsonSerializer.Deserialize(responseStream, typeof(T), options);\n            T result = (T)obj!;\n            return result;\n        }\n\n        \/\/ Asynchronous HTTP GET and JSON deserialize\n        public static async Task&lt;T> HttpGetAsync&lt;T>(string url, int timeoutSeconds)\n        {\n            HttpClient HttpClient = new HttpClient();\n            HttpClient.Timeout = TimeSpan.FromSeconds(timeoutSeconds);\n            using var httpResponse = await HttpClient.GetAsync(url).ConfigureAwait(false);\n            httpResponse.EnsureSuccessStatusCode();\n            var stream = await httpResponse.Content.ReadAsStreamAsync().ConfigureAwait(false);\n            return JsonSerializer.Deserialize&lt;T>(stream)!;\n        }\n\n        public static string UrlEncode(string value) => HttpUtility.UrlEncode(value ?? string.Empty);\n    }\n}<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p><strong><strong>Lead Validation International Python Code Snippet<\/strong><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'''\nService Objects, Inc.\n\nThis module provides the validate_lead_international function to validate international lead data\nusing Service Objects LVI API. It handles live\/trial endpoints, fallback logic, and JSON parsing.\n\nFunctions:\n    validate_lead_international(full_name: str,\n                        salutation: str,\n                        first_name: str,\n                        last_name: str,\n                        business_name: str,\n                        business_domain: str,\n                        business_EIN: str,\n                        address_line1: str,\n                        address_line2: str,\n                        address_line3: str,\n                        address_line4: str,\n                        address_line5: str,\n                        locality: str,\n                        admin_area: str,\n                        postal_code: str,\n                        country: str,\n                        phone1: str,\n                        phone2: str,\n                        email: str,\n                        ip_address: str,\n                        gender: str,\n                        date_of_birth: str,\n                        utc_capture_time: str,\n                        output_language: str,\n                        test_type: str,\n                        license_key: str,\n                        is_live: bool = True,\n                        timeout_seconds: int = 15\n'''\n\nimport requests  # HTTP client for RESTful API calls\nfrom lvi_response import LVIResponse, Error, InformationComponent, PhoneContact\n\n# Endpoint URLs for LVI ValidateLeadInternational REST API\nprimary_url = 'https:\/\/sws.serviceobjects.com\/lvi\/api.svc\/json\/ValidateLeadInternational?'\nbackup_url = 'https:\/\/swsbackup.serviceobjects.com\/lvi\/api.svc\/json\/ValidateLeadInternational?'\ntrial_url = 'https:\/\/trial.serviceobjects.com\/lvi\/api.svc\/json\/ValidateLeadInternational?'\n\ndef validate_lead_international(\n                        full_name: str,\n                        salutation: str,\n                        first_name: str,\n                        last_name: str,\n                        business_name: str,\n                        business_domain: str,\n                        business_EIN: str,\n                        address_line1: str,\n                        address_line2: str,\n                        address_line3: str,\n                        address_line4: str,\n                        address_line5: str,\n                        locality: str,\n                        admin_area: str,\n                        postal_code: str,\n                        country: str,\n                        phone1: str,\n                        phone2: str,\n                        email: str,\n                        ip_address: str,\n                        gender: str,\n                        date_of_birth: str,\n                        utc_capture_time: str,\n                        output_language: str,\n                        test_type: str,\n                        license_key: str,\n                        is_live: bool = True,\n                        timeout_seconds: int = 15\n                    ) -> LVIResponse:\n    \"\"\"\n    Call LVI ValidateLeadInternational API to retrieve phone number information.\n\n    Parameters:\n        full_name: The contact's full name. e.g. Jane Doe\n        salutation: Salutation of the contact. Dr, Esq, Mr, Mrs etc\n        first_name: First name of the contact. e.g. Jane\n        last_name: Last name of the contact. e.g. Doe\n        business_name: The contact's company. e.g. Service Objects\n        business_domain: Website domain associated with the business. e.g. serviceobjects.com\n        business_EIN: Represents the Company Tax Number. Used for Tax exempt checks for US leads.\n        address_line1: The address 1 of the contact or business address.\n        address_line2: The address 2 of the contact or business address.\n        address_line3: The address 3 of the contact or business address.\n        address_line4: The address 4 of the contact or business address.\n        address_line5: The address 5 of the contact or business address.\n        locality: The city of the contact's postal address.\n        admin_area: The state of the contact's postal address.\n        postal_code: The zip code of the contact's postal address.\n        country: The country of the contact's postal address. e.g. United States, US or USA\n        phone1: The contact's primary phone number.\n        phone2: The contact's secondary phone number.\n        email: The contact's email address.\n        ip_address: The contact's IP address in IPv4. (IPv6 coming in a future release)\n        gender: Male, Female or Neutral\n        date_of_birth: The contact's date of birth\n        utc_capture_time: The time the lead was submitted\n        output_language: Language field indicating what language some of the output information will be.\n        test_type: The name of the type of validation you want to perform on this contact.\n        license_key: Your license key to use the service.\n        is_live: Value to determine whether to use the live or trial servers\n        timeout_seconds: Timeout, in seconds, for the call to the service.\n\n    Returns:\n        dict: Parsed JSON response with phone information or error details.\n    \"\"\"\n\n    params = {\n        'FullName': full_name,\n        'Salutation': salutation,\n        'FirstName': first_name,\n        'LastName': last_name,\n        'BusinessName': business_name,\n        'BusinessDomain': business_domain,\n        'BusinessEIN': business_EIN,\n        'AddressLine1': address_line1,\n        'AddressLine2': address_line2,\n        'AddressLine3': address_line3,\n        'AddressLine4': address_line4,\n        'AddressLine5': address_line5,\n        'Locality': locality,\n        'AdminArea': admin_area,\n        'PostalCode': postal_code,\n        'Country': country,\n        'Phone1': phone1,\n        'Phone2': phone2,\n        'Email': email,\n        'IPAddress': ip_address,\n        'Gender': gender,\n        'DateOfBirth': date_of_birth,\n        'UTCCaptureTime': utc_capture_time,\n        'OutputLanguage': output_language,\n        'TestType': test_type,\n        'LicenseKey': license_key,\n        'IsLive': is_live,\n        'TimeoutSeconds': timeout_seconds\n    }\n\n    # Select the base URL: production vs trial\n    url = primary_url if is_live else trial_url\n\n    # Attempt primary (or trial) endpoint first\n    try:\n        response = requests.get(url, params=params, timeout=timeout_seconds)\n        response.raise_for_status()\n        data = response.json()\n\n        # If API returned an error in JSON payload, trigger fallback\n        error = getattr(response, 'Error', None)\n        if not (error is None or getattr(error, 'Number', None) != \"3\"):\n            if is_live:\n                # Try backup URL\n                response = requests.get(backup_url, params=params, timeout=timeout_seconds)\n                response.raise_for_status()\n                data = response.json()\n                # If still error, propagate exception\n                if 'Error' in data:\n                    raise RuntimeError(f\"LVI backup error: {data['Error']}\")\n            else:\n                # Trial mode error is terminal\n                raise RuntimeError(f\"LVI trial error: {data['Error']}\")\n\n        # Convert JSON response to LVIResponse for structured access\n        error = Error(**data.get('Error', {})) if data.get('Error') else None\n        info_components = [InformationComponent(**ic) for ic in data.get('InformationComponents', [])] if data.get('InformationComponents') else None\n        phone_contact = PhoneContact(**data.get('PhoneContact', {})) if data.get('PhoneContact') else None\n        \n        return LVIResponse(\n                        OverallCertainty=data.get('OverallCertainty'),\n                        OverallQuality=data.get('OverallQuality'),\n                        LeadType=data.get('LeadType'),\n                        LeadCountry=data.get('LeadCountry'),\n                        NoteCodes=data.get('NoteCodes'),\n                        NoteDesc=data.get('NoteDesc'),\n                        NameCertainty=data.get('NameCertainty'),\n                        NameQuality=data.get('NameQuality'),\n                        FirstNameLatin=data.get('FirstNameLatin'),\n                        LastNameLatin=data.get('LastNameLatin'),\n                        FirstName=data.get('FirstName'),\n                        LastName=data.get('LastName'),\n                        NameNoteCodes=data.get('NameNoteCodes'),\n                        NameNoteDesc=data.get('NameNoteDesc'),\n                        AddressCertainty=data.get('AddressCertainty'),\n                        AddressQuality=data.get('AddressQuality'),\n                        AddressResolutionLevel=data.get('AddressResolutionLevel'),\n                        AddressLine1=data.get('AddressLine1'),\n                        AddressLine2=data.get('AddressLine2'),\n                        AddressLine3=data.get('AddressLine3'),\n                        AddressLine4=data.get('AddressLine4'),\n                        AddressLine5=data.get('AddressLine5'),\n                        AddressLocality=data.get('AddressLocality'),\n                        AddressAdminArea=data.get('AddressAdminArea'),\n                        AddressPostalCode=data.get('AddressPostalCode'),\n                        AddressCountry=data.get('AddressCountry'),\n                        AddressNoteCodes=data.get('AddressNoteCodes'),\n                        AddressNoteDesc=data.get('AddressNoteDesc'),\n                        EmailCertainty=data.get('EmailCertainty'),\n                        EmailQuality=data.get('EmailQuality'),\n                        EmailCorrected=data.get('EmailCorrected'),\n                        EmailNoteCodes=data.get('EmailNoteCodes'),\n                        EmailNoteDesc=data.get('EmailNoteDesc'),\n                        IPCertainty=data.get('IPCertainty'),\n                        IPQuality=data.get('IPQuality'),\n                        IPLocality=data.get('IPLocality'),\n                        IPAdminArea=data.get('IPAdminArea'),\n                        IPCountry=data.get('IPCountry'),\n                        IPNoteCodes=data.get('IPNoteCodes'),\n                        IPNoteDesc=data.get('IPNoteDesc'),\n                        Phone1Certainty=data.get('Phone1Certainty'),\n                        Phone1Quality=data.get('Phone1Quality'),\n                        Phone1Locality=data.get('Phone1Locality'),\n                        Phone1AdminArea=data.get('Phone1AdminArea'),\n                        Phone1Country=data.get('Phone1Country'),\n                        Phone1NoteCodes=data.get('Phone1NoteCodes'),\n                        Phone1NoteDesc=data.get('Phone1NoteDesc'),\n                        Phone2Certainty=data.get('Phone2Certainty'),\n                        Phone2Quality=data.get('Phone2Quality'),\n                        Phone2Locality=data.get('Phone2Locality'),\n                        Phone2AdminArea=data.get('Phone2AdminArea'),\n                        Phone2Country=data.get('Phone2Country'),\n                        Phone2NoteCodes=data.get('Phone2NoteCodes'),\n                        Phone2NoteDesc=data.get('Phone2NoteDesc'),\n                        BusinessCertainty=data.get('BusinessCertainty'),\n                        BusinessQuality=data.get('BusinessQuality'),\n                        BusinessName=data.get('BusinessName'),\n                        BusinessDomain=data.get('BusinessDomain'),\n                        BusinessEmail=data.get('BusinessEmail'),\n                        BusinessNoteCodes=data.get('BusinessNoteCodes'),\n                        BusinessNoteDesc=data.get('BusinessNoteDesc'),\n                        InformationComponents=info_components,\n                        PhoneContact=phone_contact,\n                        Error=error\n                )\n    except requests.RequestException as req_exc:\n        # Network or HTTP-level error occurred\n        if is_live:\n            try:\n                # Fallback to backup URL on network failure\n                response = requests.get(backup_url, params=params, timeout=timeout_seconds)\n                response.raise_for_status()\n                data = response.json()\n                if 'Error' in data:\n                    raise RuntimeError(f\"LVI backup error: {data['Error']}\") from req_exc\n\n                # Convert JSON response to LVIResponse for structured access\n                error = Error(**data.get('Error', {})) if data.get('Error') else None\n                info_components = [InformationComponent(**inf) for inf in data.get('InformationComponents', [])] if data.get('InformationComponents') else None\n                phone_contact = PhoneContact(**data.get('PhoneContact', {})) if data.get('PhoneContact') else None\n\n                return LVIResponse(\n                        OverallCertainty=data.get('OverallCertainty'),\n                        OverallQuality=data.get('OverallQuality'),\n                        LeadType=data.get('LeadType'),\n                        LeadCountry=data.get('LeadCountry'),\n                        NoteCodes=data.get('NoteCodes'),\n                        NoteDesc=data.get('NoteDesc'),\n                        NameCertainty=data.get('NameCertainty'),\n                        NameQuality=data.get('NameQuality'),\n                        FirstNameLatin=data.get('FirstNameLatin'),\n                        LastNameLatin=data.get('LastNameLatin'),\n                        FirstName=data.get('FirstName'),\n                        LastName=data.get('LastName'),\n                        NameNoteCodes=data.get('NameNoteCodes'),\n                        NameNoteDesc=data.get('NameNoteDesc'),\n                        AddressCertainty=data.get('AddressCertainty'),\n                        AddressQuality=data.get('AddressQuality'),\n                        AddressResolutionLevel=data.get('AddressResolutionLevel'),\n                        AddressLine1=data.get('AddressLine1'),\n                        AddressLine2=data.get('AddressLine2'),\n                        AddressLine3=data.get('AddressLine3'),\n                        AddressLine4=data.get('AddressLine4'),\n                        AddressLine5=data.get('AddressLine5'),\n                        AddressLocality=data.get('AddressLocality'),\n                        AddressAdminArea=data.get('AddressAdminArea'),\n                        AddressPostalCode=data.get('AddressPostalCode'),\n                        AddressCountry=data.get('AddressCountry'),\n                        AddressNoteCodes=data.get('AddressNoteCodes'),\n                        AddressNoteDesc=data.get('AddressNoteDesc'),\n                        EmailCertainty=data.get('EmailCertainty'),\n                        EmailQuality=data.get('EmailQuality'),\n                        EmailCorrected=data.get('EmailCorrected'),\n                        EmailNoteCodes=data.get('EmailNoteCodes'),\n                        EmailNoteDesc=data.get('EmailNoteDesc'),\n                        IPCertainty=data.get('IPCertainty'),\n                        IPQuality=data.get('IPQuality'),\n                        IPLocality=data.get('IPLocality'),\n                        IPAdminArea=data.get('IPAdminArea'),\n                        IPCountry=data.get('IPCountry'),\n                        IPNoteCodes=data.get('IPNoteCodes'),\n                        IPNoteDesc=data.get('IPNoteDesc'),\n                        Phone1Certainty=data.get('Phone1Certainty'),\n                        Phone1Quality=data.get('Phone1Quality'),\n                        Phone1Locality=data.get('Phone1Locality'),\n                        Phone1AdminArea=data.get('Phone1AdminArea'),\n                        Phone1Country=data.get('Phone1Country'),\n                        Phone1NoteCodes=data.get('Phone1NoteCodes'),\n                        Phone1NoteDesc=data.get('Phone1NoteDesc'),\n                        Phone2Certainty=data.get('Phone2Certainty'),\n                        Phone2Quality=data.get('Phone2Quality'),\n                        Phone2Locality=data.get('Phone2Locality'),\n                        Phone2AdminArea=data.get('Phone2AdminArea'),\n                        Phone2Country=data.get('Phone2Country'),\n                        Phone2NoteCodes=data.get('Phone2NoteCodes'),\n                        Phone2NoteDesc=data.get('Phone2NoteDesc'),\n                        BusinessCertainty=data.get('BusinessCertainty'),\n                        BusinessQuality=data.get('BusinessQuality'),\n                        BusinessName=data.get('BusinessName'),\n                        BusinessDomain=data.get('BusinessDomain'),\n                        BusinessEmail=data.get('BusinessEmail'),\n                        BusinessNoteCodes=data.get('BusinessNoteCodes'),\n                        BusinessNoteDesc=data.get('BusinessNoteDesc'),\n                        InformationComponents=info_components,\n                        PhoneContact=phone_contact,\n                        Error=error\n                )\n            except Exception as backup_exc:\n                # Both primary and backup failed; escalate\n                raise RuntimeError(\"LVI service unreachable on both endpoints\") from backup_exc\n        else:\n            raise RuntimeError(f\"LVI trial error: {str(req_exc)}\") from req_exc\n\n\nfrom dataclasses import dataclass\nfrom typing import Optional, List\n\n@dataclass\nclass LVIResponse:\n    OverallCertainty: Optional[str] = None\n    OverallQuality: Optional[str] = None\n    LeadType: Optional[str] = None\n    LeadCountry: Optional[str] = None\n    NoteCodes: Optional[str] = None\n    NoteDesc: Optional[str] = None\n    NameCertainty: Optional[str] = None\n    NameQuality: Optional[str] = None\n    FirstNameLatin: Optional[str] = None\n    LastNameLatin: Optional[str] = None\n    FirstName: Optional[str] = None\n    LastName: Optional[str] = None\n    NameNoteCodes: Optional[str] = None\n    NameNoteDesc: Optional[str] = None\n    AddressCertainty: Optional[str] = None\n    AddressQuality: Optional[str] = None\n    AddressResolutionLevel: Optional[str] = None\n    AddressLine1: Optional[str] = None\n    AddressLine2: Optional[str] = None\n    AddressLine3: Optional[str] = None\n    AddressLine4: Optional[str] = None\n    AddressLine5: Optional[str] = None\n    AddressLocality: Optional[str] = None\n    AddressAdminArea: Optional[str] = None\n    AddressPostalCode: Optional[str] = None\n    AddressCountry: Optional[str] = None\n    AddressNoteCodes: Optional[str] = None\n    AddressNoteDesc: Optional[str] = None\n    EmailCertainty: Optional[str] = None\n    EmailQuality: Optional[str] = None\n    EmailCorrected: Optional[str] = None\n    EmailNoteCodes: Optional[str] = None\n    EmailNoteDesc: Optional[str] = None\n    IPCertainty: Optional[str] = None\n    IPQuality: Optional[str] = None\n    IPLocality: Optional[str] = None\n    IPAdminArea: Optional[str] = None\n    IPCountry: Optional[str] = None\n    IPNoteCodes: Optional[str] = None\n    IPNoteDesc: Optional[str] = None\n    Phone1Certainty: Optional[str] = None\n    Phone1Quality: Optional[str] = None\n    Phone1Locality: Optional[str] = None\n    Phone1AdminArea: Optional[str] = None\n    Phone1Country: Optional[str] = None\n    Phone1NoteCodes: Optional[str] = None\n    Phone1NoteDesc: Optional[str] = None\n    Phone2Certainty: Optional[str] = None\n    Phone2Quality: Optional[str] = None\n    Phone2Locality: Optional[str] = None\n    Phone2AdminArea: Optional[str] = None\n    Phone2Country: Optional[str] = None\n    Phone2NoteCodes: Optional[str] = None\n    Phone2NoteDesc: Optional[str] = None\n    BusinessCertainty: Optional[str] = None\n    BusinessQuality: Optional[str] = None\n    BusinessName: Optional[str] = None\n    BusinessDomain: Optional[str] = None\n    BusinessEmail: Optional[str] = None\n    BusinessNoteCodes: Optional[str] = None\n    BusinessNoteDesc: Optional[str] = None\n    InformationComponents: Optional[List['InformationComponent']] = None\n    PhoneContact: Optional['PhoneContact'] = None\n    Error: Optional['Error'] = None\n\n    def __str__(self) -> str:\n        info = \", \".join(str(c) for c in self.InformationComponents) if self.InformationComponents else \"None\"\n        contact = str(self.PhoneContact) if self.PhoneContact else \"None\"\n        error = str(self.Error) if self.Error else \"None\"\n        return (f\"LVIResponse: OverallCertainty={self.OverallCertainty}, OverallQuality={self.OverallQuality}, \"\n                f\"LeadType={self.LeadType}, LeadCountry={self.LeadCountry}, NoteCodes={self.NoteCodes}, \"\n                f\"NoteDesc={self.NoteDesc}, FirstName={self.FirstName}, LastName={self.LastName}, \"\n                f\"BusinessName={self.BusinessName}, EmailCorrected={self.EmailCorrected}, \"\n                f\"PhoneContact={contact}, Error={error}, InformationComponents=[{info}]\")\n\n@dataclass\nclass InformationComponent:\n    Name: Optional[str] = None\n    Value: Optional[str] = None\n\n    def __str__(self) -> str:\n        return f\"InformationComponent: Name={self.Name}, Value={self.Value}\"\n\n@dataclass\nclass PhoneContact:\n    Name: Optional[str] = None\n    Address: Optional[str] = None\n    City: Optional[str] = None\n    State: Optional[str] = None\n    Zip: Optional[str] = None\n    Type: Optional[str] = None\n\n    def __str__(self) -> str:\n        return (f\"PhoneContact: Name={self.Name}, Address={self.Address}, City={self.City}, \"\n                f\"State={self.State}, Zip={self.Zip}, Type={self.Type}\")\n\n@dataclass\nclass Error:\n    Type: Optional[str] = None\n    TypeCode: Optional[str] = None\n    Desc: Optional[str] = None\n    DescCode: Optional[str] = None\n    Number: Optional[str] = None\n\n    def __str__(self) -> str:\n        return (f\"Error: Type={self.Type}, TypeCode={self.TypeCode}, Desc={self.Desc}, \"\n                f\"DescCode={self.DescCode}\")<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p><strong><strong>Lead Validation International NodeJS Code Snippet<\/strong><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import axios from 'axios';\nimport querystring from 'querystring';\nimport { LVIResponse } from '.\/lvi_response.js';\n\n\/**\n* @constant\n* @type {string}\n* @description The base URL for the live ServiceObjects Lead Validation International API service.\n*\/\nconst liveBaseUrl = 'https:\/\/sws.serviceobjects.com\/lvi\/api.svc\/';\n\n\/**\n* @constant\n* @type {string}\n* @description The base URL for the backup ServiceObjects Lead Validation International API service.\n*\/\nconst backupBaseUrl = 'https:\/\/swsbackup.serviceobjects.com\/lvi\/api.svc\/';\n\n\/**\n* @constant\n* @type {string}\n* @description The base URL for the trial ServiceObjects Lead Validation International API service.\n*\/\nconst trialBaseUrl = 'https:\/\/trial.serviceobjects.com\/lvi\/api.svc\/';\n\n\/**\n* &lt;summary>\n* Checks if a response from the API is valid by verifying that it either has no Error object\n* or the Error.Number is not equal to '4'.\n* &lt;\/summary>\n* &lt;param name=\"response\" type=\"Object\">The API response object to validate.&lt;\/param>\n* &lt;returns type=\"boolean\">True if the response is valid, false otherwise.&lt;\/returns>\n*\/\nconst isValid = (response) => !response?.Error || response.Error.TypeCode !== '4';\n\n\/**\n* &lt;summary>\n* Constructs a full URL for the ValidateLeadInternational API endpoint by combining the base URL\n* with query parameters derived from the input parameters.\n* &lt;\/summary>\n* &lt;param name=\"params\" type=\"Object\">An object containing all the input parameters.&lt;\/param>\n* &lt;param name=\"baseUrl\" type=\"string\">The base URL for the API service (live, backup, or trial).&lt;\/param>\n* &lt;returns type=\"string\">The constructed URL with query parameters.&lt;\/returns>\n*\/\nconst buildUrl = (params, baseUrl) =>\n    `${baseUrl}JSON\/ValidateLeadInternational?${querystring.stringify(params)}`;\n\n\/**\n* &lt;summary>\n* Performs an HTTP GET request to the specified URL with a given timeout.\n* &lt;\/summary>\n* &lt;param name=\"url\" type=\"string\">The URL to send the GET request to.&lt;\/param>\n* &lt;param name=\"timeoutSeconds\" type=\"number\">The timeout duration in seconds for the request.&lt;\/param>\n* &lt;returns type=\"Promise&lt;LVIResponse>\">A promise that resolves to an LVIResponse object containing the API response data.&lt;\/returns>\n* &lt;exception cref=\"Error\">Thrown if the HTTP request fails, with a message detailing the error.&lt;\/exception>\n*\/\nconst httpGet = async (url, timeoutSeconds) => {\n    try {\n        const response = await axios.get(url, { timeout: timeoutSeconds * 1000 });\n        return new LVIResponse(response.data);\n    } catch (error) {\n        throw new Error(`HTTP request failed: ${error.message}`);\n    }\n};\n\n\/**\n* &lt;summary>\n* Provides functionality to call the ServiceObjects Lead Validation International API's ValidateLeadInternational endpoint,\n* retrieving lead validation information with fallback to a backup endpoint for reliability in live mode.\n* &lt;\/summary>\n*\/\nconst ValidateLeadInternationalClient = {\n    \/**\n    * &lt;summary>\n    * Asynchronously invokes the ValidateLeadInternational API endpoint, attempting the primary endpoint\n    * first and falling back to the backup if the response is invalid (Error.Number == '4') in live mode.\n    * &lt;\/summary>\n    \/**\n    * @param {string} fullName - The contact\u2019s full name. e.g. Jane Doe\n    * @param {string} salutation - Salutation of the contact. Dr, Esq, Mr, Mrs etc\n    * @param {string} firstName - First name of the contact. e.g. Jane\n    * @param {string} lastName - Last name of the contact. e.g. Doe\n    * @param {string} businessName - The contact's company. e.g. Service Objects\n    * @param {string} businessDomain - Website domain associated with the business. e.g. serviceobjects.com\n    * @param {string} businessEIN - Represents the Company Tax Number. Used for Tax exempt checks for US leads.\n    * @param {string} addressLine1 - The address 1 of the contact or business address.\n    * @param {string} addressLine2 - The address 2 of the contact or business address.\n    * @param {string} addressLine3 - The address 3 of the contact or business address.\n    * @param {string} addressLine4 - The address 4 of the contact or business address.\n    * @param {string} addressLine5 - The address 5 of the contact or business address.\n    * @param {string} locality - The city of the contact\u2019s postal address.\n    * @param {string} adminArea - The state of the contact\u2019s postal address.\n    * @param {string} postalCode - The zip code of the contact\u2019s postal address.\n    * @param {string} country - The country of the contact\u2019s postal address. e.g. United States, US or USA\n    * @param {string} phone1 - The contact\u2019s primary phone number.\n    * @param {string} phone2 - The contact\u2019s secondary phone number.\n    * @param {string} email - The contact\u2019s email address.\n    * @param {string} ipAddress - The contact\u2019s IP address in IPv4. (IPv6 coming in a future release)\n    * @param {string} gender - Male, Female or Neutral\n    * @param {string} dateOfBirth - The contact\u2019s date of birth\n    * @param {string} utcCaptureTime - The time the lead was submitted\n    * @param {string} outputLanguage - Language field indicating what language some of the output information will be.\n    * @param {string} testType - The name of the type of validation you want to perform on this contact.\n    * @param {string} licenseKey - Your license key to use the service.\n    * @param {boolean} isLive - Value to determine whether to use the live or trial servers\n    * @param {number} timeoutSeconds - Timeout, in seconds, for the call to the service.\n    * \n    * @returns {Promise&lt;LVIResponse>} - A promise that resolves to an LVIResponse object.\n    *\/\n    async invokeAsync(\n        fullName, salutation, firstName, lastName, businessName, businessDomain, businessEIN,\n        address1, address2, address3, address4, address5, aocality, adminArea, postalCode, country,\n        phone1, phone2, email, ipAddress, gender, dateOfBirth, utcCaptureTime, outputLanguage, testType, licenseKey,\n        isLive, timeoutSeconds\n    ) {\n        const params = {\n            fullName, salutation, firstName, lastName, businessName, businessDomain, businessEIN,\n            address1, address2, address3, address4, address5, aocality, adminArea, postalCode, country,\n            phone1, phone2, email, ipAddress, gender, dateOfBirth, utcCaptureTime, outputLanguage, testType, licenseKey\n        };\n\n        const url = buildUrl(params, isLive ? liveBaseUrl : trialBaseUrl);\n        let response = await httpGet(url, timeoutSeconds || 15);\n\n        if (isLive &amp;&amp; !isValid(response)) {\n            const fallbackUrl = buildUrl(params, BackupBaseUrl);\n            const fallbackResponse = await httpGet(fallbackUrl, timeoutSeconds || 15);\n            return fallbackResponse;\n        }\n\n        return response;\n    },\n\n    \/**\n    * &lt;summary>\n    * Synchronously invokes the ValidateLeadInternational API endpoint by wrapping the async call\n    * and awaiting its result immediately.\n    * &lt;\/summary>\n    * @returns {LVIResponse} - An LVIResponse object with lead validation details or an error.\n    *\/\n    invoke(\n        fullName, salutation, firstName, lastName, businessName, businessDomain, businessEIN,\n        address1, address2, address3, address4, address5, aocality, adminArea, postalCode, country,\n        phone1, phone2, email, ipAddress, gender, dateOfBirth, utcCaptureTime, outputLanguage, testType, licenseKey,\n        isLive, timeoutSeconds\n    ) {\n        return (async () => await this.invokeAsync(\n            fullName, salutation, firstName, lastName, businessName, businessDomain, businessEIN,\n            address1, address2, address3, address4, address5, aocality, adminArea, postalCode, country,\n            phone1, phone2, email, ipAddress, gender, dateOfBirth, utcCaptureTime, outputLanguage, testType, licenseKey,\n            isLive, timeoutSeconds\n        ))();\n    }\n};\n\nexport { ValidateLeadInternationalClient, LVIResponse };\n\n\nexport class InformationComponent {\n    constructor(data = {}) {\n        this.Name = data.Name;\n        this.Value = data.Value;\n    }\n\n    toString() {\n        return `InformationComponent: Name = ${this.Name}, Value = ${this.Value}`;\n    }\n}\n\nexport class PhoneContact {\n    constructor(data = {}) {\n        this.Name = data.Name;\n        this.Address = data.Address;\n        this.City = data.City;\n        this.State = data.State;\n        this.Zip = data.Zip;\n        this.Type = data.Type;\n    }\n\n    toString() {\n        return `PhoneContact: Name = ${this.Name}, Address = ${this.Address}, City = ${this.City}, State = ${this.State}, Zip = ${this.Zip}, Type = ${this.Type}`;\n    }\n}\n\nexport class ErrorModel {\n    constructor(data = {}) {\n        this.Type = data.Type;\n        this.TypeCode = data.TypeCode;\n        this.Desc = data.Desc;\n        this.DescCode = data.DescCode;\n        this.Number = data.Number;\n    }\n\n    toString() {\n        return `Error: Type = ${this.Type}, TypeCode = ${this.TypeCode}, Desc = ${this.Desc}, DescCode = ${this.DescCode}`;\n    }\n}\n\nexport class LVIResponse {\n    constructor(data = {}) {\n        this.OverallCertainty = data.OverallCertainty;\n        this.OverallQuality = data.OverallQuality;\n        this.LeadType = data.LeadType;\n        this.LeadCountry = data.LeadCountry;\n        this.NoteCodes = data.NoteCodes;\n        this.NoteDesc = data.NoteDesc;\n        this.NameCertainty = data.NameCertainty;\n        this.NameQuality = data.NameQuality;\n        this.FirstNameLatin = data.FirstNameLatin;\n        this.LastNameLatin = data.LastNameLatin;\n        this.FirstName = data.FirstName;\n        this.LastName = data.LastName;\n        this.NameNoteCodes = data.NameNoteCodes;\n        this.NameNoteDesc = data.NameNoteDesc;\n        this.AddressCertainty = data.AddressCertainty;\n        this.AddressQuality = data.AddressQuality;\n        this.AddressResolutionLevel = data.AddressResolutionLevel;\n        this.AddressLine1 = data.AddressLine1;\n        this.AddressLine2 = data.AddressLine2;\n        this.AddressLine3 = data.AddressLine3;\n        this.AddressLine4 = data.AddressLine4;\n        this.AddressLine5 = data.AddressLine5;\n        this.AddressLocality = data.AddressLocality;\n        this.AddressAdminArea = data.AddressAdminArea;\n        this.AddressPostalCode = data.AddressPostalCode;\n        this.AddressCountry = data.AddressCountry;\n        this.AddressNoteCodes = data.AddressNoteCodes;\n        this.AddressNoteDesc = data.AddressNoteDesc;\n        this.EmailCertainty = data.EmailCertainty;\n        this.EmailQuality = data.EmailQuality;\n        this.EmailCorrected = data.EmailCorrected;\n        this.EmailNoteCodes = data.EmailNoteCodes;\n        this.EmailNoteDesc = data.EmailNoteDesc;\n        this.IPCertainty = data.IPCertainty;\n        this.IPQuality = data.IPQuality;\n        this.IPLocality = data.IPLocality;\n        this.IPAdminArea = data.IPAdminArea;\n        this.IPCountry = data.IPCountry;\n        this.IPNoteCodes = data.IPNoteCodes;\n        this.IPNoteDesc = data.IPNoteDesc;\n        this.Phone1Certainty = data.Phone1Certainty;\n        this.Phone1Quality = data.Phone1Quality;\n        this.Phone1Locality = data.Phone1Locality;\n        this.Phone1AdminArea = data.Phone1AdminArea;\n        this.Phone1Country = data.Phone1Country;\n        this.Phone1NoteCodes = data.Phone1NoteCodes;\n        this.Phone1NoteDesc = data.Phone1NoteDesc;\n        this.Phone2Certainty = data.Phone2Certainty;\n        this.Phone2Quality = data.Phone2Quality;\n        this.Phone2Locality = data.Phone2Locality;\n        this.Phone2AdminArea = data.Phone2AdminArea;\n        this.Phone2Country = data.Phone2Country;\n        this.Phone2NoteCodes = data.Phone2NoteCodes;\n        this.Phone2NoteDesc = data.Phone2NoteDesc;\n        this.BusinessCertainty = data.BusinessCertainty;\n        this.BusinessQuality = data.BusinessQuality;\n        this.BusinessName = data.BusinessName;\n        this.BusinessDomain = data.BusinessDomain;\n        this.BusinessEmail = data.BusinessEmail;\n        this.BusinessNoteCodes = data.BusinessNoteCodes;\n        this.BusinessNoteDesc = data.BusinessNoteDesc;\n        this.InformationComponents = (data.InformationComponents || []).map(ic => new InformationComponent(ic));\n        this.PhoneContact = data.PhoneContact ? new PhoneContact(data.PhoneContact) : null;\n        this.Error = data.Error ? new ErrorModel(data.Error) : null;\n    }\n\n    toString() {\n        const infoComponents = this.InformationComponents.length\n            ? this.InformationComponents.map(ic => ic.toString()).join(', ')\n            : 'None';\n\n        const phoneContact = this.PhoneContact ? this.PhoneContact.toString() : 'None';\n        const error = this.Error ? this.Error.toString() : 'None';\n\n        return `LVI Response: OverallCertainty = ${this.OverallCertainty}, OverallQuality = ${this.OverallQuality}, ` +\n            `LeadType = ${this.LeadType}, LeadCountry = ${this.LeadCountry}, NoteCodes = ${this.NoteCodes}, NoteDesc = ${this.NoteDesc}, ` +\n            `NameCertainty = ${this.NameCertainty}, NameQuality = ${this.NameQuality}, FirstNameLatin = ${this.FirstNameLatin}, ` +\n            `LastNameLatin = ${this.LastNameLatin}, FirstName = ${this.FirstName}, LastName = ${this.LastName}, ` +\n            `NameNoteCodes = ${this.NameNoteCodes}, NameNoteDesc = ${this.NameNoteDesc}, AddressCertainty = ${this.AddressCertainty}, ` +\n            `AddressQuality = ${this.AddressQuality}, AddressResolutionLevel = ${this.AddressResolutionLevel}, ` +\n            `AddressLine1 = ${this.AddressLine1}, AddressLine2 = ${this.AddressLine2}, AddressLine3 = ${this.AddressLine3}, ` +\n            `AddressLine4 = ${this.AddressLine4}, AddressLine5 = ${this.AddressLine5}, AddressLocality = ${this.AddressLocality}, ` +\n            `AddressAdminArea = ${this.AddressAdminArea}, AddressPostalCode = ${this.AddressPostalCode}, AddressCountry = ${this.AddressCountry}, ` +\n            `AddressNoteCodes = ${this.AddressNoteCodes}, AddressNoteDesc = ${this.AddressNoteDesc}, EmailCertainty = ${this.EmailCertainty}, ` +\n            `EmailQuality = ${this.EmailQuality}, EmailCorrected = ${this.EmailCorrected}, EmailNoteCodes = ${this.EmailNoteCodes}, ` +\n            `EmailNoteDesc = ${this.EmailNoteDesc}, IPCertainty = ${this.IPCertainty}, IPQuality = ${this.IPQuality}, ` +\n            `IPLocality = ${this.IPLocality}, IPAdminArea = ${this.IPAdminArea}, IPCountry = ${this.IPCountry}, IPNoteCodes = ${this.IPNoteCodes}, ` +\n            `IPNoteDesc = ${this.IPNoteDesc}, Phone1Certainty = ${this.Phone1Certainty}, Phone1Quality = ${this.Phone1Quality}, ` +\n            `Phone1Locality = ${this.Phone1Locality}, Phone1AdminArea = ${this.Phone1AdminArea}, Phone1Country = ${this.Phone1Country}, ` +\n            `Phone1NoteCodes = ${this.Phone1NoteCodes}, Phone1NoteDesc = ${this.Phone1NoteDesc}, Phone2Certainty = ${this.Phone2Certainty}, ` +\n            `Phone2Quality = ${this.Phone2Quality}, Phone2Locality = ${this.Phone2Locality}, Phone2AdminArea = ${this.Phone2AdminArea}, ` +\n            `Phone2Country = ${this.Phone2Country}, Phone2NoteCodes = ${this.Phone2NoteCodes}, Phone2NoteDesc = ${this.Phone2NoteDesc}, ` +\n            `BusinessCertainty = ${this.BusinessCertainty}, BusinessQuality = ${this.BusinessQuality}, BusinessName = ${this.BusinessName}, ` +\n            `BusinessDomain = ${this.BusinessDomain}, BusinessEmail = ${this.BusinessEmail}, BusinessNoteCodes = ${this.BusinessNoteCodes}, ` +\n            `BusinessNoteDesc = ${this.BusinessNoteDesc}, InformationComponents = [${infoComponents}], PhoneContact = ${phoneContact}, Error = ${error}`;\n    }\n}\n\nexport default LVIResponse<\/pre>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":6012,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6014","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>LVI - REST<\/title>\n<meta name=\"description\" content=\"C#PythonNodeJS Lead Validation International C# Code Snippet \ufeffusing System.Web; namespace lead_validation_international_dot_net.REST { \/\/\/ &lt;summary&gt;\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"LVI - REST\" \/>\n<meta property=\"og:description\" content=\"C#PythonNodeJS Lead Validation International C# Code Snippet \ufeffusing System.Web; namespace lead_validation_international_dot_net.REST { \/\/\/ &lt;summary&gt;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-26T23:09:07+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/\",\"name\":\"LVI - REST\",\"isPartOf\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#website\"},\"datePublished\":\"2022-11-15T17:53:13+00:00\",\"dateModified\":\"2025-09-26T23:09:07+00:00\",\"description\":\"C#PythonNodeJS Lead Validation International C# Code Snippet \ufeffusing System.Web; namespace lead_validation_international_dot_net.REST { \/\/\/ &lt;summary>\",\"breadcrumb\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DOTS Lead Validation &#8211; International\u00a0\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"LVI &#8211; Code Snippets and Sample Code\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"LVI &#8211; REST\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#website\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/\",\"name\":\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.serviceobjects.com\/docs\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#organization\",\"name\":\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png\",\"contentUrl\":\"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png\",\"width\":2560,\"height\":1440,\"caption\":\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\"},\"image\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"LVI - REST","description":"C#PythonNodeJS Lead Validation International C# Code Snippet \ufeffusing System.Web; namespace lead_validation_international_dot_net.REST { \/\/\/ &lt;summary>","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/","og_locale":"en_US","og_type":"article","og_title":"LVI - REST","og_description":"C#PythonNodeJS Lead Validation International C# Code Snippet \ufeffusing System.Web; namespace lead_validation_international_dot_net.REST { \/\/\/ &lt;summary>","og_url":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/","og_site_name":"Service Objects | Contact, Phone, Email Verification | Data Quality Services","article_modified_time":"2025-09-26T23:09:07+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/","url":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/","name":"LVI - REST","isPartOf":{"@id":"https:\/\/www.serviceobjects.com\/docs\/#website"},"datePublished":"2022-11-15T17:53:13+00:00","dateModified":"2025-09-26T23:09:07+00:00","description":"C#PythonNodeJS Lead Validation International C# Code Snippet \ufeffusing System.Web; namespace lead_validation_international_dot_net.REST { \/\/\/ &lt;summary>","breadcrumb":{"@id":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/lvi-rest\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.serviceobjects.com\/docs\/"},{"@type":"ListItem","position":2,"name":"DOTS Lead Validation &#8211; International\u00a0","item":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/"},{"@type":"ListItem","position":3,"name":"LVI &#8211; Code Snippets and Sample Code","item":"https:\/\/www.serviceobjects.com\/docs\/dots-lead-validation-international\/lvi-code-snippets-and-sample-code\/"},{"@type":"ListItem","position":4,"name":"LVI &#8211; REST"}]},{"@type":"WebSite","@id":"https:\/\/www.serviceobjects.com\/docs\/#website","url":"https:\/\/www.serviceobjects.com\/docs\/","name":"Service Objects | Contact, Phone, Email Verification | Data Quality Services","description":"","publisher":{"@id":"https:\/\/www.serviceobjects.com\/docs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.serviceobjects.com\/docs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.serviceobjects.com\/docs\/#organization","name":"Service Objects | Contact, Phone, Email Verification | Data Quality Services","url":"https:\/\/www.serviceobjects.com\/docs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/","url":"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png","contentUrl":"https:\/\/www.serviceobjects.com\/docs\/wp-content\/uploads\/2022\/08\/SO-logo-2560px-transparent.png","width":2560,"height":1440,"caption":"Service Objects | Contact, Phone, Email Verification | Data Quality Services"},"image":{"@id":"https:\/\/www.serviceobjects.com\/docs\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/6014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/comments?post=6014"}],"version-history":[{"count":8,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/6014\/revisions"}],"predecessor-version":[{"id":12347,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/6014\/revisions\/12347"}],"up":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/6012"}],"wp:attachment":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/media?parent=6014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}