requests library.
Installation
pip install requests
Quick start
import requests
BHUMI_API_KEY = "bh_live_your_key_here"
BASE_URL = "https://api.bhumifarms.co"
def bhumi_get(endpoint, params=None):
response = requests.get(
f"{BASE_URL}{endpoint}",
params=params,
headers={"X-API-Key": BHUMI_API_KEY},
timeout=10,
)
response.raise_for_status()
return response.json()
# Search farms near a location
results = bhumi_get("/v1/search", {
"lat": 45.52, "lng": -122.68, "radius": 25,
"products": "raw milk,eggs",
})
for farm in results["data"]:
print(f"{farm['name']} — {farm['distance_mi']}mi")
Pagination
def get_all_farms(state, per_page=100):
page = 1
all_farms = []
while True:
result = bhumi_get("/v1/farms", {
"state": state, "page": page, "per_page": per_page,
})
all_farms.extend(result["data"])
if not result["meta"]["has_more"]:
break
page += 1
return all_farms
oregon_farms = get_all_farms("OR")
Error handling
try:
result = bhumi_get("/v1/farms/invalid-id")
except requests.exceptions.HTTPError as e:
error = e.response.json()["error"]
print(f"{error['code']}: {error['message']}")
# NOT_FOUND: Farm not found.
Rate limit awareness
response = requests.get(
f"{BASE_URL}/v1/search",
params={"lat": 45.52, "lng": -122.68},
headers={"X-API-Key": BHUMI_API_KEY},
)
remaining = int(response.headers.get("X-RateLimit-Remaining", 0))
if remaining < 10:
print(f"Warning: {remaining} requests remaining")