Soil Property

Manage standalone lab soil-property records — bulk density, soil organic carbon, and related measurements.

This page covers only what's specific to soil property. For the base URL, authentication, and response envelope, see SatMRV Overview.

This is a lower-traffic, standalone resource. Most integrations should instead use the soil-property action on a Sample (see Samples), since that keeps the soil-property record tied to its sample automatically. Use this endpoint only if you need to manage soil-property records independently of a specific sample.

Endpoints

MethodPathPurpose
GETstratification/sample-plan/sample-point-soil-property/List records
POSTstratification/sample-plan/sample-point-soil-property/Create a record
GETstratification/sample-plan/sample-point-soil-property/{id}/Retrieve a record
PUT/PATCHstratification/sample-plan/sample-point-soil-property/{id}/Update a record
DELETEstratification/sample-plan/sample-point-soil-property/{id}/Delete a record

Auth

Send your access token as a bearer token, as described in SatMRV Overview.

Required permission per action:

ActionRequired permission
List / Retrievesoil_property.view
Createsoil_property.create
Update / Partial updatesoil_property.edit
Destroysoil_property.delete

A request lacking the required permission gets HTTP 403 with a structured body:

{
  "code": "permission_denied",
  "message": "You do not have permission to perform this action.",
  "details": {
    "required_permission": "soil_property.create",
    "action": "create",
    "resource": "soil_property"
  }
}

Request fields

FieldTypeRequiredNotes
bulk_densityfloatYes
socfloatYesSoil organic carbon
clayfloatNoNullable
sandfloatNoNullable
siltfloatNoNullable
humusfloatNoNullable
p2o5floatNoNullable
k2ofloatNoNullable
mgfloatNoNullable
ph_soilfloatNoNullable
ph_h2ofloatNoNullable

List/retrieve responses on this endpoint currently include a duplicated pair of fields for the linked sample point (both a sample_point nested object and a separate sample_point_id, appearing twice in the raw response due to how the underlying serializer is built). Don't assume the response shape is minimal — verify the exact fields your integration reads against a live response rather than assuming only what's listed above.

Status codes

StatusTrigger
200List, retrieve, update.
201Record created.
204Record deleted.
400Validation failure — e.g. missing bulk_density/soc.
403Missing required permission.
404Not found.

Example

Create

curl -X POST https://backend.spacenus.de/api/v1.2/sat-mrv/stratification/sample-plan/sample-point-soil-property/ \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "bulk_density": 1.35,
    "soc": 2.1,
    "clay": 18.5,
    "ph_soil": 6.4
  }'

Response:

{
  "status": "success",
  "message": "Success",
  "data": {
    "id": 501,
    "bulk_density": 1.35,
    "soc": 2.1,
    "clay": 18.5,
    "sand": null,
    "silt": null,
    "humus": null,
    "p2o5": null,
    "k2o": null,
    "mg": null,
    "ph_soil": 6.4,
    "ph_h2o": null
  }
}