Field Squared API Services

<back to all web services

AssetQuery

/{Workspace}/AssetQuery allows flexible querying of assets using structured filters.
Supports various operators (eq, ne, contains, in, gt, lt, exists) for precise asset searches.
Can query by core fields (type, name, created) and custom data fields (data.EID, data.FDH_ID, etc.).
Example: POST with filters for exact matches on type='FDH' and data.EID='specific-value'

The following routes are available for this service:
POST/{Workspace}/AssetQuery
import Foundation
import ServiceStack

/**
* /{Workspace}/AssetQuery allows flexible querying of assets using structured filters.Supports various operators (eq, ne, contains, in, gt, lt, exists) for precise asset searches.Can query by core fields (type, name, created) and custom data fields (data.EID, data.FDH_ID, etc.).Example: POST with filters for exact matches on type='FDH' and data.EID='specific-value'
*/
public class AssetQuery : Codable
{
    public var workspace:String
    public var filters:[QueryFilter] = []
    public var recStart:Int?
    public var recCount:Int?
    public var sort:[SortCriteria] = []
    public var suppressGeometry:Bool?

    required public init(){}
}

public class QueryFilter : Codable
{
    public var field:String
    public var `operator`:String
    //value:Object ignored. Type could not be extended in Swift

    required public init(){}
}

public class SortCriteria : Codable
{
    public var field:String
    public var direction:String

    required public init(){}
}

public class AssetQueryResponse : Codable
{
    public var assets:[Asset] = []
    public var totalCount:Int
    public var recStart:Int
    public var recCount:Int

    required public init(){}
}

/**
* Contains the data for an asset within the system.
*/
public class Asset : Codable
{
    public var workspace:String
    public var timeZone:String
    public var assignedWorkspace:String
    public var objectId:String
    public var versionId:String
    public var basedOn:String
    public var externalId:String
    public var created:String
    public var lastUpdated:String
    public var name:String
    public var schedules:[Schedule] = []
    public var documents:[DomainItem] = []
    public var tasks:[DomainItem] = []
    public var taskSeries:[String] = []
    public var taskSeriesTemplates:[String] = []
    public var users:[DomainItem] = []
    public var type:String
    public var symbol:String
    public var data:[String:String] = [:]
    public var geometry:Geometry
    public var maintenanceHistory:[MaintenanceRecord] = []
    public var parent:String
    public var ancestors:[String] = []
    public var locationHistory:[LocationHistory] = []
    public var owner:ClassedItem
    public var isParent:Bool
    public var assets:[String] = []
    public var contacts:[String] = []
    public var geometryString:String
    public var sourceProjection:String
    public var events:[EventItem] = []
    public var anno:Anno
    public var teams:[String] = []
    public var address:AddressBasic
    public var createdBy:String
    public var inventoryItems:[String] = []
    public var activeLaborTypes:[String:Object] = [:]
    public var levels:Int
    public var allAssests:Int
    public var barcode:String
    public var customDataFields:[CustomDataField] = []

    required public init(){}
}

public class Schedule : Codable
{
    public var workspace:String
    public var objectId:String
    public var versionId:String
    public var basedOn:String
    public var start:String
    public var end:String
    public var timeZone:String
    public var users:[String] = []
    public var teams:[String] = []
    public var data:[String:Object] = [:]

    required public init(){}
}

public class DomainItem : Codable
{
    public var workspace:String
    public var objectId:String
    public var versionId:String
    public var lastUpdated:String

    required public init(){}
}

public class Geometry : Codable
{
    public var type:String
    public var coordinates:[Location] = []

    required public init(){}
}

public class Location : Codable
{
    public var y:Double
    public var x:Double

    required public init(){}
}

public class MaintenanceRecord : Codable
{
    public var dateTime:String
    public var notes:String

    required public init(){}
}

public class LocationHistory : Codable
{
    public var date:String
    public var location:Location
    public var barcode:String
    public var notes:String
    public var isScan:Bool

    required public init(){}
}

public class ClassedItem : Codable
{
    public var objectId:String
    public var `class`:String
    public var versionId:String
    public var ancestors:[String] = []
    public var type:String

    required public init(){}
}

