Platform Subscription API

<back to all web services

GetContacts

Returns a list of contacts with specified roles. There are options to include custom and also to include each contacts connected contacts

Requires Authentication
import 'package:servicestack/servicestack.dart';
import 'dart:typed_data';

class ContactRole implements IConvertible
{
    /**
    * Guid of the Role List Item object within Eros.
    */
    // @ApiMember(DataType="Guid", Description="Guid of the Role List Item object within Eros.", IsRequired=true, Name="RoleId", ParameterType="query")
    String? RoleId;

    /**
    * The unique key that represents the role type on the external system.
    */
    // @ApiMember(DataType="string", Description="The unique key that represents the role type on the external system.", Name="AlternateKey", ParameterType="query")
    String? AlternateKey;

    ContactRole({this.RoleId,this.AlternateKey});
    ContactRole.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RoleId = json['RoleId'];
        AlternateKey = json['AlternateKey'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RoleId': RoleId,
        'AlternateKey': AlternateKey
    };

    getTypeName() => "ContactRole";
    TypeContext? context = _ctx;
}

class LocationCoordinatesModel implements IConvertible
{
    /**
    * The latitude of an address - geographic coordinates specifying the north-south position of a point on the Earth's surface.
    */
    // @ApiMember(DataType="Double?", Description="The latitude of an address - geographic coordinates specifying the north-south position of a point on the Earth's surface.", IsRequired=true, Name="Latitude", ParameterType="query")
    double? Latitude;

    /**
    * The longitude of an address - geographic coordinates specifying the east-west position of a point on the Earth's surface.
    */
    // @ApiMember(DataType="Double?", Description="The longitude of an address - geographic coordinates specifying the east-west position of a point on the Earth's surface.", IsRequired=true, Name="Longitude", ParameterType="query")
    double? Longitude;

    /**
    * The altitude of an address - the altitude above sea level.
    */
    // @ApiMember(DataType="Double?", Description="The altitude of an address - the altitude above sea level.", Name="Altitude", ParameterType="query")
    double? Altitude;

    /**
    * Accuracy of the latitude and longitude.
    */
    // @ApiMember(DataType="Double?", Description="Accuracy of the latitude and longitude.", Name="Accuracy", ParameterType="query")
    double? Accuracy;

    /**
    * Accurancy of the Altitude.
    */
    // @ApiMember(DataType="Double?", Description="Accurancy of the Altitude.", Name="AltitudeAccuracy", ParameterType="query")
    double? AltitudeAccuracy;

    /**
    * Direction you are heading.
    */
    // @ApiMember(DataType="Double?", Description="Direction you are heading.", Name="Heading", ParameterType="query")
    double? Heading;

    /**
    * Speed you are going.
    */
    // @ApiMember(DataType="Double?", Description="Speed you are going.", Name="Speed", ParameterType="query")
    double? Speed;

    /**
    * Speed your altitude is ascending/descending at.
    */
    // @ApiMember(DataType="Double?", Description="Speed your altitude is ascending/descending at.", Name="VerticalSpeed", ParameterType="query")
    double? VerticalSpeed;

    LocationCoordinatesModel({this.Latitude,this.Longitude,this.Altitude,this.Accuracy,this.AltitudeAccuracy,this.Heading,this.Speed,this.VerticalSpeed});
    LocationCoordinatesModel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Latitude = JsonConverters.toDouble(json['Latitude']);
        Longitude = JsonConverters.toDouble(json['Longitude']);
        Altitude = JsonConverters.toDouble(json['Altitude']);
        Accuracy = JsonConverters.toDouble(json['Accuracy']);
        AltitudeAccuracy = JsonConverters.toDouble(json['AltitudeAccuracy']);
        Heading = JsonConverters.toDouble(json['Heading']);
        Speed = JsonConverters.toDouble(json['Speed']);
        VerticalSpeed = JsonConverters.toDouble(json['VerticalSpeed']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Latitude': Latitude,
        'Longitude': Longitude,
        'Altitude': Altitude,
        'Accuracy': Accuracy,
        'AltitudeAccuracy': AltitudeAccuracy,
        'Heading': Heading,
        'Speed': Speed,
        'VerticalSpeed': VerticalSpeed
    };

