Canonical
GET /api/procurement
Norwegian public procurement notices from Doffin. Cursor-paginated.
Data source: Doffin. Norwegian coverage only.
Request
GET /api/procurement
| Parameter | Type | Required | Description |
|---|---|---|---|
orgNumber |
string | no | Contracting authority org number. |
q |
string | no | Case-insensitive match against title. |
cpvCode |
string | no | CPV code or prefix (e.g. 72 for IT services). Matches on cpvCodes array. |
noticeType |
string | no | Doffin notice type (e.g. ANNOUNCEMENT_OF_COMPETITION). |
status |
string | no | ACTIVE, EXPIRED, or other Doffin-supplied values. |
minValue |
number | no | Inclusive lower bound on estimatedValue (NOK). |
maxValue |
number | no | Inclusive upper bound. |
deadlineAfter |
ISO date | no | Return notices whose deadline is at or after this timestamp. |
sort |
"publishedDate" | "deadline" | "estimatedValue" | "title" |
no | Default publishedDate. |
order |
"asc" | "desc" |
no | Default desc. |
limit |
integer | no | 1–100. Tier-capped. Default 20. |
cursor |
string | no | Pagination cursor from prior response. |
Response
{
"data": [
{
"id": "clx...",
"noticeId": "2026-107304",
"orgNumber": "974760673",
"title": "Kjøp av skyplattform",
"noticeType": "ANNOUNCEMENT_OF_COMPETITION",
"estimatedValue": 12500000,
"deadline": "2026-05-20T12:00:00Z",
"url": "https://www.doffin.no/notices/2026-107304"
}
],
"nextCursor": "clx...",
"hasMore": true
}The full row includes cpvCodes[], status, publishedDate, buyer contact fields, and url — a direct link to the notice on doffin.no, derived from noticeId. Full field list in the Doffin source page.
Examples
curl
curl -H "Authorization: Bearer $ORAKEL_KEY" \
"https://orakel.cloud/api/procurement?cpvCode=72&status=ACTIVE"JavaScript
const res = await fetch(
"https://orakel.cloud/api/procurement?cpvCode=72&status=ACTIVE",
{ headers: { Authorization: `Bearer ${process.env.ORAKEL_KEY}` } },
);
const { data, nextCursor, hasMore } = await res.json();Error modes
| Status | Meaning | Action |
|---|---|---|
| 400 | Invalid parameters | Inspect details[] |
| 401 | Missing or invalid API key | Check the Authorization header |
| 429 | Rate or quota exceeded | Back off |
| 500 | Query failed | Retry |
Rate limits
Per-key RPM per tier. Cursor-depth guard (50 pages / 5 min) applies as on company search.
Typical use cases
- Sales leads: watch new CPV-72 notices for IT prospects.
- Competitive monitoring: filter by a competitor's
orgNumberto see awards. - Pipeline sizing: sum
estimatedValueby status across a time range.