PingOne Platform APIs

Update Verify Policy

 

PUT {{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}

Update a verify policy for the specified environment with the PUT {{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}} request.

Use this request to change the default verify policy for the environment. Simply set default to true.

You cannot use this call to set default to false. You must use this call to set default on a different verify policy to true, which also clears default of true on the previous default verify policy.

The first example response returns when .provider.auto is Veriff. The second example response returns when .provider.auto is not provided. The third example shows an Aadhaar-enabled policy.

Prerequisites

Request Model

Refer to Verify policy data model for full property descriptions.

Property Type Required?

default

Boolean

Optional

description

String

Optional

email

Object

Optional

environment.id

String

Required

facialComparison

Object

Optional

governmentId

Object

Optional

id

String

Required

identityRecordMatching

Object

Optional

liveness

Object

Optional

name

String

Required

phone

Object

Optional

transaction

Object

Optional

updatedAt

DateTime

N/A

governmentId - Government identification document configuration object

Property Type Required?

aadhaar

Object

Optional

aadhaar.enabled

Boolean

Optional

aadhaar.otp

Object

Optional

aadhaar.otp.
deliveries

Object

Required

aadhaar.otp.
deliveries.
coolDown

Object

Required

aadhaar.otp.
deliveries.
coolDown.
duration

Integer

Required

aadhaar.otp.
deliveries.
coolDown.
timeUnit

String

Required

aadhaar.otp.
deliveries.
count

Integer

Required

failExpiredId

Boolean

Optional

inspectionType

String

Optional

provider.auto

String

Optional

provider.manual

String

Optional

retry.attempts

Integer

Optional

verify

String

Required

verifyAamva

Boolean

Optional

facialComparison - Facial comparison configuration object

Property Type Required?

threshold

String

Required

verify

String

Required

identityRecordMatching identity record matching configuration object

Property Type Required?

address

String

Optional

address.fieldRequired

Boolean

Required

address.threshold

String

Required

birth_date

String

Optional

birth_date.fieldRequired

Boolean

Required

birth_date.threshold

String

Required

family_name

String

Optional

family_name.fieldRequired

Boolean

Required

family_name.threshold

String

Required

given_name.fieldRequired

Boolean

Required

given_name

String

Optional

given_name.threshold

String

Required

name

String

Optional

name.fieldRequired

Boolean

Required

name.threshold

String

Required

dataBasedIdentityVerification - Data-based identity verification configuration object

Property Type Required? Mutable? Description

threshold

String

Optional

liveness - Liveness configuration object

Property Type Required?

retry.attempts

Integer

Optional

threshold

String

Required

verify

String

Required

email and phone - Email address and phone number configuration object

Property Type Required?

createMfaDevice

Boolean

Optional

otp

Object

Optional

otp.
attempts

Object

Required

otp.
attempts.
count

Integer

Required

otp.
deliveries

Object

Required

otp.
deliveries.
coolDown.
duration

Integer

Required

otp.
deliveries.
coolDown.
timeUnit

String

Required

otp.
deliveries.
coolDown

Object

Required

otp.
deliveries.
count

Integer

Required

otp.
lifeTime

Object

Required

otp.
lifeTime.
duration

Integer

Required

otp.
lifeTime.
timeUnit

String

Required

otp.
notification

Object

Required

otp.
notification.
templateName

String

Required

otp.
notification.
variantName

String

Optional

verify

String

Required

transaction - Transaction configuration object

Property Type Required?

dataCollection

Object

Optional

dataCollection.
timeout

Object

Required

dataCollection.
timeout.
duration

Integer

Required

dataCollection.
timeout.
timeUnit

String

Required

dataCollectionOnly

Boolean

Optional

timeout

Object

Optional

timeout.
duration

Integer

Required

timeout.
timeUnit

String

Required

The notification.variantName in the email and phone configuration objects can define a variant for the email_phone_verification notification submitted in notification.templateName, if needed. After receipt of a Create Verify Transaction request, the verification service uses an email_phone_verification notification template to send notice of the action taken to the user via email or SMS text.

A policy-specific locale cannot be specified for the email_phone_verification notification. The notification uses the user’s preferred language or, if the user has no preferred language, the default language of the environment.

When setting or changing timeouts in the transaction configuration object, dataCollection.timeout.duration must be less than or equal to timeout.duration. Use caution when reducing the timeouts below the defaults to avoid an unfavorable user experience.

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
        "verify": "REQUIRED",
        "inspectionType": "AUTOMATIC",
        "failExpiredId":"true",
        "retry": {
            "attempts": 3
        },
        "provider": {
            "auto": "VERIFF",
            "manual": "MITEK"
        },
        "verifyAamva": true
    },
    "facialComparison": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "liveness": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    }
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff --request PUT '{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
        "verify": "REQUIRED",
        "inspectionType": "AUTOMATIC",
        "failExpiredId":"true",
        "retry": {
            "attempts": 3
        },
        "provider": {
            "auto": "VERIFF",
            "manual": "MITEK"
        },
        "verifyAamva": true
    },
    "facialComparison": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "liveness": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    }
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Put);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"    ""name"": ""Identity Verification""," + "\n" +
@"    ""description"": ""Verify Government ID and compare Selfie""," + "\n" +
@"    ""default"": false," + "\n" +
@"    ""governmentId"": {" + "\n" +
@"        ""verify"": ""REQUIRED""," + "\n" +
@"        ""inspectionType"": ""AUTOMATIC""," + "\n" +
@"        ""failExpiredId"":""true""," + "\n" +
@"        ""retry"": {" + "\n" +
@"            ""attempts"": 3" + "\n" +
@"        }," + "\n" +
@"        ""provider"": {" + "\n" +
@"            ""auto"": ""VERIFF""," + "\n" +
@"            ""manual"": ""MITEK""" + "\n" +
@"        }," + "\n" +
@"        ""verifyAamva"": true" + "\n" +
@"    }," + "\n" +
@"    ""facialComparison"": {" + "\n" +
@"        ""verify"": ""REQUIRED""," + "\n" +
@"        ""threshold"": ""HIGH""" + "\n" +
@"    }," + "\n" +
@"    ""liveness"": {" + "\n" +
@"        ""verify"": ""REQUIRED""," + "\n" +
@"        ""threshold"": ""HIGH""" + "\n" +
@"    }" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main

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

