SDKs overview

Tenders in Ukraine, a service within the Opendatabot ecosystem, provides access to Ukrainian public procurement data primarily through a RESTful API. This design allows developers to interact with the platform using standard HTTP clients and data serialization formats like JSON, which is a common approach for web service integration across various programming languages and environments. The API supports operations for retrieving detailed information on tenders, participants, and related documents, facilitating the development of custom applications for analysis, monitoring, and integration with other business systems.

The Opendatabot API documentation offers an interactive API explorer, which allows users to test endpoints directly, view example requests, and understand expected response formats. This interactive tool can assist developers in familiarizing themselves with the API's structure and data models before writing any code. Authentication for all API requests is managed via an API key, which must be included in the request headers to authorize access to the data.

While the Opendatabot platform does not currently publish official, language-specific Software Development Kits (SDKs), the REST API architecture means that developers can utilize existing, well-established HTTP client libraries in languages such as Python, JavaScript, Java, PHP, and Ruby. These libraries simplify the process of making HTTP requests, handling responses, and managing authentication, effectively serving a similar function to a dedicated SDK by abstracting away low-level network communication details. The absence of official SDKs implies a greater reliance on general-purpose web development tools and practices, which can offer flexibility but require developers to manage some aspects of API integration manually, such as request construction and error handling.

Official SDKs by language

As of 2026, the Opendatabot platform, which powers Tenders in Ukraine data access, does not offer any official, language-specific SDKs. All interactions with the Tenders in Ukraine data are performed directly via its REST API. This means developers integrate with the service by making HTTP requests to specific API endpoints and parsing the JSON responses. This approach is common for many web services, as it ensures broad compatibility across different programming languages and environments without requiring dedicated client libraries for each one.

Developers are expected to use generic HTTP client libraries available in their chosen programming language. For instance, in Python, libraries like requests are typically used. In JavaScript, fetch or axios are standard choices. These libraries provide methods for constructing HTTP requests, including setting headers for authentication (e.g., the API key), sending data, and handling the responses. While not an SDK, these tools allow for effective and efficient communication with the Tenders in Ukraine API.

The table below outlines the general approach for interfacing with the API, emphasizing that developers will rely on standard web development tools rather than specialized vendor-provided SDKs. The 'Maturity' column reflects the maturity of the method of access rather than a specific package, indicating that direct REST API integration is a well-established and stable approach.

Language Package / Method Install Command (Example) Maturity
Python requests library (HTTP Client) pip install requests Stable (Direct REST API)
JavaScript/TypeScript fetch API or axios (HTTP Client) npm install axios / Built-in fetch Stable (Direct REST API)
Java HttpClient (JDK) or OkHttp Add dependency to pom.xml or build.gradle Stable (Direct REST API)
PHP Guzzle HTTP Client composer require guzzlehttp/guzzle Stable (Direct REST API)
Ruby Net::HTTP (built-in) or HTTParty gem install httparty Stable (Direct REST API)

Installation

Since Tenders in Ukraine relies on a direct REST API interface rather than official SDKs, installation typically involves setting up a suitable HTTP client library for your chosen programming language. The specific steps will vary based on the language and package manager used. Below are common installation instructions for popular languages.

Python

For Python, the requests library is widely used for making HTTP requests due to its user-friendly API. To install requests, use pip, Python's package installer:

pip install requests

After installation, you can import requests into your Python script to start interacting with the Tenders in Ukraine API. It is recommended to use a virtual environment to manage dependencies for your project, which can be set up using python -m venv .venv and activated with source .venv/bin/activate (on Unix/macOS) or .venv\Scripts\activate (on Windows).

JavaScript / TypeScript

In JavaScript environments (Node.js or browser), you can use the built-in fetch API or a third-party library like axios. fetch is available globally in modern browsers and Node.js versions 18 and above. For older Node.js environments or projects preferring a more feature-rich client, axios is a popular choice.

Using axios:

To install axios via npm (Node Package Manager):

npm install axios

Or via yarn:

yarn add axios

Once installed, you can import axios into your JavaScript or TypeScript files. The choice between fetch and axios often depends on project requirements and developer preference, as both are capable of handling REST API communications effectively. You can find comprehensive documentation for using the Fetch API on MDN Web Docs, which details various aspects of making network requests.

Java

Java 11 and later include a built-in HttpClient module. For projects using older Java versions or preferring external libraries, OkHttp is a robust choice. If you are using Maven, add the following dependency to your pom.xml for OkHttp:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version> <!-- Check for the latest version -->
</dependency>