    getTypeName() => "LocationCoordinatesModel";
    TypeContext? context = _ctx;
}

class AddressModel implements IConvertible
{
    /**
    * The distance between this project and another specified set of gps coordinates.
    */
    // @ApiMember(DataType="double", Description="The distance between this project and another specified set of gps coordinates.", Name="DistanceAway", ParameterType="query")
    double? DistanceAway;

    /**
    * The latitude of an address - geographic coordinates specifying the north-south position of a point on the Earth's surface.
    */
    // @ApiMember(DataType="Double?", Description="The latitude of an address - geographic coordinates specifying the north-south position of a point on the Earth's surface.", IsRequired=true, Name="Latitude", ParameterType="query")
    double? Latitude;

    /**
    * The longitude of an address - geographic coordinates specifying the east-west position of a point on the Earth's surface.
    */
    // @ApiMember(DataType="Double?", Description="The longitude of an address - geographic coordinates specifying the east-west position of a point on the Earth's surface.", IsRequired=true, Name="Longitude", ParameterType="query")
    double? Longitude;

    /**
    * Address Format Id Guid - this will be determined by the service.
    */
    // @ApiMember(DataType="Guid", Description="Address Format Id Guid - this will be determined by the service.", Name="AddressFormatId", ParameterType="query")
    String? AddressFormatId;

    /**
    * Suburb Id Guid - this will attempt to be determined by the SuburbName, StateShortName and Postcode entered.
    */
    // @ApiMember(DataType="Guid", Description="Suburb Id Guid - this will attempt to be determined by the SuburbName, StateShortName and Postcode entered.", Name="SuburbId", ParameterType="query")
    String? SuburbId;

    /**
    * The suburb name.
    */
    // @ApiMember(DataType="string", Description="The suburb name.", Name="SuburbName", ParameterType="query")
    String? SuburbName;

    /**
    * The shortened State Name e.g Vic for Victoria.
    */
    // @ApiMember(DataType="string", Description="The shortened State Name e.g Vic for Victoria.", Name="StateShortName", ParameterType="query")
    String? StateShortName;

    /**
    * The suburb postcode.
    */
    // @ApiMember(DataType="string", Description="The suburb postcode.", Name="PostCode", ParameterType="query")
    String? PostCode;

    /**
    * Country Id Guid - this will be determined by the CountrName or ISOCountryCode entered.
    */
    // @ApiMember(DataType="Guid", Description="Country Id Guid - this will be determined by the CountrName or ISOCountryCode entered.", Name="CountryId", ParameterType="query")
    String? CountryId;

    /**
    * the name of the country the address is within.
    */
    // @ApiMember(DataType="string", Description="the name of the country the address is within.", Name="CountryName", ParameterType="query")
    String? CountryName;

    /**
    * A 2 digit ISO Country Code representing the country.
    */
    // @ApiMember(DataType="string", Description="A 2 digit ISO Country Code representing the country.", Name="ISOCountryCode", ParameterType="query")
    String? ISOCountryCode;

    /**
    * The address Lot number.
    */
    // @ApiMember(DataType="string", Description="The address Lot number.", Name="LotNumber", ParameterType="query")
    String? LotNumber;

    /**
    * The address Sub Unit number.
    */
    // @ApiMember(DataType="string", Description="The address Sub Unit number.", Name="SubUnit", ParameterType="query")
    String? SubUnit;

    /**
    * The address building number.
    */
    // @ApiMember(DataType="string", Description="The address building number.", Name="BuildingNumber", ParameterType="query")
    String? BuildingNumber;

    /**
    * The address street number.
    */
    // @ApiMember(DataType="string", Description="The address street number.", Name="StreetNumber", ParameterType="query")
    String? StreetNumber;

    /**
    * The address street name including street type.
    */
    // @ApiMember(DataType="string", Description="The address street name including street type.", Name="StreetName", ParameterType="query")
    String? StreetName;

    /**
    * A formatted address Line 1.
    */
    // @ApiMember(DataType="string", Description="A formatted address Line 1.", Name="AddressLineOne", ParameterType="query")
    String? AddressLineOne;

    /**
    * A formatted address Line 2.
    */
    // @ApiMember(DataType="string", Description="A formatted address Line 2.", Name="AddressLineTwo", ParameterType="query")
    String? AddressLineTwo;