func main() {

  url := "{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}"
  method := "PUT"

  payload := strings.NewReader(`{
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
        "verify": "REQUIRED",
        "inspectionType": "AUTOMATIC",
        "failExpiredId":"true",
        "retry": {
            "attempts": 3
        },
        "provider": {
            "auto": "VERIFF",
            "manual": "MITEK"
        },
        "verifyAamva": true
    },
    "facialComparison": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "liveness": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    }
}`)

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

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

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

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
PUT /environments/{{envID}}/verifyPolicies/{{verifyPolicyID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
        "verify": "REQUIRED",
        "inspectionType": "AUTOMATIC",
        "failExpiredId":"true",
        "retry": {
            "attempts": 3
        },
        "provider": {
            "auto": "VERIFF",
            "manual": "MITEK"
        },
        "verifyAamva": true
    },
    "facialComparison": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "liveness": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    }
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"Identity Verification\",\n    \"description\": \"Verify Government ID and compare Selfie\",\n    \"default\": false,\n    \"governmentId\": {\n        \"verify\": \"REQUIRED\",\n        \"inspectionType\": \"AUTOMATIC\",\n        \"failExpiredId\":\"true\",\n        \"retry\": {\n            \"attempts\": 3\n        },\n        \"provider\": {\n            \"auto\": \"VERIFF\",\n            \"manual\": \"MITEK\"\n        },\n        \"verifyAamva\": true\n    },\n    \"facialComparison\": {\n        \"verify\": \"REQUIRED\",\n        \"threshold\": \"HIGH\"\n    },\n    \"liveness\": {\n        \"verify\": \"REQUIRED\",\n        \"threshold\": \"HIGH\"\n    }\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}")
  .method("PUT", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}",
  "method": "PUT",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
      "verify": "REQUIRED",
      "inspectionType": "AUTOMATIC",
      "failExpiredId": "true",
      "retry": {
        "attempts": 3
      },
      "provider": {
        "auto": "VERIFF",
        "manual": "MITEK"
      },
      "verifyAamva": true
    },
    "facialComparison": {
      "verify": "REQUIRED",
      "threshold": "HIGH"
    },
    "liveness": {
      "verify": "REQUIRED",
      "threshold": "HIGH"
    }
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'PUT',
  'url': '{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
      "verify": "REQUIRED",
      "inspectionType": "AUTOMATIC",
      "failExpiredId": "true",
      "retry": {
        "attempts": 3
      },
      "provider": {
        "auto": "VERIFF",
        "manual": "MITEK"
      },
      "verifyAamva": true
    },
    "facialComparison": {
      "verify": "REQUIRED",
      "threshold": "HIGH"
    },
    "liveness": {
      "verify": "REQUIRED",
      "threshold": "HIGH"
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests
import json

url = "{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}"

payload = json.dumps({
  "name": "Identity Verification",
  "description": "Verify Government ID and compare Selfie",
  "default": False,
  "governmentId": {
    "verify": "REQUIRED",
    "inspectionType": "AUTOMATIC",
    "failExpiredId": "true",
    "retry": {
      "attempts": 3
    },
    "provider": {
      "auto": "VERIFF",
      "manual": "MITEK"
    },
    "verifyAamva": True
  },
  "facialComparison": {
    "verify": "REQUIRED",
    "threshold": "HIGH"
  },
  "liveness": {
    "verify": "REQUIRED",
    "threshold": "HIGH"
  }
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("PUT", url, headers=headers, data=payload)

print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n    "name": "Identity Verification",\n    "description": "Verify Government ID and compare Selfie",\n    "default": false,\n    "governmentId": {\n        "verify": "REQUIRED",\n        "inspectionType": "AUTOMATIC",\n        "failExpiredId":"true",\n        "retry": {\n            "attempts": 3\n        },\n        "provider": {\n            "auto": "VERIFF",\n            "manual": "MITEK"\n        },\n        "verifyAamva": true\n    },\n    "facialComparison": {\n        "verify": "REQUIRED",\n        "threshold": "HIGH"\n    },\n    "liveness": {\n        "verify": "REQUIRED",\n        "threshold": "HIGH"\n    }\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
require "uri"
require "json"
require "net/http"

url = URI("{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "name": "Identity Verification",
  "description": "Verify Government ID and compare Selfie",
  "default": false,
  "governmentId": {
    "verify": "REQUIRED",
    "inspectionType": "AUTOMATIC",
    "failExpiredId": "true",
    "retry": {
      "attempts": 3
    },
    "provider": {
      "auto": "VERIFF",
      "manual": "MITEK"
    },
    "verifyAamva": true
  },
  "facialComparison": {
    "verify": "REQUIRED",
    "threshold": "HIGH"
  },
  "liveness": {
    "verify": "REQUIRED",
    "threshold": "HIGH"
  }
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"name\": \"Identity Verification\",\n    \"description\": \"Verify Government ID and compare Selfie\",\n    \"default\": false,\n    \"governmentId\": {\n        \"verify\": \"REQUIRED\",\n        \"inspectionType\": \"AUTOMATIC\",\n        \"failExpiredId\":\"true\",\n        \"retry\": {\n            \"attempts\": 3\n        },\n        \"provider\": {\n            \"auto\": \"VERIFF\",\n            \"manual\": \"MITEK\"\n        },\n        \"verifyAamva\": true\n    },\n    \"facialComparison\": {\n        \"verify\": \"REQUIRED\",\n        \"threshold\": \"HIGH\"\n    },\n    \"liveness\": {\n        \"verify\": \"REQUIRED\",\n        \"threshold\": \"HIGH\"\n    }\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/verifyPolicies/{{verifyPolicyID}}")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "PUT"
request.httpBody = postData

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

task.resume()

Example Response

200 OK

{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/verifyPolicies/2b85040d-581c-49b3-b982-eec155463204"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "2b85040d-581c-49b3-b982-eec155463204",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
        "verify": "REQUIRED",
        "inspectionType": "AUTOMATIC",
        "failExpiredId":"true",
        "retry": {
            "attempts": 3
        },
        "provider": {
            "auto": "VERIFF",
            "manual": "MITEK"
        },
        "verifyAamva": true
    },
    "facialComparison": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "liveness": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "email": {
        "verify": "DISABLED",
        "createMfaDevice": false,
        "otp": {
            "attempts": {
                "count": 5
            },
            "lifeTime": {
                "duration": 10,
                "timeUnit": "MINUTES"
            },
            "deliveries": {
                "count": 3,
                "cooldown": {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                }
            },
            "notification": {
                "templateName": "email_phone_verification"
            }
        }
    },
    "phone": {
        "verify": "DISABLED",
        "createMfaDevice": false,
        "otp": {
            "attempts": {
                "count": 5
            },
            "lifeTime": {
                "duration": 5,
                "timeUnit": "MINUTES"
            },
            "deliveries": {
                "count": 3,
                "cooldown": {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                }
            },
            "notification": {
                "templateName": "email_phone_verification"
            }
        }
    },
    "voice": {
        "verify": "DISABLED",
        "enrollment": false,
        "textDependent": {
            "samples": 3,
            "phrase": {
                "id": "exceptional_experiences"
            }
        },
        "comparison": {
            "threshold": "MEDIUM"
        },
        "liveness": {
            "threshold": "MEDIUM"
        },
        "referenceData": {
            "retainOriginalRecordings": false,
            "updateOnReenrollment": true,
            "updateOnVerification": true
        }
    },
    "transaction": {
        "timeout": {
            "duration": 30,
            "timeUnit": "MINUTES"
        },
        "dataCollection": {
            "timeout": {
                "duration": 15,
                "timeUnit": "MINUTES"
            }
        },
        "dataCollectionOnly": false
    },
    "verifiableCredential": {
        "verify": "DISABLED",
        "protocol": "NATIVE"
    },
    "createdAt": "2024-04-08T12:58:19.702Z",
    "updatedAt": "2024-04-08T13:00:09.548Z"
}

Example Response

200 OK

{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/verifyPolicies/fec27b2c-a1be-4c96-9eed-f0de64ad6408"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "fec27b2c-a1be-4c96-9eed-f0de64ad6408",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "Identity Verification",
    "description": "Verify Government ID and compare Selfie",
    "default": false,
    "governmentId": {
        "verify": "REQUIRED",
        "inspectionType": "AUTOMATIC",
        "retry": {
            "attempts": 3
        },
        "provider": {
            "auto": "MITEK",
            "manual": "MITEK"
        }
    },
    "facialComparison": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "liveness": {
        "verify": "REQUIRED",
        "threshold": "HIGH",
        "retry": {
            "attempts": 3
        }
    },
    "email": {
        "verify": "DISABLED",
        "createMfaDevice": false,
        "otp": {
            "attempts": {
                "count": 5
            },
            "lifeTime": {
                "duration": 10,
                "timeUnit": "MINUTES"
            },
            "deliveries": {
                "count": 3,
                "cooldown": {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                }
            },
            "notification": {
                "templateName": "email_phone_verification"
            }
        }
    },
    "phone": {
        "verify": "DISABLED",
        "createMfaDevice": false,
        "otp": {
            "attempts": {
                "count": 5
            },
            "lifeTime": {
                "duration": 5,
                "timeUnit": "MINUTES"
            },
            "deliveries": {
                "count": 3,
                "cooldown": {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                }
            },
            "notification": {
                "templateName": "email_phone_verification"
            }
        }
    },
    "voice": {
        "verify": "DISABLED",
        "enrollment": false,
        "textDependent": {
            "samples": 3,
            "phrase": {
                "id": "exceptional_experiences"
            }
        },
        "comparison": {
            "threshold": "MEDIUM"
        },
        "liveness": {
            "threshold": "MEDIUM"
        },
        "referenceData": {
            "retainOriginalRecordings": false,
            "updateOnReenrollment": true,
            "updateOnVerification": true
        }
    },
    "transaction": {
        "timeout": {
            "duration": 30,
            "timeUnit": "MINUTES"
        },
        "dataCollection": {
            "timeout": {
                "duration": 15,
                "timeUnit": "MINUTES"
            }
        },
        "dataCollectionOnly": false
    },
    "verifiableCredential": {
        "verify": "DISABLED",
        "protocol": "NATIVE"
    },
    "createdAt": "2024-04-10T20:26:06.326Z",
    "updatedAt": "2024-04-10T20:38:27.324Z"
}

Example Response

200 OK

{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/verifyPolicies/5c5989a3-c167-444e-9321-b73a28df9e1b"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "5c5989a3-c167-444e-9321-b73a28df9e1b",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "Verify Policy Use GovId - Aadhaar",
    "description": "Require Aadhaar ID.",
    "default": false,
    "governmentId": {
        "verify": "REQUIRED",
        "inspectionType": "AUTOMATIC",
        "failExpiredId": false,
        "provider": {
            "auto": "MITEK",
            "manual": "MITEK"
        },
        "verifyAamva": true,
        "aadhaar": {
            "enabled": true,
            "otp": {
                "deliveries": {
                    "count": 3,
                    "cooldown": {
                        "duration": 60,
                        "timeUnit": "SECONDS"
                    }
                }
            }
        }
    },
    "facialComparison": {
        "verify": "REQUIRED",
        "threshold": "HIGH"
    },
    "liveness": {
        "verify": "OPTIONAL",
        "threshold": "HIGH",
        "retry": {
            "attempts": 1
        }
    },
    "email": {
        "verify": "DISABLED",
        "createMfaDevice": false,
        "otp": {
            "attempts": {
                "count": 5
            },
            "lifeTime": {
                "duration": 10,
                "timeUnit": "MINUTES"
            },
            "deliveries": {
                "count": 3,
                "cooldown": {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                }
            },
            "notification": {
                "templateName": "email_phone_verification"
            }
        }
    },
    "phone": {
        "verify": "DISABLED",
        "createMfaDevice": false,
        "otp": {
            "attempts": {
                "count": 5
            },
            "lifeTime": {
                "duration": 10,
                "timeUnit": "MINUTES"
            },
            "deliveries": {
                "count": 3,
                "cooldown": {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                }
            },
            "notification": {
                "templateName": "email_phone_verification"
            }
        }
    },
    "voice": {
        "verify": "DISABLED",
        "enrollment": false,
        "textDependent": {
            "samples": 3,
            "phrase": {
                "id": "exceptional_experiences"
            }
        },
        "comparison": {
            "threshold": "MEDIUM"
        },
        "liveness": {
            "threshold": "MEDIUM"
        },
        "referenceData": {
            "retainOriginalRecordings": false,
            "updateOnReenrollment": true,
            "updateOnVerification": true
        }
    },
    "transaction": {
        "timeout": {
            "duration": 30,
            "timeUnit": "MINUTES"
        },
        "dataCollection": {
            "timeout": {
                "duration": 15,
                "timeUnit": "MINUTES"
            }
        },
        "ida": {
            "enabled": true
        },
        "dataCollectionOnly": false
    },
    "verifiableCredential": {
        "verify": "DISABLED",
        "protocol": "NATIVE"
    },
    "createdAt": "2025-04-21T18:16:50.040Z",
    "updatedAt": "2025-04-21T18:18:43.316Z"
}