For Gradle projects, add to your build.gradle:

implementation 'com.squareup.okhttp3:okhttp:4.12.0' // Check for the latest version

The OkHttp quickstart guide provides further details on integrating and using the library.

Quickstart example

This quickstart example demonstrates how to fetch a list of tenders using the Tenders in Ukraine API, leveraging the requests library in Python. Before running this code, ensure you have an API key from the Opendatabot API page and have installed the requests library (pip install requests).

The example targets the /tenders endpoint, which typically provides a paginated list of public procurement tenders. Error handling is included to manage common issues like network problems or invalid API keys. Remember to replace YOUR_API_KEY with your actual key.

import requests
import json

# Your Opendatabot API key
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://opendatabot.ua/api/v3"

# API endpoint for tenders
TENDERS_ENDPOINT = f"{BASE_URL}/tenders"

# Headers for authentication
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# Parameters for the request (optional, e.g., for filtering or pagination)
params = {
    "limit": 5,  # Fetch 5 tenders
    "offset": 0  # Start from the beginning
}

try:
    response = requests.get(TENDERS_ENDPOINT, headers=headers, params=params)
    response.raise_for_status()  # Raise an HTTPError for bad responses (4xx or 5xx)

    tenders_data = response.json()

    print(f"Successfully fetched {len(tenders_data.get('data', []))} tenders.")
    if 'data' in tenders_data:
        for i, tender in enumerate(tenders_data['data']):
            print(f"\nTender {i+1}:")
            print(f"  ID: {tender.get('id', 'N/A')}")
            print(f"  Procurement Method: {tender.get('procurement_method_details', 'N/A')}")
            print(f"  Status: {tender.get('status', 'N/A')}")
            print(f"  Title: {tender.get('title', 'N/A')}")
            print(f"  Amount: {tender.get('value', {}).get('amount', 'N/A')} {tender.get('value', {}).get('currency', '')}")
    else:
        print("No 'data' field found in the response.")

except requests.exceptions.HTTPError as http_err:
    print(f"HTTP error occurred: {http_err} - {response.text}")
except requests.exceptions.ConnectionError as conn_err:
    print(f"Connection error occurred: {conn_err}")
except requests.exceptions.Timeout as timeout_err:
    print(f"Timeout error occurred: {timeout_err}")
except requests.exceptions.RequestException as req_err:
    print(f"An unexpected error occurred: {req_err}")
except json.JSONDecodeError:
    print(f"Failed to decode JSON from response: {response.text}")

This script first defines the API key and base URL. It then constructs the necessary headers for authentication and specifies optional query parameters for pagination. A GET request is made to the tenders endpoint, and the response is checked for HTTP errors. If successful, the JSON response is parsed, and details of the retrieved tenders are printed. This template can be adapted for other endpoints and programming languages by changing the endpoint URL, parameters, and using the appropriate HTTP client library.

Community libraries

While Opendatabot does not provide official SDKs for Tenders in Ukraine, the open nature of REST APIs encourages the development of community-contributed libraries. These libraries can simplify interaction with the API by providing language-specific abstractions, better error handling, and more idiomatic ways to access data compared to direct HTTP requests. However, it is important to note that community libraries vary in terms of maturity, maintenance, and adherence to the latest API specifications.

To find community libraries, developers often search platforms like GitHub, PyPI (for Python), npm (for JavaScript), or other language-specific package repositories. Searches typically involve keywords such as "Opendatabot API," "Tenders in Ukraine API," or "ProZorro API" (as Tenders in Ukraine often aggregates data from the ProZorro public procurement system). When evaluating a community library, it is advisable to check:

  • Activity: How recently was the library updated? Frequent updates often indicate active maintenance.
  • Documentation: Is there clear and comprehensive documentation for installation, usage, and examples?
  • Issue Tracking: Does the project have an active issue tracker, and are developer questions being addressed?
  • Community Support: Are there forums or channels where users can ask questions and get help?
  • Dependencies: What other libraries does it rely on, and are those dependencies well-maintained?
  • Licensing: Ensure the license is compatible with your project's requirements.

Given the specific domain of Ukrainian public procurement data, community libraries might emerge to offer higher-level functions, such as specific filters for tender types, detailed parsing of tender documents, or integration with local financial systems. These types of specialized libraries can significantly reduce development time for applications focused on the Ukrainian market. Developers are encouraged to explore these resources but should always verify their suitability and security for production use before integration.