Integration examples

Use Tendex from a Node.js backend or a Python script.

Node.js

This example searches for software opportunities and handles API failures. Run it on your backend with TENDEX_API_KEY set.

const key = process.env.TENDEX_API_KEY;
if (!key) throw new Error('Set TENDEX_API_KEY');

const url = new URL('https://api.tendex.ai/v1/tenders');
url.searchParams.set('q', 'software');
url.searchParams.set('limit', '20');

const response = await fetch(url, {
  headers: { Authorization: 'Bearer ' + key },
  signal: AbortSignal.timeout(30_000),
});
const body = await response.json();
if (!response.ok) {
  throw new Error(body.error.code + ': ' + body.error.message);
}
for (const tender of body.data) {
  console.log(tender.id, tender.title, tender.url);
}
console.log('Next offset:', body.pagination.nextOffset);

Python

This example uses Python's standard library and retrieves one page.

import json
import os
from urllib.error import HTTPError
from urllib.parse import urlencode
from urllib.request import Request, urlopen

query = urlencode({'q': 'software', 'limit': 20})
request = Request(
    'https://api.tendex.ai/v1/tenders?' + query,
    headers={'Authorization': 'Bearer ' + os.environ['TENDEX_API_KEY']},
)
try:
    with urlopen(request, timeout=30) as response:
        page = json.load(response)
except HTTPError as error:
    details = json.load(error)
    raise RuntimeError(details['error']['message']) from error

for tender in page['data']:
    print(tender['id'], tender['title'], tender['url'])

For another page, pass pagination.nextOffset as offset. Preserve the other filters and stop when nextOffset is null.