    /**
    * The full address string.
    */
    // @ApiMember(DataType="string", Description="The full address string.", Name="AddressFull", ParameterType="query")
    String? AddressFull;

    /**
    * True if the address is a physical location.
    */
    // @ApiMember(DataType="bool?", Description="True if the address is a physical location.", Name="IsPhysical", ParameterType="query")
    bool? IsPhysical;

    /**
    * Notes about the address.
    */
    // @ApiMember(DataType="string", Description="Notes about the address.", Name="Notes", ParameterType="query")
    String? Notes;

    /**
    * If true, the address is eligible for having its coordinates calculated/updated.
    */
    // @ApiMember(DataType="bool?", Description="If true, the address is eligible for having its coordinates calculated/updated.", Name="AutoMapCoordinates", ParameterType="query")
    bool? AutoMapCoordinates;

    /**
    * Location Coordinates for the address.
    */
    // @ApiMember(DataType="LocationCoordinates", Description="Location Coordinates for the address.", Name="LocationCoordinates", ParameterType="query")
    LocationCoordinatesModel? LocationCoordinates;

    AddressModel({this.DistanceAway,this.Latitude,this.Longitude,this.AddressFormatId,this.SuburbId,this.SuburbName,this.StateShortName,this.PostCode,this.CountryId,this.CountryName,this.ISOCountryCode,this.LotNumber,this.SubUnit,this.BuildingNumber,this.StreetNumber,this.StreetName,this.AddressLineOne,this.AddressLineTwo,this.AddressFull,this.IsPhysical,this.Notes,this.AutoMapCoordinates,this.LocationCoordinates});
    AddressModel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DistanceAway = JsonConverters.toDouble(json['DistanceAway']);
        Latitude = JsonConverters.toDouble(json['Latitude']);
        Longitude = JsonConverters.toDouble(json['Longitude']);
        AddressFormatId = json['AddressFormatId'];
        SuburbId = json['SuburbId'];
        SuburbName = json['SuburbName'];
        StateShortName = json['StateShortName'];
        PostCode = json['PostCode'];
        CountryId = json['CountryId'];
        CountryName = json['CountryName'];
        ISOCountryCode = json['ISOCountryCode'];
        LotNumber = json['LotNumber'];
        SubUnit = json['SubUnit'];
        BuildingNumber = json['BuildingNumber'];
        StreetNumber = json['StreetNumber'];
        StreetName = json['StreetName'];
        AddressLineOne = json['AddressLineOne'];
        AddressLineTwo = json['AddressLineTwo'];
        AddressFull = json['AddressFull'];
        IsPhysical = json['IsPhysical'];
        Notes = json['Notes'];
        AutoMapCoordinates = json['AutoMapCoordinates'];
        LocationCoordinates = JsonConverters.fromJson(json['LocationCoordinates'],'LocationCoordinatesModel',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DistanceAway': DistanceAway,
        'Latitude': Latitude,
        'Longitude': Longitude,
        'AddressFormatId': AddressFormatId,
        'SuburbId': SuburbId,
        'SuburbName': SuburbName,
        'StateShortName': StateShortName,
        'PostCode': PostCode,
        'CountryId': CountryId,
        'CountryName': CountryName,
        'ISOCountryCode': ISOCountryCode,
        'LotNumber': LotNumber,
        'SubUnit': SubUnit,
        'BuildingNumber': BuildingNumber,
        'StreetNumber': StreetNumber,
        'StreetName': StreetName,
        'AddressLineOne': AddressLineOne,
        'AddressLineTwo': AddressLineTwo,
        'AddressFull': AddressFull,
        'IsPhysical': IsPhysical,
        'Notes': Notes,
        'AutoMapCoordinates': AutoMapCoordinates,
        'LocationCoordinates': JsonConverters.toJson(LocationCoordinates,'LocationCoordinatesModel',context!)
    };

    getTypeName() => "AddressModel";
    TypeContext? context = _ctx;
}

class ContactAddressModel implements IConvertible
{
    AddressModel? Address;
    bool? IsPostal;
    bool? IsPrimaryLocation;
    bool? IsRegisteredLocation;
    String? SuburbName;
    String? StateName;
    String? CountryName;

