Evaluate API

Varietal Parameters

GET /api/varietalparameters/
Query Parameters:
  • limit (integer) – Number of results to return per page.

  • offset (integer) – The initial index from which to return the results.

  • parameter (integer)

  • parameter_code (string)

  • parameter_code__in (array) – Multiple values may be separated by commas.

  • variety (integer)

  • variety__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/varietalparameters/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "value": 1.0,
                "variety": 1,
                "parameter": 1,
                "parameter_code": "string",
                "created_at": "2026-09-27T15:45:05.388046",
                "updated_at": "2026-09-27T15:45:05.388046",
                "note": "string",
                "url_ref": "https://example.com"
            }
        ]
    }
    

POST /api/varietalparameters/

Example request:

POST /api/varietalparameters/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "value": 1.0,
    "variety": 1,
    "parameter": 1,
    "note": "string",
    "url_ref": "https://example.com"
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "value": 1.0,
        "variety": 1,
        "parameter": 1,
        "parameter_code": "string",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "note": "string",
        "url_ref": "https://example.com"
    }
    

GET /api/varietalparameters/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this value.

Example request:

GET /api/varietalparameters/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "value": 1.0,
        "variety": 1,
        "parameter": 1,
        "parameter_code": "string",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "note": "string",
        "url_ref": "https://example.com"
    }
    

PUT /api/varietalparameters/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this value.

Example request:

PUT /api/varietalparameters/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "value": 1.0,
    "variety": 1,
    "parameter": 1,
    "note": "string",
    "url_ref": "https://example.com"
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "value": 1.0,
        "variety": 1,
        "parameter": 1,
        "parameter_code": "string",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "note": "string",
        "url_ref": "https://example.com"
    }
    

PATCH /api/varietalparameters/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this value.

Example request:

PATCH /api/varietalparameters/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "value": 1.0,
    "variety": 1,
    "parameter": 1,
    "note": "string",
    "url_ref": "https://example.com"
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "value": 1.0,
        "variety": 1,
        "parameter": 1,
        "parameter_code": "string",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "note": "string",
        "url_ref": "https://example.com"
    }
    

DELETE /api/varietalparameters/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this value.

Status Codes:
POST /api/varietalparameters/bulk/

Bulk create varietalparameters

Create multiple objects from a JSON array.Each item follows the same schema as the normal create endpoint.

Example request:

POST /api/varietalparameters/bulk/ HTTP/1.1
Host: example.com
Content-Type: application/json

[
    {
        "value": 1.0,
        "variety": 1,
        "parameter": 1,
        "note": "string",
        "url_ref": "https://example.com"
    }
]
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "value": 1.0,
            "variety": 1,
            "parameter": 1,
            "parameter_code": "string",
            "created_at": "2026-09-27T15:45:05.388046",
            "updated_at": "2026-09-27T15:45:05.388046",
            "note": "string",
            "url_ref": "https://example.com"
        }
    ]
    

GET /api/varietalparameters/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/varietalparameters/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

GET /api/crops/
Query Parameters:
  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • layout_location (integer)

  • layout_location__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • offset (integer) – The initial index from which to return the results.

  • variety (integer)

  • variety__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/crops/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "variety": 1,
                "variety_name": "string",
                "species": 1,
                "species_common_name": "string",
                "layout": 1,
                "layout_name": "string",
                "order": 1,
                "created_at": "2026-09-27T15:45:05.388046",
                "updated_at": "2026-09-27T15:45:05.388046",
                "notes": "string"
            }
        ]
    }
    

POST /api/crops/

Example request:

POST /api/crops/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "variety": 1,
    "layout": 1,
    "order": 1,
    "notes": "string"
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

GET /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Example request:

GET /api/crops/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

PUT /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Example request:

PUT /api/crops/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "variety": 1,
    "layout": 1,
    "order": 1,
    "notes": "string"
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

PATCH /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Example request:

