## VerifyPerson 🇸🇪
VerifyPerson service looks up a citizen’s address and birth data from the national population registry, by a narrowing query workflow with 18 separate query steps. The query must include the `countryCode`, and currently only countryCode “se”, Sweden, is supported.
The response count is currently limited to at most one best hit. But in case of not single best hit available a “No hit” will be returned.
The hit is of type:Â **[address](https://docs.zignsec.com/faq/common-data/#addressmodel)**Â .
### API
[Set up:](https://developers.zignsec.com/legacy/register-checks#verifyPerson) POST to _https://`env`.zignsec.com/v2/ekyc/verifyperson_ where `env` is **API** or **test**.
## Request
|**Name**|**Description**|**Required**|
|---|---|---|
|Query|[Address](https://docs.zignsec.com/faq/common-data/#addressmodel)Â model|Required|
|PersonalNumber|Personal number. Give as 12 digits.|Optional|
|DateOfBirth|Give as `yyyymmdd`/`yyyy-mm-dd`, `yyyymm`/`yyyy-mm` or `yyyy`. The hyphen separating the date parts is optional.|Optional|
|MatchSteps|Gives a possibility to limit what kind of queries to include. Default is all rules: 1,2,3,...18<br><br>- 1 – personalNumber, firstName, lastName, address, postalCode, city<br>- 2 – personalNumber, firstName, lastName, postalCode<br>- 3 – personalNumber, firstName, lastName, city<br>- 4 – personalNumber, firstName, lastName<br>- 5 – personalNumber, phoneNr<br>- 6 – personalNumber<br>- 7 – firstName, lastName, address, postalCode, city<br>- 8 – firstName, lastName, address, postalCode<br>- 9 – firstName, lastName, address, city<br>- 10 – firstName, lastName, address<br>- 11 – firstName, lastName, postalCode, city<br>- 12 – firstName, lastName, postalCode<br>- 13 – firstName, lastName, postalCode(first two)<br>- 14 – firstName, lastName, city<br>- 15 – firstName, lastName<br>- 16 – firstName, lastName, phoneNr<br>- 17 – firstName, postalCode, phoneNr<br>- 18 – lastName, postalCode, phoneNr|Optional|
|VerifyAge|Sets the Verify Age of searched person. There is `AgeVerificationFaulted` in response model that set verified user or not.|Optional|
**Request example:**
```swift
POST https://test.zignsec.com/v2/ekyc/verifyperson HTTP/1.1
Content-Type: application/json; charset=UTF-8
Authorization: yourkey-here.
{
"Query":{
"FirstName":"Sara Maria",
"LastName":"Karlsson",
"Gender":"Female",
"Address":"Vasavägen",
"PostalCode":"67040",
"CountryCode": "se"
}
}
```
**Response**
on root level
|**Name**|**Description**|
|---|---|
|WasFound|Boolean.|
|Persons|Array of hits, currently at most one best hit. [Address](http://docs.zignsec.com/api/common-data/#addressmodel) model.|
|ResponseCode|String. Possible values `SingleMatch`, `MultipleMatches`, `TooManyMatches`, `NoMatch`.|
Address model you can find [here](https://docs.zignsec.com/faq/common-data/#addressmodel). There are additional fields to model:
|**Name**|**Description**|
|---|---|
|AgeVerificationFaulted|Boolean. Indicates that the user has a verified by age set in the request field `VerifyAge`|
|MatchedStep|Specifies, which rule was run to get the hit(s).|
|MatchedStepDescription|Specifies, in [text form](https://developers.zignsec.com/legacy/register-checks#MatchStepDescription), which rule was run to get the hit(s). `personalNumber` string can be replaced by `personalNumber (partial)` if the search includes a `dateOfBirth` field.|
### How to test
Here is a link to an excel sheet which contains test data which can be used to test the products.
[Link to testdata](https://25357801.fs1.hubspotusercontent-eu1.net/hubfs/25357801/Support%20Files/TestdatabasPersoner.xlsx)