    ContactAddressModel({this.Address,this.IsPostal,this.IsPrimaryLocation,this.IsRegisteredLocation,this.SuburbName,this.StateName,this.CountryName});
    ContactAddressModel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Address = JsonConverters.fromJson(json['Address'],'AddressModel',context!);
        IsPostal = json['IsPostal'];
        IsPrimaryLocation = json['IsPrimaryLocation'];
        IsRegisteredLocation = json['IsRegisteredLocation'];
        SuburbName = json['SuburbName'];
        StateName = json['StateName'];
        CountryName = json['CountryName'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Address': JsonConverters.toJson(Address,'AddressModel',context!),
        'IsPostal': IsPostal,
        'IsPrimaryLocation': IsPrimaryLocation,
        'IsRegisteredLocation': IsRegisteredLocation,
        'SuburbName': SuburbName,
        'StateName': StateName,
        'CountryName': CountryName
    };

    getTypeName() => "ContactAddressModel";
    TypeContext? context = _ctx;
}

class PhoneModel implements IConvertible
{
    String? CountryCode;
    String? AreaCode;
    String? LocalNumber;

    PhoneModel({this.CountryCode,this.AreaCode,this.LocalNumber});
    PhoneModel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CountryCode = json['CountryCode'];
        AreaCode = json['AreaCode'];
        LocalNumber = json['LocalNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CountryCode': CountryCode,
        'AreaCode': AreaCode,
        'LocalNumber': LocalNumber
    };

    getTypeName() => "PhoneModel";
    TypeContext? context = _ctx;
}

class ContactDetailModel implements IConvertible
{
    String? ContactMethodId;
    String? ContactMethodName;
    ContactAddressModel? ContactAddress;
    PhoneModel? ContactPhone;
    String? CountryId;
    String? ContactDetails;
    String? Notes;
    String? ContactDetailsCode;
    int? OrderContactMethod;
    bool? IsPrimaryContactMethod;
    bool? IsAddress;

    ContactDetailModel({this.ContactMethodId,this.ContactMethodName,this.ContactAddress,this.ContactPhone,this.CountryId,this.ContactDetails,this.Notes,this.ContactDetailsCode,this.OrderContactMethod,this.IsPrimaryContactMethod,this.IsAddress});
    ContactDetailModel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ContactMethodId = json['ContactMethodId'];
        ContactMethodName = json['ContactMethodName'];
        ContactAddress = JsonConverters.fromJson(json['ContactAddress'],'ContactAddressModel',context!);
        ContactPhone = JsonConverters.fromJson(json['ContactPhone'],'PhoneModel',context!);
        CountryId = json['CountryId'];
        ContactDetails = json['ContactDetails'];
        Notes = json['Notes'];
        ContactDetailsCode = json['ContactDetailsCode'];
        OrderContactMethod = json['OrderContactMethod'];
        IsPrimaryContactMethod = json['IsPrimaryContactMethod'];
        IsAddress = json['IsAddress'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ContactMethodId': ContactMethodId,
        'ContactMethodName': ContactMethodName,
        'ContactAddress': JsonConverters.toJson(ContactAddress,'ContactAddressModel',context!),
        'ContactPhone': JsonConverters.toJson(ContactPhone,'PhoneModel',context!),
        'CountryId': CountryId,
        'ContactDetails': ContactDetails,
        'Notes': Notes,
        'ContactDetailsCode': ContactDetailsCode,
        'OrderContactMethod': OrderContactMethod,
        'IsPrimaryContactMethod': IsPrimaryContactMethod,
        'IsAddress': IsAddress
    };

    getTypeName() => "ContactDetailModel";
    TypeContext? context = _ctx;
}

class SubscriptionContactModel implements IConvertible
{
    /**
    * Guid of the contact object within Eros.
    */
    // @ApiMember(DataType="Guid", Description="Guid of the contact object within Eros.", Name="ContactId", ParameterType="query")
    String? ContactId;

    /**
    * Guid of the Contact Type List Item object within Eros.
    */
    // @ApiMember(DataType="Guid", Description="Guid of the Contact Type List Item object within Eros.", IsRequired=true, Name="ContactType", ParameterType="query")
    String? ContactType;

