Field Squared API Services

<back to all web services

Contact

Represents a DTO for a contact in a workspace. Calls without an ObjectId will retrieve an array of all active contact objects for the workspace.
A call to /{Workspace}/ContactTasks/{ObjectId} will return a List<DomainItem> for the list of tasks associated to the contact.
A core or custom sort field can be specified by using sort=fieldname&sortorder=ascending/descending.
To filter for contacts based on full text search, use fulltext
Custom contact field 'contains' filters can also be specified by using the binding/key as the query parameter. i.e. Comments=Quick Brown Fox.
To filter and return all contacts modified since a date and time, use the query parameter modifiedsince = X where X = YYYY-MM-DDTHH:MM:SSZ
To filter and return all contacts deleted since a date and time, use the query parameter deletedsince = X where X = YYYY-MM-DDTHH:MM:SSZ. Note only Object ID, Workspace and Version is populated.
Spatial extents can be passed in using: bottomleft=Lat,Lon&topright=Lat,Lon.
To filter on tasks inside a boundary, use boundary=Lat,Lon,Lat,Lon etc.
Pagination - /{0}/ContactList?recstart=0&reccount=1
/{Workspace}/ContactList/Count returns a count, not the actual object list

The following routes are available for this service:
GET,POST,PUT,DELETE/{Workspace}/Contact/{ObjectId}
GET/{Workspace}/Contact
GET/{Workspace}/ContactList
GET/{Workspace}/ContactList/Count
GET/{Workspace}/ContactTasks/{ObjectId}
import 'package:servicestack/servicestack.dart';

class Location implements IConvertible
{
    double? y;
    double? x;

    Location({this.y,this.x});
    Location.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        y = JsonConverters.toDouble(json['y']);
        x = JsonConverters.toDouble(json['x']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'y': y,
        'x': x
    };

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

class Address implements IConvertible
{
    String? Street;
    String? Unit;
    String? City;
    String? State;
    String? Zip;
    String? ContactTitle;
    String? ContactName;
    String? ContactPhone;
    String? ContactEmail;
    Location? Location;
    String? SiteName;
    bool? GeocodeFailed;
    String? Country;

    Address({this.Street,this.Unit,this.City,this.State,this.Zip,this.ContactTitle,this.ContactName,this.ContactPhone,this.ContactEmail,this.Location,this.SiteName,this.GeocodeFailed,this.Country});
    Address.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Street = json['Street'];
        Unit = json['Unit'];
        City = json['City'];
        State = json['State'];
        Zip = json['Zip'];
        ContactTitle = json['ContactTitle'];
        ContactName = json['ContactName'];
        ContactPhone = json['ContactPhone'];
        ContactEmail = json['ContactEmail'];
        Location = JsonConverters.fromJson(json['Location'],'Location',context!);
        SiteName = json['SiteName'];
        GeocodeFailed = json['GeocodeFailed'];
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Street': Street,
        'Unit': Unit,
        'City': City,
        'State': State,
        'Zip': Zip,
        'ContactTitle': ContactTitle,
        'ContactName': ContactName,
        'ContactPhone': ContactPhone,
        'ContactEmail': ContactEmail,
        'Location': JsonConverters.toJson(Location,'Location',context!),
        'SiteName': SiteName,
        'GeocodeFailed': GeocodeFailed,
        'Country': Country
    };

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

class DomainItem implements IConvertible
{
    String? Workspace;
    String? ObjectId;
    String? VersionId;
    String? LastUpdated;

    DomainItem({this.Workspace,this.ObjectId,this.VersionId,this.LastUpdated});
    DomainItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Workspace = json['Workspace'];
        ObjectId = json['ObjectId'];
        VersionId = json['VersionId'];
        LastUpdated = json['LastUpdated'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Workspace': Workspace,
        'ObjectId': ObjectId,
        'VersionId': VersionId,
        'LastUpdated': LastUpdated
    };

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

class ClassedItem implements IConvertible
{
    String? ObjectId;
    String? Class;
    String? VersionId;
    List<String>? Ancestors;
    String? Type;