PATCH /api/crops/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "variety": 1,
    "layout": 1,
    "order": 1,
    "notes": "string"
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

DELETE /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Status Codes:
GET /api/crops/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/crops/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

POST /api/crops/spreadsheet_import/

Import crops from a spreadsheet file.

Supported file formats are CSV, XLS, XLSX, and ODS. The first row must contain the column names described below.

Select Validate only to check the file for errors without importing any rows.

Accepted columns:

  • variety (integer, required): the ID of the variety;

  • layout (integer, required): the ID of the layout;

  • order (integer): the index used to determine the position of the crop within the layout. Crops are ordered from top to bottom across the configured number of columns;

  • notes (text): notes related to the crop;

Example request:

POST /api/crops/spreadsheet_import/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "file": "01010101",
    "validate_only": true
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "imported_rows": 1
    }
    

GET /api/crop-layouts/
Query Parameters:
  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • offset (integer) – The initial index from which to return the results.

Example request:

GET /api/crop-layouts/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "location": 1,
                "location_name": "string",
                "name": "string",
                "description": "string",
                "ncol": 1,
                "archived_at": "2026-09-27T15:45:05.388046",
                "created_at": "2026-09-27T15:45:05.388046",
                "updated_at": "2026-09-27T15:45:05.388046"
            }
        ]
    }
    

POST /api/crop-layouts/

Example request:

POST /api/crop-layouts/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "location": 1,
    "name": "string",
    "description": "string",
    "ncol": 1
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

GET /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Example request:

GET /api/crop-layouts/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

PUT /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Example request:

PUT /api/crop-layouts/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "location": 1,
    "name": "string",
    "description": "string",
    "ncol": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

PATCH /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Example request:

PATCH /api/crop-layouts/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "location": 1,
    "name": "string",
    "description": "string",
    "ncol": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

DELETE /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Status Codes:
GET /api/fieldbooks/
Query Parameters:
  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • name__icontains (string)

  • offset (integer) – The initial index from which to return the results.

Example request:

GET /api/fieldbooks/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "name": "string",
                "layout": 1,
                "layout_name": "string",
                "location": 1,
                "location_name": "string"
            }
        ]
    }
    

POST /api/fieldbooks/

Example request:

POST /api/fieldbooks/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "string",
    "layout": 1
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

GET /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Example request:

GET /api/fieldbooks/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

PUT /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Example request:

PUT /api/fieldbooks/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "string",
    "layout": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

PATCH /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Example request:

PATCH /api/fieldbooks/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "string",
    "layout": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

DELETE /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Status Codes:
GET /api/trait-targets/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook (integer)

  • fieldbook__in (array) – Multiple values may be separated by commas.

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • offset (integer) – The initial index from which to return the results.

  • protocol (integer)

  • protocol__in (array) – Multiple values may be separated by commas.

  • trait (integer)

  • trait__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/trait-targets/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "fieldbook": 1,
                "step": 1,
                "trait": 1,
                "trait_numeric_id": 1,
                "trait_description": "string",
                "trait_display": "string",
                "protocol": 1,
                "protocol_name": "string",
                "required_count": 1
            }
        ]
    }
    

POST /api/trait-targets/

Creates a target idempotently. Returns 201 when created, or 200 when an identical target already exists.

Example request:

POST /api/trait-targets/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "fieldbook": 1,
    "trait": 1,
    "required_count": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "trait_display": "string",
        "protocol": 1,
        "protocol_name": "string",
        "required_count": 1
    }
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "trait_display": "string",
        "protocol": 1,
        "protocol_name": "string",
        "required_count": 1
    }
    

GET /api/trait-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait target.

Example request:

GET /api/trait-targets/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "trait_display": "string",
        "protocol": 1,
        "protocol_name": "string",
        "required_count": 1
    }
    

DELETE /api/trait-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait target.

Status Codes:
POST /api/trait-targets/bulk/

