Process Ingestion Assets
Apply tags or trigger metric computation on existing ingested assets.
Filter previously ingested assets using query parameters and either apply tags, trigger batch metric processing (deforestation, emissions, biodiversity, water stress), or both. This endpoint does not upload new data โ it operates on assets that have already been ingested.
โถUse Cases
- Tag a subset of ingested assets by filtering on source data fields (e.g. tag all assets from a specific country).
- Trigger deforestation or emissions analysis on previously uploaded data.
- Re-process assets with different metrics or a different end date.
โถFilters
Use filter[field]=condition:value to select which assets to process. See Query Parameters for full syntax. A request with no narrowing filter must declare "scope": "organization" in the body, or it returns 400.
filter[assets.task_id]=eq:<uuid>โ scope to a specific ingestion taskfilter[normalised_data.location_type]=eq:facilityโ filter by location typefilter[normalised_data.commodity_type]=eq:palmโ filter by commodityfilter[assessments.core.confidence_level]=eq:highโ filter by core confidence levelfilter[assessments.core.confidence_score]=gte:0.8โ filter by minimum core confidence scorefilter[match_method]=eq:addedโ filter by match methodfilter[source_file]=eq:locations.csvโ filter by original file namefilter[assets.data.CITY]=eq:Londonโ filter by source data fields using dot-notationfilter[id]=in:<uuid1>,<uuid2>โ filter specific entity IDsfilter[eudr.product_type]=eq:timberโ filter by EUDR product type
โถHow it works
- Tags only (200 OK) โ Tags are applied synchronously. The response is immediate.
- With metrics (202 Accepted) โ Batch processing is triggered asynchronously. Use
links.statusto poll for progress viaGET /ingestions/{id}. - With assessments (200 OK) โ ingestion-scope assessment rows are dispatched synchronously over the filtered set; the response returns once they're persisted. See Enabling assessments below.
- Filters โ Use
filter[...]query parameters to select which assets to process. Without a narrowing filter the run covers every asset the organization owns and bills for all of them, so it must be declared explicitly โ see below.
At least one of metrics, tags, or a truthy assessments.include_* flag must be supplied โ a body with none of these returns 400.
No filter? Add "scope": "organization" to the body to confirm an org-wide run โ it bills for every asset the organization owns. Omitting both returns 400. Pairing a narrowing filter with scope: "organization" also returns 400, since the two contradict each other. filter[organization_id] is not narrowing โ it selects the organization you already have, so it still needs the scope declaration and may be sent alongside it.
โถFast path: auto-create an audit trail
Set create_audit_trail: true to chain reprocess โ deforestation โ EUDR
audit-trail record in a single request โ the split-flow counterpart of the
same opt-in on Ingest Assets (POST). Use it when you
uploaded first, reviewed, and now kick off deforestation via this PUT: once the
metrics run reaches a successful terminal (completed /
completed_with_errors), the worker dispatches the same create task as
POST /regulations/eudr/audit-trail,
with no separate call.
| Field | Type | Required | Description |
|---|---|---|---|
create_audit_trail | boolean | No | When true, auto-create an EUDR audit-trail record once this metrics run finishes. Requires metrics to include deforestation (else 400). |
create_audit_trail_pdf | boolean | No | Pre-render the audit-trail PDF at record creation. Defaults to true; set false to render on demand at first GET. Ignored unless create_audit_trail is true. |
audit_trail_operator | object | No | Operator block stamped onto the record. Same shape as the operator block on POST /regulations/eudr/audit-trail. Only valid when create_audit_trail: true (else 400). Omitted โ the org's default operator. |
audit_trail_commodity | object | No | Commodity block stamped onto the record. hs_code may be omitted; it is never defaulted and a blank one blocks submission. Only valid when create_audit_trail: true (else 400). Omitted โ a NULL commodity block (set later via PATCH). |
Scope. The record covers exactly the task this PUT acts on:
- A
filter[assets.task_id]=eq:<uuid>PUT reuses that task, so the record covers the whole task's plots. - Any other filter creates a new task holding just the filtered subset, so the record covers precisely that subset.
Inherit-with-override (on a filter[assets.task_id] PUT). If the original
upload already stamped audit-trail params, this PUT inherits them and
overrides only the keys you pass โ send create_audit_trail: true alone to
reuse the upload's operator/commodity, or pass a block to override it.
Fires once. The dispatch is guarded (audit_trail_dispatched). If the
upload already created the record, this PUT does not create a second or
mutate the existing one โ edit it via
PATCH /regulations/eudr/audit-trail/:recordId. The opt-in only creates when
no record exists yet.
Follow it. Poll links.status (GET /ingestions/{id}); once the task
carries audit_trail_task_id, poll that
audit-trail task
for the created record id. A failed run creates nothing.
โถEnabling assessments
This endpoint accepts the same ingestion-scope assessments block as Ingest Assets (POST). The flags it honours are:
include_core(defaultfalse) โ add the core confidence/flags assessment to locations resolved by the filter.include_hazard(defaultfalse) โ run natural-hazard risk scoring.include_infrastructure(defaultfalse) โ run infrastructure nearest-feature enrichments (nearest_water_km/nearest_port_km/nearest_road_kmplus port metadata, subject to thecheck_*toggles).
The runner is cache-aware: an existing assessment of the requested type for a location short-circuits to granting visibility (no assessment call).
PUT honours include_core post-upload โ set { "assessments": { "include_core": true } } to add the core confidence/flags assessment to locations resolved by the filter. The runner is cache-aware: an existing core assessment for the location short-circuits to granting visibility (no assessment call).
The most common use of this endpoint is adding core, hazard, or infrastructure to locations that were uploaded without those assessments โ for example, after a no-validation upload (the new opt-in default).
Unlike the POST /ingestions/assets endpoint, PUT does not re-run normalisation: locations resolved by the filter were already staged at upload time. PUT only dispatches the requested validation groups for those locations.
See docs/assessment-fields.md for the field-by-field reference, and Ingest Assets ยง Enabling assessments for the full table of include_* and check_* flags.
โถCache reuse across orgs
When the same location has already been assessed for another organisation, this endpoint reuses the existing assessment: no assessment call is made and your org is simply granted visibility. Cache misses fall through to a fresh assessment call and one new assessment per location.
The check_* access flags have a finer cache rule. They are recorded as sub_options on both the core and infrastructure assessments (see Ingest Assets ยง Access checks) โ a cached assessment covers a request only if every truthy access flag in the request is also truthy on the cached assessment. A request that asks for an access check not previously run is a cache miss and refreshes the affected assessments so both old and new access flags are covered.
โถResolution rules
Identical to POST: each include_* flag is independent. Sub-options (check_water_access, check_port_proximity, check_road_access) are honoured against the matching group when one is requested in the same body. The runner does not auto-fall-back to anything โ you must explicitly opt into at least one group (or a metric / tag), otherwise the request is treated as "no work" and rejected at the at-least-one-of validation.
โถDisabling assessments
Omit the assessments block (or set every include_* to false) to dispatch no add-on work. Already-existing assessments are not touched โ there is no "remove assessment" operation through this endpoint. To revoke visibility for a specific org, contact support tooling.
Required scope:
ingestions:write