University of Helsinki Trait API

The Trait API from University of Helsinki — 32 operation(s) for trait.

Operations 44

GET /trait/search Search traits #
GET /trait/search/download Download traits #
GET /trait/rows/{id} Get trait input row by id #
PUT /trait/rows/{id} Update an input row #
DELETE /trait/rows/{id} Delete an input row #
POST /trait/rows/validate Validate adding a new input row #
POST /trait/rows/validate-update/{id} Validate update of an input row #
POST /trait/rows/validate-delete/{id} Validate deleting input row #
POST /trait/rows Insert new input row #
POST /trait/rows/tsv2rows/validate Validate TSV to InputRows conversion #
POST /trait/rows/tsv2rows Convert TSV lines to InputRows #
POST /trait/rows/multi/validate Validate adding a batch of input rows #
POST /trait/rows/multi Store a batch of input rows #
GET /trait/rows/search Search input rows #
GET /trait/datasets Get all datasets #
POST /trait/datasets Insert new dataset #
GET /trait/datasets/{id} Get dataset by id #
PUT /trait/datasets/{id} Update a dataset #
DELETE /trait/datasets/{id} Delete a dataset #
POST /trait/datasets/validate Validate adding a new dataset #
POST /trait/datasets/validate-update/{id} Validate dataset update #
POST /trait/datasets/validate-delete/{id} Validate deleting a dataset #
GET /trait/dataset-permissions Get users all permissions (defined by personToken or - in absence - of the… #
GET /trait/dataset-permissions/{datasetId} Get permissions of a dataset #
PUT /trait/dataset-permissions/{datasetId} Update permissions of a dataset #
POST /trait/dataset-permissions/validate-update/{datasetId} Validate permission submission #
GET /trait/trait-groups Get all trait groups #
POST /trait/trait-groups Insert new trait group #
GET /trait/trait-groups/{id} Get trait group by id #
PUT /trait/trait-groups/{id} Update a trait group #
DELETE /trait/trait-groups/{id} Delete a trait group #
POST /trait/trait-groups/validate Validate adding a new trait group #
POST /trait/trait-groups/validate-update/{id} Validate trait group update #
POST /trait/trait-groups/validate-delete/{id} Validate deleting a trait group #
GET /trait/traits Get all traits #
POST /trait/traits Insert new trait #
GET /trait/traits/{id} Get trait by id #
PUT /trait/traits/{id} Update a trait #
DELETE /trait/traits/{id} Delete a trait #
POST /trait/traits/validate Validate adding a new trait #
POST /trait/traits/validate-update/{id} Validate trait update #
POST /trait/traits/validate-delete/{id} Validate deleting a trait #
GET /trait/units Get all units of measurement #
GET /trait/units/{id} Get unit of measurement by id #

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-trait-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-trait-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Laji Trait API
  description: '## Authentication


    This API requires an **Access Token**.'
  version: '1'
  contact: {}
servers:
- url: https://api.laji.fi
tags:
- name: Trait
paths:
  /trait/search:
    get:
      summary: Search traits
      description: Search traits from all published datasets.
      parameters:
      - name: pageSize
        in: query
        required: false
        description: Page size
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 10000
      - name: page
        in: query
        required: false
        description: Page number
        schema:
          type: integer
          default: 1
          minimum: 1
      - name: searchParams
        in: query
        required: false
        description: 'A set of key-value pairs used to filter search results.

          Each key represents a field name in the result model, and its corresponding value specifies the criteria that must be met for the records to match.

          If field is given multiple time as parameter, at least one of the given values must match.

          Example: subject.type=TDF.typeTaxon&trait.id=TDF.1&trait.id=TDF.2&subjectFinBIFTaxon.higherTaxa.kingdom=Animalia'
        schema:
          type: object
          additionalProperties:
            type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPISearchResponse'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: getTraitSearch
      x-operation-id-source: derived
  /trait/search/download:
    get:
      summary: Download traits
      description: Search traits from all published datasets and download results as Zipped TSV file. Returns maximum of 1000000 rows.
      parameters:
      - name: searchParams
        in: query
        required: false
        description: 'A set of key-value pairs used to filter search results.

          Each key represents a field name in the result model, and its corresponding value specifies the criteria that must be met for the records to match.

          If field is given multiple time as parameter, at least one of the given values must match.

          Example: subject.type=TDF.typeTaxon&trait.id=TDF.1&trait.id=TDF.2&subjectFinBIFTaxon.higherTaxa.kingdom=Animalia'
        schema:
          type: object
          additionalProperties:
            type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/zip:
              schema:
                type: string
                format: binary
                examples:
                - Single TSV file ZIP compressed
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: getTraitSearchDownload
      x-operation-id-source: derived
  /trait/rows/{id}:
    get:
      summary: Get trait input row by id
      parameters:
      - name: id
        in: path
        required: true
        description: Id of the InputRow
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendInputRow'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: getTraitRowsById
      x-operation-id-source: derived
    put:
      summary: Update an input row
      parameters:
      - name: id
        in: path
        required: true
        description: Id of the InputRow
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LajiBackendInputRow'
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendInputRow'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoints before calling upsert operations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: putTraitRowsById
      x-operation-id-source: derived
    delete:
      summary: Delete an input row
      parameters:
      - name: id
        in: path
        required: true
        description: Id
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIOKResponse'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoints before calling upsert operations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: deleteTraitRowsById
      x-operation-id-source: derived
  /trait/rows/validate:
    post:
      summary: Validate adding a new input row
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LajiBackendInputRow'
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendValidationResponse'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRowsValidate
      x-operation-id-source: derived
  /trait/rows/validate-update/{id}:
    post:
      summary: Validate update of an input row
      parameters:
      - name: id
        in: path
        required: true
        description: Id of the InputRow
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LajiBackendInputRow'
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendValidationResponse'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRowsValidateUpdateById
      x-operation-id-source: derived
  /trait/rows/validate-delete/{id}:
    post:
      summary: Validate deleting input row
      parameters:
      - name: id
        in: path
        required: true
        description: Id
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendValidationResponse'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRowsValidateDeleteById
      x-operation-id-source: derived
  /trait/rows:
    post:
      summary: Insert new input row
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LajiBackendInputRow'
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendInputRow'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoints before calling upsert operations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRows
      x-operation-id-source: derived
  /trait/rows/tsv2rows/validate:
    post:
      summary: Validate TSV to InputRows conversion
      requestBody:
        required: true
        content:
          text/tab-separated-values:
            schema:
              type: string
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      - name: datasetId
        in: query
        required: true
        description: Id if the dataset
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitTSVValidationResponse'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRowsTsv2rowsValidate
      x-operation-id-source: derived
  /trait/rows/tsv2rows:
    post:
      summary: Convert TSV lines to InputRows
      requestBody:
        required: true
        content:
          text/tab-separated-values:
            schema:
              type: string
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      - name: datasetId
        in: query
        required: true
        description: Id if the dataset
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LajiBackendInputRow'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoint before doing conversion.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRowsTsv2rows
      x-operation-id-source: derived
  /trait/rows/multi/validate:
    post:
      summary: Validate adding a batch of input rows
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/LajiBackendInputRow'
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitMultiValidationResponse'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRowsMultiValidate
      x-operation-id-source: derived
  /trait/rows/multi:
    post:
      summary: Store a batch of input rows
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/LajiBackendInputRow'
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIOKResponse'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoint before doing insert.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitRowsMulti
      x-operation-id-source: derived
  /trait/rows/search:
    get:
      summary: Search input rows
      description: Search stored traits of a single dataset. Requires permissions to the dataset.
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      - name: datasetId
        in: query
        required: true
        description: Id if the dataset
        schema:
          type: string
      - name: pageSize
        in: query
        required: false
        description: Page size
        schema:
          type: integer
          default: 10
          minimum: 1
          maximum: 1000
      - name: searchParams
        in: query
        required: false
        description: 'A set of key-value pairs used to filter search results.

          Each key represents a field name in the result model, and its corresponding value specifies the criteria that must be met for the records to match.

          If field is given multiple time as parameter, at least one of the given values must match.

          Example: subject.type=TDF.typeTaxon&traits.statisticalMethod=TDF.statisticalMethodSD&traits.statisticalMethod=TDF.statisticalMethodAvg'
        schema:
          type: object
          additionalProperties:
            type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LajiBackendInputRow'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: getTraitRowsSearch
      x-operation-id-source: derived
  /trait/datasets:
    get:
      summary: Get all datasets
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LajiBackendDataset'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: getTraitDatasets
      x-operation-id-source: derived
    post:
      summary: Insert new dataset
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LajiBackendDataset'
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendDataset'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoints before calling upsert operations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitDatasets
      x-operation-id-source: derived
  /trait/datasets/{id}:
    get:
      summary: Get dataset by id
      parameters:
      - name: id
        in: path
        required: true
        description: Id of the Dataset
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendDataset'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: getTraitDatasetsById
      x-operation-id-source: derived
    put:
      summary: Update a dataset
      parameters:
      - name: id
        in: path
        required: true
        description: Id of the Dataset
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LajiBackendDataset'
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendDataset'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoints before calling upsert operations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: putTraitDatasetsById
      x-operation-id-source: derived
    delete:
      summary: Delete a dataset
      parameters:
      - name: id
        in: path
        required: true
        description: Id
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIOKResponse'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '404':
          description: No entity with the given id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '422':
          description: Validation failure - should call validation endpoints before calling upsert operations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: deleteTraitDatasetsById
      x-operation-id-source: derived
  /trait/datasets/validate:
    post:
      summary: Validate adding a new dataset
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LajiBackendDataset'
      parameters:
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      responses:
        '200':
          description: Succesful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendValidationResponse'
        '400':
          description: Illegal arguments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '403':
          description: No access / Invalid authorization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
        '500':
          description: Unknown failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LajiBackendTraitAPIError'
      tags:
      - Trait
      security:
      - Access token: []
      - Lang: []
      - Person token: []
      operationId: postTraitDatasetsValidate
      x-operation-id-source: derived
  /trait/datasets/validate-update/{id}:
    post:
      summary: Validate dataset update
      parameters:
      - name: id
        in: path
        required: true
        description: Id of the Dataset
        schema:
          type: string
      - name: Person-Token
        in: header
        required: false
        description: Identity of a logged in user
        schema:
          type: string
      requestBody:
        required: true
        content:


# --- truncated at 32 KB (108 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/university-of-helsinki/refs/heads/main/openapi/university-of-helsinki-trait-api-openapi.yml