NEW RELEASE! Take a look to our new Service Hub, a self service account where you can create M2M applications
Get started

Introduction to Global FieldID™ API

The Global FieldID API enables applications to integrate with the Global FieldID System

Global FieldID API v1

The Global FieldID API enables applications to integrate with the Global FieldID System.

Summary of API Functions

The Global FieldID API provides a number of functions:

Function Description
FieldID Lookup The POST /field-searches endpoint is used to obtain the Global FieldID for a given point or boundary shape, enabling third party applications to annotate their fields with the global ID. See the FieldID Lookups page for further information.
Resolve a Field The GET /fields/{FieldID} endpoint is used to fetch a field object by its global ID. The object includes the ID of the boundary that defines the field’s spatial extent.
Resolve a Boundary The GET /boundaries/{BoundaryID} endpoint is used to fetch a boundary object by its ID. The returned GeoJSON object includes the boundary’s geometry and spatial properties.
Field boundary history The GET /fields/{FieldID}/boundaries endpoint is used to filter and fetch the boundaries associated with a given field over time (namely those used to define its spatial extent).
Boundary download The GET /boundaries endpoint is used to fetch a collection of one or more boundaries. The collection can be filtered using a combination of spatial intersection (e.g. bounding box or point) or metadata properties (e.g. a list of IDs and types).
Resolve a boundary reference The GET /boundary-references/{ref-id} endpoint is used to fetch metadata about a boundary according to a specific system, using Varda’s unique ID.
Lookup boundary references The GET /boundary-references endpoint is used to query for external IDs of boundaries registered in the system. This enables FieldID to be used as a cross-referencing system for spatial data.
Create a FieldID The POST /fields endpoint is used to create a new field within the ‘shared’ map of fields using a boundary geometry. It can also be used to replace an existing field with a new ID when significant changes are made. See the Creating fields page.
Update a FieldID The PATCH /fields/{FieldID} endpoint is used to update a field with a ‘better’ boundary whilst retaining the same Global FieldID. See Boundary replacement for details.
Retire a FieldID The DELETE /fields/{FieldID} endpoint is used to retire a field, removing it from the map whilst retaining its history. See the Retiring a field page for details.
Create a BoundaryID The POST /boundaries endpoint is used to register a boundary geometry and obtain a canonical ID. It can be used for any boundary, not only a canonical field boundary. See the Custom shapes page.
Modify boundary permissions The /boundary-references/{id}/permissions endpoint is used to control a private boundary’s discoverability and access by other users. See updating permissions for details.

API Access

The API is designed to be integrated into applications with a wide range of scenarios including machine-to-machine scenarios where an end user is not necessarily present. The API uses the OAuth 2.0 client credentials flow to authenticate requests.

To access the API you can create a set of client credentials in our account hub. You will be asked to sign in, or create a user account. See the Requesting Access Tokens page for more details of how to use the credentials to obtain an access token for the API.

Note that initially the account hub only supports individual developer accounts; we intend to enable organisation management in a future update. For quality-control reasons new accounts are also initially limited to standard read only access with default rate limits - please contact us if you would like to register your own boundaries or enable your users to update and create fields.

Further Information

Recent Features

We are continuously improving the system; here are some recently introduced enhancements:

Self service developer registration

We have now made it possible for individual developers to register and create application credentials directly through the web interface, enabling them to start using the API immediately.

Pre-prepared bulk downloads

We have now made available monthy exports of current field boundaries (i.e. the primary active boundary of each field in the system). These are broken down by country and published in our download hub.

Creating and updating FieldIDs

The first phase of the FieldID system exposed IDs for fields managed by Varda from, using a combination of public data (where available) and earth observation to delineate fields in specific countries. This enabled agri-tech applications to ‘lookup’ a canonical ID for fields they already hold, as well as enable growers to import fields.

However, the FieldID system also allows third-party applications to create and update fields on behalf of their users, transforming the FieldID system into a read-write open ledger so that growers can obtain a FieldID for all of their fields no matter where they are, and participate in ensuring their fields are accurately represented in the system.

The system allows fields to be:

  1. created
  2. updated (one boundary replaced with a new boundary, retaining the same FieldID)
  3. retired
  4. merged (two or more fields replaced by one field)
  5. split (one field replaced by two or more fields)

Some of this functionality is demonstrated in our standalone free user interface.

Note that write access to the API is made available on request; in particular creating fields should only be done in specific scenarios to ensure data quality is maintained. Please contact us if you believe your application can help growers and advisors to claim their fields and actively participate in updating the map.

Boundary registry

In addition to updating and creating field boundaries, we also expose the capability to register alternative boundaries representing any arbitrary area of land related to the field, without changing the definition of the field itself. This is useful when it is necessary to obtain a common Global BoundaryID for a specific area of land that should not change.

Examples include:

  • a subset of a field used for a field trial or regenerative agriculture agreement
  • the specific boundary generated by a planting or application operation, that may cover only part of or more than one field
  • a farm boundary
  • an alternative dataset of field boundaries, to enable linking to third party IDs

Whereas a FieldIDs is intended to uniquely identify a field consistently for all users and therefore requires a public boundary that does not overlap with another field, a boundary: 1. Can be any shape, size and location - the only restriction is that it must be syntactically valid. 2. Can be kept private, with access to the geometry and metadata by other users managed via permissions.

Boundary references

A major aim of the Global FieldID system is to deduplicate fields and boundaries across multiple systems and users by providing a globally unique common identifier, along with a geometry. A BoundaryID deduplicates references from multiple systems/users to the same area of land. However, sometimes a use case requires to work with one specific instance of a boundary, according to the application that registered it. Each time the ‘same’ boundary is registered, we identify each instance separately as a boundary reference.

We now expose these objects in the API, including the source-specific metadata and any ‘local’ identifier. This allows the service to be used as a cross-referencing system, to map back and forth between existing global and local identifiers, such as those issued by national governments or software platforms.

Planned Development

In addition to the currently implemented API functions, a number of improvements are planned, including:

Bulk operations

We know that a RESTful API is not always ideal for accessing and submitting data, especially those where larger volumes of data are involved such as during initial setup of an integration with Global FieldID, or automating the process of registering whole datasets of boundaries. We use a semi-manual process to manage this at present (please contact us for details).

We therefore plan to expose the facility we use internally to manage bulk operations to developers in a self-service API.

Self-service organisation management

Many of our users are large organisations who have multiple applications and developers; organisations (or ‘tenants’) are also a core part of how access to private boundaries is managed.

We therefore plan to extend the self-service account management to support managing organisations and their shared credentials.

Expanding downloads

We plan to expand the range of data that can be downloaded in bulk, firstly to cover other types of boundary (not only the primary active boundary of each field) but also potentially custom downloads including private boundaries a user may have access to.

Vector tiles

The REST API’s facility for downloading boundaries in GeoJSON format is intended for lookups of individual fields or small areas, and therefore applies an area limit.

Our user interface on the other hand shows boundaries in much wider areas, for which we index the boundary data as Mapbox vector tiles. Other users who may also wish to implement similar user interfaces could benefit from access to a similar functionality.

Boundary provenance

We plan to expose origin and taxonomy metadata, providing information about how boundaries were sourced and the method used to generate them.

Evented API

Internally we use an event-driven architecture to power the data ingestion and data preparation pipelines, as well as maintain an audit log. Exposing this functionality as an Async API would enable developers to create applications that are notified when fields are changed, maintain up-to-date copies of the FieldID data, and even implement their own read replica.