Developer API

Tender data API

Bring open tenders, contract awards, and other procurement data into your own systems. One key, JSON responses, cursor pagination and daily change feeds.

endpoints
12
REST · JSON
v1
per API key
60/min
records per page
200

Quickstart

Make your first request

API access is issued with your plan. Use the key we give you to call any endpoint as a Bearer token.

Base URLhttps://app.tenderhive.com/api/public/v1
curl
curl "https://app.tenderhive.com/api/public/v1/tenders?country=KE" \
  -H "Authorization: Bearer YOUR_API_KEY"

Responses are JSON. Page with next_cursor. Each key allows 60 requests per minute within your monthly allowance; beyond either limit you receive 429.

Connect your AI assistant

Add this address in Claude, ChatGPT or any assistant that supports MCP, then sign in with your TenderHive Intelligence account.

https://app.tenderhive.com/api/public/mcp

Try it

Send a live request

Use your key against the live API and inspect the response, headers and matching curl command.

Your key stays in this browser tab and is sent only to the API.

Equivalent curl

curl "https://app.tenderhive.com/api/public/v1/tenders?limit=5" \
  -H "Authorization: Bearer YOUR_API_KEY"

Paste a key and send a request to see the live response.

Daily sync

Keep your systems current

Load your licensed data once, then fetch only new and changed records each day. Every change carries a content hash, so unchanged records can be skipped.

# 1. First run: page through everything in your licence
curl "https://app.tenderhive.com/api/public/v1/tenders?limit=200" \
  -H "Authorization: Bearer $TENDERHIVE_KEY"
# repeat with &cursor=<next_cursor> until next_cursor is null

# 2. Every day after: fetch only what changed since your last run
curl "https://app.tenderhive.com/api/public/v1/tenders/changes?since=2026-10-07T00:00:00Z&limit=200" \
  -H "Authorization: Bearer $TENDERHIVE_KEY"

Reference

Limits and errors

LimitValueHeader
Per-minute limit60 requests per minute per key by default; raised by agreementX-RateLimit-Limit / -Remaining / -Reset
Per-second limitEnterprise agreements: up to 20 requests per second per key, with a 2-second burstX-RateLimit-Limit-Second / -Remaining-Second, RateLimit, RateLimit-Policy
Conditional requestsEvery response carries an ETag; send If-None-Match to get 304 when nothing changedETag / If-None-Match
Monthly allowanceSet by your plan or agreement, counted per organisation, resets on the 1st (UTC)x-quota-limit / -remaining / -reset
Page sizeUp to 200 records per request; cursor paginationnext_cursor
Key restrictionsKeys can be limited to licensed countries and sectors, and can carry an end date—
StatusCodeMeaning
400bad_requestA filter or cursor is not valid.
401unauthenticatedKey missing, unknown, revoked or expired.
402plan_requiredYour plan does not include API access.
403scope_deniedThe key is not licensed for this data or country.
429rate_limitedBurst limit or monthly allowance reached. Wait for retry-after seconds.
503service_unavailableTemporary problem. Retry with backoff.

Reference

Endpoints

12 endpoints

Every response carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset, plus x-quota-* when a monthly allowance applies.

Questions? Contact Us