/* Options:
Date: 2025-06-13 17:47:44
Version: 8.30
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.sanctionssearch.com/v2

//GlobalNamespace: 
//MakePartial: True
//MakeVirtual: True
//MakeInternal: False
//MakeDataContractsExtensible: False
//AddNullableAnnotations: False
//AddReturnMarker: True
//AddDescriptionAsComments: True
//AddDataContractAttributes: False
//AddIndexesToDataMembers: False
//AddGeneratedCodeAttributes: False
//AddResponseStatus: False
//AddImplicitVersion: 
//InitializeCollections: True
//ExportValueTypes: False
IncludeTypes: GetSearch.*
//ExcludeTypes: 
//AddNamespaces: 
//AddDefaultXmlNamespace: http://schemas.servicestack.net/types
*/

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using ServiceStack;
using ServiceStack.DataAnnotations;
using SanctionsSearch.Api2.ServiceModel.Types;
using SanctionsSearch.Api2.ServiceModel.Operations.Base;
using SanctionsSearch.Api2.ServiceModel.Operations.Searches;

namespace SanctionsSearch.Api2.ServiceModel.Operations.Base
{
    public partial class ArrayOfResponseError
        : List<ResponseError>
    {
    }

    [DataContract]
    public partial class BaseRequest
        : IBaseRequest
    {
        ///<summary>
        ///The authentication credentials
        ///</summary>
        [DataMember]
        [ApiMember(Description="The authentication credentials", IsRequired=true, ParameterType="header, body")]
        public virtual Authentication Authentication { get; set; }
    }

    public partial class BaseResponse
        : IBaseDataResponse, IHasResponseStatus
    {
        ///<summary>
        ///The status of the response
        ///</summary>
        [ApiMember(Description="The status of the response")]
        public virtual ResponseStatus ResponseStatus { get; set; }
    }

    public partial interface IBaseDataResponse
    {
        ResponseStatus ResponseStatus { get; set; }
    }

    public partial interface IBaseRequest
    {
        Authentication Authentication { get; set; }
    }

    public partial interface IBaseSearchResponse
        : IBaseDataResponse
    {
        ArrayOfLinkedTo LinkedTo { get; set; }
    }

    public partial interface IHasResponseStatus
    {
        ResponseStatus ResponseStatus { get; set; }
    }

    [DataContract]
    public partial class ResponseError
    {
        public ResponseError()
        {
            Meta = new Dictionary<string, string>{};
        }

        [DataMember(Order=1)]
        public virtual string ErrorCode { get; set; }

        [DataMember(Order=2)]
        public virtual string FieldName { get; set; }

        [DataMember(Order=3)]
        public virtual string Message { get; set; }

        [DataMember(Order=4)]
        public virtual Dictionary<string, string> Meta { get; set; }
    }

    [DataContract]
    public partial class ResponseStatus
    {
        public ResponseStatus()
        {
            Meta = new Dictionary<string, string>{};
        }

        [DataMember(Order=1)]
        public virtual string ErrorCode { get; set; }

        [DataMember(Order=2)]
        public virtual string Message { get; set; }

        [DataMember(Order=3)]
        public virtual string StackTrace { get; set; }

        [DataMember(Order=4)]
        public virtual ArrayOfResponseError Errors { get; set; }

        [DataMember(Order=5)]
        public virtual Dictionary<string, string> Meta { get; set; }
    }

}

namespace SanctionsSearch.Api2.ServiceModel.Operations.Searches
{
    [Route("/sanctions/get", "POST")]
    [DataContract]
    public partial class GetSearch
        : BaseRequest, IReturn<GetSearchResponse>
    {
        [DataMember]
        public virtual GetSearchRequest Request { get; set; }
    }

    public partial class GetSearchData
        : BaseResponse, IBaseSearchResponse
    {
        public virtual ArrayOfLinkedTo LinkedTo { get; set; }
        public virtual SearchRecord SearchRecord { get; set; }
    }

