University of Helsinki Annotations API

The Annotations API from University of Helsinki — 3 operation(s) for annotations.

Operations 4

GET /annotations/tags Fetch all annotation tags #
GET /annotations Get a page of annotations #
POST /annotations Create a new annotation #
DELETE /annotations/{id} Delete an annotation. #

Documentation

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-hy-organisation-api-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-contact-search-api-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-course-pages-cms-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-helsinki-fi-content-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-hy-building-api-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-serviceapi-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-employeeinformationapi-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-persongroup-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-general-efecte-api-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-network-registry-api-schemas.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/json-schema/university-of-helsinki-finbif-laji-schemas.json

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/university-of-helsinki-annotations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

university-of-helsinki-annotations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Laji Annotations API
  description: '## Authentication


    This API requires an **Access Token**.'
  version: '1'
  contact: {}
servers:
- url: https://api.laji.fi
tags:
- name: Annotations
paths:
  /annotations/tags:
    get:
      operationId: AnnotationsController_getTags
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/store-tag'
                  '@context':
                    type: string
        '400':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '401':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '403':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '404':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '406':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '422':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '500':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      summary: Fetch all annotation tags
      tags:
      - Annotations
  /annotations:
    get:
      operationId: AnnotationsController_getPage
      parameters:
      - name: page
        required: false
        in: query
        schema:
          default: 1
          type: integer
      - name: pageSize
        required: false
        in: query
        schema:
          default: 20
          type: integer
      - name: rootID
        required: true
        in: query
        description: Filter by root ID
        schema:
          type: string
      - name: Person-Token
        required: false
        description: Person's authentication token. It is required.
        in: header
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  currentPage:
                    type: integer
                  pageSize:
                    type: integer
                  total:
                    type: integer
                  lastPage:
                    type: integer
                  prevPage:
                    type: integer
                  nextPage:
                    type: integer
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/store-annotation'
                required:
                - currentPage
                - pageSize
                - total
                - lastPage
                - results
        '400':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '401':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '403':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '404':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '406':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '422':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '500':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      summary: Get a page of annotations
      tags:
      - Annotations
    post:
      operationId: AnnotationsController_create
      parameters:
      - name: Person-Token
        required: false
        description: Person's authentication token. It is required.
        in: header
        schema:
          type: string
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/store-annotation'
        '400':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '401':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '403':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '404':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '406':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '422':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '500':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      summary: Create a new annotation
      tags:
      - Annotations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/store-annotation'
  /annotations/{id}:
    delete:
      operationId: AnnotationsController_delete
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: Person-Token
        required: false
        description: Person's authentication token. It is required.
        in: header
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/store-annotation'
        '400':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '401':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '403':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '404':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '406':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '422':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
        '500':
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorCode:
                    type: string
                  message:
                    type: string
                  localized:
                    type: boolean
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      summary: Delete an annotation.
      tags:
      - Annotations