Creates targets atomically and idempotently. Returns 201 when at least one target is created, or 200 when all requested targets already exist. Results preserve request order.

Example request:

POST /api/trait-targets/bulk/ HTTP/1.1
Host: example.com
Content-Type: application/json

[
    {
        "crop": 1,
        "fieldbook": 1,
        "trait": 1,
        "required_count": 1
    }
]
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "trait": 1,
            "trait_numeric_id": 1,
            "trait_description": "string",
            "trait_display": "string",
            "protocol": 1,
            "protocol_name": "string",
            "required_count": 1
        }
    ]
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "trait": 1,
            "trait_numeric_id": 1,
            "trait_description": "string",
            "trait_display": "string",
            "protocol": 1,
            "protocol_name": "string",
            "required_count": 1
        }
    ]
    

GET /api/trait-targets/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/trait-targets/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

GET /api/parameter-targets/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook (integer)

  • fieldbook__in (array) – Multiple values may be separated by commas.

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • offset (integer) – The initial index from which to return the results.

  • parameter (integer)

  • parameter__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/parameter-targets/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "fieldbook": 1,
                "step": 1,
                "parameter": 1,
                "parameter_code": "string",
                "parameter_name": "string",
                "parameter_display": "string",
                "required_count": 1
            }
        ]
    }
    

POST /api/parameter-targets/

Creates a target idempotently. Returns 201 when created, or 200 when an identical target already exists.

Example request:

POST /api/parameter-targets/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "fieldbook": 1,
    "parameter": 1,
    "required_count": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "required_count": 1
    }
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "required_count": 1
    }
    

GET /api/parameter-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter target.

Example request:

GET /api/parameter-targets/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "required_count": 1
    }
    

DELETE /api/parameter-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter target.

Status Codes:
POST /api/parameter-targets/bulk/

Creates targets atomically and idempotently. Returns 201 when at least one target is created, or 200 when all requested targets already exist. Results preserve request order.

Example request:

POST /api/parameter-targets/bulk/ HTTP/1.1
Host: example.com
Content-Type: application/json

[
    {
        "crop": 1,
        "fieldbook": 1,
        "parameter": 1,
        "required_count": 1
    }
]
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "parameter": 1,
            "parameter_code": "string",
            "parameter_name": "string",
            "parameter_display": "string",
            "required_count": 1
        }
    ]
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "parameter": 1,
            "parameter_code": "string",
            "parameter_name": "string",
            "parameter_display": "string",
            "required_count": 1
        }
    ]
    

GET /api/parameter-targets/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/parameter-targets/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

GET /api/trait-observations/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook_or_layout (string)

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • offset (integer) – The initial index from which to return the results.

  • protocol (integer)

  • protocol__in (array) – Multiple values may be separated by commas.

  • recorded_at_end (string)

  • recorded_at_start (string)

  • species (integer)

  • species__in (array) – Multiple values may be separated by commas.

  • state (integer)

  • state__in (array) – Multiple values may be separated by commas.

  • trait (integer)

  • trait__in (array) – Multiple values may be separated by commas.

  • variety (integer)

  • variety__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/trait-observations/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "crop_display": "string",
                "layout": 1,
                "layout_name": "string",
                "location": 1,
                "location_name": "string",
                "variety": 1,
                "variety_name": "string",
                "species": 1,
                "species_common_name": "string",
                "step": 1,
                "step_display": "string",
                "state": 1,
                "state_display": "string",
                "trait": 1,
                "trait_numeric_id": 1,
                "trait_description": "string",
                "protocol": 1,
                "protocol_name": "string",
                "recorded_at": "2026-09-27T15:45:05.388046",
                "created_by": 1,
                "created_by_display": "string",
                "notes": "string"
            }
        ]
    }
    

POST /api/trait-observations/

Example request:

POST /api/trait-observations/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "state": 1,
    "recorded_at": "2026-09-27T15:45:05.388046",
    "notes": "string"
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "state": 1,
        "state_display": "string",
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "protocol": 1,
        "protocol_name": "string",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

