Data API
Query the verified dataset from your own systems
A REST API over records that have passed field collection, automatic checks and human verification. Keys, rate limits and metering are all in place, and you manage them yourself.
What is in the dataset today
The API currently serves the agricultural pilot in Arusha, Tanzania, which is where collection is running. Burundi coverage is a capability we are building, not a dataset you can query yet. The /coverage endpoint always tells you the current answer rather than this page.
Authentication
Send your key in the X-API-Key header. A bearer token is also accepted, which suits clients that only support an Authorization header.
curl -H "X-API-Key: $BOLDTIVE_API_KEY" \ "https://api.boldtive.com/api/v1/data/availability?crop=Tomato&limit=2"
Endpoints
Four endpoints, all of which exist and are in use today.
GET
/api/v1/data/availabilityVerified supply observations, filtered by crop, variety, grade, quantity, administrative area and date. Date filtering is an overlap, so a record is returned when its availability window overlaps yours.
GET
/api/v1/data/availability/summaryTotals rather than records, grouped by crop, ward or council. Cheaper than paging through results when you only need the shape of supply.
GET
/api/v1/data/referenceCrops and their varieties, quality grades, units, and the administrative tree of regions, districts, councils and wards, each with the id the filters expect.
GET
/api/v1/data/coverageWhere data exists and how recent it is. Worth calling before concluding that an empty result means no supply, because it may mean no collection.
Response shape
The structure below is what the API returns. The values in it are invented for illustration.
{
"total": 75,
"limit": 2,
"offset": 0,
"results": [
{
"crop": "Tomato",
"variety": "Rio Grande",
"quantity": 120,
"unit": "CRATE",
"qualityGrade": "A",
"priceExpected": 1125,
"currency": "TZS",
"availableFrom": "2026-10-18",
"availableTo": "2026-10-27",
"location": {
"ward": "Sombetini",
"council": "Arusha City Council",
"district": "Arusha Urban",
"region": "Arusha",
"approximate": { "lat": -3.37, "lon": 36.69 }
},
"verifiedAt": "2026-10-13T04:43:07.132Z",
"freshUntil": "2026-10-20T04:43:07.132Z"
}
]
}What the API will never return
Responses never include a farmer's name, their phone number, or the exact coordinates of their land. Location is given at administrative-area level with a point rounded to roughly a kilometre, which is enough to plan a route and not enough to find a household.
This is a design decision, not a setting. The identifying fields are never selected from the database when a public response is built, so there is no configuration under which they could leak.
How access works
Keys you control
Create and revoke keys yourself in the client portal. A key is shown once at creation and stored only as a hash, so it cannot be recovered or read back by anyone, including us.
Rate limits you can see
Limits are per key, per minute. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, so a client can back off before it is refused rather than after.
Paging and metering
Results page with limit and offset, up to 200 per request. Every call is metered against the key that made it, and the totals are visible to you in the portal.
Talk to us about access
Pricing depends on the dataset and the engagement, so there is no table here to pick from. Tell us what you want to query and how often, and we will put a number on it.
Request API access