Sanctions Search API: v2

<back to all web services

AddClient

Clients
The following routes are available for this service:
POST/clientsAdd 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(){}
}


Swift AddClient DTOs

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

HTTP + JSON

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"}}}}