Skip to content

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.

Example request
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/availability

    Verified 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/summary

    Totals 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/reference

    Crops 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/coverage

    Where 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.

Example response, with invented values
{
  "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