Arlo

REST Auth API: Collection Resources

All of the major resources in the REST API have a 'master' collection which is the primary mechanism for discovering, filtering, and updating any instance of those resources. All of the these collections are children of a single root collection which defines the entrypoint for the entire REST API. This root collection is located at:

/api/2012-02-01/auth/resources/

Accessing this resource will return a list with links to all of the major resource collections in the API, such as the Events, Contacts, and Registration collections.

Any queries or filters on the REST API are executed against collection resources, so understanding how they are represented and what options are available is important. This section covers how to use collections, and how to apply query options to achieve paging and filtering of responses.

General response format

Collections are represented as a list of Link elements inside a toplevel root element.

For example, the Events collection is represented in XML as:

GET /api/2012-02-01/auth/resources/events/

<Events>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Event" type="application/xml" title="Event" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/"/>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Event" type="application/xml" title="Event" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/"/>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Event" type="application/xml" title="Event" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/3/"/>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Event" type="application/xml" title="Event" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/4/"/>
  ...
  <Link rel="next" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/?skip=100"/>
  <Link rel="self" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/"/>
</Events>

In addition to Link elements for collection items, the collection representation always includes a self link, and an optional next link (see paging).

Link expansion

Collection resources support link expansion which can be used to inline representations of resources within the collection response. For example, when accessing the Events collection, including the ?expand=Event query option will cause the collection response to expand to include Event representations:

GET /api/2012-02-01/auth/resources/events/?expand=Event

<Events>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Event" type="application/xml" title="Event" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/">
    <Event>
      <EventID>1</EventID>
      <UniqueIdentifier>a34fc9dc-1fa0-9019-b39a-d0fe91119ed6</UniqueIdentifier>
      <Code>MGMT101-001</Code>
      <StartDateTime>2012-02-02T09:00:00.000+12:00</StartDateTime>
      <FinishDateTime>2012-02-03T17:00:00.000+12:00</FinishDateTime>
      <Description>2 days, 9:00AM - 5:00PM</Description>
      <LocationName>Wellington</LocationName>
      <Status>Completed</Status>
      <CreatedDateTime>2012-01-01T04:28:00.5Z</CreatedDateTime>
      <LastModifiedDateTime>2012-01-01T09:25:05.703Z</LastModifiedDateTime>
      <Link rel="self" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/EventTemplate" type="application/xml" title="EventTemplate" href="https://demo.arlo.co/api/2012-02-01/auth/resources/eventtemplates/123/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/Logistics" type="application/xml" title="Logistics" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/logistics/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/Sessions" type="application/xml" title="Sessions" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/sessions/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/RegistrationSettings" type="application/xml" title="RegistrationSettings" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/registrationsettings/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/Registrations" type="application/xml" title="Registrations" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/registrations/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/PublicationSettings" type="application/xml" title="PublicationSettings" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/publicationsettings/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/PublicationStatus" type="application/xml" title="PublicationStatus" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/1/publicationstatus/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/TimeZone" type="application/xml" title="TimeZone" href="https://demo.arlo.co/api/2012-02-01/auth/resources/timezones/1/"/>
      <Link rel="related" type="text/html" title="WebsiteRegister" href="http://www.example.org/register?sgid=a34fc9dc-1fa0-9019-b39a-d0fe91119ed6"/>
    </Event>
  </Link>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Event" type="application/xml" title="Event" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/">
    <Event>
      <EventID>2</EventID>
      <UniqueIdentifier>facfc811-1fa0-9019-b39a-d0fe91119ed6</UniqueIdentifier>
      <Code>MGMT101-002</Code>
      <StartDateTime>2013-02-02T09:45:00+12:00</StartDateTime>
      <FinishDateTime>2013-02-02T11:15:00+12:00</FinishDateTime>
      <LocationName>Wellington</LocationName>
      <Status>Active</Status>
      <CreatedDateTime>2012-01-01T04:28:00.5Z</CreatedDateTime>
      <LastModifiedDateTime>2012-01-01T09:25:05.703Z</LastModifiedDateTime>
      <Link rel="self" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/EventTemplate" type="application/xml" title="EventTemplate" href="https://demo.arlo.co/api/2012-02-01/auth/resources/eventtemplates/123/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/Logistics" type="application/xml" title="Logistics" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/logistics/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/Sessions" type="application/xml" title="Sessions" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/sessions/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/RegistrationSettings" type="application/xml" title="RegistrationSettings" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/registrationsettings/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/Registrations" type="application/xml" title="Registrations" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/registrations/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/PublicationSettings" type="application/xml" title="PublicationSettings" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/publicationsettings/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/PublicationStatus" type="application/xml" title="PublicationStatus" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/2/publicationstatus/"/>
      <Link rel="http://schemas.arlo.co/api/2012/02/auth/related/TimeZone" type="application/xml" title="TimeZone" href="https://demo.arlo.co/api/2012-02-01/auth/resources/timezones/1/"/>
      <Link rel="related" type="text/html" title="WebsiteRegister" href="http://www.example.org/register?sgid=facfc811-1fa0-9019-b39a-d0fe91119ed6"/>
    </Event>
  </Link>
  ...
  <Link rel="next" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/?expand=Event&skip=100"/>
  <Link rel="self" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/events/?expand=Event"/>