    ClassedItem({this.ObjectId,this.Class,this.VersionId,this.Ancestors,this.Type});
    ClassedItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ObjectId = json['ObjectId'];
        Class = json['Class'];
        VersionId = json['VersionId'];
        Ancestors = JsonConverters.fromJson(json['Ancestors'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ObjectId': ObjectId,
        'Class': Class,
        'VersionId': VersionId,
        'Ancestors': JsonConverters.toJson(Ancestors,'List<String>',context!),
        'Type': Type
    };

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

class EventItem implements IConvertible
{
    String? ObjectId;
    String? Date;
    Location? Location;
    String? Barcode;
    String? Details;
    String? Type;
    bool? IsScan;
    String? User;
    String? SelectedBy;
    String? Status;
    String? StatusType;
    String? DateCreated;
    bool? Automatic;

    EventItem({this.ObjectId,this.Date,this.Location,this.Barcode,this.Details,this.Type,this.IsScan,this.User,this.SelectedBy,this.Status,this.StatusType,this.DateCreated,this.Automatic});
    EventItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ObjectId = json['ObjectId'];
        Date = json['Date'];
        Location = JsonConverters.fromJson(json['Location'],'Location',context!);
        Barcode = json['Barcode'];
        Details = json['Details'];
        Type = json['Type'];
        IsScan = json['IsScan'];
        User = json['User'];
        SelectedBy = json['SelectedBy'];
        Status = json['Status'];
        StatusType = json['StatusType'];
        DateCreated = json['DateCreated'];
        Automatic = json['Automatic'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ObjectId': ObjectId,
        'Date': Date,
        'Location': JsonConverters.toJson(Location,'Location',context!),
        'Barcode': Barcode,
        'Details': Details,
        'Type': Type,
        'IsScan': IsScan,
        'User': User,
        'SelectedBy': SelectedBy,
        'Status': Status,
        'StatusType': StatusType,
        'DateCreated': DateCreated,
        'Automatic': Automatic
    };

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

/**
* Represents a DTO for a contact in a workspace.  Calls without an ObjectId will retrieve an array of all active contact objects for the workspace.A call to /{Workspace}/ContactTasks/{ObjectId} will return a List<DomainItem> for the list of tasks associated to the contact.A core or custom sort field can be specified by using sort=fieldname&sortorder=ascending/descending. To filter for contacts based on full text search, use fulltext Custom contact field 'contains' filters can also be specified by using the binding/key as the query parameter. i.e. Comments=Quick Brown Fox. To filter and return all contacts modified since a date and time, use the query parameter modifiedsince = X where X = YYYY-MM-DDTHH:MM:SSZ To filter and return all contacts deleted since a date and time, use the query parameter deletedsince = X where X = YYYY-MM-DDTHH:MM:SSZ.  Note only Object ID, Workspace and Version is populated. Spatial extents can be passed in using: bottomleft=Lat,Lon&topright=Lat,Lon.  To filter on tasks inside a boundary, use boundary=Lat,Lon,Lat,Lon etc. Pagination - /{0}/ContactList?recstart=0&reccount=1  /{Workspace}/ContactList/Count returns a count, not the actual object list
*/
class Contact implements IConvertible
{
    String? Workspace;
    String? ObjectId;
    String? TimeZone;
    String? VersionId;
    String? BasedOn;
    String? ExternalId;
    String? ContactName;
    String? Company;
    String? MobilePhone;
    String? WorkPhone;
    String? HomePhone;
    String? Email;
    bool? SMS;
    Address? Address;
    bool? Enabled;
    bool? POI;
    bool? EmailSiteDriving;
    List<Address>? ServiceAddresses;
    List<DomainItem>? Documents;
    Map<String,String?>? Data;
    ClassedItem? Owner;
    List<String>? Tasks;
    List<String>? Assets;
    List<String>? Contacts;
    List<EventItem>? Events;
    List<String>? Teams;
    String? Created;
    String? LastUpdated;
    String? CreatedBy;
    Map<String,dynamic?>? ActiveLaborTypes;

    Contact({this.Workspace,this.ObjectId,this.TimeZone,this.VersionId,this.BasedOn,this.ExternalId,this.ContactName,this.Company,this.MobilePhone,this.WorkPhone,this.HomePhone,this.Email,this.SMS,this.Address,this.Enabled,this.POI,this.EmailSiteDriving,this.ServiceAddresses,this.Documents,this.Data,this.Owner,this.Tasks,this.Assets,this.Contacts,this.Events,this.Teams,this.Created,this.LastUpdated,this.CreatedBy,this.ActiveLaborTypes});
    Contact.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Workspace = json['Workspace'];
        ObjectId = json['ObjectId'];
        TimeZone = json['TimeZone'];
        VersionId = json['VersionId'];
        BasedOn = json['BasedOn'];
        ExternalId = json['ExternalId'];
        ContactName = json['ContactName'];
        Company = json['Company'];
        MobilePhone = json['MobilePhone'];
        WorkPhone = json['WorkPhone'];
        HomePhone = json['HomePhone'];
        Email = json['Email'];
        SMS = json['SMS'];
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Enabled = json['Enabled'];
        POI = json['POI'];
        EmailSiteDriving = json['EmailSiteDriving'];
        ServiceAddresses = JsonConverters.fromJson(json['ServiceAddresses'],'List<Address>',context!);
        Documents = JsonConverters.fromJson(json['Documents'],'List<DomainItem>',context!);
        Data = JsonConverters.toStringMap(json['Data']);
        Owner = JsonConverters.fromJson(json['Owner'],'ClassedItem',context!);
        Tasks = JsonConverters.fromJson(json['Tasks'],'List<String>',context!);
        Assets = JsonConverters.fromJson(json['Assets'],'List<String>',context!);
        Contacts = JsonConverters.fromJson(json['Contacts'],'List<String>',context!);
        Events = JsonConverters.fromJson(json['Events'],'List<EventItem>',context!);
        Teams = JsonConverters.fromJson(json['Teams'],'List<String>',context!);
        Created = json['Created'];
        LastUpdated = json['LastUpdated'];
        CreatedBy = json['CreatedBy'];
        ActiveLaborTypes = JsonConverters.fromJson(json['ActiveLaborTypes'],'Map<String,dynamic?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Workspace': Workspace,
        'ObjectId': ObjectId,
        'TimeZone': TimeZone,
        'VersionId': VersionId,
        'BasedOn': BasedOn,
        'ExternalId': ExternalId,
        'ContactName': ContactName,
        'Company': Company,
        'MobilePhone': MobilePhone,
        'WorkPhone': WorkPhone,
        'HomePhone': HomePhone,
        'Email': Email,
        'SMS': SMS,
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Enabled': Enabled,
        'POI': POI,
        'EmailSiteDriving': EmailSiteDriving,
        'ServiceAddresses': JsonConverters.toJson(ServiceAddresses,'List<Address>',context!),
        'Documents': JsonConverters.toJson(Documents,'List<DomainItem>',context!),
        'Data': Data,
        'Owner': JsonConverters.toJson(Owner,'ClassedItem',context!),
        'Tasks': JsonConverters.toJson(Tasks,'List<String>',context!),
        'Assets': JsonConverters.toJson(Assets,'List<String>',context!),
        'Contacts': JsonConverters.toJson(Contacts,'List<String>',context!),
        'Events': JsonConverters.toJson(Events,'List<EventItem>',context!),
        'Teams': JsonConverters.toJson(Teams,'List<String>',context!),
        'Created': Created,
        'LastUpdated': LastUpdated,
        'CreatedBy': CreatedBy,
        'ActiveLaborTypes': JsonConverters.toJson(ActiveLaborTypes,'Map<String,dynamic?>',context!)
    };

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

TypeContext _ctx = TypeContext(library: 'dev.fieldsquared.com', types: <String, TypeInfo> {
    'Location': TypeInfo(TypeOf.Class, create:() => Location()),
    'Address': TypeInfo(TypeOf.Class, create:() => Address()),
    'DomainItem': TypeInfo(TypeOf.Class, create:() => DomainItem()),
    'ClassedItem': TypeInfo(TypeOf.Class, create:() => ClassedItem()),
    'EventItem': TypeInfo(TypeOf.Class, create:() => EventItem()),
    'Contact': TypeInfo(TypeOf.Class, create:() => Contact()),
    'List<Address>': TypeInfo(TypeOf.Class, create:() => <Address>[]),
    'List<DomainItem>': TypeInfo(TypeOf.Class, create:() => <DomainItem>[]),
    'List<EventItem>': TypeInfo(TypeOf.Class, create:() => <EventItem>[]),
    'Map<String,dynamic?>': TypeInfo(TypeOf.Class, create:() => Map<String,dynamic?>()),
});

Dart Contact DTOs

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

HTTP + XML

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

POST /{Workspace}/Contact/{ObjectId} HTTP/1.1 
Host: dev.fieldsquared.com 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<Contact xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Field2Office.API.Model.Contacts">
  <ActiveLaborTypes xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:KeyValueOfstringanyType>
      <d2p1:Key>String</d2p1:Key>
      <d2p1:Value />
    </d2p1:KeyValueOfstringanyType>
  </ActiveLaborTypes>
  <Address xmlns:d2p1="http://schemas.datacontract.org/2004/07/Field2Office.API.Model">
    <d2p1:City>String</d2p1:City>
    <d2p1:ContactEmail>String</d2p1:ContactEmail>
    <d2p1:ContactName>String</d2p1:ContactName>
    <d2p1:ContactPhone>String</d2p1:ContactPhone>
    <d2p1:ContactTitle>String</d2p1:ContactTitle>
    <d2p1:Country>String</d2p1:Country>
    <d2p1:GeocodeFailed>false</d2p1:GeocodeFailed>
    <d2p1:Location>
      <d2p1:x>0</d2p1:x>
      <d2p1:y>0</d2p1:y>
    </d2p1:Location>
    <d2p1:SiteName>String</d2p1:SiteName>
    <d2p1:State>String</d2p1:State>
    <d2p1:Street>String</d2p1:Street>
    <d2p1:Unit>String</d2p1:Unit>
    <d2p1:Zip>String</d2p1:Zip>
  </Address>
  <Assets xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>String</d2p1:string>
  </Assets>
  <BasedOn>String</BasedOn>
  <Company>String</Company>
  <ContactName>String</ContactName>
  <Contacts xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>String</d2p1:string>
  </Contacts>
  <Created>String</Created>
  <CreatedBy>String</CreatedBy>
  <Data xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:KeyValueOfstringstring>
      <d2p1:Key>String</d2p1:Key>
      <d2p1:Value>String</d2p1:Value>
    </d2p1:KeyValueOfstringstring>
  </Data>
  <Documents xmlns:d2p1="http://schemas.datacontract.org/2004/07/Field2Office.API.Model">
    <d2p1:DomainItem>
      <d2p1:LastUpdated>String</d2p1:LastUpdated>
      <d2p1:ObjectId>String</d2p1:ObjectId>
      <d2p1:VersionId>String</d2p1:VersionId>
      <d2p1:Workspace>String</d2p1:Workspace>
    </d2p1:DomainItem>
  </Documents>
  <Email>String</Email>
  <EmailSiteDriving>false</EmailSiteDriving>
  <Enabled>false</Enabled>
  <Events xmlns:d2p1="http://schemas.datacontract.org/2004/07/Field2Office.API.Model">
    <d2p1:EventItem>
      <d2p1:Automatic>false</d2p1:Automatic>
      <d2p1:Barcode>String</d2p1:Barcode>
      <d2p1:Date>String</d2p1:Date>
      <d2p1:DateCreated>String</d2p1:DateCreated>
      <d2p1:Details>String</d2p1:Details>
      <d2p1:IsScan>false</d2p1:IsScan>
      <d2p1:Location>
        <d2p1:x>0</d2p1:x>
        <d2p1:y>0</d2p1:y>
      </d2p1:Location>
      <d2p1:ObjectId>String</d2p1:ObjectId>
      <d2p1:SelectedBy>String</d2p1:SelectedBy>
      <d2p1:Status>String</d2p1:Status>
      <d2p1:StatusType>String</d2p1:StatusType>
      <d2p1:Type>String</d2p1:Type>
      <d2p1:User>String</d2p1:User>
    </d2p1:EventItem>
  </Events>
  <ExternalId>String</ExternalId>
  <HomePhone>String</HomePhone>
  <LastUpdated>String</LastUpdated>
  <MobilePhone>String</MobilePhone>
  <ObjectId>String</ObjectId>
  <Owner xmlns:d2p1="http://schemas.datacontract.org/2004/07/Field2Office.API.Model">
    <d2p1:Ancestors xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:string>String</d3p1:string>
    </d2p1:Ancestors>
    <d2p1:Class>String</d2p1:Class>
    <d2p1:ObjectId>String</d2p1:ObjectId>
    <d2p1:Type>String</d2p1:Type>
    <d2p1:VersionId>String</d2p1:VersionId>
  </Owner>
  <POI>false</POI>
  <SMS>false</SMS>
  <ServiceAddresses xmlns:d2p1="http://schemas.datacontract.org/2004/07/Field2Office.API.Model">
    <d2p1:Address>
      <d2p1:City>String</d2p1:City>
      <d2p1:ContactEmail>String</d2p1:ContactEmail>
      <d2p1:ContactName>String</d2p1:ContactName>
      <d2p1:ContactPhone>String</d2p1:ContactPhone>
      <d2p1:ContactTitle>String</d2p1:ContactTitle>
      <d2p1:Country>String</d2p1:Country>
      <d2p1:GeocodeFailed>false</d2p1:GeocodeFailed>
      <d2p1:Location>
        <d2p1:x>0</d2p1:x>
        <d2p1:y>0</d2p1:y>
      </d2p1:Location>
      <d2p1:SiteName>String</d2p1:SiteName>
      <d2p1:State>String</d2p1:State>
      <d2p1:Street>String</d2p1:Street>
      <d2p1:Unit>String</d2p1:Unit>
      <d2p1:Zip>String</d2p1:Zip>
    </d2p1:Address>
  </ServiceAddresses>
  <Tasks xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>String</d2p1:string>
  </Tasks>
  <Teams xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>String</d2p1:string>
  </Teams>
  <TimeZone>String</TimeZone>
  <VersionId>String</VersionId>
  <WorkPhone>String</WorkPhone>
  <Workspace>String</Workspace>
</Contact>