    /**
    * Guid of the Marital Status List Item object within Eros.
    */
    // @ApiMember(DataType="Guid?", Description="Guid of the Marital Status List Item object within Eros.", Name="MaritalStatus", ParameterType="query")
    String? MaritalStatus;

    /**
    * Guid of the Gender List Item object within Eros.
    */
    // @ApiMember(DataType="Guid?", Description="Guid of the Gender List Item object within Eros.", Name="Gender", ParameterType="query")
    String? Gender;

    /**
    * The first given name for the contact.  Applies to a person contact type.
    */
    // @ApiMember(DataType="string", Description="The first given name for the contact.  Applies to a person contact type.", Name="FirstName", ParameterType="query")
    String? FirstName;

    /**
    * The middle name(s) for the contact.  Applies to a person contact type.
    */
    // @ApiMember(DataType="string", Description="The middle name(s) for the contact.  Applies to a person contact type.", Name="MiddleName", ParameterType="query")
    String? MiddleName;

    /**
    * The surname for the contact.  Applies to a person contact type.
    */
    // @ApiMember(DataType="string", Description="The surname for the contact.  Applies to a person contact type.", Name="Surname", ParameterType="query")
    String? Surname;

    /**
    * The full name for the contact.
    */
    // @ApiMember(DataType="string", Description="The full name for the contact.", Name="FullName", ParameterType="query")
    String? FullName;

    /**
    * A short name for the contact.
    */
    // @ApiMember(DataType="string", Description="A short name for the contact.", Name="ShortName", ParameterType="query")
    String? ShortName;

    /**
    * The birth date for the contact.  Applies to a person contact type.
    */
    // @ApiMember(DataType="DateTime?", Description="The birth date for the contact.  Applies to a person contact type.", Name="BirthDate", ParameterType="query")
    DateTime? BirthDate;

    /**
    * The title for the contact.  Applies to a person contact type.
    */
    // @ApiMember(DataType="string", Description="The title for the contact.  Applies to a person contact type.", Name="Title", ParameterType="query")
    String? Title;

    /**
    * A salutation for the contact.
    */
    // @ApiMember(DataType="string", Description="A salutation for the contact.", Name="Salutation", ParameterType="query")
    String? Salutation;

    /**
    * The A.B.N for the contact.
    */
    // @ApiMember(DataType="string", Description="The A.B.N for the contact.", Name="Abn", ParameterType="query")
    String? Abn;

    /**
    * The A.C.N for the contact.
    */
    // @ApiMember(DataType="string", Description="The A.C.N for the contact.", Name="Acn", ParameterType="query")
    String? Acn;

    /**
    * The A.R.B.N for the contact.
    */
    // @ApiMember(DataType="string", Description="The A.R.B.N for the contact.", Name="Arbn", ParameterType="query")
    String? Arbn;

    /**
    * A trading name for the contact.
    */
    // @ApiMember(DataType="string", Description="A trading name for the contact.", Name="TradingName", ParameterType="query")
    String? TradingName;

    /**
    * A legal name for the contact.
    */
    // @ApiMember(DataType="string", Description="A legal name for the contact.", Name="LegalName", ParameterType="query")
    String? LegalName;

    /**
    * Any notes/description for the contact.
    */
    // @ApiMember(DataType="string", Description="Any notes/description for the contact.", Name="Notes", ParameterType="query")
    String? Notes;

    /**
    * Contact Employment Industry.
    */
    // @ApiMember(DataType="string", Description="Contact Employment Industry.", Name="EmploymentIndustry", ParameterType="query")
    String? EmploymentIndustry;

    /**
    * Contact Employment Role.
    */
    // @ApiMember(DataType="string", Description="Contact Employment Role.", Name="EmploymentRole", ParameterType="query")
    String? EmploymentRole;

    /**
    * Contact Employment Geographic Area.
    */
    // @ApiMember(DataType="string", Description="Contact Employment Geographic Area.", Name="EmploymentGeographicArea", ParameterType="query")
    String? EmploymentGeographicArea;

    /**
    * The Contacts Drivers Licence Number
    */
    // @ApiMember(DataType="string", Description="The Contacts Drivers Licence Number", Name="DriversLicence", ParameterType="query")
    String? DriversLicence;