</Events>

As with instance resources, the expand query option can be used with multi-level expansion expressions to recursively inline resources. For example, to inline Events and their associated TimeZone and EventTemplate resources, the request can be modified to:

GET /api/2012-02-01/auth/resources/events/?expand=Event,Event/TimeZone,Event/EventTemplate

This query option allows for up to six levels of expansion.

Filtering

Collections support the use of filter expressions to return only a subset resources matching specific criteria. Filter expressions can be specified using the filter query option. The filtering grammar for this feature is based on the OData filter URI protocol.

For example, to filter the Contact collection and return only individuals with an associated PostalAddress with a City value of Auckland, a filter can be used:

GET /api/2012-02-01/auth/resources/contacts/?filter=PostalAddress/City eq 'Auckland'

Filter syntax

The filter expression language supports the following operators:

Operator Description Example
Logical Operators
Eq Equal [...]/resources/contacts/?filter=PostalAddress/City eq 'Auckland'
Ne Not equal [...]/resources/contacts/?filter=PostalAddress/City ne 'Wellington'
Gt Greater than [...]/resources/venuerooms/?filter=Capacity gt 20
Ge Greater than or equal [...]/resources/venuerooms/?filter=Capacity ge 40
Lt Less than [...]/resources/venuerooms/?filter=Capacity lt 10
Le Less than or equal [...]/resources/venuerooms/?filter=Capacity le 10
And Logical and [...]/resources/contacts/?filter=PostalAddress/City eq 'Auckland' and Status eq 'Active'
Or Logical or [...]/resources/contacts/?filter=PostalAddress/City eq 'Auckland' or PostalAddress/City eq 'Wellington'
Not Logical negation [...]/resources/contacts/?filter=not endswith(Email,'.com.au')
Arithmetic Operators
Add Addition [...]/resources/venuerooms/?filter=Capacity add 5 gt 10
Sub Subtraction [...]/resources/venuerooms/?filter=Capacity sub 5 gt 10
Mul Multiplication [...]/resources/venuerooms/?filter=Capacity mul 2 gt 100
Div Division [...]/resources/venuerooms/?filter=Capacity div 2 gt 10
Mod Modulo [...]/resources/venuerooms/?filter=Capacity mod 2 eq 0
Grouping Operators
( ) Precedence grouping [...]/resources/venuerooms/?filter=(Capacity sub 2) gt 10

In addition to operators, a set of functions are also defined for use with the filter query option. The following table lists the available functions.

