compliance.status for the overall assessment and the individual runoff and drift results to understand why it received that status.
A remaining drift buffer can coexist with a compliant application setup. Drift can be met when the supplied conditions satisfy the configured rules and spraying stays within the calculated treatable area. Runoff can be met through sufficient eligible points or an EPA runoff exemption saved in the portal.
This guide describes the API’s determination. Its scope is the supplied inputs, configured requirements, selected mitigations, and available field information. A result does not verify actual spray tracks or resolve conditions that appear as outstanding issues.
Request success, processing, and compliance
These fields answer different questions:
For bulk processing, an item’s
status: "succeeded" means processing returned a result. Read that item’s result.compliance to determine application compliance. Different items can have different outcomes within a successfully completed job.
How the determination works
- Identify requirements. Resolve the submitted products and application method, then applicable Pesticide Use Limitation Area (PULA) requirements. Each product’s matching PULAs and limitation text are returned under
products[].pulas[].limitations. Runoff and drift requirements from a limitation are scored automatically; any other condition in the text needs review, which you can confirm in Bulletins Live! Two (BLT), so a returned limitation addsLIMITATIONS_REVIEW_REQUIRED. See product PULA limitations. - Assess runoff. Determine the point target for each runoff system, apply eligible credits, and honor any saved EPA runoff exemption for the application.
- Assess drift. Identify buffer requirements and reductions. At application time, evaluate the supplied setup and wind, read nearby protected features, and calculate the buffer and treatable area.
- Combine results. A known runoff shortfall or drift violation takes priority over unresolved information. Without a known failure, unresolved conditions prevent an overall pass.
- Any runoff or drift
not_met→ overallnot_met. - Otherwise, an
indeterminatecomponent or outstanding assessment issue → overallindeterminate. - Otherwise, applicable requirements are satisfied → overall
met. - Otherwise, no applicable requirements were established → overall
not_applicable.
SOIL_QUEUE_FAILED alone does not prevent a pass when that background soil work is optional. Missing soil needed to score a non-exempt runoff requirement does prevent a pass.
An EPA exemption only satisfies EPA runoff. It does not override a separate Enlist requirement, drift violation, or outstanding PULA restriction.
Runoff determination
Required by default
When a product or PULA introduces an EPA runoff requirement, the API assumes runoff is required. The applicator does not need to answer the portal exemption questionnaire before the API evaluates points. The API evaluates each runoff system separately. EPA runoff credits and Enlist credits are not combined. When several configured rules apply within a supported runoff system, the resolved target is the highest applicable point requirement. Missing or unresolved rules keep the non-exempt resultindeterminate.
Required points and earned points
Automatically derived field credits and saved portal selections can contribute to the score. A selected mitigation does not necessarily earn credit for every product. The compliance GET endpoints also return
selected_measures so you can compare selections with the credits that counted.
With resolved scoring inputs, earning at least the required points returns met; a shortfall returns not_met. For example, a target of 3 with 5 eligible points is met, while a target of 6 with 4 eligible points is not_met with a gap of 2. Missing required soil or an unresolved target returns indeterminate.
Applications on the same field in the same application year share runoff selections. Their product restrictions and targets can differ. Evaluate each application; do not sum points across applications to create a group score.
Portal exemptions
When the user saves an EPA runoff exemption in the portal, runoff returnsmet with required: false, exempt: true, required_points: 0, and gap: 0. The original point target, earned credits, exemption timestamp, and reason codes remain available.
This selected response fragment illustrates an application whose original target was 3 points:
Drift determination
Intake and application-time calculations
A single ESA check or bulk check identifies buffer requirements and eligible reductions. Intake does not accept wind inputs or calculate application-time placement. A drift requirement therefore remainsindeterminate at intake unless a known setup violation already establishes not_met.
Call compute application-time drift buffers with the returned application reference and current wind. Omitted optional setup fields use the saved values. The endpoint refreshes the assessment and calculates where the buffers apply.
A buffer is a restriction to follow
After a successful calculation, drift can bemet with a nonzero buffer. A 100% reduction is not required. Spray only within the returned treatable area and respect the excluded buffer.
The following selected fields describe drift with a remaining buffer and available treatment area:
application_time.geometry.buffer for the excluded drift area and application_time.geometry.treatable for the area remaining after all calculated product buffers are removed. geometry: "none" omits this output but still performs the calculation and returns the same status.
For calculated ESA drift assessments, requires_buffer and has_treatable_area describe the result. They are null when invalid setup or unresolved rules block calculation. In that case, requested output conservatively marks the whole field as buffer and returns treatable: null. If a valid calculation leaves no treatable area, drift is not_met with NO_TREATABLE_AREA.
application_time.drift_status repeats the drift result. application_time.status repeats the overall application result, which can differ because of runoff or other restrictions.
What a setup violation means
A setup violation means a supplied condition conflicts with a known configured requirement. It is different from a missing input or an unresolved rule. These violations return driftnot_met, and the overall assessment also returns not_met, even when other information is missing.
A valid API request can return HTTP 200 with these findings. By contrast, a malformed request, unsupported input value, or missing required request field normally returns HTTP 422. Correct request validation errors before interpreting compliance. See the error catalog for both response types.
What keeps drift indeterminate
A successful placement calculation removes
DRIFT_CONDITIONS_UNVERIFIED. More specific unresolved issues can remain. An eligible manual practice can affect the calculated buffer while its implementation remains unverified, leaving drift indeterminate.
The current placement engine evaluates wind-directional buffers. Additional omni-directional or downslope placement remains unresolved. Wind outside configured tiers is reported as unresolved; the API does not invent an unconfigured wind limit. Temperature and humidity are recorded but are not currently evaluated against label thresholds.
New assessments and saved results
A result describes the inputs at the time it was calculated. Changing the application later does not automatically update every saved result.
A compliance GET contains three distinct views:
compliance.runoff[]reflects current scoring and exemptions against the saved requirements. It does not refresh product/PULA point targets or fetch new soil.compliance.last_assessmentis the last saved ESA assessment, including its timestamp, overall status, issues, and each product’s PULA limitations. A GET does not look up new or changed PULAs; resubmit the check to refresh them.compliance.drift.last_computationis the saved application-time result. Itsdrift_statusdescribes that calculation’s setup, not a new evaluation of current conditions. Older calculations can have a nulldrift_status.
compliance.status. Do not combine current runoff with an older drift pass and present that combination as a new overall determination. Use the saved timestamps and inputs to explain the result, and recompute when the setup changes.
For example, you calculate drift at a low boom height and receive met. If the applicator later changes to high boom, the saved drift calculation still describes low boom. Recompute with the new height. If the applicable rule requires low boom, the new result is not_met.
For a runoff example, the user saves an EPA exemption after an assessment reported a point shortfall. The next compliance GET returns current runoff met, but last_assessment.status can still show the old failure. That difference reflects two calculation times, not a failed exemption save.
When to refresh
Fresh compliance GETs use
Cache-Control: no-store. This ensures a fresh read; it does not rerun drift placement. Product and soil reuse are separate from the age of a saved assessment.
For request fields and complete response shapes, use ESA check, application-time drift, application compliance, and group compliance.