    /**
    * Indicates if the Contact is registered for GST
    */
    // @ApiMember(DataType="bool", Description="Indicates if the Contact is registered for GST", Name="GstRegistered", ParameterType="query")
    bool? GstRegistered;

    /**
    * The status of the contact in EROS
    */
    // @ApiMember(DataType="string", Description="The status of the contact in EROS", Name="RecordStatus", ParameterType="query")
    String? RecordStatus;

    /**
    * A list of roles this contact has.
    */
    // @ApiMember(DataType="List<ContactRole>", Description="A list of roles this contact has.", IsRequired=true, Name="ContactRoles", ParameterType="query")
    List<ContactRole>? ContactRoles = [];

    /**
    * A list of the contact details for the contact.
    */
    // @ApiMember(DataType="List<ContactDetailModel>", Description="A list of the contact details for the contact.", IsRequired=true, Name="ContactDetails", ParameterType="query")
    List<ContactDetailModel>? ContactDetails = [];

    /**
    * Custom Content XML for the contact.
    */
    // @ApiMember(DataType="string", Description="Custom Content XML for the contact.", Name="CustomContentXML", ParameterType="query")
    String? CustomContentXML;

    String? BlobImageURLPrimary;
    String? BlobImageURLPrimaryThumbnail;
    /**
    * The primary mobile for the contact.
    */
    // @ApiMember(DataType="string", Description="The primary mobile for the contact.", Name="PrimaryMobile", ParameterType="query")
    String? PrimaryMobile;

    /**
    * The primary email for the contact.
    */
    // @ApiMember(DataType="string", Description="The primary email for the contact.", Name="PrimaryEmail", ParameterType="query")
    String? PrimaryEmail;

    SubscriptionContactModel({this.ContactId,this.ContactType,this.MaritalStatus,this.Gender,this.FirstName,this.MiddleName,this.Surname,this.FullName,this.ShortName,this.BirthDate,this.Title,this.Salutation,this.Abn,this.Acn,this.Arbn,this.TradingName,this.LegalName,this.Notes,this.EmploymentIndustry,this.EmploymentRole,this.EmploymentGeographicArea,this.DriversLicence,this.GstRegistered,this.RecordStatus,this.ContactRoles,this.ContactDetails,this.CustomContentXML,this.BlobImageURLPrimary,this.BlobImageURLPrimaryThumbnail,this.PrimaryMobile,this.PrimaryEmail});
    SubscriptionContactModel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ContactId = json['ContactId'];
        ContactType = json['ContactType'];
        MaritalStatus = json['MaritalStatus'];
        Gender = json['Gender'];
        FirstName = json['FirstName'];
        MiddleName = json['MiddleName'];
        Surname = json['Surname'];
        FullName = json['FullName'];
        ShortName = json['ShortName'];
        BirthDate = JsonConverters.fromJson(json['BirthDate'],'DateTime',context!);
        Title = json['Title'];
        Salutation = json['Salutation'];
        Abn = json['Abn'];
        Acn = json['Acn'];
        Arbn = json['Arbn'];
        TradingName = json['TradingName'];
        LegalName = json['LegalName'];
        Notes = json['Notes'];
        EmploymentIndustry = json['EmploymentIndustry'];
        EmploymentRole = json['EmploymentRole'];
        EmploymentGeographicArea = json['EmploymentGeographicArea'];
        DriversLicence = json['DriversLicence'];
        GstRegistered = json['GstRegistered'];
        RecordStatus = json['RecordStatus'];
        ContactRoles = JsonConverters.fromJson(json['ContactRoles'],'List<ContactRole>',context!);
        ContactDetails = JsonConverters.fromJson(json['ContactDetails'],'List<ContactDetailModel>',context!);
        CustomContentXML = json['CustomContentXML'];
        BlobImageURLPrimary = json['BlobImageURLPrimary'];
        BlobImageURLPrimaryThumbnail = json['BlobImageURLPrimaryThumbnail'];
        PrimaryMobile = json['PrimaryMobile'];
        PrimaryEmail = json['PrimaryEmail'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ContactId': ContactId,
        'ContactType': ContactType,
        'MaritalStatus': MaritalStatus,
        'Gender': Gender,
        'FirstName': FirstName,
        'MiddleName': MiddleName,
        'Surname': Surname,
        'FullName': FullName,
        'ShortName': ShortName,
        'BirthDate': JsonConverters.toJson(BirthDate,'DateTime',context!),
        'Title': Title,
        'Salutation': Salutation,
        'Abn': Abn,
        'Acn': Acn,
        'Arbn': Arbn,
        'TradingName': TradingName,
        'LegalName': LegalName,
        'Notes': Notes,
        'EmploymentIndustry': EmploymentIndustry,
        'EmploymentRole': EmploymentRole,
        'EmploymentGeographicArea': EmploymentGeographicArea,
        'DriversLicence': DriversLicence,
        'GstRegistered': GstRegistered,
        'RecordStatus': RecordStatus,
        'ContactRoles': JsonConverters.toJson(ContactRoles,'List<ContactRole>',context!),
        'ContactDetails': JsonConverters.toJson(ContactDetails,'List<ContactDetailModel>',context!),
        'CustomContentXML': CustomContentXML,
        'BlobImageURLPrimary': BlobImageURLPrimary,
        'BlobImageURLPrimaryThumbnail': BlobImageURLPrimaryThumbnail,
        'PrimaryMobile': PrimaryMobile,
        'PrimaryEmail': PrimaryEmail
    };