    public partial class GetSearchRequest
    {
        ///<summary>
        ///If the search is being accessed by a sub user, specify their username here to validate they have permissions to view it
        ///</summary>
        [ApiMember(Description="If the search is being accessed by a sub user, specify their username here to validate they have permissions to view it")]
        public virtual string SubUserName { get; set; }

        ///<summary>
        ///If set to true, the response will exclude resolved search results, it will only include unresolved results
        ///</summary>
        [ApiMember(Description="If set to true, the response will exclude resolved search results, it will only include unresolved results")]
        public virtual bool OnlyShowUnresolvedResults { get; set; }

        public virtual long Id { get; set; }
    }

    [DataContract]
    public partial class GetSearchResponse
    {
        [DataMember]
        public virtual GetSearchData Data { get; set; }
    }

}

namespace SanctionsSearch.Api2.ServiceModel.Types
{
    public partial class ArrayOfLinkedTo
        : List<LinkedTo>
    {
    }

    public partial class ArrayOfSearchResultEntries
        : List<SearchResultEntry>
    {
    }

    [DataContract]
    public partial class Authentication
    {
        ///<summary>
        ///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)
        ///</summary>
        [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 virtual string ApiUserId { get; set; }

        ///<summary>
        ///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)
        ///</summary>
        [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 virtual string ApiUserKey { get; set; }

        ///<summary>
        ///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).
        ///</summary>
        [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 virtual string UserId { get; set; }
    }

    public partial class LinkedTo
    {
        public virtual int? ClientId { get; set; }
        public virtual long? Id { get; set; }
        public virtual string Type { get; set; }
        public virtual string Subtype { get; set; }
        public virtual string Status { get; set; }
        public virtual string Description { get; set; }
        public virtual bool? IsArchived { get; set; }
        public virtual string Name { get; set; }
        public virtual DateTime? Date { get; set; }
    }

    public partial class SearchCriteria
    {
        public virtual string Name { get; set; }
        public virtual string Address { get; set; }
        public virtual string Country { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string Nationality { get; set; }
        public virtual string Reference { get; set; }
    }

    public partial class SearchRecord
    {
        public SearchRecord()
        {
            SearchSources = new List<SearchSource>{};
        }

        public virtual long Id { get; set; }
        public virtual string SearchType { get; set; }
        public virtual DateTime DateSearched { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual DateTime? DateArchived { get; set; }
        public virtual bool IsArchived { get; set; }
        public virtual int NumOfResults { get; set; }
        public virtual bool ClientInResults { get; set; }
        public virtual bool ClientNotInResults { get; set; }
        public virtual bool AffectedByUpdate { get; set; }
        public virtual SearchCriteria SearchCriteria { get; set; }
        public virtual SearchResults SearchResults { get; set; }
        public virtual List<SearchSource> SearchSources { get; set; }
        public virtual ArrayOfSearchResultEntries ListSearchResults { get; set; }
    }

    public partial class SearchResultAddress
    {
        public virtual long SearchResultAddressId { get; set; }
        public virtual string Type { get; set; }
        public virtual string Address1 { get; set; }
        public virtual string Address2 { get; set; }
        public virtual string Address3 { get; set; }
        public virtual string City { get; set; }
        public virtual string County { get; set; }
        public virtual string PostCode { get; set; }
        public virtual string Country { get; set; }
    }

    public partial class SearchResultCanadianJustice
    {
        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string Name { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string Country { get; set; }
        public virtual int RefId { get; set; }
    }

    public partial class SearchResultCanadianSema
    {
        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string Name { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string Country { get; set; }
        public virtual string Schedule { get; set; }
        public virtual string Item { get; set; }
    }

    public partial class SearchResultDateOfBirth
    {
        public virtual long SearchResultDateOfBirthId { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual short? Year { get; set; }
        public virtual byte? Month { get; set; }
        public virtual byte? Day { get; set; }
        public virtual string Type { get; set; }
    }

    public partial class SearchResultDfat
    {
        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string FullName { get; set; }
        public virtual string Address { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string PlaceOfBirth { get; set; }
        public virtual string Nationality { get; set; }
    }

    public partial class SearchResultEntry
    {
        public SearchResultEntry()
        {
            Addresses = new List<SearchResultAddress>{};
            DatesOfBirth = new List<SearchResultDateOfBirth>{};
            Names = new List<SearchResultName>{};
            Nationalities = new List<SearchResultNationality>{};
            PlacesOfBirth = new List<SearchResultPlaceOfBirth>{};
            Remarks = new List<SearchResultRemark>{};
        }

        public virtual long SearchResultId { get; set; }
        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime? DateUpdated { get; set; }
        public virtual string SanctionsListId { get; set; }
        public virtual string SanctionsListName { get; set; }
        public virtual List<SearchResultAddress> Addresses { get; set; }
        public virtual List<SearchResultDateOfBirth> DatesOfBirth { get; set; }
        public virtual List<SearchResultName> Names { get; set; }
        public virtual List<SearchResultNationality> Nationalities { get; set; }
        public virtual List<SearchResultPlaceOfBirth> PlacesOfBirth { get; set; }
        public virtual List<SearchResultRemark> Remarks { get; set; }
    }

    public partial class SearchResultEu
    {
        public SearchResultEu()
        {
            Addresses = new List<SearchResultEuAddress>{};
            Births = new List<SearchResultEuBirth>{};
            Citizenships = new List<SearchResultOfacEuCitizenship>{};
            Names = new List<SearchResultEuName>{};
            Passports = new List<SearchResultEuPassport>{};
        }

        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual List<SearchResultEuAddress> Addresses { get; set; }
        public virtual List<SearchResultEuBirth> Births { get; set; }
        public virtual List<SearchResultOfacEuCitizenship> Citizenships { get; set; }
        public virtual List<SearchResultEuName> Names { get; set; }
        public virtual List<SearchResultEuPassport> Passports { get; set; }
    }

    public partial class SearchResultEuAddress
    {
        public virtual string Street { get; set; }
        public virtual string City { get; set; }
        public virtual string Country { get; set; }
        public virtual string PostCode { get; set; }
        public virtual string Other { get; set; }
    }

    public partial class SearchResultEuBirth
    {
        public virtual string Date { get; set; }
        public virtual string Place { get; set; }
        public virtual string Country { get; set; }
    }

    public partial class SearchResultEuName
    {
        public virtual string FullName { get; set; }
        public virtual string Gender { get; set; }
    }

    public partial class SearchResultEuPassport
    {
        public virtual string Number { get; set; }
        public virtual string Country { get; set; }
    }

    public partial class SearchResultHmTreasury
    {
        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateListed { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string Name1 { get; set; }
        public virtual string Name2 { get; set; }
        public virtual string Name3 { get; set; }
        public virtual string Name4 { get; set; }
        public virtual string Name5 { get; set; }
        public virtual string Name6 { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string CountryOfBirth { get; set; }
        public virtual string Nationality { get; set; }
        public virtual string Address1 { get; set; }
        public virtual string Address2 { get; set; }
        public virtual string Address3 { get; set; }
        public virtual string Address4 { get; set; }
        public virtual string Address5 { get; set; }
        public virtual string Address6 { get; set; }
        public virtual string PostCode { get; set; }
        public virtual string Country { get; set; }
    }

    public partial class SearchResultName
    {
        public virtual long SearchResultNameId { get; set; }
        public virtual string Type { get; set; }
        public virtual string Title { get; set; }
        public virtual string FullName { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
    }

    public partial class SearchResultNationality
    {
        public virtual long SearchResultNationalityId { get; set; }
        public virtual string Nationality { get; set; }
    }

    public partial class SearchResultOfac
    {
        public SearchResultOfac()
        {
            Addresses = new List<SearchResultOfacAddress>{};
            Akas = new List<SearchResultOfacAka>{};
            DateOfBirths = new List<SearchResultOfacDateOfBirth>{};
            Nationalities = new List<SearchResultOfacNationality>{};
            PlaceOfBirths = new List<SearchResultOfacPlaceOfBirth>{};
        }

        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual List<SearchResultOfacAddress> Addresses { get; set; }
        public virtual List<SearchResultOfacAka> Akas { get; set; }
        public virtual List<SearchResultOfacDateOfBirth> DateOfBirths { get; set; }
        public virtual List<SearchResultOfacNationality> Nationalities { get; set; }
        public virtual List<SearchResultOfacPlaceOfBirth> PlaceOfBirths { get; set; }
    }

    public partial class SearchResultOfacAddress
    {
        public virtual string Address1 { get; set; }
        public virtual string Address2 { get; set; }
        public virtual string Address3 { get; set; }
        public virtual string City { get; set; }
        public virtual string State { get; set; }
        public virtual string PostCode { get; set; }
        public virtual string Country { get; set; }
    }

    public partial class SearchResultOfacAka
    {
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual string Type { get; set; }
        public virtual string Strength { get; set; }
    }

    public partial class SearchResultOfacDateOfBirth
    {
        public virtual string DateOfBirth { get; set; }
    }

    public partial class SearchResultOfacEuCitizenship
    {
        public virtual string Country { get; set; }
    }

    public partial class SearchResultOfacNationality
    {
        public virtual string Country { get; set; }
    }

    public partial class SearchResultOfacPlaceOfBirth
    {
        public virtual string PlaceOfBirth { get; set; }
    }

    public partial class SearchResultOsfi
    {
        public virtual int ResultStrength { get; set; }
        public virtual decimal ResultSimilarity { get; set; }
        public virtual bool ResultResolved { get; set; }
        public virtual string ResultType { get; set; }
        public virtual DateTime DateUpdated { get; set; }
        public virtual string FullName { get; set; }
        public virtual string Address { get; set; }
        public virtual string DateOfBirth { get; set; }
        public virtual string PlaceOfBirth { get; set; }
        public virtual string Nationality { get; set; }
    }

    public partial class SearchResultPlaceOfBirth
    {
        public virtual long SearchResultPlaceOfBirthId { get; set; }
        public virtual string PlaceOfBirth { get; set; }
        public virtual string CountryOfBirth { get; set; }
    }

    public partial class SearchResultRemark
    {
        public virtual long SearchResultRemarkId { get; set; }
        public virtual string Name { get; set; }
        public virtual string Description { get; set; }
    }

    public partial class SearchResults
    {
        public SearchResults()
        {
            EuResults = new List<SearchResultEu>{};
            HMTResults = new List<SearchResultHmTreasury>{};
            HMTUkraineResults = new List<SearchResultHmTreasury>{};
            OfacResults = new List<SearchResultOfac>{};
            OfacConsolidatedResults = new List<SearchResultOfac>{};
            DfatResults = new List<SearchResultDfat>{};
            OsfiResults = new List<SearchResultOsfi>{};
            CanadianJusticeResults = new List<SearchResultCanadianJustice>{};
            CanadianSemaResults = new List<SearchResultCanadianSema>{};
            SwissSecoResults = new List<SearchResultEntry>{};
        }

        public virtual List<SearchResultEu> EuResults { get; set; }
        public virtual List<SearchResultHmTreasury> HMTResults { get; set; }
        public virtual List<SearchResultHmTreasury> HMTUkraineResults { get; set; }
        public virtual List<SearchResultOfac> OfacResults { get; set; }
        public virtual List<SearchResultOfac> OfacConsolidatedResults { get; set; }
        public virtual List<SearchResultDfat> DfatResults { get; set; }
        public virtual List<SearchResultOsfi> OsfiResults { get; set; }
        public virtual List<SearchResultCanadianJustice> CanadianJusticeResults { get; set; }
        public virtual List<SearchResultCanadianSema> CanadianSemaResults { get; set; }
        public virtual List<SearchResultEntry> SwissSecoResults { get; set; }
    }

    public partial class SearchSource
    {
        public virtual string ListId { get; set; }
        public virtual string ListName { get; set; }
        public virtual string ListShortName { get; set; }
        public virtual bool? IsAffectedByListUpdate { get; set; }
    }

}