Compatible Cases
About the service
W2_DATA_IDVCHECK_013 is an identity verification service that uses physical documentation to verify an individual.
Product Code: W2-DATA-IDVCHECK-013
Does this service leave a credit search Footprint? No
Document Upload
Use of this service is a two-part process, in that before making a call to a bundle containing this service, any documents that are required must already be uploaded to our systems by using the DocumentUpload endpoint.
Details on this service method can be found in Document upload
Callback Preference
This service can take up to 24 hours but usually less than 2 hours to give a final response. This is because it involves a manual human intelligence task.
Because of this, details of how this response should be communicated need to be agreed with W2 during the onboarding process. The current options are:
Email
HTTP POST request to a specified endpoint (Formatted in XML or Json)
This preference must be agreed with W2 during the on-boarding process in order to use the service.
Request
Query Data
The following query data properties pertain to this service.
Property | Type | Optional/Mandatory | Notes |
---|---|---|---|
Forename | string | Mandatory | |
Surname | string | Mandatory | |
HouseName | string | Mandatory if no HouseHumber given | |
HouseNumber | string | Mandatory if no HouseName given | |
Postcode | string | Mandatory | |
DayOfBirth | integer | Mandatory | |
MonthOfBirth | integer | Mandatory | |
YearOfBirth | integer | Mandatory | 'yyyy' |
Country | string | Mandatory | 3 letter ISO country code. Can't be non |
Gender | string | Optional | Must be 'M' or 'F' supplied. |
PhoneNumber | string | Optional | |
MobileNumber | string | Optional | |
Flat | string | Optional | |
Street | string | Optional | |
City | string | Optional | |
County | string | Optional |
In addition, an image of the formal identification document must be sent using the File object, which sits alongside QueryData as part of the ServiceRequest object. It needs to contain the following fields:
Property | Type | Mandatory/Optional |
---|---|---|
File | UploadedFile | Mandatory |
The uploadedFile object(s) needs to contain the following:
Property | Type | Mandatory/Optional | Notes |
---|---|---|---|
DocumentUID | string | Mandatory | GUID - id of document |
Service | string | mandatory | This must be set to W2_DATA_IDVCHECK_013 |
Query Options
The QueryOptions element is optional and is used for optional configuration options. This service uses two possible query options.
Property | Possible Values | Description |
---|---|---|
DocumentCategory | ID Address Both | ID indicates that the document is used for proof of identity (for example a passport) and the service will attempt to verify as such. Address indicates that this is used for proof of address (for example a utility bill) and will attempt to verify as such. If this field is left out then we will assume both. |
VerificationAction | ID POA Either Both | This value indicates the type of check that desired. ID indicates that a proof of identity check is required. POA indicates a proof of address check is required. Either indicates that verification of one or the other is required. Both indicates that both checks are required. This can be used when the type of document is unknown. If this is specified, any value in DocumentCategory will be ignored. If 'ID', 'Either' or 'POA' are selected within the VerificationAction field then service is only billed once. 'Both' will bill twice as both documents have been verified uniquely. If this field is left out then we will assume both. |
ID documents are Passports, National ID cards, Driving license, Residence Permits. Any other document is not a proof of Identity.
Proof of Address is usually utilities or phone bills or tax statements. Other kinds of bills may also be accepted.
Example Request
{
"Data": {
"Country": "GBR",
"DayOfBirth": 1,
"Forename": "Johnny",
"HouseNumber": "44",
"MonthOfBirth": 1,
"Postcode": "CF36 5DJ",
"Surname": "Testy",
"YearOfBirth": 1990
},
"Files": [
{
"DocumentReference": "Test Image",
"Id": "0FF8F8BA-F0BB-4B53-86D6-7185D9019269",
"Service": "W2_DATA_IDVCHECK_013"
}
]
}
Response
Immediate Response
The service will then immediately send back a W2_DATA_IDVCHECK_013 result, which is part of the ServiceResult object of the response.
Immediate response breakdown
The W2_DATA_IDVCHECK_013 result contains the following fields:
Property | Type | Possible Outcomes |
---|---|---|
callID | string | This will be a unique ID representing this request. This value is what will link this call to the final decision. |
errorCode | string | "0000" if no errors were encountered. Otherwise it will be an error code. |
errorDesc | string | "Successful" if the application was successfully submitted. Otherwise it will be a description of the error encountered. |
A corresponding ServiceTransaction is also sent with the following fields:
Property | Type | Possible Outcomes |
---|---|---|
Service | enum | Always "W2_DATA_IDVCHECK_013" |
ServiceInterpretResult | enum | Always "NotApplicable" |
ServiceTransactionResult | enum | "Success" if the application was successfully submitted. Otherwise it will be an error label, details on which can be found in Service Transaction Result Message |
ServiceTransactionResultMessage | string | "Application successfully sent" if the application was successfully submitted. Otherwise it will be details of what went wrong |
ServiceValidationDetails | string | NULL if QueryData passed validation, otherwise will be a collection of errors explaining why the QueryData is not valid |
ValidationResult | enum | "Pass" if all validations conditions are met. Otherwise will be details on what needs to be changed in order to pass validation. |
More information on this object can be found in the class documentation here. Note that this is a receipt for the request and not the final result. The final result is sent as a second response.
Example immediate response
{
"results": {
"w2DataIdvcheck013Result": {
"callId": "WSCR1C2B4A33C78D4355B93391F9C56BEDAV",
"errorCode": "0000",
"errorDesc": "Successful"
}
},
"transaction": {
"interpretResult": "Pass",
"serviceCallReference": "37d86697-3cb3-4e1b-a14b-7723bc14768f",
"serviceTransactions": [{
"haltTriggered": false,
"service": "W2_DATA_IDVCHECK_013",
"serviceInterpretResult": "NotApplicable",
"serviceTransactionResult": "Success",
"serviceTransactionResultMessage": "Application Submitted Successfully.",
"validationResult": "Pass"
}
]
}
}
Final Response
Approximately 30 minutes after the initial request (this time will vary as it involves a manual human intelligence task), W2 will send a second response to the initial query, containing the final result. This result will be sent either by email or HTTP POST as request. The recipient email address / URL endpoint will have been agreed upon during the on-boarding process.
Email Response
If email was requested, an email will be sent out containing the Call ID of the initial request and the "Pass" or "Fail" result. It will look something like this:
Result email |
---|
Subject: W2_DATA_IDVCHECK_013 Result Dear [Company Name], This is the final result of a call to W2_DATA_IDVCHECK_013 that you made at [Date Of Request], Please see the result below. CallID: [Call ID returned by first response] Result: ["PASS" or "FAIL"] Kind regards W2 Global Data |
Post Response
It’s recommended to verify the request by validating the header value ‘x-w2-signature‘ which is a base64 encoded hash of request body. The algorithm used to generate the hash is SHA256 with your API key as the secret.
If a POST response was requested, a HTTP post request will be sent out containing a populated TransactionInformation object serialized into XML or Json.
The TransactionInformation object will be identical in structure to the one returned in the immediate response except that it also contains your ClientReference. However it will only contain a single ServiceTransaction which will be the final result of the W2_DATA_IDVCHECK_013 call.
This ServiceTransaction will have the following fields:
Property | Type | Possible Outcomes |
---|---|---|
Service | enum | Always "W2_DATA_IDVCHECK_013" |
ServiceInterpretResult | enum | "Pass" or "Fail". This is the final result. |
ServiceTransactionResult | enum | Always "Success" |
ServiceTransactionResultMessage | string | This will be the Call ID value of the initial service response and, if the result was not a Pass, followed by the reason why after a semicolon, ie: "WSCRB0C3B15DA015454DBF94BD9C8BF660DA; ID expired" |
ServiceValidationDetails | string | Always NULL |
ValidationResult | enum | Always "NotApplicable" |
The end result is that the resulting HTTP POST request will look something like this:
POST [Callback URL] HTTP/1.1 Content-Type: application/xml or application/json Authorization: Basic [Network credential built from company name and API key - see note 1] Host: [Callback URL host] Content-Length: [Length of message] Expect: 100-continue [XML of TransactionInformation object] |
Example TransactionInformation
<TransactionInformation
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ServiceTransactions>
<ServiceTransactionInformation>
<Service>W2_DATA_IDVCHECK_013</Service>
<ServiceTransactionResult>Success</ServiceTransactionResult>
<ServiceTransactionResultMessage>
WSCR1C2B4A33C78D4355B93391F9C56BEDAV
</ServiceTransactionResultMessage>
<ValidationResult>NotApplicable</ValidationResult>
<HaltTriggered>false</HaltTriggered>
<ServiceInterpretResult>Pass</ServiceInterpretResult>
<ServiceHasFailedOver>false</ServiceHasFailedOver>
</ServiceTransactionInformation>
</ServiceTransactions>
<ServiceCallReference>c391453f-4546-4306-a274-5520addc812f</ServiceCallReference>
<InterpretResult>Not Applicable</InterpretResult>
<ClientReference>123</ClientReference>
</TransactionInformation>
{
"ServiceTransactions": [
{
"Service": "W2_DATA_IDVCHECK_013",
"ServiceTransactionResult": "Success",
"ServiceTransactionResultMessage": "64f7be75-299b-4ee0-a1be-fdb776acc2d1",
"ValidationResult": "NotApplicable",
"HaltTriggered": false,
"ServiceInterpretResult": "Pass",
"ServiceHasFailedOver": false
}
],
"ServiceCallReference": "57f27731-902c-44b8-b28c-0a5382f7484d",
"InterpretResult": "NotApplicable",
"ClientReference": "123"
}
Note 1: An authorization header is added to give customers the option to authenticate the request before accepting it. The credential is a network credential made up from the following:
- Username: Name of company as it appears in Portal
- Password: Company API key
The resulting value is constructed as follows (as described here):
- Username and password are combined into a string "username:password".
- The resulting string is then encoded using the RFC2045-MIME variant of Base64, except not limited to 76 char/line.
This will create something like:
Example Authorization Header |
---|
Basic VzI6cGl6emE= |
Allowing the endpoint server to deny the request based on this credential if that is preferred.
'Refer' Result
Sometimes the result may not be a pass or a fail, but a "Refer".
A "Refer" result happens when there is something about the document that is preventing a final decision from being made. The most common cause of this is that the ID is expired or illegible.
If the result has been received via email, the reason is outlined below the result. Here is an example of what the email might look like:
Example of "Refer" Result Email |
---|
Subject: W2_DATA_IDVCHECK_013 Result Dear Globex Corporation, Further action required, please see below. This is the final result of a call to W2_DATA_IDVCHECK_013 that you made on 15 January 2016 11:59:30, Please see the result below. CallID: WSCRB0C3B15DA015454DBF94BD9C8BF660DA Result: Refer Details: ID expired This means that the submitted document is not adequate for a final decision to be made. A correct document will need to be submitted in order to get a final Pass / Fail decision. This will require a slightly altered submission to W2_DATA_IDVCHECK_013 that contains the new document and references CallID: WSCRB0C3B15DA015454DBF94BD9C8BF660DA. To find out how to do this, please see the "Refer Result" section on this page: http://developer.w2globaldata.com/Documentation/W2DataIdvcheck013Service/#ReferResult For further details on this result, please login to https://portal.idvcheck.com using the details given during on-boarding. Kind regards W2 Global Data |
If the result has been received via postback, the reason is given next to the unique ID in the ServiceTransactionResultMessage field of the ServiceTransactionInform object. It is separated from the ID with a semi-colon. Here is an example of what the post request might look like:
Example of 'Refer' Result Post
<TransactionInformation
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd=" http://www.w3.org/2001/XMLSchema">
<ServiceTransactions>
<ServiceTransactionInformation>
<Service>W2_DATA_IDVCHECK_013</Service>
<ServiceTransactionResult>Success</ServiceTransactionResult>
<ServiceTransactionResultMessage>
WSCRB0C3B15DA015454DBF94BD9C8BF660DA;ID expired
</ServiceTransactionResultMessage>
<ValidationResult>NotApplicable</ValidationResult>
<HaltTriggered>false</HaltTriggered>
<ServiceInterpretResult>Inconclusive</ServiceInterpretResult>
<ServiceHasFailedOver>false</ServiceHasFailedOver>
</ServiceTransactionInformation>
</ServiceTransactions>
<InterpretResult>NotApplicable</InterpretResult>
</TransactionInformation>
"transaction": {
"interpretResult": "NotApplicable",
"serviceCallReference": "37d86697-3cb3-4e1b-a14b-7723bc14768f",
"serviceTransactions": [{
"haltTriggered": false,
"service": "W2_DATA_IDVCHECK_013",
"serviceInterpretResult": "Inconclusive",
"serviceTransactionResult": "Success",
"serviceTransactionResultMessage": "WSCRB0C3B15DA015454DBF94BD9C8BF660DA;ID expired",
"validationResult": "NotApplicable"
}
]
}
Example of 'Refer' POST result |
---|
POST https://www.globexcorporation.com/services/callbackservice.svc HTTP/1.1 Content-Type: application/xml Authorization: Basic VzI6cGl6emE= Host: www.globexcorporation.com Content-Length: 869 Expect: 100-continue |
What To Do In The Event of a "Refer" Result
To complete the verification, a replacement / corrected document will need to be uploaded that satisfies the requirements needed for a final decision to be made.
To do this, follow these steps:
- Upload a replacement / corrected document to W2 systems using the Document upload API method.
- Make a new call to W2_DATA_IDVCHECK_013 with the DocumentUID of the newly uploaded document inserted into UploadedFiles array and add a query option with the key uniqueid and the value as the unique ID of the original call. Query data is not necessary for this request.
This will re-open the process for this document, and the new result will come through via email / postback in the same way as the original result. If the new result is also a "refer", this process can be repeated until the document is verified.
Could I Send A New Application With The Corrected Document Instead Of Doing The Above?
It is not recommended to send a new application in the event of a refer, as this will incur a second charge. Using the method described above will not incur any further charges and is the recommended course of action in the event of a refer result.
Refer IDV Response Codes
Reason Code | Description |
---|---|
Approve/Fix | An easy fix is required to approve the application, for example a typo, or incorrect DOB. |
Expired | Application has been marked as expired, due to duplicate application or inactivity. |
Fraud | The ID document has been identified as fraudulent. |
ID and POA Discrepancy | The ID document and the proof of address document are not showing the same information. |
ID and POA Illegible | ID and POA documents are of poor quality or cannot be read. Screenshots, photocopies or black & white images are not acceptable. |
ID and POA Incorrect | ID and POA documents are non-compliant or do not match registration detail. |
ID Expired | ID document has expired. |
ID Expired, POA OK | The proof of address document is approved but the ID document has expired. |
ID Illegible | ID document is of poor quality or cannot be read. Screenshots, photocopies or black & white images are not acceptable. |
ID Illegible, POA OK | The proof of address document is approved but the ID document is not legible enough for a final decision to be made. |
ID Incorrect | ID document is not in the applicant’s name. |
ID Incorrect Details | The ID document is showing information known to be incorrect. |
ID Incorrect, POA Non-compliant | The ID document is not a recognised valid form of ID and the proof of address is non-compliant. |
ID Non-compliant | ID document is non-compliant - voter and tax cards are not acceptable, for example |
ID Non-compliant, POA OK | The proof of address is approved but the ID document is non-compliant |
ID OK, POA Illegible | The ID document is approved but the proof of address is not legible enough for a final decision to be made. |
ID OK, POA Non-compliant | The ID document is approved but the proof of address is non-compliant. |
ID OK, POA Out of Date | The ID document is approved but the proof of address is out of date. |
ID, POA Invalid | Both the ID document and the proof of address are invalid. |
Missing dom photo page or POA stamp | Sub-reason code for Russia, Ukrainian and Belarus applications. |
Missing back of ID | POI document is missing image of the back of ID document. |
No Match | No record of the individual can be found. |
POA Illegible | POA document is of poor quality or cannot be read. Screenshots, photocopies or black & white images are not acceptable. |
POA Incorrect | POA document is not in the applicant’s name or there is an address mismatch. |
POA Incorrect Details | The proof of address contains information known to be incorrect. |
POA Internet Copy | POA document is either a screenshot or printed out electronic document. Please request original PDF document or photo of original document. |
POA Non-compliant | POA document is non-compliant - mobile bills and insurance documents are not acceptable, for example. |
POA OK, ID Invalid | The proof of address is approved but the ID document is not recognised as a valid ID document. |
POA Out of Date | POA document is outside of the acceptable date range. |
POA Out of Date range | The proof of address is out of the specified date range. |
POA Wrong Format | POA document file has been converted/altered, please ask the customer for the original file. |
Suspicious Docs | POI and/or POA are high risk. |
Refer | Application referred for further clarification or additional documents. |
Sandbox
To use sandbox the following example request can be used.
Remember to include the W2 provided API key in the Authorization Header.
Example Request
{
"Bundle": "Your bundle",
"Data": {
"Forename": "Louie",
"Surname": "Ellis",
"HouseNameNumber": "92",
"DayOfBirth": 19,
"MonthOfBirth": 2,
"YearOfBirth": 1944,
"Country": "GBR",
"Postcode": "PE12 0WS"
},
"Options": {
"Sandbox": "true"
},
"ClientReference": "your-client-reference"
}
Sandbox cases
Pass test case
If the following details are set, the application will successfully submit, and when the final result comes through via POST / email it will be a PASS:
Field | Value |
---|---|
Forename | Louie |
Surname | Ellis |
HouseNameNumber | 92 |
Postcode | PE12 0WS |
DayOfBirth | 19 |
MonthOfBirth | 2 |
YearOfBirth | 1944 |
Country | GBR |
Fail test case
If the following details are set, the application will successfully submit, and when the final result comes through via POST / email it will be a FAIL:
Field | Value |
---|---|
Forename | Riley |
Surname | Davies |
HouseNameNumber | 4 |
Postcode | GU4 4UF |
DayOfBirth | 27 |
MonthOfBirth | 2 |
YearOfBirth | 1974 |
Country | GBR |
REFER Test Case "ID EXPIRED"
If the following details are set, the application will successfully submit, and when the final result comes through via POST / email it will be a REFER due to "ID EXPIRED":
Field | Value |
---|---|
Forename | Megan |
Surname | Brookes |
HouseNameNumber | 98 |
Postcode | RG19 9DW |
DayOfBirth | 9 |
MonthOfBirth | 8 |
YearOfBirth | 1979 |
Country | GBR |
REFER Test Case "ID ok, POA illegible"
If the following details are set, the application will successfully submit, and when the final result comes through via POST / email it will be a REFER due to "ID ok, POA illegible":
Field | Value |
---|---|
Forename | Olivia |
Surname | Wheeler |
HouseNameNumber | 82 |
Postcode | PO38 4UU |
DayOfBirth | 4 |
MonthOfBirth | 2 |
YearOfBirth | 1940 |
Country | GBR |
REFER Test Case "POA ok, ID invalid"
If the following details are set, the application will successfully submit, and when the final result comes through via POST / email it will be a REFER due to "POA ok, ID invalid":
Field | Value |
---|---|
Forename | Jayden |
Surname | Edwards |
HouseNameNumber | 42 |
Postcode | PL12 8XY |
DayOfBirth | 1 |
MonthOfBirth | 5 |
YearOfBirth | 1982 |
Country | GBR |
Finalising a REFER result
In a real world situation you would want to upload a second document in response to a "Refer" result as described in the link above.
This can also be done in sandbox mode for this call. Simply make a request without any query data, and a query option value of uniqueid set to value "WSCRA055F2C9FC32415FB4D189488108F4EB" (still with the sandbox query option set).
The ServiceTransactionInformation object will return the same as above, with the following difference:
<ServiceTransactionResultMessage> Successfully Re-submitted Application.
(This call was generated using sandbox mode) </ServiceTransactionResultMessage>
The ServiceTransactionInformation object will return the same as above, with the IDV Response codes
Docs not making sense? Please contact us so we can fix them: [email protected] :)