curl --request POST 'https://esa.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
}'
{
"success": true,
"esa_required": true,
"account_id": "your-account",
"provider_id": "your-provider",
"application_event_id": "019953f8-8c00-7000-8000-000000000002",
"products": [
{
"epa_number": "7969-500",
"product_name": "Liberty Ultra",
"pest": ["Waterhemp"],
"product_status": "Active",
"esa_required": true,
"pulas": [
{
"pula_id": 12345,
"event_name": "Example PULA",
"status": "effective",
"effective_date": "2026-01-01",
"codes": "EX1",
"limitations": [
{
"limitation_id": 67890,
"code": "EX1",
"limitation": "Illustrative limitation text. Read the returned text for the actual restriction.",
"mitigation_options": []
}
]
}
]
}
],
"summary": { "total_pulas": 1, "total_limitations": 1, "products_checked": 1, "products_with_limitations": 1 },
"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": "LIMITATIONS_REVIEW_REQUIRED",
"message": "Review the returned PULA text for conditions not evaluated automatically"
},
{
"code": "DRIFT_CONDITIONS_UNVERIFIED",
"message": "Buffer placement and application weather have not been verified"
}
]
}
}
ESA checks
ESA check
Assess ESA and PULA requirements for one pesticide application
POST
/
api
/
v2
/
esa-check
curl --request POST 'https://esa.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
}'
{
"success": true,
"esa_required": true,
"account_id": "your-account",
"provider_id": "your-provider",
"application_event_id": "019953f8-8c00-7000-8000-000000000002",
"products": [
{
"epa_number": "7969-500",
"product_name": "Liberty Ultra",
"pest": ["Waterhemp"],
"product_status": "Active",
"esa_required": true,
"pulas": [
{
"pula_id": 12345,
"event_name": "Example PULA",
"status": "effective",
"effective_date": "2026-01-01",
"codes": "EX1",
"limitations": [
{
"limitation_id": 67890,
"code": "EX1",
"limitation": "Illustrative limitation text. Read the returned text for the actual restriction.",
"mitigation_options": []
}
]
}
]
}
],
"summary": { "total_pulas": 1, "total_limitations": 1, "products_checked": 1, "products_with_limitations": 1 },
"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": "LIMITATIONS_REVIEW_REQUIRED",
"message": "Review the returned PULA text for conditions not evaluated automatically"
},
{
"code": "DRIFT_CONDITIONS_UNVERIFIED",
"message": "Buffer placement and application weather have not been verified"
}
]
}
}
Assess ESA and PULA requirements for one pesticide application.
Request
string
required
Your assigned provider identifier. It must match the API key.
string
required
Your customer account identifier.
string
required
Field name shown in the portal and compliance reports.
string
required
Your application identifier, unique within this provider and account. Resubmit this application to refresh its assessment.
string
required
Supported method: for example
Broadcast-Ground, Broadcast-Air, Drone, or Airblast. Unsupported values return 422. Liberty Ultra is ground only.string
required
A valid calendar date in
YYYY-MM-DD format.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.
object[]
required
One to 100 product objects. See the product fields below.
string[]
required
Crop names. An explicit empty array is accepted.
string
Your field identifier, used for compliance report requests. If omitted or null, the application identifier is used.
string
Your work-order or job identifier. Optional for a single check; required for bulk submissions.
string[]
Default pests for products without their own
pest list. Every product must have a nonempty effective pest list.string
Optional applicator or grower email address; nullable.
number
Positive spray gallons per acre. Required to normalize rates expressed per
100 Gal or 100 Cu Ft; nullable.string
ASABE category or code:
EF, VF, F, M, C, VC, EC, or UC. Unsupported values return 422; nullable.string
low or high for ground applications; nullable.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
See Understanding compliance determinations for runoff and drift scoring, setup violations, overall status, and when to refresh a result.boolean
default:"false"
Include PULA field-boundary data when available.
boolean
default:"false"
Include analysis under
compliance.soil.analysis when soil is available.boolean
default:"false"
Include available options under
compliance.mitigation_options.number
default:"1"
PULA search buffer distance, clamped to 0–10 miles.
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.
Product PULA limitations
products[] has one entry per submitted product, in request order. Each entry includes pulas[]: the PULAs intersecting the field that have active limitations for that product’s EPA number and the submitted application method. A product without matching limitations returns pulas: []. When no product requires ESA, the check returns early and every pulas array is empty.
| Field | Meaning |
|---|---|
products[].epa_number, product_name, pest | Submitted product and its effective pests. |
products[].product_status | Active, Inactive, or null when the product could not be verified. |
products[].esa_required | Whether the product has ESA requirements; null when unknown. |
products[].pulas[].pula_id, event_name, status, effective_date | PULA reference and Bulletins Live! Two (BLT) event metadata. |
products[].pulas[].codes | Comma-separated limitation codes for this product in this PULA. |
products[].pulas[].geometry | Buffered PULA boundary; present only with include_geometry: true. |
products[].pulas[].limitations[] | limitation_id, code, limitation (the limitation text), and mitigation_options (string array, possibly empty). |
summary counts total_pulas (all PULAs intersecting the field, with or without product limitations), total_limitations, products_checked, and products_with_limitations.
Any matching limitation adds the LIMITATIONS_REVIEW_REQUIRED issue, which keeps compliance.status indeterminate unless something is not_met. Runoff and drift requirements derived from a limitation are scored automatically; other conditions in the limitation text are not. Show the limitation text to the applicator.
Completed bulk items return the same products and summary under result. Application compliance and group compliance return the saved product limitations under compliance.last_assessment.products.
Runoff requirements and portal exemptions
When a product or PULA introduces an EPA runoff requirement, the API assumes runoff is required immediately. No portal questionnaire answer is needed to evaluate points: sufficient credits returnmet, a shortfall returns not_met, and missing scoring inputs return indeterminate.
Each compliance.runoff[] entry includes required, exempt, required_points, label_required_points, earned_points, gap, status, credited_measures, runoff_exemption_claimed_at, and runoff_exemption_reasons.
- With no exemption,
required: true,exempt: false, andrequired_pointsequals the label/PULA point target inlabel_required_points. - When the user saves an EPA runoff exemption in the portal, that application’s runoff returns
status: "met",required: false,exempt: true,required_points: 0, andgap: 0.label_required_pointsretains the original target (or null if unresolved); earned credits and the saved exemption timestamp/reasons remain visible. Missing soil or an unresolved point target does not block an exempt runoff obligation. - Choosing “None apply” in the portal restores the point requirement. Rechecking the same application preserves its portal selection. A new application starts required, even on the same field.
- Older
required: falserecords without an exemption evaluation timestamp are treated as required. Timestamped legacy exemption selections without reason codes are honored.
Drift assessment
Single and bulk ESA checks identify drift requirements and reductions. They do not calculate application-time buffer placement or accept wind inputs. When a drift requirement exists and no known violation is found, intake drift remainsindeterminate until you call compute application-time drift buffers with the application reference and current wind/setup. A known violation, such as droplets below the label minimum, returns drift and overall not_met immediately, even if other inputs remain unresolved.
The application-time endpoint can return drift met with a remaining buffer: your supplied setup complies when spraying stays within the calculated treatable area. A 100% buffer reduction is not required. Its application_time.drift_status is separate from the overall application_time.status. Repeating an intake check produces a new intake assessment; recompute application-time drift afterward to assess placement for the new inputs.
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.curl --request POST 'https://esa.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
}'
{
"success": true,
"esa_required": true,
"account_id": "your-account",
"provider_id": "your-provider",
"application_event_id": "019953f8-8c00-7000-8000-000000000002",
"products": [
{
"epa_number": "7969-500",
"product_name": "Liberty Ultra",
"pest": ["Waterhemp"],
"product_status": "Active",
"esa_required": true,
"pulas": [
{
"pula_id": 12345,
"event_name": "Example PULA",
"status": "effective",
"effective_date": "2026-01-01",
"codes": "EX1",
"limitations": [
{
"limitation_id": 67890,
"code": "EX1",
"limitation": "Illustrative limitation text. Read the returned text for the actual restriction.",
"mitigation_options": []
}
]
}
]
}
],
"summary": { "total_pulas": 1, "total_limitations": 1, "products_checked": 1, "products_with_limitations": 1 },
"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": "LIMITATIONS_REVIEW_REQUIRED",
"message": "Review the returned PULA text for conditions not evaluated automatically"
},
{
"code": "DRIFT_CONDITIONS_UNVERIFIED",
"message": "Buffer placement and application weather have not been verified"
}
]
}
}
Errors
Processing can return409 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 for incomplete evidence returned with HTTP 200.
All routes can also return authentication, validation, rate-limit, and dependency errors. Use the error catalog and examples to choose a retry or correction. Keep X-Request-ID when present.
