{"openapi":"3.1.0","info":{"title":"Sprayer Calibration API","version":"1.0.0","description":"Agricultural sprayer maths as an API, computed locally and deterministically — the calibration, coverage and tank-mix numbers a farmer, agronomist or custom applicator dials a boom sprayer in with. The calibration endpoint gives the broadcast application rate GPA = 5940 × the per-nozzle flow (GPM) ÷ (ground speed in mph × nozzle spacing in inches), the 5940 converting the units for a full-coverage boom — so a 0.4 GPM nozzle at 5 mph on 20-inch spacing lays down about 24 gallons per acre, and driving faster or spacing nozzles wider drops the rate. The coverage endpoint gives the acres a tank covers (tank ÷ GPA) and, for a field size, the total spray volume and the number of tank-loads, with the partial last fill called out so it can be mixed to the leftover acres. The product endpoint gives the pesticide or nutrient to add per tank = the acres a tank covers × the label rate per acre (in whatever unit the rate uses — ounces, pints, pounds), plus the total product for the field. Everything is computed locally and deterministically, so it is instant and private. Ideal for precision-ag and farm-management tools, sprayer-calibration and tank-mix apps, and ag-retail utilities. Pure local computation — no key, no third-party service, instant. Always follow the product label and calibrate with a real catch test. 3 compute endpoints. For fertiliser rates use a fertilizer API; for sprinkler/irrigation design an irrigation API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/spray-api","description":"oanor gateway"}],"tags":[{"name":"Spray"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/calibration":{"get":{"operationId":"get_v1_calibration","tags":["Spray"],"summary":"Application rate (GPA)","description":"","parameters":[{"name":"nozzle_flow_gpm","in":"query","required":true,"description":"Per-nozzle flow (GPM)","schema":{"type":"string"},"example":"0.4"},{"name":"speed_mph","in":"query","required":true,"description":"Ground speed (mph)","schema":{"type":"string"},"example":"5"},{"name":"nozzle_spacing_in","in":"query","required":true,"description":"Nozzle spacing (inches)","schema":{"type":"string"},"example":"20"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Broadcast application rate GPA = 5940 × the per-nozzle flow (GPM) ÷ (ground speed in mph × nozzle spacing in inches); 5940 converts the units for a full-coverage boom. So a 0.4 GPM nozzle at 5 mph on 20-inch spacing lays down about 24 gallons per acre. Drive faster or space the nozzles wider and the rate drops — recheck the real nozzle flow with a catch test, since worn tips over-apply.","inputs":{"speed_mph":5,"nozzle_flow_gpm":0.4,"nozzle_spacing_in":20},"application_rate_gpa":23.76},"meta":{"timestamp":"2026-06-07T08:18:00.110Z","request_id":"f156d588-c543-42ad-9445-dc83b75fb3dd"},"status":"ok","message":"Calibration","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/coverage":{"get":{"operationId":"get_v1_coverage","tags":["Spray"],"summary":"Acres per tank and tank-loads","description":"","parameters":[{"name":"tank_volume_gal","in":"query","required":true,"description":"Tank volume (gallons)","schema":{"type":"string"},"example":"300"},{"name":"application_rate_gpa","in":"query","required":true,"description":"Application rate (GPA)","schema":{"type":"string"},"example":"20"},{"name":"field_acres","in":"query","required":false,"description":"Field size (acres)","schema":{"type":"string"},"example":"50"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Acres covered per tank = tank volume ÷ the application rate (GPA). Give the field size and it also returns the total spray volume (acres × GPA) and how many tank-loads that is — the fractional part is the last partial fill, so mix that one to the leftover acres to avoid wasting product. Plan refills and product so the boom is never run dry mid-pass, which leaves skips.","inputs":{"field_acres":50,"tank_volume_gal":300,"application_rate_gpa":20},"full_tanks":3,"tanks_needed":3.33,"acres_per_tank":15,"total_spray_gallons":1000},"meta":{"timestamp":"2026-06-07T08:18:00.186Z","request_id":"fca5fdc4-6e8e-48d1-b3df-2c2ef575e952"},"status":"ok","message":"Coverage","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/product":{"get":{"operationId":"get_v1_product","tags":["Spray"],"summary":"Product to add per tank","description":"","parameters":[{"name":"application_rate_gpa","in":"query","required":true,"description":"Application rate (GPA)","schema":{"type":"string"},"example":"20"},{"name":"tank_volume_gal","in":"query","required":true,"description":"Tank volume (gallons)","schema":{"type":"string"},"example":"300"},{"name":"product_rate_per_acre","in":"query","required":true,"description":"Label rate per acre","schema":{"type":"string"},"example":"1.5"},{"name":"field_acres","in":"query","required":false,"description":"Field size (acres)","schema":{"type":"string"},"example":"50"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Product per tank = the acres a tank covers × the label rate per acre (keep the rate's units — oz, pints, lb — and the answer comes back in them). Add that amount of pesticide or nutrient to each full tank and mix the partial tank to its acres. Always follow the product label for the legal rate, mixing order and any adjuvant, and agitate to keep the mix uniform.","inputs":{"field_acres":50,"tank_volume_gal":300,"application_rate_gpa":20,"product_rate_per_acre":1.5},"total_product":75,"acres_per_tank":15,"product_per_tank":22.5},"meta":{"timestamp":"2026-06-07T08:18:00.283Z","request_id":"c62a7607-f1d0-4eef-81bb-ef6c610035d9"},"status":"ok","message":"Product per tank","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"notes":"US units (GPM, mph, in, gal, acres). GPA = 5940·GPM/(mph·spacing); acres/tank = tank/GPA; product/tank = acres/tank × rate. Calibrate with a real catch test. For fertiliser rates use a fertilizer API; for sprinkler/irrigation design an irrigation API.","service":"spray-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/product":"Product to add per tank for a label rate.","GET /v1/coverage":"Acres per tank and tank-loads for a field.","GET /v1/calibration":"Application rate GPA from nozzle flow, speed and spacing."},"description":"Agricultural sprayer maths: application rate (GPA) from calibration, field coverage and tank fills, and product per tank."},"meta":{"timestamp":"2026-06-07T08:18:00.380Z","request_id":"ba34d208-0e46-49c1-9344-50cd2d43a586"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":7300,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":940,"monthly_call_quota":76000,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2960,"monthly_call_quota":322000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":9050,"monthly_call_quota":1505000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/spray-api"}