{"id":12623,"date":"2026-07-20T15:34:35","date_gmt":"2026-07-20T22:34:35","guid":{"rendered":"https:\/\/www.serviceobjects.com\/docs\/?page_id=12623"},"modified":"2026-07-20T15:34:36","modified_gmt":"2026-07-20T22:34:36","slug":"nv3-rest","status":"publish","type":"page","link":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/","title":{"rendered":"NV3 &#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 class=\"wp-block-paragraph\"><strong><strong>Name Validation 3 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=\"\">\ufeff\nusing System.Text.Json;\n\nnamespace name_validation_3_dot_net.REST\n{\n    \/\/\/ &lt;summary>\n    \/\/\/ Provides functionality to call the ServiceObjects Name Validation 3 (NV3) REST API's ValidateName endpoint.\n    \/\/\/ &lt;\/summary>\n    public class ValidateNameClient\n    {\n        private const string LiveBaseUrl = \"https:\/\/sws.serviceobjects.com\/NV3\/\";\n        private const string BackupBaseUrl = \"https:\/\/swsbackup.serviceobjects.com\/NV3\/\";\n        private const string TrialBaseUrl = \"https:\/\/trial.serviceobjects.com\/NV3\/\";\n\n        \/\/\/ &lt;summary>\n        \/\/\/ Synchronously calls the ValidateName REST endpoint to retrieve name validation information.\n        \/\/\/ &lt;\/summary>\n        \/\/\/ &lt;param name=\"input\">The input parameters including name components, options, and authentication ID.&lt;\/param>\n        \/\/\/ &lt;returns>Deserialized &lt;see cref=\"ValidateNameResponse\"\/> containing either nameResult or statusDetail.&lt;\/returns>\n        public static ValidateNameResponse Invoke(ValidateNameInput input)\n        {\n            string url = BuildUrl(input, input.IsLive ? LiveBaseUrl : TrialBaseUrl);\n            string jsonResponse = Helper.HttpGet(url, input.TimeoutSeconds);\n\n            ValidateNameResponse response = DeserializeValidateNameResponse(jsonResponse);\n\n            if (input.IsLive && response.NameResult == null && response.StatusDetail == null)\n            {\n                string fallbackUrl = BuildUrl(input, BackupBaseUrl);\n                string fallbackJsonResponse = Helper.HttpGet(fallbackUrl, input.TimeoutSeconds);\n\n                response = DeserializeValidateNameResponse(fallbackJsonResponse);\n            }\n\n            return response;\n        }\n\n        \/\/\/ &lt;summary>\n        \/\/\/ Asynchronously calls the ValidateName REST endpoint to retrieve name validation information.\n        \/\/\/ &lt;\/summary>\n        \/\/\/ &lt;param name=\"input\">The input parameters including name components, options, and authentication ID.&lt;\/param>\n        \/\/\/ &lt;returns>Deserialized &lt;see cref=\"ValidateNameResponse\"\/> containing either nameResult or statusDetail.&lt;\/returns>\n        public static async Task&lt;ValidateNameResponse> InvokeAsync(ValidateNameInput input)\n        {\n            string url = BuildUrl(input, input.IsLive ? LiveBaseUrl : TrialBaseUrl);\n            string jsonResponse = await Helper.HttpGetAsync(url, input.TimeoutSeconds).ConfigureAwait(false);\n\n            ValidateNameResponse response = DeserializeValidateNameResponse(jsonResponse);\n\n            if (input.IsLive && response.NameResult == null && response.StatusDetail == null)\n            {\n                string fallbackUrl = BuildUrl(input, BackupBaseUrl);\n                string fallbackJsonResponse = await Helper.HttpGetAsync(fallbackUrl, input.TimeoutSeconds).ConfigureAwait(false);\n\n                response = DeserializeValidateNameResponse(fallbackJsonResponse);\n            }\n\n            return response;\n        }\n\n        private static ValidateNameResponse DeserializeValidateNameResponse(string jsonResponse)\n        {\n            var options = new JsonSerializerOptions\n            {\n                PropertyNameCaseInsensitive = true\n            };\n\n            ValidateNameResponse? response =\n                JsonSerializer.Deserialize&lt;ValidateNameResponse>(jsonResponse, options);\n\n            if (response == null)\n            {\n                throw new Exception(\"Failed to deserialize ValidateName response.\");\n            }\n\n            if (response.NameResult == null && response.StatusDetail == null)\n            {\n                throw new Exception(\"Unknown response format from ValidateName API.\");\n            }\n\n            return response;\n        }\n\n        public static string BuildUrl(ValidateNameInput input, string baseUrl)\n        {\n            string qs = $\"ValidateName?\" +\n                        $\"FullName={Helper.UrlEncode(input.FullName)}\" +\n                        $\"&Prefix={Helper.UrlEncode(input.Prefix)}\" +\n                        $\"&FirstName={Helper.UrlEncode(input.FirstName)}\" +\n                        $\"&MiddleName={Helper.UrlEncode(input.MiddleName)}\" +\n                        $\"&LastName={Helper.UrlEncode(input.LastName)}\" +\n                        $\"&Suffix={Helper.UrlEncode(input.Suffix)}\" +\n                        $\"&Options={Helper.UrlEncode(input.Options)}\" +\n                        $\"&AuthID={Helper.UrlEncode(input.AuthID)}\";\n\n            return baseUrl + qs;\n        }\n\n        \/\/\/ &lt;summary>\n        \/\/\/ Input parameters for the ValidateName API call. Represents a name to validate.\n        \/\/\/ &lt;\/summary>\n        \/\/\/ &lt;param name=\"FullName\">The full name to validate.&lt;\/param>\n        \/\/\/ &lt;param name=\"Prefix\">The prefix of the name.&lt;\/param>\n        \/\/\/ &lt;param name=\"FirstName\">The first name.&lt;\/param>\n        \/\/\/ &lt;param name=\"MiddleName\">The middle name.&lt;\/param>\n        \/\/\/ &lt;param name=\"LastName\">The last name.&lt;\/param>\n        \/\/\/ &lt;param name=\"Suffix\">The suffix of the name.&lt;\/param>\n        \/\/\/ &lt;param name=\"Options\">Comma-separated list of optional parameters.&lt;\/param>\n        \/\/\/ &lt;param name=\"AuthID\">The authentication ID provided by Service Objects.&lt;\/param>\n        \/\/\/ &lt;param name=\"IsLive\">Indicates whether to use the live service or trial service.&lt;\/param>\n        \/\/\/ &lt;param name=\"TimeoutSeconds\">Timeout duration for the API call, in seconds.&lt;\/param>\n        public record ValidateNameInput(\n            string FullName = \"\",\n            string Prefix = \"\",\n            string FirstName = \"\",\n            string MiddleName = \"\",\n            string LastName = \"\",\n            string Suffix = \"\",\n            string Options = \"\",\n            string AuthID = \"\",\n            bool IsLive = true,\n            int TimeoutSeconds = 15\n        );\n    }\n}\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Net.Http;\nusing System.Reflection;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\nusing System.Web;\n\nnamespace name_validation_3_dot_net.REST\n{\n    public static class Helper\n    {\n        private static readonly HttpClient _client = new HttpClient();\n\n        public static async Task&lt;string> HttpGetAsync(string url, int timeoutSeconds)\n        {\n\n            _client.Timeout = TimeSpan.FromSeconds(timeoutSeconds);\n            HttpResponseMessage response = await _client.GetAsync(url).ConfigureAwait(false);\n            string jsonResponse = await response.Content.ReadAsStringAsync().ConfigureAwait(false);\n            return jsonResponse;\n        }\n\n        public static string HttpGet(string url, int timeoutSeconds)\n        {\n            _client.Timeout = TimeSpan.FromSeconds(timeoutSeconds);\n            HttpResponseMessage response = _client.GetAsync(url).GetAwaiter().GetResult();\n            string jsonResponse = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();\n            return jsonResponse;\n        }\n\n        public static string UrlEncode(string value) => HttpUtility.UrlEncode(value ?? string.Empty);\n    }\n}\n\n<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p class=\"wp-block-paragraph\"><strong><strong>Name Validation 3 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=\"\">\nfrom nv3_response import NV3Response, NameResult, StatusDetail\nimport requests\nimport json\n\n# Endpoint URLs for Service Objects Name Validation 3 (NV3) API\nprimary_url = \"https:\/\/sws.serviceobjects.com\/NV3\/ValidateName?\"\nbackup_url = \"https:\/\/swsbackup.serviceobjects.com\/NV3\/ValidateName?\"\ntrial_url = \"https:\/\/trial.serviceobjects.com\/NV3\/ValidateName?\"\n\ndef validate_name(\n        full_name: str = \"\",\n        prefix: str = \"\",\n        first_name: str = \"\",\n        middle_name: str = \"\",\n        last_name: str = \"\",\n        suffix: str = \"\",\n        auth_id: str = \"\",\n        is_live: bool = True,\n        timeout_seconds: int = 15\n) -> NV3Response:\n    \"\"\"\n    Validates a name using the Service Objects Name Validation 3 (NV3) API. NV3 uses machine learning to\n    to assess and classify input names. Will validate and score, as well as analyze for negative sentiment \n    and classify the input to distinguish between names and other types of inputs like business, dictionary, or garbage.\n    Returns a StatusDetails response if invalid.\n\n\n    Args:\n        full_name (str, optional): The full name to validate. Required if no other name inputs are provided.\n        prefix (str, optional): The name prefix (e.g., \"Dr.\", \"Mr.\").\n        first_name (str, optional): The first name.\n        middle_name (str, optional): The middle name.\n        last_name (str, optional): The last name.\n        suffix (str, optional): The name suffix (e.g., \"Jr.\", \"III\").\n        auth_id (str): Your Service Objects authentication ID.\n        is_live (bool, optional): Whether to use the live endpoint or the trial endpoint. Defaults to True (live).\n        timeout_seconds (int, optional): Timeout for the API request in seconds.\n\n    Returns:\n        NV3Response: Parsed JSON response with name details or a StatusDetails if validation fails or the API call fails.\n\n    Raises:\n        RuntimeError: If the API call fails with a status of \"500\".\n        requests.RequestException: On network\/HTTP failures (trial mode).\n\n    \"\"\"\n\n    params = {\n        \"FullName\": full_name,\n        \"Prefix\": prefix,\n        \"FirstName\": first_name,\n        \"MiddleName\": middle_name,\n        \"LastName\": last_name,\n        \"Suffix\": suffix,\n        \"AuthID\": auth_id\n    }\n\n    url = primary_url if is_live else trial_url\n\n    try:\n        response = requests.get(url, params=params, timeout=timeout_seconds)\n        response.raise_for_status()\n\n        response_data = response.json()\n\n        status_details = response_data.get(\"StatusDetail\")\n        if status_details:\n            if is_live:\n                #Try backup\n                response = requests.get(backup_url, params=params, timeout=timeout_seconds)\n                response.raise_for_status()\n                status_details = response.json().get(\"StatusDetail\")\n                if status_details:\n                    return NV3Response(StatusDetails=StatusDetail(**status_details))\n            else:\n                return NV3Response(StatusDetails=StatusDetail(**status_details))\n\n        name_result = response_data.get(\"nameResult\") or {}\n        status_detail = response_data.get(\"statusDetail\")\n\n        return NV3Response(\n            Status=response_data.get(\"status\"),\n            NameResult=NameResult(\n                IsValidName=name_result.get(\"isValidName\"),\n                Classification=name_result.get(\"classification\"),\n                Confidence=name_result.get(\"confidence\"),\n                TextIn=name_result.get(\"textIn\"),\n                TextOut=name_result.get(\"textOut\"),\n                ParsedName=name_result.get(\"parsedName\"),\n                PossibleNames=name_result.get(\"possibleNames\"),\n                Notes=name_result.get(\"notes\"),\n                Warnings=name_result.get(\"warnings\"),\n                FirstNameFound=name_result.get(\"firstNameFound\"),\n                IsCommonFirstName=name_result.get(\"isCommonFirstName\"),\n                LastNameFound=name_result.get(\"lastNameFound\"),\n                IsCommonLastName=name_result.get(\"isCommonLastName\"),\n                SimilarFirstNames=name_result.get(\"similarFirstNames\"),\n                SimilarLastNames=name_result.get(\"similarLastNames\"),\n                RelatedNames=name_result.get(\"relatedNames\"),\n            ),\n            StatusDetail=StatusDetail(\n                Message=status_detail.get(\"message\"),\n                Detail=status_detail.get(\"detail\"),\n            ) if status_detail else None\n        )\n    except requests.RequestException as req_exc:\n        if is_live:\n            #Try backup\n            try:\n                response = requests.get(backup_url, params=params, timeout=timeout_seconds)\n                response.raise_for_status()\n                response_data = response.json()\n                return NV3Response(\n                    Status=response_data.get(\"status\"),\n                    NameResult=NameResult(\n                        IsValidName=name_result.get(\"isValidName\"),\n                        Classification=name_result.get(\"classification\"),\n                        Confidence=name_result.get(\"confidence\"),\n                        TextIn=name_result.get(\"textIn\"),\n                        TextOut=name_result.get(\"textOut\"),\n                        ParsedName=name_result.get(\"parsedName\"),\n                        PossibleNames=name_result.get(\"possibleNames\"),\n                        Notes=name_result.get(\"notes\"),\n                        Warnings=name_result.get(\"warnings\"),\n                        FirstNameFound=name_result.get(\"firstNameFound\"),\n                        IsCommonFirstName=name_result.get(\"isCommonFirstName\"),\n                        LastNameFound=name_result.get(\"lastNameFound\"),\n                        IsCommonLastName=name_result.get(\"isCommonLastName\"),\n                        SimilarFirstNames=name_result.get(\"similarFirstNames\"),\n                        SimilarLastNames=name_result.get(\"similarLastNames\"),\n                        RelatedNames=name_result.get(\"relatedNames\"),\n                    ),\n                    StatusDetail=StatusDetail(\n                        Message=status_detail.get(\"message\"),\n                        Detail=status_detail.get(\"detail\"),\n                    ) if status_detail else None\n                )\n            except requests.RequestException as backup_exc:\n                raise RuntimeError(f\"API call failed for both primary and backup endpoints: {backup_exc}\") from backup_exc\n                \n                \n                \n\"\"\"\nResponse classes for Name Validation 3 (NV3) API\n\"\"\"\nfrom dataclasses import dataclass\nfrom typing import List, Optional\n\n@dataclass\nclass StatusDetail:\n    Message: Optional[str] = None\n    Detail: Optional[str] = None\n\n    def __str__(self):\n        return f\"StatusDetail(Message={self.Message}, Detail={self.Detail})\"\n    \n@dataclass\nclass NV3Response:\n    Status: Optional[str] = None\n    NameResult: Optional[NameResult] = None\n    StatusDetail: Optional[StatusDetail] = None\n\n    def __str__(self):\n        return (f\"NV3Response(Status={self.Status}, NameResult={self.NameResult}, \"\n                f\"StatusDetail={self.StatusDetail})\")    \n\n@dataclass\nclass NameResult:\n    IsValidName: Optional[bool] = None\n    Classification: Optional[str] = None\n    Confidence: Optional[float] = None\n    TextIn: Optional[str] = None\n    TextOut: Optional[str] = None\n    ParsedName: Optional[ParsedName] = None\n    PossibleNames: Optional[List['PossibleName']] = None\n    Notes: Optional[str] = None\n    Warnings: Optional[str] = None\n    FirstNameFound: Optional[bool] = None\n    IsCommonFirstName: Optional[bool] = None\n    LastNameFound: Optional[bool] = None\n    IsCommonLastName: Optional[bool] = None\n    SimilarFirstNames: Optional[List[str]] = None\n    SimilarLastNames: Optional[List[str]] = None\n    RelatedNames: Optional[List[str]] = None\n\n    def __post_init__(self):\n        if self.PossibleNames is None:\n            self.PossibleNames = []\n        if self.SimilarFirstNames is None:\n            self.SimilarFirstNames = []\n        if self.SimilarLastNames is None:\n            self.SimilarLastNames = []\n        if self.RelatedNames is None:\n            self.RelatedNames = []\n\n    def __str__(self):\n        possible_names_str = \"\\n\".join(str(name) for name in self.PossibleNames) if self.PossibleNames else \"None\"\n        return (f\"NameResult(Confidence={self.Confidence}, TextIn='{self.TextIn}', TextOut='{self.TextOut}', \"\n                f\"PossibleNames=[{possible_names_str}], Notes='{self.Notes}', Warnings='{self.Warnings}', \"\n                f\"FirstNameFound={self.FirstNameFound}, IsCommonFirstName={self.IsCommonFirstName}, \"\n                f\"LastNameFound={self.LastNameFound}, IsCommonLastName={self.IsCommonLastName}, \"\n                f\"SimilarFirstNames={self.SimilarFirstNames}, SimilarLastNames={self.SimilarLastNames}, \"\n                f\"RelatedNames={self.RelatedNames})\")\n    \n@dataclass\nclass ParsedName:\n    Prefix: Optional[str] = None\n    First: Optional[str] = None\n    Middle: Optional[str] = None\n    Last: Optional[str] = None\n    Suffix: Optional[str] = None\n\n    def __str__(self):\n        return (f\"ParsedName(Prefix='{self.Prefix}', First='{self.First}', Middle='{self.Middle}', \"\n                f\"Last='{self.Last}', Suffix='{self.Suffix}')\")\n    \n@dataclass\nclass PossibleName:\n    Confidence: Optional[float] = None\n    ParsedName: Optional[ParsedName] = None\n\n    def __str__(self):\n        return f\"PossibleName(Confidence={self.Confidence}, ParsedName={self.ParsedName})\"\n<\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-create-block-tab tab-panel\" role=\"tabpanel\" tabindex=\"0\">\n<p class=\"wp-block-paragraph\"><strong><strong>Name Validation 3 NodeJS<\/strong><\/strong> <strong><strong>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=\"\">\nimport axios from 'axios';\nimport queryString from 'querystring';\nimport { NV3Response, NameResult, StatusDetail } from '.\/nv3_response.js';\n\n\/**\n * @constant\n * @type {string}\n * @description Base URL for the live Service Objects Name Validation 3 (NV3) API service.\n *\/\nconst liveBaseUrl = 'https:\/\/sws.serviceobjects.com\/NV3\/';\n\n\/**\n * @constant\n * @type {string}\n * @description Base URL for the backup Service Objects Name Validation 3 (NV3) API service.\n *\/\nconst backupBaseUrl = 'https:\/\/swsbackup.serviceobjects.com\/NV3\/';\n\n\/**\n * @constant\n * @type {string}\n * @description Trial URL for the backup Service Objects Name Validation 3 (NV3) API service.\n *\/\nconst trialBaseUrl = 'https:\/\/trial.serviceobjects.com\/NV3\/';\n\n\/**\n * Checks if a response from the API is valid by verifying that it has no StatusDetail object\n * @param {NV3Response} response - The response object to check\n * @returns {boolean} - True if the response is valid, false otherwise\n *\/\nconst isValid = (response) => !response?.NameResult !==null;\n\n\/**\n * Constructs the full API URL by combining the base URL and URL-encoded query string parameters\n * derived from the input parameters.\n * @param {string} baseUrl - The base URL for the API endpoint (live, backup, or trial)\n * @param {Object} params - The query parameters for the API request\n * @returns {string} - The full API URL\n *\/\nconst buildUrl = (baseUrl, params) => \n    `${baseUrl}ValidateName?${queryString.stringify(params)}`;\n\n\/**\n * Performs an HTTP GET request to the specified URL with a given timeout.\n * @param {string} url - The URL to send the GET request to\n * @param {number} timeoutSeconds - The timeout for the request in seconds\n * @returns {Promise&lt;NV3Response>} - A promise that resolves to an NV3Response object containing the API response data\n * @throws {Error} - Throws an error if the request fails\n *\/\nexport const httpGet = async (url, timeoutSeconds) => {\n    let result = new NV3Response();\n    try {\n        const response = await axios.get(url, { timeout: timeoutSeconds * 1000 });\n\n        if (response.status === 200) {\n            result.Status = response.data.status ?? null;\n            result.NameResult = response.data.nameResult ? new NameResult(response.data.nameResult) : null;\n            result.StatusDetail = response.data.statusDetail ? new StatusDetail(response.data.statusDetail) : null;\n        }\n        else {\n            result.Status = null;\n            result.NameResult = null;\n            result.StatusDetail = null;\n        }\n    } catch (error) {\n        throw new Error(`HTTP GET request failed: ${error.message}`);\n    }\n    return result;\n};\n\nconst ValidateNameClient = {\n    \/**\n     * Provides functionality to call the Service Objects Name Validation 3 (NV3) API's ValidateName endpoint,\n     * retrieving name validation and  classification details for a given name. Includes fallback to backup \n     * endpoint for reliability in live mode.\n     * @param {string} [FullName] - The full name to validate. Optional to use instead of individual name components.\n     * @param {string} [Prefix] - The name prefix to validate. Optional.\n     * @param {string} [FirstName] - The first name to validate. Optional if FullName is provided.\n     * @param {string} [MiddleName] - The middle name to validate. Optional.\n     * @param {string} [LastName] - The last name to validate. Optional if FullName is provided.\n     * @param {string} [Suffix] - The name suffix to validate. Optional.\n     * @param {string} [Options] - Additional options for the API request. Optional.\n     * @param {string} AuthID - The license key for authenticating with the API. Required.\n     * @param {boolean} [isLive=true] - Whether to use the live API endpoint (true) or the trial endpoint (false).\n     * @param {number} [timeoutSeconds=15] - The timeout for the API request in seconds. Optional, defaults to 15 seconds.\n     * @returns {Promise&lt;NV3Response>} A promise that resolves to a NV3Response object.\n    *\/\n    async invokeAsync(FullName, Prefix, FirstName, MiddleName, LastName, Suffix, Options, AuthID, isLive = true, timeoutSeconds = 15) {\n        const params = {\n            FullName,\n            Prefix,\n            FirstName,\n            MiddleName,\n            LastName,\n            Suffix,\n            Options,\n            AuthID\n        };\n\n        const url = buildUrl(isLive ? liveBaseUrl : trialBaseUrl, params);\n        let response = await httpGet(url, timeoutSeconds);\n\n        if (isLive && !isValid(response)) {\n            const fallbackUrl = buildUrl(backupBaseUrl, params);\n            const fallbackResponse = await httpGet(fallbackUrl, timeoutSeconds);\n            return fallbackResponse;\n        }\n\n        return response;\n    },\n\n    \/**\n     * Synchronously invokes the ValidateName API endpoint by wrapping the async call\n     * and awaiting its result immediately. Note: This method should be used cautiously\n     * in Node.js as it blocks the event loop.\n     * @param {string} [FullName] - The full name to validate. Optional to use instead of individual name components.\n     * @param {string} [Prefix] - The name prefix to validate. Optional.\n     * @param {string} [FirstName] - The first name to validate. Optional if FullName is provided.\n     * @param {string} [MiddleName] - The middle name to validate. Optional.\n     * @param {string} [LastName] - The last name to validate. Optional if FullName is provided.\n     * @param {string} [Suffix] - The name suffix to validate. Optional.\n     * @param {string} [Options] - Additional options for the API request. Optional.\n     * @param {string} AuthID - The license key for authenticating with the API. Required.\n     * @param {boolean} [isLive=true] - Whether to use the live API endpoint (true) or the trial endpoint (false).\n     * @param {number} [timeoutSeconds=15] - The timeout for the API request in seconds. Optional, defaults to 15 seconds.\n     * @returns {NV3Response} - The response from the API call\n     *\/\n    invoke(FullName, Prefix, FirstName, MiddleName, LastName, Suffix, Options, AuthID, isLive = true, timeoutSeconds = 15) {\n        return (async () => await this.invokeAsync(\n            FullName, Prefix, FirstName, MiddleName, LastName, Suffix, Options, AuthID, isLive, timeoutSeconds\n        ))();\n    }\n};\n\nexport { ValidateNameClient, NV3Response };\n\n\n\/**\n * Validate name response component for NV3 API\n *\/\nexport class NV3Response {\n    constructor(data = {}) {\n        this.Status = data.status ?? null;\n        this.NameResult = data.nameResult ? new NameResult(data.nameResult) : null;\n        this.StatusDetail = data.statusDetail ? new StatusDetail(data.statusDetail) : null;\n    }\n\n    get IsSuccess() {\n        return this.NameResult !== null;\n    }\n}\n\n\/**\n * NameResult component for NV3 API response\n *\/\nexport class NameResult {\n    constructor(data = {}) {\n        this.IsValidName = data.isValidName ?? null;\n        this.Classification = data.classification ?? null;\n        this.Confidence = data.confidence ?? null;\n        this.TextIn = data.textIn ?? null;\n        this.TextOut = data.textOut ?? null;\n        this.ParsedName = data.parsedName ? new ParsedName(data.parsedName) : null;\n        this.PossibleNames = Array.isArray(data.possibleNames)\n            ? data.possibleNames.map(name => new NameInfo(name))\n            : [];\n        this.Notes = data.notes ?? null;\n        this.Warnings = data.warnings ?? null;\n        this.FirstNameFound = data.firstNameFound ?? null;\n        this.IsCommonFirstName = data.isCommonFirstName ?? null;\n        this.LastNameFound = data.lastNameFound ?? null;\n        this.IsCommonLastName = data.isCommonLastName ?? null;\n        this.SimilarFirstNames = data.similarFirstNames ?? null;\n        this.SimilarLastNames = data.similarLastNames ?? null;\n        this.RelatedNames = data.relatedNames ?? null;\n    }\n}\n\n\/**\n * ParsedName component for NV3 API response\n *\/\nexport class ParsedName {\n    constructor(data = {}) {\n        this.Prefix = data.prefix ?? null;\n        this.First = data.first ?? null;\n        this.Middle = data.middle ?? null;\n        this.Last = data.last ?? null;\n        this.Suffix = data.suffix ?? null;\n    }\n}\n\n\/**\n * NameInfo component for possibleNames\n *\/\nexport class NameInfo {\n    constructor(data = {}) {\n        this.Confidence = data.confidence ?? null;\n        this.ParsedName = data.parsedName ? new ParsedName(data.parsedName) : null;\n    }\n}\n\n\/**\n * StatusDetail component for NV3 API errors\n *\/\nexport class StatusDetail {\n    constructor(data = {}) {\n        this.Message = data.message ?? null;\n        this.Detail = data.detail ?? null;\n    }\n}\n<\/pre>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":21,"featured_media":0,"parent":12617,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-12623","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>NV3 - REST<\/title>\n<meta name=\"description\" content=\"C#PythonNodeJS Name Validation 3 C# Code Snippet \ufeff using System.Text.Json; namespace name_validation_3_dot_net.REST { \/\/\/ &lt;summary&gt; \/\/\/ Provides\" \/>\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-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NV3 - REST\" \/>\n<meta property=\"og:description\" content=\"C#PythonNodeJS Name Validation 3 C# Code Snippet \ufeff using System.Text.Json; namespace name_validation_3_dot_net.REST { \/\/\/ &lt;summary&gt; \/\/\/ Provides\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Objects | Contact, Phone, Email Verification | Data Quality Services\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-20T22:34:36+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/\",\"url\":\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/\",\"name\":\"NV3 - REST\",\"isPartOf\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/#website\"},\"datePublished\":\"2026-07-20T22:34:35+00:00\",\"dateModified\":\"2026-07-20T22:34:36+00:00\",\"description\":\"C#PythonNodeJS Name Validation 3 C# Code Snippet \ufeff using System.Text.Json; namespace name_validation_3_dot_net.REST { \/\/\/ &lt;summary> \/\/\/ Provides\",\"breadcrumb\":{\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DOTS Name Validation 3\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"NV3 &#8211; Code Snippets and Sample Code\",\"item\":\"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"NV3 &#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":"NV3 - REST","description":"C#PythonNodeJS Name Validation 3 C# Code Snippet \ufeff using System.Text.Json; namespace name_validation_3_dot_net.REST { \/\/\/ &lt;summary> \/\/\/ Provides","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-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/","og_locale":"en_US","og_type":"article","og_title":"NV3 - REST","og_description":"C#PythonNodeJS Name Validation 3 C# Code Snippet \ufeff using System.Text.Json; namespace name_validation_3_dot_net.REST { \/\/\/ &lt;summary> \/\/\/ Provides","og_url":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/","og_site_name":"Service Objects | Contact, Phone, Email Verification | Data Quality Services","article_modified_time":"2026-07-20T22:34:36+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/","url":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/","name":"NV3 - REST","isPartOf":{"@id":"https:\/\/www.serviceobjects.com\/docs\/#website"},"datePublished":"2026-07-20T22:34:35+00:00","dateModified":"2026-07-20T22:34:36+00:00","description":"C#PythonNodeJS Name Validation 3 C# Code Snippet \ufeff using System.Text.Json; namespace name_validation_3_dot_net.REST { \/\/\/ &lt;summary> \/\/\/ Provides","breadcrumb":{"@id":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/nv3-rest\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.serviceobjects.com\/docs\/"},{"@type":"ListItem","position":2,"name":"DOTS Name Validation 3","item":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/"},{"@type":"ListItem","position":3,"name":"NV3 &#8211; Code Snippets and Sample Code","item":"https:\/\/www.serviceobjects.com\/docs\/dots-name-validation-3\/nv3-code-snippets-and-sample-code\/"},{"@type":"ListItem","position":4,"name":"NV3 &#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\/12623","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\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/comments?post=12623"}],"version-history":[{"count":9,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/12623\/revisions"}],"predecessor-version":[{"id":12697,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/12623\/revisions\/12697"}],"up":[{"embeddable":true,"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/pages\/12617"}],"wp:attachment":[{"href":"https:\/\/www.serviceobjects.com\/docs\/wp-json\/wp\/v2\/media?parent=12623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}