components:
  schemas:
    store-annotationOccurrence:
      type: object
      properties:
        '@context':
          type: string
          title: Context for the MAN.annotationOccurrenceClass
        id:
          type: string
          title: Id for the MAN.annotationOccurrenceClass
        '@type':
          type: string
          title: Type for the MAN.annotationOccurrenceClass
        countryVerbatim:
          type: string
          title: Country verbatim
        dateBegin:
          type: string
          title: Date begin
        dateEnd:
          type: string
          title: Date end
        locality:
          type: string
          title: Locality
        municipalityVerbatim:
          type: string
          title: Municipality verbatim
        taxonId:
          type: string
          title: Taxon ID
        taxonVerbatim:
          type: string
          title: Taxon verbatim
        wgs84centerPointLat:
          type: number
          title: Latitude (center point)
        wgs84centerPointLon:
          type: number
          title: Longitude (center point)
      additionalProperties: false
      required:
      - '@context'
      - id
      - '@type'
      - countryVerbatim
      - dateBegin
      - dateEnd
      - locality
      - municipalityVerbatim
      - taxonId
      - taxonVerbatim
      - wgs84centerPointLat
      - wgs84centerPointLon
    store-tag:
      type: object
      properties:
        '@context':
          type: string
          title: Context for the MMAN.tagClass
        id:
          type: string
          title: Id for the MMAN.tagClass
        '@type':
          type: string
          title: Type for the MMAN.tagClass
        description:
          type: string
        name:
          $ref: '#/components/schemas/store-multiLang'
        requiredRolesAdd:
          type: array
          uniqueItems: false
          items:
            type: string
            enum:
            - ''
            - MMAN.expert
            - MMAN.basic
            - MMAN.owner
            - MMAN.formAdmin
            - MMAN.ictAdmin
          minItems: 0
          title: Required role to add
        requiredRolesRemove:
          type: array
          uniqueItems: false
          items:
            type: string
            enum:
            - ''
            - MMAN.expert
            - MMAN.basic
            - MMAN.owner
            - MMAN.formAdmin
            - MMAN.ictAdmin
          minItems: 0
          title: Required role to remove
        type:
          type: string
          enum:
          - ''
          - MMAN.typeCheck
          - MMAN.typeAdmin
          - MMAN.typeInfo
          - MMAN.typeInvasive
          - MMAN.typeCensus
          - MMAN.typeNegativeQuality
          - MMAN.typePositiveQuality
          title: Type
      additionalProperties: false
      required:
      - '@context'
      - id
      - '@type'
      - name
      - requiredRolesAdd
      - requiredRolesRemove
      - type
    store-multiLang:
      type: string
    store-identification:
      type: object
      properties:
        '@context':
          type: string
          title: Context for the Identification
        id:
          type: string
          title: Id for the Identification
        '@type':
          type: string
          title: Type for the Identification
        associatedObservationTaxa:
          type: string
          description: 'Write associated observation taxa names here, separated by a semicolon (;). E.g.: "Betula pendula; Betula pubescens; Poaceae". These will form their own units of the type observation.'
          title: Associated observation taxa
        author:
          type: string
          description: Author for the taxon
          title: Taxon author
        det:
          type: string
          description: Name of the identifier (person) preferably in format "lastname, firstname"
          title: Det.
        detDate:
          type: string
          description: Date or year when the identification was done, preferably in format "d.m.Y" or "Y"
          title: Det. date
        detMethod:
          type: string
          enum:
          - ''
          - MY.detMethodFreshSample
          - MY.detMethodMicroscopy
          - MY.detMethodPhoto
          title: Det method
        detVerbatim:
          type: string
          description: Name of the identifier and date of identification in original format (e.g. from the label), errors and all
          title: Det verbatim from the label or other original source
        genusQualifier:
          type: string
          description: Additional qualifier or specifier at genus level (e.g. aff., cf.)
          title: Genus qualifier
        identificationBasis:
          type: array
          uniqueItems: false
          items:
            type: string
            enum:
            - ''
            - MY.identificationBasisDNA
            - MY.identificationBasisGenitals
            - MY.identificationBasisGenitalPreparate
            - MY.identificationBasisSpores
            - MY.identificationBasisHandled
            - MY.identificationBasisChemical
            - MY.identificationBasisHeard
            - MY.identificationBasisMicroscope
            - MY.identificationBasisSeen
            - MY.identificationBasisPreservedSpecimen
            - MY.identificationBasisFreshSpecimen
            - MY.identificationBasisMedia
          minItems: 0
          title: Identification basis
        identificationNotes:
          type: string
          description: Additional information on the identification, basis or such
          title: Identification notes
        infraAuthor:
          type: string
          description: Author for the taxon below species level/infra epithet
          title: Infra author
        infraEpithet:
          type: string
          description: Taxon name for the epithet below species level
          title: Infra name
        infraRank:
          type: string
          enum:
          - ''
          - MY.infraRankSsp
          - MY.infraRankVar
          - MY.infraRankBeta
          - MY.infraRankB
          - MY.infraRankForma
          - MY.infraRankHybrid
          - MY.infraRankAnamorph
          - MY.infraRankAggregate
          - MY.infraRankAberration
          - MY.infraRankCultivar
          - MY.infraRankMorpha
          - MY.infraRankUnknown
          - MY.infraRankNothosubspecies
          - MY.infraRankCultivarGroup
          - MY.infraRankFsp
          - MY.infraRankNothovar
          description: Taxonomic level of the epithet below species level
          title: Infra rank
        infrasubspecificSubdivision:
          type: string
          description: Pathovars, serovars and other infrasubspecific subdivisions of microbes.
          title: Infrasubspecific subdivision
        isPartOf:
          type: string
          description: Which parent or larger collection this is part of.
          title: Is part of
        isTaxonGroup:
          type: boolean
          title: Is taxon group
        preferredIdentification:
          type: string
          description: This can be used to select one of the identifications as 'recommended', which is the used as default when displaying information about the specimen.
          title: Preferred identification
        sec:
          type: string
          description: Publication reference for the taxon concept, that was used in identification
          title: Taxon concept (sec)
        speciesQualifier:
          type: string
          description: Additional qualifier at species level (e.g. aff., cf., sp. n., coll.)
          title: Species qualifier
        taxon:
          type: string
          description: Taxon name
          title: Species
        taxonID:
          type: string
          description: ID for the taxon if has some other than an MX code
          title: Taxon alternative ID
        taxonRank:
          type: string
          enum:
          - ''
          - MX.superdomain
          - MX.domain
          - MX.kingdom
          - MX.subkingdom
          - MX.infrakingdom
          - MX.superphylum
          - MX.phylum
          - MX.subphylum
          - MX.infraphylum
          - MX.superdivision
          - MX.division
          - MX.subdivision
          - MX.infradivision
          - MX.superclass
          - MX.class
          - MX.subclass
          - MX.infraclass
          - MX.parvclass
          - MX.superorder
          - MX.order
          - MX.suborder
          - MX.infraorder
          - MX.parvorder
          - MX.superfamily
          - MX.family
          - MX.subfamily
          - MX.tribe
          - MX.subtribe
          - MX.supergenus
          - MX.genus
          - MX.nothogenus
          - MX.subgenus
          - MX.section
          - MX.subsection
          - MX.series
          - MX.subseries
          - MX.infragenericTaxon
          - MX.aggregate
          - MX.speciesAggregate
          - MX.species
          - MX.nothospecies
          - MX.infraspecificTaxon
          - MX.subspecificAggregate
          - MX.subspecies
          - MX.nothosubspecies
          - MX.variety
          - MX.subvariety
          - MX.form
          - MX.subform
          - MX.hybrid
          - MX.anamorph
          - MX.ecotype
          - MX.populationGroup
          - MX.intergenericHybrid
          - MX.infragenericHybrid
          - MX.cultivar
          - MX.group
          - MX.grex
          description: Taxonomic level for the identification
          title: Taxon rank
        taxonSpecifier:
          type: string
          title: Taxon specifier
        taxonURI:
          type: string
          title: Taxon URI
        taxonVerbatim:
          type: string
          description: Taxon name in original format (e.g. from the label), errors and all
          title: Taxon verbatim
        publicityRestrictions:
          type: string
          enum:
          - ''
          - MZ.publicityRestrictionsPublic
          - MZ.publicityRestrictionsProtected
          - MZ.publicityRestrictionsPrivate
          description: 'PUBLIC: all data can be published; PROTECTED: exact locality is hidden (100*100km square); PRIVATE: most of the data is hidden. Empty value means same as public.'
          title: Publicity restrictions
        sortOrder:
          type: integer
          title: sortOrder
      additionalProperties: false
      required:
      - '@context'
      - id
      - '@type'
      - associatedObservationTaxa
      - author
      - det
      - detDate
      - detMethod
      - detVerbatim
      - genusQualifier
      - identificationBasis
      - identificationNotes
      - infraAuthor
      - infraEpithet
      - infraRank
      - infrasubspecificSubdivision
      - isPartOf
      - isTaxonGroup
      - preferredIdentification
      - sec
      - speciesQualifier
      - taxon
      - taxonID
      - taxonRank
      - taxonSpecifier
      - taxonURI
      - taxonVerbatim
      - publicityRestrictions
      - sortOrder
    store-annotation:
      type: object
      properties:
        '@context':
          type: string
          title: Context for the MAN.annotation
        id:
          type: string
          title: Id for the MAN.annotation
        '@type':
          type: string
          title: Type for the MAN.annotation
        addedTags:
          type: array
          uniqueItems: false
          items:
            type: string
          minItems: 0
          title: Added tags
        annotationByPerson:
          type: string
          title: Person Id
        annotationBySystem:
          type: string
          title: System Id
        annotationClass:
          type: string
          enum:
          - ''
          - MAN.annotationClassReliable
          - MAN.annotationClassLikely
          - MAN.annotationClassNeutral
          - MAN.annotationClassSuspicious
          - MAN.annotationClassUnreliable
          - MAN.annotationClassAcknowledged
          - MAN.annotationClassSpam
          title: My evaluation of the observation
        atlasCode:
          type: string
          enum:
          - ''
          - MY.atlasCodeEnum1
          - MY.atlasCodeEnum2
          - MY.atlasCodeEnum3
          - MY.atlasCodeEnum4
          - MY.atlasCodeEnum5
          - MY.atlasCodeEnum6
          - MY.atlasCodeEnum61
          - MY.atlasCodeEnum62
          - MY.atlasCodeEnum63
          - MY.atlasCodeEnum64
          - MY.atlasCodeEnum65
          - MY.atlasCodeEnum66
          - MY.atlasCodeEnum7
          - MY.atlasCodeEnum71
          - MY.atlasCodeEnum72
          - MY.atlasCodeEnum73
          - MY.atlasCodeEnum74
          - MY.atlasCodeEnum75
          - MY.atlasCodeEnum8
          - MY.atlasCodeEnum81
          - MY.atlasCodeEnum82
          title: Overriding Breeding Index
        byRole:
          type: string
          enum:
          - ''
          - MMAN.expert
          - MMAN.basic
          - MMAN.owner
          - MMAN.formAdmin
          - MMAN.ictAdmin
          title: Annotators role
        censusAnnotation:
          type: array
          uniqueItems: false
          items:
            type: string
            enum:
            - ''
            - MAN.countError
            - MAN.innerCountError
            - MAN.otherError
          minItems: 0
          title: Census annotation
        created:
          type: string
          format: date-time
          title: Creation time
        createdTimestamp:
          type: integer
          minimum: 0
          title: Created timestamp
        deletedTimestamp:
          type: integer
          minimum: 0
          title: Deleted timestamp
        identification:
          $ref: '#/components/schemas/store-identification'
        invasiveControlEffectiveness:
          type: string
          enum:
          - ''
          - MY.invasiveControlEffectivenessFull
          - MY.invasiveControlEffectivenessPartial
          - MY.invasiveControlEffectivenessNone
          - MY.invasiveControlEffectivenessNotFound
          title: Annotation type for invasive control
        lineTransectAnnotation:
          type: array
          uniqueItems: false
          items:
            type: string
            enum:
            - ''
            - MAN.birdCountError
            - MAN.innerCountError
            - MAN.otherError
          minItems: 0
          title: Line transect annotation
        notes:
          type: string
          title: Comment
        occurrenceAtTimeOfAnnotation:
          $ref: '#/components/schemas/store-annotationOccurrence'
        opinion:
          type: string
          title: Suggested identification
        removedTags:
          type: array
          uniqueItems: false
          items:
            type: string
          minItems: 0
          title: Removed tags
        rootID:
          type: string
          title: Root ID
        targetID:
          type: string
          title: Target Id
        type:
          type: string
          enum:
          - ''
          - MAN.typeOpinion
          - MAN.typeInvasiveControlEffectiveness
          - MAN.typeUnidentifiable
          - MAN.typeAdmin
          title: My evaluation of the observation
        createdBySystem:
          type: string
          title: Deleted by system
        deleted:
          type: boolean
          title: Soft delete
        deletedByPerson:
          type: string
          title: Deleted by person
        deletedDateTime:
          type: string
          format: date-time
          title: Deleted at
      required:
      - rootID
      additionalProperties: false
  securitySchemes:
    Access_token:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Access token
    Lang:
      type: apiKey
      in: header
      name: Accept-Language
      description: Sets the 'Accept-Language' header. One of 'fi', 'sv,' 'en'. Defaults to 'en'.
    Person_token:
      type: apiKey
      in: header
      name: Person-Token