Anitra API

Anitra API is a public API for Anitra users, that lets the users access their telemetry data (device and tracking records) and associated metainformation.

Not sure where to start? A comprehensive Python code sample is available at GitHub. You can request your access client key and secret combination in your user profile.

Data availability

The API uses the same permission scheme as the web platform. Only records and metadata your user account has access to are accessible via API.

Usage considerations

Keep in mind that some responses may be large (up to several megabytes), especially when querying tracking records.

Execution might also take a long time to complete with complex conditions or when many records are returned.

We currently do not rate limit nor charge for API requests. Still, keep in mind the API is a shared environment and a massive workload might slow down responses for other users. Please make sure not to run too many expensive requests at once.

Find explained below the basic concepts of working with our API. You might find some of those a bit unfamiliar when working with other data APIs.

Tokens

Users need to provide their client id and client key tokens to authenticate themselves. First request of any session you start should therefore be the auth request. Please bear in mind your client_id and client_key combination is unique and must be kept secret if you wish to prevent unauthorized access to the API and your data. You can always disable API access to a particular combination in your user profile or other relevant places where API access is listed.

Scroll

Some API requests employ a scroll pagination behaviour. Since we cannot send hundreds of megabytes of records in one HTTP request, pagination for results is needed. Pagination implemented by users adds complexity for records that can change during reading between the requests. Using the scroll method, in the first request, you specify the records you want, and in further requests, you only specify the scroll id the server returned to you in the first request, making subsequent requests much easier. Scrolling ends when the server returns a HTTP status code is 410 or when no records are sent to the client any more. Scrolls last up to 10 minutes of inactivity (each request resets this timer).

Requesting changes

In some requests you may specify that you only wish to fetch changes after a certain time period. This can be useful to limit the amount of records exchanged between Anitra and your local script if you only wish to see what changed since the last time you ran it. It is strongly recommended to use this behaviour after your first records synchronisation.

Date format

Anitra API universally uses an ISO8601-based date format with millisecond precision. Timezone specification (Z) is mandatory. No spaces, commas, or dots are used to prevent potential issues with HTTP escaping the characters. For example, you can use the following Python code snippet to format a valid date string:

date.strftime("%Y%m%dT%H%M%S.%f")[:-3] + 'Z'

Response timestamps are in ISO8601 format!

Authentication and authorization

Perform authentication and authorization using application-generated API keys.

Copy the client id and client key and use them to authenticate. Use the provided token in the Authorization field as instructed in other routes.

Authenticate

POST https://app.anitra.cz/api/v2/auth
RequestsJSON document
Headers
Content-Type: application/json
Body
{
  "client_id": "a7b8f7a00350e6c89143",
  "client_key": "MAl5fDAYl3QpUr+d52GE7+z25VG0MApnpymf+926"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "client_id": {
      "type": "string",
      "description": "Client ID"
    },
    "client_key": {
      "type": "string",
      "description": "Client key / client secret"
    }
  },
  "required": [
    "client_id",
    "client_key"
  ]
}
Responses200400401403

On authentication success JWT token and its validity is provided.

Headers
Content-Type: application/json
Body
{
  "auth": {
    "token": "kdjhaskjdhajkddasjdhajshdjashdjahsjdhasjhdjahdjahsjdhajdhajh",
    "expires_at": "2020-12-31T01:01:01Z"
  }
}

On bad authentication request - such as when request body is malformed or misses required information.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid authentication request"
  }
}

Invalid API key pair exception. Your provided API key was not recognized by Anitra.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid authentication request"
  }
}

API key revocation error. Your API key was revoked by someoen with access to your Anitra portal.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "API key pair was revoked"
  }
}

Authenticate
POST/auth

Successful auth request sends you a JWT token you can use for a specified time period until it expires. Send it with every following authenticated request. Each JWT token has a validity period of exactly 24h after issuing, after this time period ellapses the JWT token is no longer valid and a new one must be issued.


Verify authentication

GET https://app.anitra.cz/api/v2/auth/verify
Requestsexample 1
Headers
Authorization: Bearer TOKEN
Responses200400401422

In case user provided a valid token, user details are displayed below.