GET /api/trait-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait observation.

Example request:

GET /api/trait-observations/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "state": 1,
        "state_display": "string",
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "protocol": 1,
        "protocol_name": "string",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

DELETE /api/trait-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait observation.

Status Codes:
GET /api/trait-observations/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/trait-observations/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

GET /api/parameter-observations/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook_or_layout (string)

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • offset (integer) – The initial index from which to return the results.

  • parameter (integer)

  • parameter__in (array) – Multiple values may be separated by commas.

  • parameter_date (string)

  • parameter_date_end (string)

  • parameter_date_start (string)

  • parameter_value (number)

  • recorded_at_end (string)

  • recorded_at_start (string)

  • species (integer)

  • species__in (array) – Multiple values may be separated by commas.

  • value (number)

  • value_max (number)

  • value_min (number)

  • variety (integer)

  • variety__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/parameter-observations/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "crop_display": "string",
                "layout": 1,
                "layout_name": "string",
                "location": 1,
                "location_name": "string",
                "variety": 1,
                "variety_name": "string",
                "species": 1,
                "species_common_name": "string",
                "step": 1,
                "step_display": "string",
                "parameter": 1,
                "parameter_code": "string",
                "parameter_name": "string",
                "parameter_display": "string",
                "parameter_value": "string",
                "parameter_date": "2026-09-27",
                "recorded_at": "2026-09-27T15:45:05.388046",
                "created_by": 1,
                "created_by_display": "string",
                "notes": "string"
            }
        ]
    }
    

POST /api/parameter-observations/

Example request:

POST /api/parameter-observations/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "parameter": 1,
    "parameter_value": "string",
    "parameter_date": "2026-09-27",
    "recorded_at": "2026-09-27T15:45:05.388046",
    "notes": "string"
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "parameter_value": "string",
        "parameter_date": "2026-09-27",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

GET /api/parameter-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter observation.

Example request:

GET /api/parameter-observations/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "parameter_value": "string",
        "parameter_date": "2026-09-27",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

DELETE /api/parameter-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter observation.

Status Codes:
GET /api/parameter-observations/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/parameter-observations/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

Crops

GET /api/crops/
Query Parameters:
  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • layout_location (integer)

  • layout_location__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • offset (integer) – The initial index from which to return the results.

  • variety (integer)

  • variety__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/crops/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "variety": 1,
                "variety_name": "string",
                "species": 1,
                "species_common_name": "string",
                "layout": 1,
                "layout_name": "string",
                "order": 1,
                "created_at": "2026-09-27T15:45:05.388046",
                "updated_at": "2026-09-27T15:45:05.388046",
                "notes": "string"
            }
        ]
    }
    

POST /api/crops/

Example request:

POST /api/crops/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "variety": 1,
    "layout": 1,
    "order": 1,
    "notes": "string"
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

GET /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Example request:

GET /api/crops/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

PUT /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Example request:

PUT /api/crops/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "variety": 1,
    "layout": 1,
    "order": 1,
    "notes": "string"
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

PATCH /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Example request:

PATCH /api/crops/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "variety": 1,
    "layout": 1,
    "order": 1,
    "notes": "string"
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "layout": 1,
        "layout_name": "string",
        "order": 1,
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046",
        "notes": "string"
    }
    

DELETE /api/crops/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop.

Status Codes:
GET /api/crops/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/crops/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

POST /api/crops/spreadsheet_import/

Import crops from a spreadsheet file.

Supported file formats are CSV, XLS, XLSX, and ODS. The first row must contain the column names described below.

Select Validate only to check the file for errors without importing any rows.

Accepted columns:

  • variety (integer, required): the ID of the variety;

  • layout (integer, required): the ID of the layout;

  • order (integer): the index used to determine the position of the crop within the layout. Crops are ordered from top to bottom across the configured number of columns;

  • notes (text): notes related to the crop;

