> ## Documentation Index
> Fetch the complete documentation index at: https://docs.acreblitz.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> State which API version you are using. V1 uses https://esa.acreblitz.com/api/v1; V2 uses https://esa-v2.acreblitz.com/api/v2.
> Read /llms.txt for links to both versions. For V2 bulk integration, read bulk submission, status, results, and /v2/errors before constructing requests.

# ESA check

> Assess ESA and PULA requirements for one pesticide application

Assess ESA and PULA requirements for one pesticide application.

## Request

<ParamField body="provider_id" type="string" required>
  Your assigned provider identifier. It must match the API key.
</ParamField>

<ParamField body="account_id" type="string" required>
  Your customer account identifier.
</ParamField>

<ParamField body="field_name" type="string" required>
  Field name shown in the portal and compliance reports.
</ParamField>

<ParamField body="application_id" type="string" required>
  Your application identifier, unique within this provider and account. Resubmit this application to refresh its assessment.
</ParamField>

<ParamField body="application_method" type="string" required>
  Supported method: for example `Broadcast-Ground`, `Broadcast-Air`, `Drone`, or `Airblast`. Unsupported values return 422. Liberty Ultra is ground only.
</ParamField>

<ParamField body="application_date" type="string" required>
  A valid calendar date in `YYYY-MM-DD` format.
</ParamField>

<ParamField body="field_boundary" type="object" required>
  GeoJSON Feature containing a Polygon or MultiPolygon in EPSG:4326. Rings must be closed; self-intersections are rejected. Maximum 5,000 positions across the field boundary.
</ParamField>

<ParamField body="products" type="object[]" required>
  One to 100 product objects. See the product fields below.
</ParamField>

<ParamField body="crop" type="string[]" required>
  Crop names. An explicit empty array is accepted.
</ParamField>

<ParamField body="provider_field_id" type="string">
  Your field identifier, used for compliance report requests. If omitted or null, the application identifier is used.
</ParamField>

<ParamField body="provider_group_id" type="string">
  Your work-order or job identifier. Optional for a single check; required for bulk submissions.
</ParamField>

<ParamField body="pest" type="string[]">
  Default pests for products without their own `pest` list. Every product must have a nonempty effective pest list.
</ParamField>

<ParamField body="user_email" type="string">
  Optional applicator or grower email address; nullable.
</ParamField>

<ParamField body="gpa" type="number">
  Positive spray gallons per acre. Required to normalize rates expressed per `100 Gal` or `100 Cu Ft`; nullable.
</ParamField>

<ParamField body="droplet_size" type="string">
  ASABE category or code: `EF`, `VF`, `F`, `M`, `C`, `VC`, `EC`, or `UC`. Unsupported values return 422; nullable.
</ParamField>

<ParamField body="boom_height" type="string">
  `low` or `high` for ground applications; nullable.
</ParamField>

### Product fields

| Field | Required | Meaning |
| - | - | - |
| `product_name` | Yes | Product name. |
| `rate` | Yes | Nonnegative application rate. |
| `rate_unit` | Yes | Rate unit, for example `fl oz/ac` or `lb/ac`. |
| `epa_number` | No | EPA registration number; may be omitted or null for an adjuvant. |
| `rate_unit_state` | No | `L`, `S`, `D`, `liquid`, `solid`, or `dry`; resolves ambiguous ounce units. |
| `row_spacing_inches` | No | Positive row spacing; required for row-length rate units. |
| `pest` | No | Nonempty product pest list; overrides the application pest default. |

### Response options

<ParamField body="include_geometry" type="boolean" default="false">
  Include PULA field-boundary data when available.
</ParamField>

<ParamField body="include_soil_analysis" type="boolean" default="false">
  Include analysis under `compliance.soil.analysis` when soil is available.
</ParamField>

<ParamField body="include_mitigations" type="boolean" default="false">
  Include available options under `compliance.mitigation_options`.
</ParamField>