public class EventItem : Codable
{
    public var objectId:String
    public var date:String
    public var location:Location
    public var barcode:String
    public var details:String
    public var type:String
    public var isScan:Bool
    public var user:String
    public var selectedBy:String
    public var status:String
    public var statusType:String
    public var dateCreated:String
    public var automatic:Bool

    required public init(){}
}

public class Anno : Codable
{
    public var x:Double
    public var y:Double
    public var r:Double
    public var s:Double
    public var t:String

    required public init(){}
}

public class AddressBasic : Codable
{
    public var street:String
    public var unit:String
    public var city:String
    public var state:String
    public var zip:String
    public var country:String
    public var location:Location

    required public init(){}
}

public class CustomDataField : Codable
{
    public var binding:String
    public var label:String
    //value:Object ignored. Type could not be extended in Swift
    public var dataType:String
    public var isReadOnly:Bool
    public var isHidden:Bool
    public var values:String

    required public init(){}
}


Swift AssetQuery DTOs

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

HTTP + JSV

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

POST /{Workspace}/AssetQuery HTTP/1.1 
Host: dev.fieldsquared.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	Workspace: String,
	Filters: 
	[
		{
			Field: String,
			Operator: String,
			Value: {}
		}
	],
	RecStart: 0,
	RecCount: 0,
	Sort: 
	[
		{
			Field: String,
			Direction: String
		}
	],
	SuppressGeometry: False
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Assets: 
	[
		{
			Workspace: String,
			TimeZone: String,
			AssignedWorkspace: String,
			ObjectId: String,
			VersionId: String,
			BasedOn: String,
			ExternalId: String,
			Created: String,
			LastUpdated: String,
			Name: String,
			Schedules: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					BasedOn: String,
					Start: String,
					End: String,
					TimeZone: String,
					Users: 
					[
						String
					],
					Teams: 
					[
						String
					],
					Data: 
					{
						String: {}
					}
				}
			],
			Documents: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					LastUpdated: String
				}
			],
			Tasks: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					LastUpdated: String
				}
			],
			TaskSeries: 
			[
				String
			],
			TaskSeriesTemplates: 
			[
				String
			],
			Users: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					LastUpdated: String
				}
			],
			Type: String,
			Symbol: String,
			Data: 
			{
				String: String
			},
			Geometry: 
			{
				Type: String,
				Coordinates: 
				[
					{
						y: 0,
						x: 0
					}
				]
			},
			MaintenanceHistory: 
			[
				{
					DateTime: String,
					Notes: String
				}
			],
			Parent: String,
			Ancestors: 
			[
				String
			],
			LocationHistory: 
			[
				{
					Date: String,
					Location: 
					{
						y: 0,
						x: 0
					},
					Barcode: String,
					Notes: String,
					IsScan: False
				}
			],
			Owner: 
			{
				ObjectId: String,
				Class: String,
				VersionId: String,
				Ancestors: 
				[
					String
				],
				Type: String
			},
			IsParent: False,
			Assets: 
			[
				String
			],
			Contacts: 
			[
				String
			],
			GeometryString: String,
			SourceProjection: String,
			Events: 
			[
				{
					ObjectId: String,
					Date: String,
					Location: 
					{
						y: 0,
						x: 0
					},
					Barcode: String,
					Details: String,
					Type: String,
					IsScan: False,
					User: String,
					SelectedBy: String,
					Status: String,
					StatusType: String,
					DateCreated: String,
					Automatic: False
				}
			],
			Anno: 
			{
				X: 0,
				Y: 0,
				R: 0,
				S: 0,
				T: String
			},
			Teams: 
			[
				String
			],
			Address: 
			{
				Street: String,
				Unit: String,
				City: String,
				State: String,
				Zip: String,
				Country: String,
				Location: 
				{
					y: 0,
					x: 0
				}
			},
			CreatedBy: String,
			InventoryItems: 
			[
				String
			],
			ActiveLaborTypes: 
			{
				String: {}
			},
			Levels: 0,
			AllAssests: 0,
			Barcode: String,
			CustomDataFields: 
			[
				{
					Binding: String,
					Label: String,
					Value: {},
					DataType: String,
					IsReadOnly: False,
					IsHidden: False,
					Values: String
				}
			]
		}
	],
	TotalCount: 0,
	RecStart: 0,
	RecCount: 0
}