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
*/
// @DataMember
// @ApiMember(Description="The API User ID provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
public var apiUserId:String
/**
* The API User Key provided by us when you signed up to use our API
*/
// @DataMember
// @ApiMember(Description="The API User Key provided by us when you signed up to use our API", IsRequired=true, ParameterType="header, body")
public var apiUserKey: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
/**
* The postal code of the client's address. Used in emails sent to the client to help them recognize the communication as genuine
*/
// @ApiMember(Description="The postal code of the client's address. Used in emails 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
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 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 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 .json suffix or ?format=json
To embed the response in a jsonp callback, append ?callback=myCallback
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/json
Content-Type: application/json
Content-Length: length
{"request":{"name":"String","email":"String","mobileInternational":"String","postCode":"String","proofOfPreset":"Undefined","proofOfDocumentCategories":[{"id":0,"proofOf":"String","proofOfDocuments":[{"id":0,"name":"String"}]}],"linkedTo":[{"clientId":0,"id":0,"type":"String","subtype":"String","status":"String","description":"String","isArchived":false,"name":"String","date":"\/Date(-62135596800000-0000)\/"}]},"authentication":{"apiUserId":"String","apiUserKey":"String"}}
HTTP/1.1 200 OK Content-Type: application/json Content-Length: length {"data":{"linkedTo":[{"clientId":0,"id":0,"type":"String","subtype":"String","status":"String","description":"String","isArchived":false,"name":"String","date":"\/Date(-62135596800000-0000)\/"}],"client":{"id":0,"dateCreated":"\/Date(-62135596800000-0000)\/","name":"String","email":"String","reference":"String","state":"Undefined","mobileInternational":"String","postCode":"String","isValidateMe":false,"face":{"age":0,"gender":"String","emotion":"String","smile":0,"hairColour":"String","facialHair":"String","makeup":"String","glasses":"String","accessories":"String"},"video":{"id":0,"videoUrl":"String","imageUrl":"String","videoTimestamps":[{"tagName":"String","milli":0,"imageUrl":"String"}]},"location":{"latitude":0,"longitude":0},"numOfDocuments":0,"passports":[{"clientFileId":0,"firstName":"String","middleName":"String","lastName":"String","dateOfBirth":"String","gender":"String","mrzLineOne":"String","mrzLineTwo1":"String","mrzLineTwo2":"String","mrzLineTwo3":"String","mrzLineTwo4":"String","mrzLineTwo5":"String","mrzLineTwo6":"String","mrzLineTwo7":"String","mrzLineTwo8":"String","images":[{"id":0,"name":"String","ocrId":0,"url":"String"}],"isVerified":false,"isFaceMatch":false,"faceMatchConfidence":0,"hasPcvSearch":false,"hasDfaSearch":false,"isPassportChipVerified":false,"passportChipData":{"isIssuerVerified":false,"issuerCommonName":"String","issuerOrganisationName":"String","issuerCountry":"String","mrzLine1":"String","mrzLine2":"String","isMrzLine1Verified":false,"isMrzLine2Verified":false,"dataGroupsVerified":[0],"dataGroupsFailed":[0],"isFaceMatch":false,"faceMatchConfidence":0},"isEligibleForPcv":false,"isEligibleForDfa":false}],"drivingLicences":[{"clientFileId":0,"firstName":"String","middleName":"String","lastName":"String","dateOfBirth":"String","address":"String","drivingLicenceNumber":"String","images":[{"id":0,"name":"String","ocrId":0,"url":"String"}],"isVerified":false,"isFaceMatch":false,"faceMatchConfidence":0,"hasDfaSearch":false}],"otherDocuments":[{"clientFileId":0,"type":"String","typeOther":"String","description":"String","originalImageUrl":"String","croppedImageUrl":"String","isVerified":false}],"proofOfDocumentCategories":[{"id":0,"proofOf":"String","proofOfDocuments":[{"id":0,"name":"String"}]}]},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}}}