Beta

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

GET/api/v2/procurement/portals

NEN (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

POST/api/v2/procurement/bids

Body parameters

ParameterTypeDescription
portal*stringNEN | EZAK | TENDERARENA | EVEZA | EZAKAZKY
tenderId*stringTender ID on the portal
credentialIdstringStored credential ID (or pass credentials)
credentialsobject{username, password, portalUrl?} — alternative to credentialId
filesarray[{name, url, size}] — bid files
criteriaarray[{name, value}] — evaluation criteria
tenderTitlestringTender title (for overview)
dryRunbooleantrue = 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

GET/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

GET/api/v2/procurement/bids

Withdrawing a bid

DELETE/api/v2/procurement/bids/:jobId

Body parameters

ParameterTypeDescription
reasonstringReason for withdrawal (optional)

AI analysis

POST/api/v2/procurement/analyze
ParameterTypeDescription
tenderId*stringTender 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

ParameterTypeDescription
Submit bidPOST bids50 credits
Withdraw bidDELETE bids/:id20 credits
AI analysisPOST analyze10 credits
Read (list, detail)GET1 credit
List portalsGET portals0 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)