Headers
Content-Type: application/json
Body
{
  "verification": {
    "expire_date": "2020-12-31T01:01:01+00:00",
    "user_id": 0,
    "client_id": "a7b8f7a00350e6c89143"
  }
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Verify authentication
GET/auth/verify

Verifies the status of your authentication and token. You can use this for debugging your application code, or to check how long will the validity of your token last. Header Authorization is mandatory, fill it with BEARER (JWT).


Device

Fetch device metadata your account has access rights to.

List

GET https://app.anitra.cz/api/v2/device/list?updates_after=20150505T123000.000Z
RequestsJSON document
Headers
Authorization: Bearer TOKEN
Responses200400401422

List of all devices the user can access.

Headers
Content-Type: application/json
Body
{
    "devices": [
        {
            "device_id": 1,
            "device_code": "19001",
            "device_alias": "ANITRA_01",
            "device_brand": "ANITRA",
            "device_type": "Anitra",
            "device_model": "Backpack M-8s-elev",
            "device_status": "deployed-missing",
            "device_status_long": "deployed-missing; deployed 1x; last data 234 days ago",
            "device_discarded": "",
            "sleep_status": "",
            "device_description": "NOTE\nNOTE",
            "ownership": "Organization(Owner Name)",
            "device_transfer_dt": "",
            "marked_for_movebank": "",
            "device_beacon_frequency": "",
            "device_weight": "",
            "firmware_version": "",
            "device_last_data_dt": "2020-12-02T00:01:02.000+00:00",
            "device_last_position_dt": "",
            "device_last_position_locality": "",
            "device_last_position_country": null,
            "device_last_data_battery_percent": null,
            "device_last_data_solar_percent": "",
            "device_last_data_mortality_onboard": null,
            "device_first_c_record_dt": "",
            "device_first_c_position_dt": "",
            "device_c_record_count": "",
            "device_c_outlier_count": "",
            "device_c_position_count": "",
            "device_c_days": "",
            "device_deployed_record_count": "",
            "device_deployed_outlier_count": "",
            "device_deployed_position_count": "",
            "device_deployed_days": "",
            "current_tracking_id": 1,
            "ct_mortality_postprocess": "",
            "ct_deployed_record_count": "",
            "ct_deployed_outlier_count": "",
            "ct_deployed_position_count": "",
            "ct_days_deployed": "",
            "current_animal_id": 1,
            "current_animal_code": "",
            "current_animal_name": "",
            "current_animal_species": "",
            "last_modification_date": "2020-12-07T10:31:00.000+00:00",

        }
    ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Unfiltered
GET/device/list?updates_after={updates_after}

Lists all devices. This response does not throw errors if the user has access to no devices.

This request does not accept specified fields, as it returns all fields available. To specify fields, use the PUT method as described below.

URI Parameters
HideShow
updates_after
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


PUT https://app.anitra.cz/api/v2/device/list?updates_after=20150505T123000.000Z
RequestsJSON document
Headers
Content-Type: application/json
Authorization: Bearer TOKEN
Body
{
  "fields": [
    "device_id",
    "device_code",
    "device_status"
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "fields": {
      "type": "array",
      "description": "List of fields to return. If not specified, all fields are returned."
    }
  }
}
Responses200400401404422

List of all devices the user can access.

Headers
Content-Type: application/json
Body
{
  "devices": [
    {
      "device_id": 1,
      "device_code": "19001",
      "device_status": "deployed-missing"
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid fields provided for API mapping

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid fields provided for API mapping",
    "context": {
      "invalid_fields": [
        {
          "field": "ddevice_id",
          "closest": "device_id",
          "message": "Field 'ddevice_id' does not exist, did you mean 'device_id'?"
        },
        {
          "field": "tracking_code",
          "closest": "device_code",
          "message": "Field 'tracking_code' does not exist, did you mean 'device_code'?"
        },
        {
          "field": "tracking_status",
          "closest": "device_status",
          "message": "Field 'tracking_status' does not exist, did you mean 'device_status'?"
        }
      ],
      "valid_fields": [
        "device_id",
        "device_code",
        "device_alias",
        "device_brand",
        "device_status",
        "device_status_long",
        "device_is_discarded",
        "device_description",
        "ownership",
        "last_device_data_datetime",
        "last_device_position_country",
        "last_device_data_battery_percent",
        "last_device_data_mortality_onboard",
        "current_tracking_id",
        "current_tracking_mortality_postprocess",
        "current_animal_id",
        "last_modification_date"
      ]
    }
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Filtered
PUT/device/list?updates_after={updates_after}

Lists all devices. This response does not throw errors if the user has access to no devices.

The PUT method is not required while not requesting any fields, but it is recommended to use it to specify the fields you wish to receive. If no fields are specified, all fields are returned.

URI Parameters
HideShow
updates_after
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


Mapping

GET https://app.anitra.cz/api/v2/device/list/fields
RequestsJSON document
Headers
Authorization: Bearer TOKEN
Responses200400401422

List of available fields and their associated descriptions.

Headers
Content-Type: application/json
Body
{
  "fields": [
    {
      "name": "device_id",
      "description": "Device ID"
    },
    {
      "name": "device_code",
      "description": "Device code"
    },
    {
      "name": "device_alias",
      "description": "Device alias"
    },
    {
      "name": "device_brand",
      "description": "Device Brand"
    },
    {
      "name": "device_status",
      "description": "Device Status"
    },
    {
      "name": "device_status_long",
      "description": "Device Status Long"
    },
    {
      "name": "Device Is Discarded",
      "description": "Device Is Discarded"
    },
    {
      "name": "device_description",
      "description": "Device description"
    },
    {
      "name": "ownership",
      "description": "Ownership"
    },
    {
      "name": "last_device_data_datetime",
      "description": "Last DeviceData DateTime"
    },
    {
      "name": "last_device_position_country",
      "description": "Last DeviceData Country"
    },
    {
      "name": "last_device_data_battery_percent",
      "description": "Last DeviceData Battery Percent"
    },
    {
      "name": "last_device_data_mortality_onboard",
      "description": "Last DeviceData Mortality Onboard"
    },
    {
      "name": "current_tracking_id",
      "description": "Current Tracking ID"
    },
    {
      "name": "current_tracking_mortality_postprocess",
      "description": "Current Tracking Mortality Postprocess"
    },
    {
      "name": "current_animal_id",
      "description": "Current Animal ID"
    },
    {
      "name": "last_modification_date",
      "description": "Device Last Modification Date"
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}
Headers
Content-Type: application/json

List fields
GET/device/list/fields

Lists all fields the user can request in the metadata export.


Mapping

GET https://app.anitra.cz/api/v2/device/scroll/fields
RequestsJSON document
Headers
Authorization: Bearer TOKEN
Responses200400401422

List of available fields and their associated descriptions.

Headers
Content-Type: application/json
Body
{
  "fields": [
    {
      "name": "datetime",
      "description": "GPS DateTime (in UTC)",
      "default": true
    },
    {
      "name": "gnss_latitude",
      "description": "Latitude (GNSS)",
      "default": true
    },
    {
      "name": "gnss_longitude",
      "description": "Longitude (GNSS)",
      "default": true
    },
    {
      "name": "gnss_altitude_elipsoid",
      "description": "Altitude [m] (GNSS)",
      "default": true
    },
    {
      "name": "gnss_speed_kmh",
      "description": "Speed [kmh] (GNSS)",
      "default": true
    },
    {
      "name": "gnss_direction",
      "description": "Direction [deg] (GNSS)",
      "default": true
    },
    {
      "name": "battery_voltage_mv",
      "description": "Battery voltage [mV]",
      "default": true
    },
    {
      "name": "battery_percent",
      "description": "Battery percent",
      "default": true
    },
    {
      "name": "solar_cell_percent",
      "description": "Solar percent",
      "default": true
    },
    {
      "name": "temperature_c",
      "description": "Temperature [°C]",
      "default": true
    },
    {
      "name": "baro_pressure_hpa",
      "description": "Atm. Pressure [hPa] (barometer)",
      "default": true
    },
    {
      "name": "baro_altitude_m",
      "description": "Altitude [m] (baro)",
      "default": true
    },
    {
      "name": "roll",
      "description": "Roll calculated [deg] (ACC)",
      "default": true
    },
    {
      "name": "pitch",
      "description": "Pitch calculated [deg] (ACC)",
      "default": true
    },
    {
      "name": "acc_x",
      "description": "raw ACC data X",
      "default": false
    },
    {
      "name": "acc_y",
      "description": "raw ACC data Y",
      "default": false
    },
    {
      "name": "acc_z",
      "description": "raw ACC data Z",
      "default": false
    },
    {
      "name": "mag_x",
      "description": "raw MAG data X",
      "default": false
    },
    {
      "name": "mag_y",
      "description": "raw MAG data Y",
      "default": false
    },
    {
      "name": "mag_z",
      "description": "raw MAG data Z",
      "default": false
    },
    {
      "name": "mortality_onboard",
      "description": "Mortality detected by device internal logic",
      "default": true
    },
    {
      "name": "device_id",
      "description": "DeviceID in ANITRA",
      "default": true
    },
    {
      "name": "device_code",
      "description": "Device Code",
      "default": true
    },
    {
      "name": "device_alias",
      "description": "Device User Alias",
      "default": true
    },
    {
      "name": "tracking_id",
      "description": "TrackingID in ANITRA",
      "default": true
    },
    {
      "name": "animal_id",
      "description": "TrackingID in ANITRA",
      "default": true
    },
    {
      "name": "animal_code",
      "description": "Animal Code",
      "default": true
    },
    {
      "name": "animal_name",
      "description": "Animal Name",
      "default": true
    },
    {
      "name": "wrong_gps",
      "description": "flagged (1) when GPS position is wrong (automatic or user)",
      "default": true
    },
    {
      "name": "note",
      "description": "Point comment",
      "default": true
    },
    {
      "name": "transmission_timestamp",
      "description": "Data received timestamp (latest update)",
      "default": false
    },
    {
      "name": "ornitela_transmission_protocol",
      "description": "Ornitela Transmission Protocol",
      "default": false
    },
    {
      "name": "gnss_speed_ms",
      "description": "Ground Speed [m/s] (GNSS)",
      "default": false
    },
    {
      "name": "acc_raw_x",
      "description": "raw ACC data X",
      "default": true
    },
    {
      "name": "acc_raw_y",
      "description": "raw ACC data Y",
      "default": true
    },
    {
      "name": "acc_raw_z",
      "description": "raw ACC data Z",
      "default": true
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}
Headers
Content-Type: application/json

Scroll fields
GET/device/scroll/fields

Lists all fields the user can request in the record export.


Records

GET https://app.anitra.cz/api/v2/device/scroll/1?scroll_id=fee4a39207073a3d3ae10722efa25568&from=20150505T123000.000Z&to=20150505T123000.000Z&updates_after=2015-05-05T12:30:00+00:00
Responses200206400404410422

Scroll response indicating that the scroll returned data, but the scroll is finished. Further requests with this scroll ID will result in a 410 error and then a 404 error.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": false,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude",
        "gnss_altitude_m",
        "gnss_speed_kmh",
        "gnss_direction",
        "battery_mv",
        "battery_pct",
        "solar_pct",
        "temperature_c",
        "baro_pressure_hpa",
        "baro_altitude_m",
        "roll",
        "pitch",
        "acc_x",
        "acc_y",
        "acc_z",
        "mag_x",
        "mag_y",
        "mag_z",
        "device_id",
        "device_code",
        "device_alias",
        "tracking_id",
        "animal_id",
        "animal_code",
        "animal_name",
        "dataset_type",
        "wrong_gps",
        "note"
    ],
    "data": [
        [
            "2020-02-09T06:00:51.000+00:00",
            40.123456,
            15.123456,
            "470",
            0,
            7,
            3759,
            31,
            0,
            3.73,
            968.679,
            366,
            -151.28,
            40.79,
            650,
            387,
            -642,
            -503,
            539,
            -503,
            1236,
            "ID",
            "",
            1797,
            55,
            "ID",
            "Name",
            "GPS",
            0,
            null
        ],
    ]
}

Scroll response indicating there is more to scroll.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": true,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude",
        "gnss_altitude_m",
        "gnss_speed_kmh",
        "gnss_direction",
        "battery_mv",
        "battery_pct",
        "solar_pct",
        "temperature_c",
        "baro_pressure_hpa",
        "baro_altitude_m",
        "roll",
        "pitch",
        "acc_x",
        "acc_y",
        "acc_z",
        "mag_x",
        "mag_y",
        "mag_z",
        "device_id",
        "device_code",
        "device_alias",
        "tracking_id",
        "animal_id",
        "animal_code",
        "animal_name",
        "dataset_type",
        "wrong_gps",
        "note"
    ],
    "data": [
        [
            "2020-02-09T06:00:51+00:00",
            40.123456,
            15.123456,
            "470",
            0,
            7,
            3759,
            31,
            0,
            3.73,
            968.679,
            366,
            -151.28,
            40.79,
            650,
            387,
            -642,
            -503,
            539,
            -503,
            1236,
            "ID",
            "",
            1797,
            55,
            "ID",
            "Name",
            "GPS",
            0,
            null
        ],
    ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid scroll id provided. It may have expired or be malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid scroll ID provided"
  }
}

Scroll declared itself finished, but the client still called it.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Scroll finished"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Scroll
GET/device/scroll/{id}?scroll_id={scroll_id}&from={date_from}&to={date_to}&updates_after={updates_after}

Gets device records. This route employs a scroll behaviour. First request to this endpoint must not provide a scroll id, as the scroll id is returned by the API endpoint in the first request the client submits. Further records can be retrieved by sending the same request again with a scroll id. Records are returned in an array format, not an object, as the repeating keys are not needed to save bandwidth and memory.

URI Parameters
HideShow
id
int (required) Example: 1

The device ID.

scroll_id
string (optional) Example: fee4a39207073a3d3ae10722efa25568

The scroll ID provided by the first request.

date_from
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by. Remember to escape the string properly.

date_to
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by. Remember to escape the string properly.

updates_after
string (optional) Example: 2015-05-05T12:30:00+00:00

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


PUT https://app.anitra.cz/api/v2/device/scroll/1?scroll_id=fee4a39207073a3d3ae10722efa25568&from=20150505T123000.000Z&to=20150505T123000.000Z&updates_after=2015-05-05T12:30:00+00:00
RequestsJSON document
Headers
Content-Type: application/json
Body
{
  "fields": [
    "datetime",
    "gnss_latitude",
    "gnss_longitude"
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "fields": {
      "type": "array",
      "description": "columns to be used for the data export, all available columns are available through the list fields API call."
    }
  },
  "required": [
    "fields"
  ]
}
Responses200206400404410422

Scroll response indicating that the scroll returned data, but the scroll is finished. Further requests with this scroll ID will result in a 410 error and then a 404 error.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": false,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude"
    ],
    "data": [
        [
            "2020-02-09T06:00:51.000+00:00",
            40.123456,
            15.123456,
        ],
    ]
}

Scroll response indicating there is more to scroll.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": true,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude"
    ],
    "data": [
        [
            "2020-02-09T06:00:51+00:00",
            40.123456,
            15.123456
        ],
    ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid scroll id provided. It may have expired or be malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid scroll ID provided"
  }
}

Scroll declared itself finished, but the client still called it.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Scroll finished"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Scroll
PUT/device/scroll/{id}?scroll_id={scroll_id}&from={date_from}&to={date_to}&updates_after={updates_after}

Allows specifying which data should be exported.

URI Parameters
HideShow
id
int (required) Example: 1

The device ID.

scroll_id
string (optional) Example: fee4a39207073a3d3ae10722efa25568

The scroll ID provided by the first request.

date_from
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by. Remember to escape the string properly.

date_to
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by. Remember to escape the string properly.

updates_after
string (optional) Example: 2015-05-05T12:30:00+00:00

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


Tracking

Fetch tracking and animal related metadata your account has access rights to.

List

GET https://app.anitra.cz/api/v2/tracking/list?updates_after=20150505T123000.000Z
Requestsexample 1
Headers
Authorization: Bearer TOKEN
Responses200401400422

List of all devices the user can access.

Headers
Content-Type: application/json
Body
{
  "trackings": [
    {
      "tracking_id": 1,
      "tracking_status": "Archive",
      "device_id": 1,
      "device_brand": "Anitra",
      "ownership": "Organisation name",
      "tracking_start_dt": "2011-01-01T14:00:00+00:00",
      "tracking_start_locality": "CZ NoLocation",
      "tracking_start_note": "",
      "tracking_first_data_dt": "2011-01-01T18:00:16+00:00",
      "tracking_first_data_locality": null,
      "tracking_end_dt": "2011-06-18T17:01:00+00:00",
      "tracking_end_locality": "CZ NoLocation",
      "tracking_end_note": "",
      "tracking_last_data_dt": "2015-06-18T15:01:33+00:00",
      "tracking_last_data_locality": "CZ NoLocation",
      "tracking_last_data_mortality_flag_device": null,
      "tracking_last_data_mortality_flag": null,
      "tracking_last_data_batery_percent": null,
      "animal_id": 188,
      "animal_code": "ANIMAL_01",
      "animal_name": "Animal Animal",
      "animal_note": null,
      "species": "Latin name",
      "sex": "Female",
      "tagging_age": 10,
      "year_of_birth": 2015,
      "mortality_reason": "Other mortality",
      "estimated_died_date": "2011-01-01T00:00:00+00:00",
      "mortality_note": "mortality note",
      "animal_origin": "young from wild nest",
      "tagging_person": null,
      "last_modification_date": "2020-12-07T12:38:54+00:00"
    }
  ]
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Unfiltered
GET/tracking/list?updates_after={updates_after}

Lists all trackings. This response does not throw errors if the user has access to no trackings.

This request does not accept specified fields, as it returns all fields available. To specify fields, use the PUT method as described below.

URI Parameters
HideShow
updates_after
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


PUT https://app.anitra.cz/api/v2/tracking/list?updates_after=20150505T123000.000Z
RequestsJSON document
Headers
Content-Type: application/json
Authorization: Bearer TOKEN
Body
{
  "fields": [
    "tracking_id",
    "tracking_code",
    "tracking_status"
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "fields": {
      "type": "array",
      "description": "List of fields to return. If not specified, all fields are returned."
    }
  }
}
Responses200400401404422

List of all devices the user can access.

Headers
Content-Type: application/json
Body
{
  "trackings": [
    {
      "tracking_id": 1,
      "tracking_code": "123@Code",
      "tracking_status": "deployed-missing"
    },
    {
      "tracking_id": 2,
      "tracking_code": "456@Code",
      "tracking_status": "deployed-missing"
    },
    {
      "tracking_id": 3,
      "tracking_code": "789@Code",
      "tracking_status": "deployed-missing"
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid fields provided for API mapping

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid fields provided for API mapping",
    "context": {
      "invalid_fields": [
        {
          "field": "ttracking_id",
          "closest": "tracking_id",
          "message": "Field 'ttracking_id' does not exist, did you mean 'tracking_id'?"
        }
      ],
      "valid_fields": [
        "tracking_id",
        "tracking_code",
        "tracking_status",
        "device_id",
        "device_code",
        "device_brand",
        "device_type",
        "ownership",
        "tracking_start_dt",
        "tracking_start_locality",
        "tracking_start_latitude",
        "tracking_start_longitude",
        "tracking_start_note",
        "tracking_first_data_dt",
        "tracking_first_position_dt",
        "tracking_first_position_locality",
        "tracking_end_dt",
        "tracking_end_locality",
        "tracking_end_latitude",
        "tracking_end_longitude",
        "tracking_end_note",
        "tracking_last_data_dt",
        "tracking_last_position_dt",
        "tracking_last_position_locality",
        "tracking_last_data_mortality_onboard",
        "tracking_last_data_mortality_postprocess",
        "tracking_last_data_batery_percent",
        "animal_id",
        "animal_code",
        "animal_name",
        "animal_note",
        "species",
        "sex",
        "sex_2",
        "tagging_age",
        "year_of_birth",
        "animal_earliest_date_born",
        "animal_exact_date_of_birth",
        "animal_latest_date_born",
        "mortality_reason",
        "estimated_died_date",
        "mortality_note",
        "animal_origin",
        "tagging_person",
        "last_modification_date",
        "movebank_study_id"
      ]
    }
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Filtered
PUT/tracking/list?updates_after={updates_after}

Lists all trackings. This response does not throw errors if the user has access to no trackings.

The PUT method is not required while not requesting any fields, but it is recommended to use it to specify the fields you wish to receive. If no fields are specified, all fields are returned.

URI Parameters
HideShow
updates_after
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


Mapping

GET https://app.anitra.cz/api/v2/tracking/list/fields
RequestsJSON document
Headers
Authorization: Bearer TOKEN
Responses200400401422

List of available fields and their associated descriptions.

Headers
Content-Type: application/json
Body
{
  "fields": [
    {
      "name": "tracking_id",
      "description": "Tracking ID"
    },
    {
      "name": "tracking_code",
      "description": "Tracking Code"
    },
    {
      "name": "tracking_status",
      "description": "Tracking Status"
    },
    {
      "name": "device_id",
      "description": "Device ID"
    },
    {
      "name": "device_code",
      "description": "Device Code"
    },
    {
      "name": "device_brand",
      "description": "Device Brand"
    },
    {
      "name": "device_type",
      "description": "Device Type"
    },
    {
      "name": "ownership",
      "description": "Ownership"
    },
    {
      "name": "tracking_start_dt",
      "description": "TrackingStart DT"
    },
    {
      "name": "tracking_start_locality",
      "description": "TrackingStart Locality"
    },
    {
      "name": "tracking_start_latitude",
      "description": "TrackingStart Latitude"
    },
    {
      "name": "tracking_start_longitude",
      "description": "TrackingStart Longitude"
    },
    {
      "name": "tracking_start_note",
      "description": "TrackingStart Note"
    },
    {
      "name": "tracking_first_data_dt",
      "description": "First Data DT"
    },
    {
      "name": "tracking_first_position_dt",
      "description": "First Position DT"
    },
    {
      "name": "tracking_first_position_locality",
      "description": "First Data Locality"
    },
    {
      "name": "tracking_end_dt",
      "description": "TrackingEnd DT"
    },
    {
      "name": "tracking_end_locality",
      "description": "TrackingEnd Locality"
    },
    {
      "name": "tracking_end_latitude",
      "description": "TrackingEnd Latitude"
    },
    {
      "name": "tracking_end_longitude",
      "description": "TrackingEnd Longitude"
    },
    {
      "name": "tracking_end_note",
      "description": "TrackingEnd Note"
    },
    {
      "name": "tracking_last_data_dt",
      "description": "Last Data DT"
    },
    {
      "name": "tracking_last_position_dt",
      "description": "Last Position DT"
    },
    {
      "name": "tracking_last_position_locality",
      "description": "Last Data Locality"
    },
    {
      "name": "tracking_last_data_mortality_onboard",
      "description": "Last Mortality Status Onboard"
    },
    {
      "name": "tracking_last_data_mortality_postprocess",
      "description": "Last Mortality Status Postprocess"
    },
    {
      "name": "tracking_last_data_batery_percent",
      "description": "Last Battery Percent"
    },
    {
      "name": "animal_id",
      "description": "Animal ID"
    },
    {
      "name": "animal_code",
      "description": "Animal Code"
    },
    {
      "name": "animal_name",
      "description": "Animal Name"
    },
    {
      "name": "animal_note",
      "description": "Animal Note"
    },
    {
      "name": "species",
      "description": "Species"
    },
    {
      "name": "sex",
      "description": "Sex"
    },
    {
      "name": "sex_2",
      "description": "Sex (short Euring)"
    },
    {
      "name": "tagging_age",
      "description": "Tagging Age"
    },
    {
      "name": "year_of_birth",
      "description": "Year Of Birth"
    },
    {
      "name": "animal_earliest_date_born",
      "description": "EarliestDateBorn"
    },
    {
      "name": "animal_exact_date_of_birth",
      "description": "ExactDateOfBirth"
    },
    {
      "name": "animal_latest_date_born",
      "description": "LatestDateBorn"
    },
    {
      "name": "mortality_reason",
      "description": "Mortality Reason"
    },
    {
      "name": "estimated_died_date",
      "description": "Estimated Day Of Death"
    },
    {
      "name": "mortality_note",
      "description": "Mortality Note"
    },
    {
      "name": "animal_origin",
      "description": "Animal Origin"
    },
    {
      "name": "tagging_person",
      "description": "Tagging Person"
    },
    {
      "name": "last_modification_date",
      "description": "Last Modification Date"
    },
    {
      "name": "movebank_study_id",
      "description": "Movebank Study Id"
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}
Headers
Content-Type: application/json

List fields
GET/tracking/list/fields

Lists all fields the user can request in the metadata export.


Mapping

GET https://app.anitra.cz/api/v2/tracking/scroll/fields
RequestsJSON document
Headers
Authorization: Bearer TOKEN
Responses200400401422

List of available fields and their associated descriptions.

Headers
Content-Type: application/json
Body
{
  "fields": [
    {
      "name": "datetime",
      "description": "GPS DateTime (in UTC)",
      "default": true
    },
    {
      "name": "gnss_latitude",
      "description": "Latitude (GNSS)",
      "default": true
    },
    {
      "name": "gnss_longitude",
      "description": "Longitude (GNSS)",
      "default": true
    },
    {
      "name": "gnss_altitude_elipsoid",
      "description": "Altitude [m] (GNSS)",
      "default": true
    },
    {
      "name": "gnss_speed_kmh",
      "description": "Speed [kmh] (GNSS)",
      "default": true
    },
    {
      "name": "gnss_direction",
      "description": "Direction [deg] (GNSS)",
      "default": true
    },
    {
      "name": "battery_voltage_mv",
      "description": "Battery voltage [mV]",
      "default": true
    },
    {
      "name": "battery_percent",
      "description": "Battery percent",
      "default": true
    },
    {
      "name": "solar_cell_percent",
      "description": "Solar percent",
      "default": true
    },
    {
      "name": "temperature_c",
      "description": "Temperature [°C]",
      "default": true
    },
    {
      "name": "baro_pressure_hpa",
      "description": "Atm. Pressure [hPa] (barometer)",
      "default": true
    },
    {
      "name": "baro_altitude_m",
      "description": "Altitude [m] (baro)",
      "default": true
    },
    {
      "name": "roll",
      "description": "Roll calculated [deg] (ACC)",
      "default": true
    },
    {
      "name": "pitch",
      "description": "Pitch calculated [deg] (ACC)",
      "default": true
    },
    {
      "name": "acc_x",
      "description": "raw ACC data X",
      "default": false
    },
    {
      "name": "acc_y",
      "description": "raw ACC data Y",
      "default": false
    },
    {
      "name": "acc_z",
      "description": "raw ACC data Z",
      "default": false
    },
    {
      "name": "mag_x",
      "description": "raw MAG data X",
      "default": false
    },
    {
      "name": "mag_y",
      "description": "raw MAG data Y",
      "default": false
    },
    {
      "name": "mag_z",
      "description": "raw MAG data Z",
      "default": false
    },
    {
      "name": "mortality_onboard",
      "description": "Mortality detected by device internal logic",
      "default": true
    },
    {
      "name": "device_id",
      "description": "DeviceID in ANITRA",
      "default": true
    },
    {
      "name": "device_code",
      "description": "Device Code",
      "default": true
    },
    {
      "name": "device_alias",
      "description": "Device User Alias",
      "default": true
    },
    {
      "name": "tracking_id",
      "description": "TrackingID in ANITRA",
      "default": true
    },
    {
      "name": "animal_id",
      "description": "TrackingID in ANITRA",
      "default": true
    },
    {
      "name": "animal_code",
      "description": "Animal Code",
      "default": true
    },
    {
      "name": "animal_name",
      "description": "Animal Name",
      "default": true
    },
    {
      "name": "wrong_gps",
      "description": "flagged (1) when GPS position is wrong (automatic or user)",
      "default": true
    },
    {
      "name": "note",
      "description": "Point comment",
      "default": true
    },
    {
      "name": "transmission_timestamp",
      "description": "Data received timestamp (latest update)",
      "default": false
    },
    {
      "name": "ornitela_transmission_protocol",
      "description": "Ornitela Transmission Protocol",
      "default": false
    },
    {
      "name": "gnss_speed_ms",
      "description": "Ground Speed [m/s] (GNSS)",
      "default": false
    },
    {
      "name": "acc_raw_x",
      "description": "raw ACC data X",
      "default": true
    },
    {
      "name": "acc_raw_y",
      "description": "raw ACC data Y",
      "default": true
    },
    {
      "name": "acc_raw_z",
      "description": "raw ACC data Z",
      "default": true
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}
Headers
Content-Type: application/json

Scroll fields
GET/tracking/scroll/fields

Lists all fields the user can request in the record export.


Records

GET https://app.anitra.cz/api/v2/tracking/scroll/1?scroll_id=fee4a39207073a3d3ae10722efa25568&from=20150505T123000.000Z&to=20150505T123000.000Z&updates_after=2015-05-05T12:30:00+00:00
Responses200206400404410422

Scroll response indicating that the scroll returned data, but the scroll is finished. Further requests with this scroll ID will result in a 410 error and then a 404 error.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": false,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude",
        "gnss_altitude_m",
        "gnss_speed_kmh",
        "gnss_direction",
        "battery_mv",
        "battery_pct",
        "solar_pct",
        "temperature_c",
        "baro_pressure_hpa",
        "baro_altitude_m",
        "roll",
        "pitch",
        "acc_x",
        "acc_y",
        "acc_z",
        "mag_x",
        "mag_y",
        "mag_z",
        "device_id",
        "device_code",
        "device_alias",
        "tracking_id",
        "animal_id",
        "animal_code",
        "animal_name",
        "dataset_type",
        "wrong_gps",
        "note"
    ],
    "data": [
        [
            "2020-02-09T06:00:51.000+00:00",
            40.123456,
            15.123456,
            "470",
            0,
            7,
            3759,
            31,
            0,
            3.73,
            968.679,
            366,
            -151.28,
            40.79,
            650,
            387,
            -642,
            -503,
            539,
            -503,
            1236,
            "ID",
            "",
            1797,
            55,
            "ID",
            "Name",
            "GPS",
            0,
            null
        ],
    ]
}

Scroll response indicating there is more to scroll.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": true,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude",
        "gnss_altitude_m",
        "gnss_speed_kmh",
        "gnss_direction",
        "battery_mv",
        "battery_pct",
        "solar_pct",
        "temperature_c",
        "baro_pressure_hpa",
        "baro_altitude_m",
        "roll",
        "pitch",
        "acc_x",
        "acc_y",
        "acc_z",
        "mag_x",
        "mag_y",
        "mag_z",
        "device_id",
        "device_code",
        "device_alias",
        "tracking_id",
        "animal_id",
        "animal_code",
        "animal_name",
        "dataset_type",
        "wrong_gps",
        "note"
    ],
    "data": [
        [
            "2020-02-09T06:00:51+00:00",
            40.123456,
            15.123456,
            "470",
            0,
            7,
            3759,
            31,
            0,
            3.73,
            968.679,
            366,
            -151.28,
            40.79,
            650,
            387,
            -642,
            -503,
            539,
            -503,
            1236,
            "ID",
            "",
            1797,
            55,
            "ID",
            "Name",
            "GPS",
            0,
            null
        ],
    ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid scroll id provided. It may have expired or be malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid scroll ID provided"
  }
}

Scroll declared itself finished, but the client still called it.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Scroll finished"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Scroll
GET/tracking/scroll/{id}?scroll_id={scroll_id}&from={date_from}&to={date_to}&updates_after={updates_after}

Gets tracking records. This route employs a scroll behaviour. First request to this endpoint must not provide a scroll id, as the scroll id is returned by the API endpoint in the first request the client submits. Further records can be retrieved by sending the same request again with a scroll id. Records returned in an array format, not an object, as the repeating keys are not needed.

URI Parameters
HideShow
id
int (required) Example: 1

The tracking ID.

scroll_id
string (optional) Example: fee4a39207073a3d3ae10722efa25568

The scroll ID provided by the first request.

date_from
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by.

date_to
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by.

updates_after
string (optional) Example: 2015-05-05T12:30:00+00:00

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


PUT https://app.anitra.cz/api/v2/tracking/scroll/1?scroll_id=fee4a39207073a3d3ae10722efa25568&from=20150505T123000.000Z&to=20150505T123000.000Z&updates_after=2015-05-05T12:30:00+00:00
RequestsJSON document
Headers
Content-Type: application/json
Body
{
  "fields": [
    "datetime",
    "gnss_latitude",
    "gnss_longitude"
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "fields": {
      "type": "array",
      "description": "columns to be used for the data export, all available columns are available through the list fields API call."
    }
  },
  "required": [
    "fields"
  ]
}
Responses200206400404410422

Scroll response indicating that the scroll returned data, but the scroll is finished. Further requests with this scroll ID will result in a 410 error and then a 404 error.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": false,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude"
    ],
    "data": [
        [
            "2020-02-09T06:00:51.000+00:00",
            40.123456,
            15.123456
        ],
    ]
}

Scroll response indicating there is more to scroll.

Headers
Content-Type: application/json
Body
{
    scroll":{
        "scroll_id": "0f8a0e99ef77a4673aa632adb516ec9a",
        "limit": 300,
        "offset": 300,
        "data_after": true,
        "expiry": 1607419009
    },
    "fields":[
        "datetime",
        "gnss_latitude",
        "gnss_longitude"
    ],
    "data": [
        [
            "2020-02-09T06:00:51+00:00",
            40.123456,
            15.123456
        ],
    ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid scroll id provided. It may have expired or be malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid scroll ID provided"
  }
}

Scroll declared itself finished, but the client still called it.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Scroll finished"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Scroll
PUT/tracking/scroll/{id}?scroll_id={scroll_id}&from={date_from}&to={date_to}&updates_after={updates_after}

Gets tracking records. This route employs a scroll behaviour. First request to this endpoint must not provide a scroll id, as the scroll id is returned by the API endpoint in the first request the client submits. Further records can be retrieved by sending the same request again with a scroll id. Records returned in an array format, not an object, as the repeating keys are not needed. Specified columns for exporting are provided through JSON body.

URI Parameters
HideShow
id
int (required) Example: 1

The tracking ID.

scroll_id
string (optional) Example: fee4a39207073a3d3ae10722efa25568

The scroll ID provided by the first request.

date_from
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by.

date_to
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to filter the records by.

updates_after
string (optional) Example: 2015-05-05T12:30:00+00:00

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


Animal

Animal related metadata your account has access rights to.

List

GET https://app.anitra.cz/api/v2/animal/list?updates_after=20150505T123000.000Z
Requestsexample 1
Headers
Authorization: Bearer TOKEN
Responses200401400422

List of all devices the user can access.

Headers
Content-Type: application/json
Body
{
  "animals": [
    {
      "animal_id": 1,
      "animal_code": "123456",
      "animal_name": null,
      "animal_note": null,
      "ringing_taging_note": null,
      "breeding_place_note": null,
      "species": null,
      "sex": null,
      "sex_2": "u",
      "sexing_note": null,
      "year_of_birth": "@YearOfBirthIssue",
      "earliest_date_born": null,
      "exact_date_of_birth": null,
      "latest_date_born": null,
      "mortality_reason": null,
      "estimated_died_date": null,
      "mortality_note": null,
      "marked_dead": null,
      "animal_status": null,
      "last_modification_date": "2023-06-26T18:53:33.000+00:00",
      "movebank_study_id": null
    }
  ]
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Unfiltered
GET/animal/list?updates_after={updates_after}

Lists all animals. This response does not throw errors if the user has access to no animals.

This request does not accept specified fields, as it returns all fields available. To specify fields, use the PUT method as described below.

URI Parameters
HideShow
updates_after
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


PUT https://app.anitra.cz/api/v2/animal/list?updates_after=20150505T123000.000Z
RequestsJSON document
Headers
Content-Type: application/json
Authorization: Bearer TOKEN
Body
{
  "fields": [
    "tracking_id",
    "tracking_code",
    "tracking_status"
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "fields": {
      "type": "array",
      "description": "List of fields to return. If not specified, all fields are returned."
    }
  }
}
Responses200400401404422

List of all devices the user can access.

Headers
Content-Type: application/json
Body
"animals": [
    {
        "animal_id": 1,
        "animal_code": "123456",
        "animal_name": null
    }
]

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid fields provided for API mapping

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid fields provided for API mapping",
    "context": {
      "invalid_fields": [
        {
          "field": "aanimal_id",
          "closest": "animal_id",
          "message": "Field 'aanimal_id' does not exist, did you mean 'animal_id'?"
        }
      ],
      "valid_fields": [
        "animal_id",
        "animal_code",
        "animal_name",
        "animal_note",
        "ringing_taging_note",
        "breeding_place_note",
        "species",
        "sex",
        "sex_2",
        "sexing_note",
        "year_of_birth",
        "earliest_date_born",
        "exact_date_of_birth",
        "latest_date_born",
        "mortality_reason",
        "estimated_died_date",
        "mortality_note",
        "marked_dead",
        "animal_status",
        "last_modification_date",
        "movebank_study_id"
      ]
    }
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

Filtered
PUT/animal/list?updates_after={updates_after}

Lists all animals. This response does not throw errors if the user has access to no animals.

The PUT method is not required while not requesting any fields, but it is recommended to use it to specify the fields you wish to receive. If no fields are specified, all fields are returned.

URI Parameters
HideShow
updates_after
string (optional) Example: 20150505T123000.000Z

The date/time in ISO8601 format to fetch updates after. Remember to escape the string properly.


Mapping

GET https://app.anitra.cz/api/v2/animal/list/fields
RequestsJSON document
Headers
Authorization: Bearer TOKEN
Responses200400401422

List of available fields and their associated descriptions.

Headers
Content-Type: application/json
Body
{
  "fields": [
    {
      "name": "animal_id",
      "description": "Animal ID"
    },
    {
      "name": "animal_code",
      "description": "Animal Code"
    },
    {
      "name": "animal_name",
      "description": "Animal Name"
    },
    {
      "name": "animal_note",
      "description": "Animal Note"
    },
    {
      "name": "ringing_taging_note",
      "description": "RingingTaggingNote"
    },
    {
      "name": "breeding_place_note",
      "description": "Breeding Place Note"
    },
    {
      "name": "species",
      "description": "Species"
    },
    {
      "name": "sex",
      "description": "Sex"
    },
    {
      "name": "sex_2",
      "description": "Sex 2"
    },
    {
      "name": "sexing_note",
      "description": "Sexing Note"
    },
    {
      "name": "year_of_birth",
      "description": "Year Of Birth"
    },
    {
      "name": "earliest_date_born",
      "description": "EarliestDateBorn"
    },
    {
      "name": "exact_date_of_birth",
      "description": "ExactDateOfBirth"
    },
    {
      "name": "latest_date_born",
      "description": "LatestDateBorn"
    },
    {
      "name": "mortality_reason",
      "description": "Mortality Reason"
    },
    {
      "name": "estimated_died_date",
      "description": "Estimated Day Of Death"
    },
    {
      "name": "mortality_note",
      "description": "Mortality Note"
    },
    {
      "name": "marked_dead",
      "description": "Marked Dead"
    },
    {
      "name": "animal_status",
      "description": "Animal Status"
    },
    {
      "name": "last_modification_date",
      "description": "Last Modification Date"
    },
    {
      "name": "movebank_study_id",
      "description": "Movebank Study ID"
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}
Headers
Content-Type: application/json

List fields
GET/animal/list/fields

Lists all fields the user can request in the metadata export.


Species

List

Species entity represents the enumerator value of the species of the animal. Only a limited set of species is currently available, and are added on request.

GET https://app.anitra.cz/api/v2/species/list
Requestsexample 1
Headers
Authorization: Bearer TOKEN
Responses200400401422

In case user provided a valid token, species list is returned.

Headers
Content-Type: application/json
Body
{
  "species": [
    {
      "id": 42,
      "english": "Goshawk",
      "scientifc": "Accipiter gentilis"
    },
    {
      "id": 43,
      "english": "Sparrowhawk",
      "scientifc": "Accipiter nisus"
    },
    {
      "id": 26,
      "english": "Cinereous vulture",
      "scientifc": "Aegypius monachus"
    },
    {
      "id": 65,
      "english": "Northern pintail",
      "scientifc": "Anas acuta"
    },
    {
      "id": 63,
      "english": "Eurasian teal",
      "scientifc": "Anas crecca"
    },
    {
      "id": 64,
      "english": "Mallard",
      "scientifc": "Anas platyrhynchos"
    },
    {
      "id": 77,
      "english": "Garganey",
      "scientifc": "Anas querquedula"
    },
    {
      "id": 10,
      "english": "Golden eagle",
      "scientifc": "Aquila chrysaetos"
    },
    {
      "id": 28,
      "english": "Greater spotted eagle",
      "scientifc": "Aquila clanga"
    },
    {
      "id": 9,
      "english": "Imperial eagle",
      "scientifc": "Aquila heliaca"
    },
    {
      "id": 24,
      "english": "Steppe eagle",
      "scientifc": "Aquila nipalensis"
    },
    {
      "id": 12,
      "english": "Lesser spotted eagle",
      "scientifc": "Aquila pomarina"
    },
    {
      "id": 29,
      "english": "Great white heron",
      "scientifc": "Ardea alba"
    },
    {
      "id": 32,
      "english": "Gray heron",
      "scientifc": "Ardea cinerea"
    },
    {
      "id": 20,
      "english": "White-bellied heron",
      "scientifc": "Ardea insignis"
    },
    {
      "id": 31,
      "english": "Purple heron",
      "scientifc": "Ardea purpurea"
    },
    {
      "id": 45,
      "english": "Short-eared owl",
      "scientifc": "Asio flammeus"
    },
    {
      "id": 46,
      "english": "Long-eared owl",
      "scientifc": "Asio otus"
    },
    {
      "id": 1,
      "english": "Eagle owl",
      "scientifc": "Bubo bubo"
    },
    {
      "id": 40,
      "english": "Common buzzard",
      "scientifc": "Buteo buteo"
    },
    {
      "id": 8,
      "english": "Rough-legged buzzard",
      "scientifc": "Buteo lagopus"
    },
    {
      "id": 35,
      "english": "Long-legged buzzard",
      "scientifc": "Buteo rufinus"
    },
    {
      "id": 14,
      "english": "White stork",
      "scientifc": "Ciconia ciconia"
    },
    {
      "id": 13,
      "english": "Black stork",
      "scientifc": "Ciconia nigra"
    },
    {
      "id": 52,
      "english": "Short-toed snake eagle",
      "scientifc": "Circaetus gallicus"
    },
    {
      "id": 36,
      "english": "Western marsh harrier",
      "scientifc": "Circus aeruginosus"
    },
    {
      "id": 6,
      "english": "Hen harrier",
      "scientifc": "Circus cyaneus"
    },
    {
      "id": 44,
      "english": "Pallid harrier",
      "scientifc": "Circus macrourus"
    },
    {
      "id": 7,
      "english": "Montagu`s harrier",
      "scientifc": "Circus pygargus"
    },
    {
      "id": 48,
      "english": "Common raven",
      "scientifc": "Corvus corax"
    },
    {
      "id": 53,
      "english": "Rook",
      "scientifc": "Corvus frugilegus"
    },
    {
      "id": 18,
      "english": "Corncrake",
      "scientifc": "Crex crex"
    },
    {
      "id": 30,
      "english": "Little egret",
      "scientifc": "Egretta garzetta"
    },
    {
      "id": 5,
      "english": "Saker falcon",
      "scientifc": "Falco cherrug"
    },
    {
      "id": 4,
      "english": "Peregrine falcon",
      "scientifc": "Falco peregrinus"
    },
    {
      "id": 59,
      "english": "Euroasian hobby",
      "scientifc": "Falco subbuteo"
    },
    {
      "id": 60,
      "english": "Common kestrel",
      "scientifc": "Falco tinnunculus"
    },
    {
      "id": 62,
      "english": "Red-footed falcon",
      "scientifc": "Falco vespertinus"
    },
    {
      "id": 21,
      "english": "Northern bald Ibis",
      "scientifc": "Geronticus eremita"
    },
    {
      "id": 16,
      "english": "Common crane",
      "scientifc": "Grus grus"
    },
    {
      "id": 25,
      "english": "Bearded vulture",
      "scientifc": "Gypaetus barbatus"
    },
    {
      "id": 61,
      "english": "Cape vulture",
      "scientifc": "Gyps coprotheres"
    },
    {
      "id": 27,
      "english": "Griffon vulture",
      "scientifc": "Gyps fulvus"
    },
    {
      "id": 50,
      "english": "Rüppell's vulture",
      "scientifc": "Gyps rueppelli"
    },
    {
      "id": 54,
      "english": "Eurasian oystercatcher",
      "scientifc": "Haematopus ostralegus"
    },
    {
      "id": 15,
      "english": "White-tailed eagle",
      "scientifc": "Haliaeetus albicilla"
    },
    {
      "id": 71,
      "english": "Booted eagle",
      "scientifc": "Hieraaetus pennatus"
    },
    {
      "id": 39,
      "english": "Caspian gull",
      "scientifc": "Larus cachinnans"
    },
    {
      "id": 55,
      "english": "European hare",
      "scientifc": "Lepus europaeus"
    },
    {
      "id": 2,
      "english": "Black kite",
      "scientifc": "Milvus migrans"
    },
    {
      "id": 37,
      "english": "Black x Red kite",
      "scientifc": "Milvus migrans x milvus"
    },
    {
      "id": 3,
      "english": "Red kite",
      "scientifc": "Milvus milvus"
    },
    {
      "id": 38,
      "english": "Black-eared kite",
      "scientifc": "Milvus milvus lineatus"
    },
    {
      "id": 34,
      "english": "Hooded vulture",
      "scientifc": "Necrosyrtes monachus"
    },
    {
      "id": 11,
      "english": "Egyptian vulture",
      "scientifc": "Neophron percnopterus"
    },
    {
      "id": 22,
      "english": "Night heron",
      "scientifc": "Nycticorax nycticorax"
    },
    {
      "id": 17,
      "english": "Great bustard",
      "scientifc": "Otis tarda"
    },
    {
      "id": 74,
      "english": "Osprey",
      "scientifc": "Pandion haliaetus"
    },
    {
      "id": 19,
      "english": "European honey buzzard",
      "scientifc": "Pernis apivorus"
    },
    {
      "id": 49,
      "english": "Eurasian woodcock",
      "scientifc": "Scolopax rusticola"
    },
    {
      "id": 47,
      "english": "Ural owl",
      "scientifc": "Strix uralensis"
    },
    {
      "id": 23,
      "english": "Western capercaillie",
      "scientifc": "Tetrao urogallus"
    },
    {
      "id": 69,
      "english": "Hazel grouse",
      "scientifc": "Tetrastes bonasia"
    },
    {
      "id": 56,
      "english": "Little bustard",
      "scientifc": "Tetrax tetrax"
    },
    {
      "id": 33,
      "english": "African sacred ibis",
      "scientifc": "Threskiornis aethiopicus"
    },
    {
      "id": 68,
      "english": "Southern lapwing",
      "scientifc": "Vanellus chilensis"
    },
    {
      "id": 58,
      "english": "Red-wattled lapwing",
      "scientifc": "Vanellus indicus"
    },
    {
      "id": 57,
      "english": "Northern lapwing",
      "scientifc": "Vanellus vanellus"
    }
  ]
}

Invalid JWT token provided. Your token is malformed.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid JWT token provided"
  }
}

Invalid or missing JWT token.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Invalid or missing JWT token"
  }
}

Invalid value provided, for example an incorrect datetime value.

Headers
Content-Type: application/json
Body
{
  "error": {
    "message": "Request body contains an error. See context for details.",
    "context": {
      "validation": {
        "updates_after": [
          "Updates after \"20150505T123000.f00Z\" is not valid datetime, valid format is ATOM"
        ]
      }
    }
  }
}

List
GET/species/list

Returns a list of species available in the Anitra platform. Results are sorted by the latin name (scientific).


Generated  on 15 Apr 2024