| POST | /clients | Add a client |
|---|
import Foundation
import ServiceStack
// @DataContract
public class AddClient : BaseRequest
{
// @DataMember
public var request:AddClientRequest
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case request
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
request = try container.decodeIfPresent(AddClientRequest.self, forKey: .request)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if request != nil { try container.encode(request, forKey: .request) }
}
}
// @DataContract
public class BaseRequest : IBaseRequest, Codable
{
/**
* The authentication credentials
*/
// @DataMember
// @ApiMember(Description="The authentication credentials", IsRequired=true, ParameterType="header, body")
public var authentication:Authentication
required public init(){}
}
// @DataContract
public class Authentication : Codable
{
/**
* The API User ID provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-User)
*/
// @DataMember
// @ApiMember(Description="The API User ID provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-User)", IsRequired=true, ParameterType="header, body")
public var apiUserId:String
/**
* The API User Key provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-Key)
*/
// @DataMember
// @ApiMember(Description="The API User Key provided by us when you signed up to use our API. Can be provided in the request body, or as a header parameter (X-Api-Key)", IsRequired=true, ParameterType="header, body")
public var apiUserKey:String
/**
* The User ID of the user making the request (e.g. a sub user). This is optional but can be used to associate API requests with a specific user, thereby allowing user permissions to be enforced. Can be provided in the body, or as a header parameter (X-User-Id).
*/
// @DataMember
// @ApiMember(Description="The User ID of the user making the request (e.g. a sub user). This is optional but can be used to associate API requests with a specific user, thereby allowing user permissions to be enforced. Can be provided in the body, or as a header parameter (X-User-Id).", ParameterType="header, body")
public var userId:String
required public init(){}
}
public class AddClientRequest : Codable
{
/**
* The full name of the client
*/
// @ApiMember(Description="The full name of the client", IsRequired=true)
public var name:String
/**
* The email address of the client
*/
// @ApiMember(Description="The email address of the client", IsRequired=true)
public var email:String
/**
* The client's mobile phone number in international format (e.g. '+447123456789')
*/
// @ApiMember(Description="The client's mobile phone number in international format (e.g. '+447123456789')", IsRequired=true)
public var mobileInternational:String
/**
* A reference or postcode that will be sent to the client to help them recognize the communication as genuine
*/
// @ApiMember(Description="A reference or postcode that will be sent to the client to help them recognize the communication as genuine", IsRequired=true)
public var postCode:String
/**
* Specifies the type of ValidateMe preset. Possible values are 'ValidateMe' for configuring RequiredDocuments, or 'PassportChipVerification' for setting the Passport as Proof of Name
*/
// @ApiMember(Description="Specifies the type of ValidateMe preset. Possible values are 'ValidateMe' for configuring RequiredDocuments, or 'PassportChipVerification' for setting the Passport as Proof of Name", IsRequired=true)
public var proofOfPreset:CreateMobileClientType
/**
* The categories of proof and selected documents that the client can use to provide proof. Required if ClientType is set to 'ValidateMe'
*/
// @ApiMember(Description="The categories of proof and selected documents that the client can use to provide proof. Required if ClientType is set to 'ValidateMe'")
public var proofOfDocumentCategories:ArrayOfProofOfDocumentCategories
/**
* If the client should be linked to other searches, specify the them here
*/
// @ApiMember(Description="If the client should be linked to other searches, specify the them here")
public var linkedTo:ArrayOfLinkedTo
/**
* Your reference, if any
*/
// @ApiMember(Description="Your reference, if any")
public var reference:String
required public init(){}
}
// @DataContract(Name="CreateMobileClientType", Namespace="http://schemas.servicestack.net/types")
public enum CreateMobileClientType : String, Codable
{
case Undefined
case ValidateMe
case PassportChipVerification
}
public class ArrayOfProofOfDocumentCategories : List<ProofOfDocumentCategory>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class ProofOfDocumentCategory : Codable
{
/**
* The ID of the ProofOfDocumentCategory
*/
// @ApiMember(Description="The ID of the ProofOfDocumentCategory", IsRequired=true)
public var id:Int
/**
* The category or subject that requires proof (e.g., 'Name', 'Address', 'Right to work')
*/
// @ApiMember(Description="The category or subject that requires proof (e.g., 'Name', 'Address', 'Right to work')", IsRequired=true)
public var proofOf:String
/**
* The documents that can be used to provide proof for the specified category.
*/
// @ApiMember(Description="The documents that can be used to provide proof for the specified category.", IsRequired=true)
public var proofOfDocuments:ArrayOfProofOfDocuments
required public init(){}
}
public class ArrayOfProofOfDocuments : List<ProofOfDocument>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class ProofOfDocument : Codable
{
/**
* The ID of the ProofOfDocument
*/
// @ApiMember(Description="The ID of the ProofOfDocument", IsRequired=true)
public var id:Int
/**
* The name of the ProofOfDocument
*/
// @ApiMember(Description="The name of the ProofOfDocument", IsRequired=true)
public var name:String
required public init(){}
}
public class ArrayOfLinkedTo : List<LinkedTo>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class LinkedTo : Codable
{
public var clientId:Int?
public var id:Int?
public var type:String
public var subtype:String
public var status:String
public var Description:String
public var isArchived:Bool?
public var name:String
public var date:Date?
required public init(){}
}
// @DataContract
public class AddClientResponse : Codable
{
// @DataMember
public var data:AddClientData
required public init(){}
}
public class AddClientData : BaseResponse, IBaseSearchResponse
{
public var linkedTo:ArrayOfLinkedTo
public var client:Client
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case linkedTo
case client
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
linkedTo = try container.decodeIfPresent(ArrayOfLinkedTo.self, forKey: .linkedTo)
client = try container.decodeIfPresent(Client.self, forKey: .client)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if linkedTo != nil { try container.encode(linkedTo, forKey: .linkedTo) }
if client != nil { try container.encode(client, forKey: .client) }
}
}
public class BaseResponse : IBaseDataResponse, IHasResponseStatus, Codable
{
/**
* The status of the response
*/
// @ApiMember(Description="The status of the response")
public var responseStatus:ResponseStatus
required public init(){}
}
public class ArrayOfResponseError : List<ResponseError>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class Client : Codable
{
public var id:Int
public var dateCreated:Date
public var name:String
public var email:String
public var reference:String
public var state:ClientState
public var mobileInternational:String
public var postCode:String
public var isValidateMe:Bool
public var face:Face
public var video:Video
public var location:Location
public var numOfDocuments:Int
public var numOfVideos:Int
public var passports:ArrayOfPassports
public var drivingLicences:ArrayOfDrivingLicences
public var otherDocuments:ArrayOfOtherDocuments
public var proofOfDocumentCategories:ArrayOfProofOfDocumentCategories
required public init(){}
}
// @DataContract(Name="ClientState", Namespace="http://schemas.servicestack.net/types")
public enum ClientState : String, Codable
{
case Undefined
case PendingCompletion
case PendingOcr
case PendingVerification
case Verified
}
public class Face : Codable
{
public var age:Double?
public var gender:String
public var emotion:String
public var smile:Double?
public var hairColour:String
public var facialHair:String
public var makeup:String
public var glasses:String
public var accessories:String
required public init(){}
}
public class Video : Codable
{
public var id:Int
public var videoUrl:String
public var imageUrl:String
public var videoTimestamps:[VideoTimestamp] = []
required public init(){}
}
public class VideoTimestamp : Codable
{
public var tagName:String
public var milli:Int?
public var imageUrl:String
required public init(){}
}
public class Location : Codable
{
public var latitude:Double
public var longitude:Double
required public init(){}
}
public class ArrayOfPassports : List<Passport>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class Passport : Codable
{
public var clientFileId:Int
public var firstName:String
public var middleName:String
public var lastName:String
public var dateOfBirth:String
public var gender:String
public var mrzLineOne:String
public var mrzLineTwo1:String
public var mrzLineTwo2:String
public var mrzLineTwo3:String
public var mrzLineTwo4:String
public var mrzLineTwo5:String
public var mrzLineTwo6:String
public var mrzLineTwo7:String
public var mrzLineTwo8:String
public var images:ArrayOfImages
public var isVerified:Bool
public var isFaceMatch:Bool?
public var faceMatchConfidence:Double?
public var hasPcvSearch:Bool
public var hasDfaSearch:Bool
public var isPassportChipVerified:Bool?
public var passportChipData:PassportChipData
public var isEligibleForPcv:Bool
public var isEligibleForDfa:Bool
required public init(){}
}
public class ArrayOfImages : List<Image>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class Image : Codable
{
public var id:Int
public var name:String
public var ocrId:Int?
public var url:String
required public init(){}
}
public class PassportChipData : Codable
{
public var isIssuerVerified:Bool
public var issuerCommonName:String
public var issuerOrganisationName:String
public var issuerCountry:String
public var mrzLine1:String
public var mrzLine2:String
public var isMrzLine1Verified:Bool
public var isMrzLine2Verified:Bool
public var dataGroupsVerified:[Int] = []
public var dataGroupsFailed:[Int] = []
public var isFaceMatch:Bool
public var faceMatchConfidence:Double?
required public init(){}
}
public class ArrayOfDrivingLicences : List<DrivingLicence>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class DrivingLicence : Codable
{
public var clientFileId:Int
public var firstName:String
public var middleName:String
public var lastName:String
public var dateOfBirth:String
public var address:String
public var drivingLicenceNumber:String
public var expiryDate:String
public var images:ArrayOfImages
public var isVerified:Bool
public var isFaceMatch:Bool?
public var faceMatchConfidence:Double?
public var hasDfaSearch:Bool
required public init(){}
}
public class ArrayOfOtherDocuments : List<OtherDocument>
{
required public init(){ super.init() }
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
}
}
public class OtherDocument : Codable
{
public var clientFileId:Int
public var type:String
public var typeOther:String
public var Description:String
public var originalImageUrl:String
public var croppedImageUrl:String
public var isVerified:Bool
required public init(){}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /clients HTTP/1.1
Host: api.sanctionssearch.com
Accept: application/xml
Content-Type: application/xml
Content-Length: length
<AddClient xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
<Authentication>
<ApiUserId>String</ApiUserId>
<ApiUserKey>String</ApiUserKey>
<UserId>String</UserId>
</Authentication>
<Request>
<Email>String</Email>
<LinkedTo>
<LinkedTo>
<ClientId>0</ClientId>
<Date>0001-01-01T00:00:00</Date>
<Description>String</Description>
<Id>0</Id>
<IsArchived>false</IsArchived>
<Name>String</Name>
<Status>String</Status>
<Subtype>String</Subtype>
<Type>String</Type>
</LinkedTo>
</LinkedTo>
<MobileInternational>String</MobileInternational>
<Name>String</Name>
<PostCode>String</PostCode>
<ProofOfDocumentCategories>
<CategoryId>
<Id>0</Id>
<ProofOf>String</ProofOf>
<ProofOfDocuments>
<DocumentId>
<Id>0</Id>
<Name>String</Name>
</DocumentId>
</ProofOfDocuments>
</CategoryId>
</ProofOfDocumentCategories>
<ProofOfPreset>Undefined</ProofOfPreset>
<Reference>String</Reference>
</Request>
</AddClient>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length
<AddClientResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
<Data>
<ResponseStatus>
<ErrorCode>String</ErrorCode>
<Message>String</Message>
<StackTrace>String</StackTrace>
<Errors>
<ResponseError>
<ErrorCode>String</ErrorCode>
<FieldName>String</FieldName>
<Message>String</Message>
<Meta xmlns:d6p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d6p1:KeyValueOfstringstring>
<d6p1:Key>String</d6p1:Key>
<d6p1:Value>String</d6p1:Value>
</d6p1:KeyValueOfstringstring>
</Meta>
</ResponseError>
</Errors>
<Meta xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d4p1:KeyValueOfstringstring>
<d4p1:Key>String</d4p1:Key>
<d4p1:Value>String</d4p1:Value>
</d4p1:KeyValueOfstringstring>
</Meta>
</ResponseStatus>
<Client>
<DateCreated>0001-01-01T00:00:00</DateCreated>
<DrivingLicences>
<Passport>
<Address>String</Address>
<ClientFileId>0</ClientFileId>
<DateOfBirth>String</DateOfBirth>
<DrivingLicenceNumber>String</DrivingLicenceNumber>
<ExpiryDate>String</ExpiryDate>
<FaceMatchConfidence>0</FaceMatchConfidence>
<FirstName>String</FirstName>
<HasDfaSearch>false</HasDfaSearch>
<Images>
<CategoryId>
<Id>0</Id>
<Name>String</Name>
<OcrId>0</OcrId>
<Url>String</Url>
</CategoryId>
</Images>
<IsFaceMatch>false</IsFaceMatch>
<IsVerified>false</IsVerified>
<LastName>String</LastName>
<MiddleName>String</MiddleName>
</Passport>
</DrivingLicences>
<Email>String</Email>
<Face>
<Accessories>String</Accessories>
<Age>0</Age>
<Emotion>String</Emotion>
<FacialHair>String</FacialHair>
<Gender>String</Gender>
<Glasses>String</Glasses>
<HairColour>String</HairColour>
<Makeup>String</Makeup>
<Smile>0</Smile>
</Face>
<Id>0</Id>
<IsValidateMe>false</IsValidateMe>
<Location>
<Latitude>0</Latitude>
<Longitude>0</Longitude>
</Location>
<MobileInternational>String</MobileInternational>
<Name>String</Name>
<NumOfDocuments>0</NumOfDocuments>
<NumOfVideos>0</NumOfVideos>
<OtherDocuments>
<OtherDocument>
<ClientFileId>0</ClientFileId>
<CroppedImageUrl>String</CroppedImageUrl>
<Description>String</Description>
<IsVerified>false</IsVerified>
<OriginalImageUrl>String</OriginalImageUrl>
<Type>String</Type>
<TypeOther>String</TypeOther>
</OtherDocument>
</OtherDocuments>
<Passports>
<Passport>
<ClientFileId>0</ClientFileId>
<DateOfBirth>String</DateOfBirth>
<FaceMatchConfidence>0</FaceMatchConfidence>
<FirstName>String</FirstName>
<Gender>String</Gender>
<HasDfaSearch>false</HasDfaSearch>
<HasPcvSearch>false</HasPcvSearch>
<Images>
<CategoryId>
<Id>0</Id>
<Name>String</Name>
<OcrId>0</OcrId>
<Url>String</Url>
</CategoryId>
</Images>
<IsEligibleForDfa>false</IsEligibleForDfa>
<IsEligibleForPcv>false</IsEligibleForPcv>
<IsFaceMatch>false</IsFaceMatch>
<IsPassportChipVerified>false</IsPassportChipVerified>
<IsVerified>false</IsVerified>
<LastName>String</LastName>
<MiddleName>String</MiddleName>
<MrzLineOne>String</MrzLineOne>
<MrzLineTwo1>String</MrzLineTwo1>
<MrzLineTwo2>String</MrzLineTwo2>
<MrzLineTwo3>String</MrzLineTwo3>
<MrzLineTwo4>String</MrzLineTwo4>
<MrzLineTwo5>String</MrzLineTwo5>
<MrzLineTwo6>String</MrzLineTwo6>
<MrzLineTwo7>String</MrzLineTwo7>
<MrzLineTwo8>String</MrzLineTwo8>
<PassportChipData>
<DataGroupsFailed xmlns:d7p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d7p1:int>0</d7p1:int>
</DataGroupsFailed>
<DataGroupsVerified xmlns:d7p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d7p1:int>0</d7p1:int>
</DataGroupsVerified>
<FaceMatchConfidence>0</FaceMatchConfidence>
<IsFaceMatch>false</IsFaceMatch>
<IsIssuerVerified>false</IsIssuerVerified>
<IsMrzLine1Verified>false</IsMrzLine1Verified>
<IsMrzLine2Verified>false</IsMrzLine2Verified>
<IssuerCommonName>String</IssuerCommonName>
<IssuerCountry>String</IssuerCountry>
<IssuerOrganisationName>String</IssuerOrganisationName>
<MRZLine1>String</MRZLine1>
<MRZLine2>String</MRZLine2>
</PassportChipData>
</Passport>
</Passports>
<PostCode>String</PostCode>
<ProofOfDocumentCategories>
<CategoryId>
<Id>0</Id>
<ProofOf>String</ProofOf>
<ProofOfDocuments>
<DocumentId>
<Id>0</Id>
<Name>String</Name>
</DocumentId>
</ProofOfDocuments>
</CategoryId>
</ProofOfDocumentCategories>
<Reference>String</Reference>
<State>Undefined</State>
<Video>
<Id>0</Id>
<ImageUrl>String</ImageUrl>
<VideoTimestamps>
<VideoTimestamp>
<ImageUrl>String</ImageUrl>
<Milli>0</Milli>
<TagName>String</TagName>
</VideoTimestamp>
</VideoTimestamps>
<VideoUrl>String</VideoUrl>
</Video>
</Client>
<LinkedTo>
<LinkedTo>
<ClientId>0</ClientId>
<Date>0001-01-01T00:00:00</Date>
<Description>String</Description>
<Id>0</Id>
<IsArchived>false</IsArchived>
<Name>String</Name>
<Status>String</Status>
<Subtype>String</Subtype>
<Type>String</Type>
</LinkedTo>
</LinkedTo>
</Data>
</AddClientResponse>