    getTypeName() => "SubscriptionContactModel";
    TypeContext? context = _ctx;
}

class ContactsStaff implements IConvertible
{
    String? ContactId;
    String? ContactStaffId;

    ContactsStaff({this.ContactId,this.ContactStaffId});
    ContactsStaff.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ContactId = json['ContactId'];
        ContactStaffId = json['ContactStaffId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ContactId': ContactId,
        'ContactStaffId': ContactStaffId
    };

    getTypeName() => "ContactsStaff";
    TypeContext? context = _ctx;
}

class GetContactsModel implements IConvertible
{
    /**
    * List of Contacts with details.
    */
    // @ApiMember(DataType="string", Description="List of Contacts with details.", IsRequired=true, Name="Contacts", ParameterType="query")
    List<SubscriptionContactModel>? Contacts;

    /**
    * List of contact-staff details.
    */
    // @ApiMember(DataType="string", Description="List of contact-staff details.", IsRequired=true, Name="ContactStaff", ParameterType="query")
    List<ContactsStaff>? ContactStaff;

    GetContactsModel({this.Contacts,this.ContactStaff});
    GetContactsModel.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Contacts = JsonConverters.fromJson(json['Contacts'],'List<SubscriptionContactModel>',context!);
        ContactStaff = JsonConverters.fromJson(json['ContactStaff'],'List<ContactsStaff>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Contacts': JsonConverters.toJson(Contacts,'List<SubscriptionContactModel>',context!),
        'ContactStaff': JsonConverters.toJson(ContactStaff,'List<ContactsStaff>',context!)
    };

    getTypeName() => "GetContactsModel";
    TypeContext? context = _ctx;
}

/**
* Returns a list of contacts with specified roles.  There are options to include custom and also to include each contacts connected contacts
*/
// @Api(Description="Returns a list of contacts with specified roles.  There are options to include custom and also to include each contacts connected contacts")
class GetContacts implements IConvertible
{
    /**
    * Guid representing the external system datasource requesting the contact information. This is required to return any existing object subscription details for each contact.
    */
    // @ApiMember(DataType="Guid", Description="Guid representing the external system datasource requesting the contact information. This is required to return any existing object subscription details for each contact.", IsRequired=true, Name="SuiteDataSourceInstanceId", ParameterType="query")
    String? SuiteDataSourceInstanceId;

    /**
    * A list of 1 or more roles that a contact must have in order to be returned. (Roles are treated as OR not AND, ie a contact may have one or the other to be returned, but not necessarily both)
    */
    // @ApiMember(DataType="List<Guid>", Description="A list of 1 or more roles that a contact must have in order to be returned. (Roles are treated as OR not AND, ie a contact may have one or the other to be returned, but not necessarily both)", IsRequired=true, Name="ContactRoles", ParameterType="query")
    List<String>? ContactRoles = [];