Example request:

POST /api/crops/spreadsheet_import/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "file": "01010101",
    "validate_only": true
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "imported_rows": 1
    }
    

Crop layouts

GET /api/crop-layouts/
Query Parameters:
  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • offset (integer) – The initial index from which to return the results.

Example request:

GET /api/crop-layouts/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "location": 1,
                "location_name": "string",
                "name": "string",
                "description": "string",
                "ncol": 1,
                "archived_at": "2026-09-27T15:45:05.388046",
                "created_at": "2026-09-27T15:45:05.388046",
                "updated_at": "2026-09-27T15:45:05.388046"
            }
        ]
    }
    

POST /api/crop-layouts/

Example request:

POST /api/crop-layouts/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "location": 1,
    "name": "string",
    "description": "string",
    "ncol": 1
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

GET /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Example request:

GET /api/crop-layouts/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

PUT /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Example request:

PUT /api/crop-layouts/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "location": 1,
    "name": "string",
    "description": "string",
    "ncol": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

PATCH /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Example request:

PATCH /api/crop-layouts/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "location": 1,
    "name": "string",
    "description": "string",
    "ncol": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "location": 1,
        "location_name": "string",
        "name": "string",
        "description": "string",
        "ncol": 1,
        "archived_at": "2026-09-27T15:45:05.388046",
        "created_at": "2026-09-27T15:45:05.388046",
        "updated_at": "2026-09-27T15:45:05.388046"
    }
    

DELETE /api/crop-layouts/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this crop layout.

Status Codes:

Fieldbooks

GET /api/fieldbooks/
Query Parameters:
  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • name__icontains (string)

  • offset (integer) – The initial index from which to return the results.

Example request:

GET /api/fieldbooks/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "name": "string",
                "layout": 1,
                "layout_name": "string",
                "location": 1,
                "location_name": "string"
            }
        ]
    }
    

POST /api/fieldbooks/

Example request:

POST /api/fieldbooks/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "string",
    "layout": 1
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

GET /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Example request:

GET /api/fieldbooks/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

PUT /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Example request:

PUT /api/fieldbooks/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "string",
    "layout": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

PATCH /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Example request:

PATCH /api/fieldbooks/{id}/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "name": "string",
    "layout": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "name": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string"
    }
    

DELETE /api/fieldbooks/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this field book.

Status Codes:

Trait targets

GET /api/trait-targets/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook (integer)

  • fieldbook__in (array) – Multiple values may be separated by commas.

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • offset (integer) – The initial index from which to return the results.

  • protocol (integer)

  • protocol__in (array) – Multiple values may be separated by commas.

  • trait (integer)

  • trait__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/trait-targets/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "fieldbook": 1,
                "step": 1,
                "trait": 1,
                "trait_numeric_id": 1,
                "trait_description": "string",
                "trait_display": "string",
                "protocol": 1,
                "protocol_name": "string",
                "required_count": 1
            }
        ]
    }
    

POST /api/trait-targets/

Creates a target idempotently. Returns 201 when created, or 200 when an identical target already exists.

Example request:

POST /api/trait-targets/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "fieldbook": 1,
    "trait": 1,
    "required_count": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "trait_display": "string",
        "protocol": 1,
        "protocol_name": "string",
        "required_count": 1
    }
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "trait_display": "string",
        "protocol": 1,
        "protocol_name": "string",
        "required_count": 1
    }
    

GET /api/trait-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait target.

Example request:

GET /api/trait-targets/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "trait_display": "string",
        "protocol": 1,
        "protocol_name": "string",
        "required_count": 1
    }
    

DELETE /api/trait-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait target.

Status Codes:
POST /api/trait-targets/bulk/

Creates targets atomically and idempotently. Returns 201 when at least one target is created, or 200 when all requested targets already exist. Results preserve request order.

Example request:

POST /api/trait-targets/bulk/ HTTP/1.1
Host: example.com
Content-Type: application/json