Function Example
String Functions
bool substringof(string po, string p1) [...]/resources/organisations/?filter=substringof(Name, 'Limited') eq true
bool endswith(string p0, string p1) [...]/resources/contacts/?filter=endswith(Email, '.co.nz') eq true
bool startswith(string p0, string p1) [...]/resources/eventtemplates/?filter=startswith(Code, 'MGMT') eq true
int length(string p0) [...]/resources/organisations/?filter=length(Name) gt 50
int indexof(string p0, string p1) [...]/resources/organisations/?filter=indexof(Name, 'Ltd') gt 0
string replace(string p0, string find, string replace) [...]/resources/organisations/?filter=replace(Name, ' ', '') eq 'AcmeLimited'
string substring(string p0, int pos) [...]/resources/organisations/?filter=substring(Name, 2) eq 'me Limited'
string substring(string p0, int pos, int length) [...]/resources/organisations/?filter=substring(Name, 2, 8) eq 'me Limit'
string tolower(string p0) [...]/resources/organisations/?filter=tolower(Name) eq 'acme limited'
string toupper(string p0) [...]/resources/organisations/?filter=toupper(Name) eq 'ACME LIMITED'
string trim(string p0) [...]/resources/organisations/?filter=trim(Name) eq 'Acme Limited'
string concat(string p0, string p1) [...]/resources/organisations/?filter=concat(concat(PostalAddress/City, ', '), PostalAddress/Country) eq 'Wellington, New Zealand'
Date Functions
int day(DateTime p0) [...]/resources/organisations/?filter=day(datetime(CreatedDateTime)) eq 2
int hour(DateTime p0) [...]/resources/organisations/?filter=hour(datetime(CreatedDateTime)) eq 0
int minute(DateTime p0) [...]/resources/organisations/?filter=minute(datetime(CreatedDateTime)) eq 30
int month(DateTime p0) [...]/resources/organisations/?filter=month(datetime(CreatedDateTime)) eq 12
int second(DateTime p0) [...]/resources/organisations/?filter=second(datetime(CreatedDateTime)) eq 0
int year(DateTime p0) [...]/resources/organisations/?filter=year(datetime(CreatedDateTime)) eq 2010
Math Functions
double round(double p0)
decimal round(decimal p0)
double floor(double p0)
decimal floor(decimal p0)
double ceiling(double p0)
decimal ceiling(decimal p0)

Examples

Example 1

Filter expression to retrieve a collection of all Contacts who have registered for an Event in the past week (since 1 Feb 2012 12:00AM UTC)

GET /api/2012-02-01/auth/resources/registrations/?filter=CreatedDateTime gt datetime('2012-02-01T00:00:00.000Z')&expand=Contact

Note the request includes an expansion of the Contact link for each Registration.

Example 2

Filter expression to retrieve a collection of all EventSessions starting in the next week (starting before 7 Mar 2012 12:00AM UTC) that will be presented by John Mitchell (with ContactID 7732)

GET /api/2012-02-01/auth/resources/eventsessions/?filter=Presenter/ContactID eq 7732 and Status eq 'Active' and StartDateTime lt datetimeoffset('2012-03-07T00:00:00.000Z')

Example 3

Filter expression to retrieve a collection of all Contact resources created or modified after a specific DateTime (1 Jan 2001 12:00AM UTC)

GET /api/2012-02-01/auth/resources/contacts/?filter=LastModifiedDateTime gt datetime('2001-01-01T00:00:00.000Z') or CreatedDateTime gt datetime('2001-01-01T00:00:00.000Z')

Paging

Query options

Collection resources support two query options to support paging.

Parameter Description
skip Returns a subset of records from the collection, starting at index N+1 specified by this parameter.
top Returns a subset of records from the collection, starting at index 0 or index skip, and returns the first N records. If unspecified, a default of 100 is used. The maximum supported value is 250.

By default, all collections are limited to 100 resources per request.

Examples

Retrieve the top 20 resources from the Event collection:

GET /api/2012-02-01/auth/resources/events/?top=20

Using a page size of 10, retrieve resources on page 4 from the Event collection:

GET /api/2012-02-01/auth/resources/events/?skip=30&top=10

Next link

When more resources are available (meaning more pages of results exist), the REST API will include a Link element in the collection with a rel attribute value of next. The URI for the link includes all existing parameters (including filters), and increments the skip parameter so the next request starts with the first entity of the next page.

For example:

GET /api/2012-02-01/auth/resources/contacts/?filter=PostalAddress/City eq 'Wellington'&top=5

<Contacts>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Contact" type="application/xml" title="Contact" href="https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/4/"/>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Contact" type="application/xml" title="Contact" href="https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/6/"/>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Contact" type="application/xml" title="Contact" href="https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/8/"/>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Contact" type="application/xml" title="Contact" href="https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/9/"/>
  <Link rel="http://schemas.arlo.co/api/2012/02/auth/Contact" type="application/xml" title="Contact" href="https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/10/"/>
  <Link rel="next" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/?filter=PostalAddress%2FCity%20eq%20'Wellington'&skip=5&top=5"/>
  <Link rel="self" type="application/xml" href="https://demo.arlo.co/api/2012-02-01/auth/resources/contacts/?filter=PostalAddress%2FCity%20eq%20'Wellington'&top=5"/>
</Contacts>

The collection includes a next link with a skip of 5, and includes the original filter details.