Procurement Automation
End-to-end API for submitting and withdrawing bids on 5 public tender portals. Encryption, file upload and step-by-step logging — all through a single REST API. Currently in beta — to request access please contact us.
Supported portals
/api/v2/procurement/portalsNEN (nen.nipez.cz), E-ZAK (instance URL), TenderArena, Eveza (instance URL), E-zakazky.cz (instance URL). E-ZAK, Eveza and E-zakazky require portalUrl — the URL of the specific instance.
Submitting a bid
/api/v2/procurement/bidsBody parameters
| Parameter | Type | Description |
|---|---|---|
| portal* | string | NEN | EZAK | TENDERARENA | EVEZA | EZAKAZKY |
| tenderId* | string | Tender ID on the portal |
| credentialId | string | Stored credential ID (or pass credentials) |
| credentials | object | {username, password, portalUrl?} — alternative to credentialId |
| files | array | [{name, url, size}] — bid files |
| criteria | array | [{name, value}] — evaluation criteria |
| tenderTitle | string | Tender title (for overview) |
| dryRun | boolean | true = test without final submission |
curl -X POST https://veritra.io/api/v2/procurement/bids \
-H "X-API-Key: mrw_procurement_..." \
-H "Content-Type: application/json" \
-d '{
"portal": "NEN",
"tenderId": "N006-24-V00012345",
"credentialId": "clx1abc...",
"files": [{"name": "bid.pdf", "url": "https://..."}],
"criteria": [{"name": "Bid price", "value": "1500000"}]
}'{
"jobId": "clx1abc...",
"status": "PENDING",
"message": "Job created — will be processed by cron"
}Job status
/api/v2/procurement/bids/:jobId{
"id": "clx1abc...",
"type": "SUBMIT_BID",
"status": "COMPLETED",
"portal": "NEN",
"steps": [
{"step": 1, "action": "login", "status": "ok", "durationMs": 1240},
{"step": 2, "action": "load_tender", "status": "ok", "durationMs": 890},
{"step": 3, "action": "encrypt", "status": "ok", "durationMs": 320},
{"step": 4, "action": "upload_file", "status": "ok", "durationMs": 2100},
{"step": 5, "action": "submit", "status": "ok", "durationMs": 1560}
]
}Bid list
/api/v2/procurement/bidsWithdrawing a bid
/api/v2/procurement/bids/:jobIdBody parameters
| Parameter | Type | Description |
|---|---|---|
| reason | string | Reason for withdrawal (optional) |
AI analysis
/api/v2/procurement/analyze| Parameter | Type | Description |
|---|---|---|
| tenderId* | string | Tender ID in the RWX database |
Returns a structured JSON with 50+ fields: title, value, criteria, qualifications, risks, AI recommendations, win-probability estimate.
Portal credentials
Manage portal credentials in the dashboard at /dashboard/procurement/credentials. Passwords are encrypted with AES-256-GCM and never stored in plaintext.
Credit costs
| Parameter | Type | Description |
|---|---|---|
| Submit bid | POST bids | 50 credits |
| Withdraw bid | DELETE bids/:id | 20 credits |
| AI analysis | POST analyze | 10 credits |
| Read (list, detail) | GET | 1 credit |
| List portals | GET portals | 0 credits |
Workflow
Typical flow: 1) Save credentials in the dashboard → 2) Test login → 3) Find a tender (GET tenders) → 4) Analyse the documentation (POST analyze) → 5) Submit a bid (POST bids) → 6) Watch the status (GET bids/:jobId)