[
    {
        "crop": 1,
        "fieldbook": 1,
        "trait": 1,
        "required_count": 1
    }
]
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "trait": 1,
            "trait_numeric_id": 1,
            "trait_description": "string",
            "trait_display": "string",
            "protocol": 1,
            "protocol_name": "string",
            "required_count": 1
        }
    ]
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "trait": 1,
            "trait_numeric_id": 1,
            "trait_description": "string",
            "trait_display": "string",
            "protocol": 1,
            "protocol_name": "string",
            "required_count": 1
        }
    ]
    

GET /api/trait-targets/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/trait-targets/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

Parameter targets

GET /api/parameter-targets/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook (integer)

  • fieldbook__in (array) – Multiple values may be separated by commas.

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • offset (integer) – The initial index from which to return the results.

  • parameter (integer)

  • parameter__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/parameter-targets/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "fieldbook": 1,
                "step": 1,
                "parameter": 1,
                "parameter_code": "string",
                "parameter_name": "string",
                "parameter_display": "string",
                "required_count": 1
            }
        ]
    }
    

POST /api/parameter-targets/

Creates a target idempotently. Returns 201 when created, or 200 when an identical target already exists.

Example request:

POST /api/parameter-targets/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "fieldbook": 1,
    "parameter": 1,
    "required_count": 1
}
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "required_count": 1
    }
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "required_count": 1
    }
    

GET /api/parameter-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter target.

Example request:

GET /api/parameter-targets/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "fieldbook": 1,
        "step": 1,
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "required_count": 1
    }
    

DELETE /api/parameter-targets/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter target.

Status Codes:
POST /api/parameter-targets/bulk/

Creates targets atomically and idempotently. Returns 201 when at least one target is created, or 200 when all requested targets already exist. Results preserve request order.

Example request:

POST /api/parameter-targets/bulk/ HTTP/1.1
Host: example.com
Content-Type: application/json

[
    {
        "crop": 1,
        "fieldbook": 1,
        "parameter": 1,
        "required_count": 1
    }
]
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "parameter": 1,
            "parameter_code": "string",
            "parameter_name": "string",
            "parameter_display": "string",
            "required_count": 1
        }
    ]
    

  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    [
        {
            "id": 1,
            "crop": 1,
            "fieldbook": 1,
            "step": 1,
            "parameter": 1,
            "parameter_code": "string",
            "parameter_name": "string",
            "parameter_display": "string",
            "required_count": 1
        }
    ]
    

GET /api/parameter-targets/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/parameter-targets/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

Trait observations

GET /api/trait-observations/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook_or_layout (string)

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • offset (integer) – The initial index from which to return the results.

  • protocol (integer)

  • protocol__in (array) – Multiple values may be separated by commas.

  • recorded_at_end (string)

  • recorded_at_start (string)

  • species (integer)

  • species__in (array) – Multiple values may be separated by commas.

  • state (integer)

  • state__in (array) – Multiple values may be separated by commas.

  • trait (integer)

  • trait__in (array) – Multiple values may be separated by commas.

  • variety (integer)

  • variety__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/trait-observations/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "crop_display": "string",
                "layout": 1,
                "layout_name": "string",
                "location": 1,
                "location_name": "string",
                "variety": 1,
                "variety_name": "string",
                "species": 1,
                "species_common_name": "string",
                "step": 1,
                "step_display": "string",
                "state": 1,
                "state_display": "string",
                "trait": 1,
                "trait_numeric_id": 1,
                "trait_description": "string",
                "protocol": 1,
                "protocol_name": "string",
                "recorded_at": "2026-09-27T15:45:05.388046",
                "created_by": 1,
                "created_by_display": "string",
                "notes": "string"
            }
        ]
    }
    

POST /api/trait-observations/

Example request:

POST /api/trait-observations/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "state": 1,
    "recorded_at": "2026-09-27T15:45:05.388046",
    "notes": "string"
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "state": 1,
        "state_display": "string",
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "protocol": 1,
        "protocol_name": "string",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

GET /api/trait-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait observation.

Example request:

GET /api/trait-observations/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "state": 1,
        "state_display": "string",
        "trait": 1,
        "trait_numeric_id": 1,
        "trait_description": "string",
        "protocol": 1,
        "protocol_name": "string",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

DELETE /api/trait-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this trait observation.

Status Codes:
GET /api/trait-observations/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/trait-observations/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.

Parameter observations

GET /api/parameter-observations/
Query Parameters:
  • crop (integer)

  • crop__in (array) – Multiple values may be separated by commas.

  • fieldbook_or_layout (string)

  • layout (integer)

  • layout__in (array) – Multiple values may be separated by commas.

  • limit (integer) – Number of results to return per page.

  • location (integer)

  • location__in (array) – Multiple values may be separated by commas.

  • offset (integer) – The initial index from which to return the results.

  • parameter (integer)

  • parameter__in (array) – Multiple values may be separated by commas.

  • parameter_date (string)

  • parameter_date_end (string)

  • parameter_date_start (string)

  • parameter_value (number)

  • recorded_at_end (string)

  • recorded_at_start (string)

  • species (integer)

  • species__in (array) – Multiple values may be separated by commas.

  • value (number)

  • value_max (number)

  • value_min (number)

  • variety (integer)

  • variety__in (array) – Multiple values may be separated by commas.

Example request:

GET /api/parameter-observations/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "count": 1,
        "next": "https://example.com",
        "previous": "https://example.com",
        "results": [
            {
                "id": 1,
                "crop": 1,
                "crop_display": "string",
                "layout": 1,
                "layout_name": "string",
                "location": 1,
                "location_name": "string",
                "variety": 1,
                "variety_name": "string",
                "species": 1,
                "species_common_name": "string",
                "step": 1,
                "step_display": "string",
                "parameter": 1,
                "parameter_code": "string",
                "parameter_name": "string",
                "parameter_display": "string",
                "parameter_value": "string",
                "parameter_date": "2026-09-27",
                "recorded_at": "2026-09-27T15:45:05.388046",
                "created_by": 1,
                "created_by_display": "string",
                "notes": "string"
            }
        ]
    }
    

POST /api/parameter-observations/

Example request:

POST /api/parameter-observations/ HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "crop": 1,
    "parameter": 1,
    "parameter_value": "string",
    "parameter_date": "2026-09-27",
    "recorded_at": "2026-09-27T15:45:05.388046",
    "notes": "string"
}
Status Codes:
  • 201 Created –

    Example response:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "parameter_value": "string",
        "parameter_date": "2026-09-27",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

GET /api/parameter-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter observation.

Example request:

GET /api/parameter-observations/{id}/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK –

    Example response:

    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "id": 1,
        "crop": 1,
        "crop_display": "string",
        "layout": 1,
        "layout_name": "string",
        "location": 1,
        "location_name": "string",
        "variety": 1,
        "variety_name": "string",
        "species": 1,
        "species_common_name": "string",
        "step": 1,
        "step_display": "string",
        "parameter": 1,
        "parameter_code": "string",
        "parameter_name": "string",
        "parameter_display": "string",
        "parameter_value": "string",
        "parameter_date": "2026-09-27",
        "recorded_at": "2026-09-27T15:45:05.388046",
        "created_by": 1,
        "created_by_display": "string",
        "notes": "string"
    }
    

DELETE /api/parameter-observations/{id}/
Parameters:
  • id (integer) – A unique integer value identifying this parameter observation.

Status Codes:
GET /api/parameter-observations/export-jsonl/

Export the full filtered result set as newline-delimited JSON.

Example request:

GET /api/parameter-observations/export-jsonl/ HTTP/1.1
Host: example.com
Status Codes:
  • 200 OK – Newline-delimited JSON stream.