Skip to main content
V2 evaluates runoff and drift separately, then combines those results with any unresolved application restrictions. Read 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

  1. 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 adds LIMITATIONS_REVIEW_REQUIRED. See product PULA limitations.
  2. Assess runoff. Determine the point target for each runoff system, apply eligible credits, and honor any saved EPA runoff exemption for the application.
  3. 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.
  4. Combine results. A known runoff shortfall or drift violation takes priority over unresolved information. Without a known failure, unresolved conditions prevent an overall pass.
The overall result follows this order:
  • Any runoff or drift not_met → overall not_met.
  • Otherwise, an indeterminate component or outstanding assessment issue → overall indeterminate.
  • 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 result indeterminate.

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 returns met 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:
The exemption removes the EPA runoff points obligation, so missing scoring inputs do not make that exempt obligation fail. Choosing None apply in the portal restores normal point scoring. Exemptions belong to the application. Rechecking the same application preserves its selection; a new application starts required, even on the same field. Older unanswered records are treated as required. Timestamped legacy portal exemptions without reason codes are honored. You cannot submit an exemption flag in the ESA check request body.

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 remains indeterminate 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.
These values illustrate the request shape; use the actual application conditions. Wind direction is where the wind comes from, measured clockwise from north.

A buffer is a restriction to follow

After a successful calculation, drift can be met 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:
Read 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 drift not_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_assessment is 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_computation is the saved application-time result. Its drift_status describes that calculation’s setup, not a new evaluation of current conditions. Older calculations can have a null drift_status.
A GET does not return a new overall 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.