<ParamField body="buffer_distance_miles" type="number" default="1">
  PULA search buffer distance, clamped to 0–10 miles.
</ParamField>

## Response

`success` describes request handling. Read `compliance.status`, `processing_complete`, `soil`, `runoff`, `drift`, and `issues` for the assessment. `compliance.scope` is `requirements_and_gaps`; its `version` is the assessment format version, independent of the API URL version.

Product results include `esa_required`, registration status, effective pests, and PULA limitations. For ESA-required checks, the response also includes an opaque `application_event_id` and a `mitigation_portal_url` when available.

`mitigation_portal_url_expires_at` is the signed-link expiration in signed-link mode and null in token mode. `expires_at` describes the field portal's availability, which can have a different lifetime. Use the returned link unchanged.

## Repeat a check

The provider/account/application identity is reused. Resubmitting updates the saved assessment when ESA processing is required. A no-ESA early return does not update an existing saved application. A changed field boundary refreshes its derived data. Background soil enrichment requires a new check to refresh the assessment.

The example response below shows selected fields only; values depend on product, field, and review state.

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST 'https://esa-v2.acreblitz.com/api/v2/esa-check' \
    --header "X-API-Key: $ACREBLITZ_API_KEY" \
    --header 'Content-Type: application/json' \
    --data '{
    "provider_id": "your-provider",
    "account_id": "your-account",
    "provider_field_id": "north-field",
    "provider_group_id": "work-order-42",
    "field_name": "North field",
    "application_id": "north-application-2026-10-05",
    "application_method": "Broadcast-Ground",
    "application_date": "2026-10-05",
    "field_boundary": {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              -95.404,
              43.102
            ],
            [
              -95.392,
              43.102
            ],
            [
              -95.392,
              43.11
            ],
            [
              -95.404,
              43.11
            ],
            [
              -95.404,
              43.102
            ]
          ]
        ]
      }
    },
    "products": [
      {
        "epa_number": "7969-500",
        "product_name": "Liberty Ultra",
        "rate": 32,
        "rate_unit": "fl oz/ac",
        "rate_unit_state": "L"
      }
    ],
    "crop": [
      "Corn"
    ],
    "pest": [
      "Waterhemp"
    ],
    "gpa": 15,
    "droplet_size": "VC",
    "boom_height": "low",
    "include_soil_analysis": true,
    "include_mitigations": true
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 — selected response fields theme={null}
  {
    "success": true,
    "esa_required": true,
    "account_id": "your-account",
    "provider_id": "your-provider",
    "application_event_id": "019953f8-8c00-7000-8000-000000000002",
    "compliance": {
      "version": 1,
      "scope": "requirements_and_gaps",
      "calculated_at": "2026-10-05T14:00:00.000Z",
      "processing_complete": true,
      "status": "indeterminate",
      "soil": {
        "status": "reused"
      },
      "issues": [
        {
          "code": "DRIFT_CONDITIONS_UNVERIFIED",
          "message": "Buffer placement and application weather have not been verified"
        }
      ]
    }
  }
  ```
</ResponseExample>

## Errors

Processing can return `409 DUPLICATE_FIELD`, `FIELD_OWNERSHIP_CONFLICT`, `DUPLICATE_APPLICATION`, `APPLICATION_FIELD_CONFLICT`, `PROCESSING_CONFLICT`, `FIELD_CHANGED`, or `APPLICATION_CHANGED`. Signed portal setup can return `503 PORTAL_SAS_UNCONFIGURED`. A workflow can also return `422 UNSUPPORTED_APPLICATION_METHOD`; HTTP input validation normally catches this first as `INVALID_REQUEST`. See [assessment issues](/v2/errors#assessment-issue-codes) for incomplete evidence returned with HTTP 200.

All routes can also return [authentication, validation, rate-limit, and dependency errors](/v2/errors#http-error-catalog). Use the [error catalog and examples](/v2/errors) to choose a retry or correction. Keep `X-Request-ID` when present.
