Skip to main content
No SDK installation required — use the standard 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")