    /**
    * A list of contact types that we want returned. If no contact types are specified all 4 major contact types are eligible to be returned. (organisation/person - real/virtual)
    */
    // @ApiMember(DataType="List<Guid>", Description="A list of contact types that we want returned. If no contact types are specified all 4 major contact types are eligible to be returned. (organisation/person - real/virtual)", Name="ContactTypes", ParameterType="query")
    List<String>? ContactTypes;

    /**
    * Set to true if you want to include the any linked staff for each contact.
    */
    // @ApiMember(DataType="bool", Description="Set to true if you want to include the any linked staff for each contact.", IsRequired=true, Name="IncludeStaff", ParameterType="query")
    bool? IncludeStaff;

    /**
    * To include custom content then you need to specify the view Id of the content to include.
    */
    // @ApiMember(DataType="Guid", Description="To include custom content then you need to specify the view Id of the content to include.", Name="CustomContentViewId", ParameterType="query")
    String? CustomContentViewId;

    /**
    * Set the date to return only contacts that have been modified since a particular date.
    */
    // @ApiMember(DataType="DateTime", Description="Set the date to return only contacts that have been modified since a particular date.", Name="ModifiedSince", ParameterType="query")
    DateTime? ModifiedSince;

    GetContacts({this.SuiteDataSourceInstanceId,this.ContactRoles,this.ContactTypes,this.IncludeStaff,this.CustomContentViewId,this.ModifiedSince});
    GetContacts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SuiteDataSourceInstanceId = json['SuiteDataSourceInstanceId'];
        ContactRoles = JsonConverters.fromJson(json['ContactRoles'],'List<String>',context!);
        ContactTypes = JsonConverters.fromJson(json['ContactTypes'],'List<String>',context!);
        IncludeStaff = json['IncludeStaff'];
        CustomContentViewId = json['CustomContentViewId'];
        ModifiedSince = JsonConverters.fromJson(json['ModifiedSince'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SuiteDataSourceInstanceId': SuiteDataSourceInstanceId,
        'ContactRoles': JsonConverters.toJson(ContactRoles,'List<String>',context!),
        'ContactTypes': JsonConverters.toJson(ContactTypes,'List<String>',context!),
        'IncludeStaff': IncludeStaff,
        'CustomContentViewId': CustomContentViewId,
        'ModifiedSince': JsonConverters.toJson(ModifiedSince,'DateTime',context!)
    };

    getTypeName() => "GetContacts";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'production_eros_platform_apisubscription.azurewebsites.net', types: <String, TypeInfo> {
    'ContactRole': TypeInfo(TypeOf.Class, create:() => ContactRole()),
    'LocationCoordinatesModel': TypeInfo(TypeOf.Class, create:() => LocationCoordinatesModel()),
    'AddressModel': TypeInfo(TypeOf.Class, create:() => AddressModel()),
    'ContactAddressModel': TypeInfo(TypeOf.Class, create:() => ContactAddressModel()),
    'PhoneModel': TypeInfo(TypeOf.Class, create:() => PhoneModel()),
    'ContactDetailModel': TypeInfo(TypeOf.Class, create:() => ContactDetailModel()),
    'SubscriptionContactModel': TypeInfo(TypeOf.Class, create:() => SubscriptionContactModel()),
    'List<ContactRole>': TypeInfo(TypeOf.Class, create:() => <ContactRole>[]),
    'List<ContactDetailModel>': TypeInfo(TypeOf.Class, create:() => <ContactDetailModel>[]),
    'ContactsStaff': TypeInfo(TypeOf.Class, create:() => ContactsStaff()),
    'GetContactsModel': TypeInfo(TypeOf.Class, create:() => GetContactsModel()),
    'List<SubscriptionContactModel>': TypeInfo(TypeOf.Class, create:() => <SubscriptionContactModel>[]),
    'List<ContactsStaff>': TypeInfo(TypeOf.Class, create:() => <ContactsStaff>[]),
    'GetContacts': TypeInfo(TypeOf.Class, create:() => GetContacts()),
});

Dart GetContacts DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv

HTTP + CSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /csv/reply/GetContacts HTTP/1.1 
Host: production-eros-platform-apisubscription.azurewebsites.net 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"ContactRoles":["00000000-0000-0000-0000-000000000000"],"ContactTypes":["00000000-0000-0000-0000-000000000000"],"IncludeStaff":false,"ModifiedSince":"0001-01-01T00:00:00.0000000"}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{}