Integrate with our platform using the REST API
All API requests require a Bearer token. Generate an API key from Settings > Integrations.
curl -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
https://your-domain.com/api/v1/tendersAPI calls are limited based on your subscription plan. Pro: 1,000/day, Enterprise: Unlimited.
All list endpoints return paginated responses with the following structure:
{
"data": [...],
"total": 150,
"page": 1,
"page_size": 20,
"total_pages": 8
}/api/v1/tendersList tenders with pagination and filtering
tenders.read| Parameter | Type | Required | Description |
|---|---|---|---|
page | number | No | Page number (default: 1) |
page_size | number | No | Items per page (max: 100) |
source | string | No | Filter by source (etimad, nupco) |
agency | string | No | Filter by agency name |
/api/v1/tenders/:idGet tender details with line items
tenders.read| Parameter | Type | Required | Description |
|---|---|---|---|
id | number | Yes | Tender ID |
/api/v1/searchSearch tenders by keyword (including item names)
search| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | No | Search query |
source | string | No | Filter by source |
agency | string | No | Filter by agency |
type | string | No | Filter by tender type |
date_from | string | No | Start date (ISO) |
date_to | string | No | End date (ISO) |
page | number | No | Page number |
page_size | number | No | Items per page |
/api/v1/bidsList your organization's bids
bids.read| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status |
page | number | No | Page number |
page_size | number | No | Items per page |
/api/v1/favoritesList your organization's favorite tenders
favorites.read| Parameter | Type | Required | Description |
|---|---|---|---|
page | number | No | Page number |
page_size | number | No | Items per page |
Receive real-time notifications when events occur. Configure webhooks from Settings > Integrations.
tender.matched — New tender matches your alerts or productsbid.status_changed — Bid status has changeddeadline.approaching — Tender deadline is approachingAll webhook payloads are signed with HMAC-SHA256. Verify the X-Webhook-Signature header:
// Verify webhook signature
const crypto = require('crypto');
const signature = req.headers['x-webhook-signature'];
const expected = 'sha256=' + crypto
.createHmac('sha256', webhookSecret)
.update(JSON.stringify(req.body))
.digest('hex');
if (signature === expected) {
// Valid webhook
}