Utviklerdokumentasjon
Tenderen API (v1)
Tenderen-API-et er et JSON REST-API for å søke i anbud, administrere lagrede anbud, tilbud, varsler, team og dokumenter, og kjøre KI-analyse. Det er tilgjengelig på Enterprise-planen og autentiseres med API-nøkler.
Basis-URL
Alle endepunkter er versjonert under /api/v1. Forespørsler og svar er JSON over HTTPS.
https://api.tenderen.com/api/v1Autentisering
Send API-nøkkelen som Bearer-token i Authorization-headeren. Nøkler opprettes i appen under Utviklere → API-nøkler av en eier eller administrator i en bedrift på Enterprise-planen. Hele nøkkelen vises én gang; Tenderen lagrer bare en SHA-256-hash av den. Nøkler kan ha utløpsdato og kan trekkes tilbake når som helst.
curl "https://api.tenderen.com/api/v1/tenders?q=software&cpvCodes=72000000&limit=20" \
-H "Authorization: Bearer $TENDEREN_API_KEY"Tilganger (scopes)
Hver nøkkel har en liste med tilganger. Nye nøkler er skrivebeskyttet som standard (tenders:read). Kall til et endepunkt nøkkelen mangler tilgang til, gir 403 INSUFFICIENT_SCOPE.
Endepunkter
Stiene er relative til basis-URL-en. Kolonnen for tilgang viser hva nøkkelen må ha.
Anbud
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /tenders | tenders:read | Søk i anbud med filtre og paginering. |
| GET | /tenders/:id | tenders:read | Hent ett anbud. |
| GET | /tenders/:id/documents | tenders:read | List dokumentene til et anbud. |
| GET | /tenders/:id/requirements | tenders:read | List kravene hentet ut av et anbud. |
| GET | /tenders/saved | tenders:read | List bedriftens lagrede anbud. |
| POST | /tenders/saved | tenders:write | Lagre et anbud. |
| PATCH | /tenders/saved/:id | tenders:write | Oppdater et lagret anbud. |
Tilbud
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| POST | /bids | bids:write | Opprett et tilbud på et anbud. |
| GET | /bids | bids:read | List tilbud. |
| GET | /bids/:id | bids:read | Hent ett tilbud. |
| PATCH | /bids/:id | bids:write | Oppdater et tilbud. |
| POST | /bids/:id/submit | bids:write | Marker et tilbud som levert. |
KI-analyse
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| POST | /analysis/tender/:id | analysis:write | Kjør KI-analyse av et anbud. |
| POST | /analysis/risk/:id | analysis:write | Kjør KI-risikoanalyse av et anbud. |
| POST | /analysis/match/:id | analysis:write | Beregn hvor godt et anbud passer bedriften. |
| POST | /analysis/gaps/:id | analysis:write | Finn hull mellom kravene og bedriftsprofilen. |
Markedsdata
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /market/insights | market:read | Markedsstatistikk. |
| GET | /market/awards | market:read | Søk i kontraktstildelinger. |
| GET | /market/competitors | market:read | Konkurrenter i kontraktstildelinger. |
Varsler og varslinger
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /alerts | alerts:read | List varsler. |
| POST | /alerts | alerts:write | Opprett et varsel. |
| GET | /alerts/:id | alerts:read | Hent ett varsel. |
| PATCH | /alerts/:id | alerts:write | Oppdater et varsel. |
| DELETE | /alerts/:id | alerts:write | Slett et varsel. |
| GET | /alerts/notifications/list | alerts:read | List varslinger. |
| PATCH | /alerts/notifications/:id/read | alerts:write | Marker en varsling som lest. |
Team
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /teams | teams:read | List team. |
| POST | /teams | teams:write | Opprett et team. |
| GET | /teams/:id | teams:read | Hent ett team. |
| PATCH | /teams/:id | teams:write | Oppdater et team. |
| GET | /teams/:id/members | teams:read | List teammedlemmer. |
| POST | /teams/:id/members | teams:write | Legg til et teammedlem. |
| DELETE | /teams/:id/members/:memberId | teams:write | Fjern et teammedlem. |
Konsortier
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /consortiums | tenders:read | List konsortier. |
| POST | /consortiums | tenders:write | Opprett et konsortium på et anbud. |
| GET | /consortiums/:id | tenders:read | Hent ett konsortium. |
| GET | /consortiums/:id/members | tenders:read | List konsortiemedlemmer. |
| POST | /consortiums/:id/members | tenders:write | Inviter en partnerbedrift. |
| GET | /consortiums/:id/responsibilities | tenders:read | List hvem som har ansvar for hva. |
Dokumenter
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /assets | assets:read | List dokumenter i biblioteket. |
| POST | /assets | assets:write | Opprett en dokumentpost. |
| GET | /assets/:id | assets:read | Hent ett dokument. |
| DELETE | /assets/:id | assets:write | Slett et dokument. |
| POST | /assets/:id/upload | assets:write | Last opp en fil til en dokumentpost. |
| GET | /assets/:id/download | assets:read | Last ned et dokument. |
Etterlevelse
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /compliance/:tenderId | compliance:read | Etterlevelsesmatrise for et anbud. |
| POST | /compliance/espd | compliance:read | Generer et ESPD-svar. |
| GET | /compliance/certifications/list | compliance:read | List bedriftens sertifiseringer. |
Chat med et anbud
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| POST | /chat | chat:write | Still et spørsmål om et anbud. |
| GET | /chat/:sessionId/messages | chat:read | Hent meldingene i en chatøkt. |
Webhooks
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| POST | /webhooks | webhooks:manage | Registrer et webhook-endepunkt. |
| GET | /webhooks | webhooks:manage | List webhook-endepunkter. |
| DELETE | /webhooks/:id | webhooks:manage | Slett et webhook-endepunkt. |
| GET | /webhooks/:id/deliveries | webhooks:manage | Leveringshistorikk for en webhook. |
Konto
| Metode | Sti | Tilgang | Hva den gjør |
|---|---|---|---|
| GET | /me | account:read | Brukeren og bedriften nøkkelen tilhører. |
| GET | /me/usage | account:read | API-bruk for nøkkelen. |
| GET | /health | ingen | Helsesjekk (uten autentisering). |
Paginering og filtrering
Listeendepunkter tar page (fra 1) og limit (1–100, standard 20) og returnerer et pagination-objekt med page, limit, total og pages. GET /tenders tar i tillegg q, cpvCodes og regions (kommaseparert), status, source, minValue, maxValue, deadlineBefore, deadlineAfter, sort (publishedAt, deadline eller estimatedValue) og order (asc eller desc).
{
"success": true,
"data": [ { "id": "…", "title": "…", "deadline": "…" } ],
"pagination": { "page": 1, "limit": 20, "total": 412, "pages": 21 }
}Feil
Feil returnerer success: false med en lesbar error og en maskinlesbar code.
{
"success": false,
"error": "Insufficient permissions. Required scope: bids:write",
"code": "INSUFFICIENT_SCOPE"
}| Kode | HTTP-status | Betydning |
|---|---|---|
| INVALID_AUTH | 401 | API-nøkkel mangler, er feilformatert eller ukjent. |
| KEY_INACTIVE | 401 | Nøkkelen er trukket tilbake. |
| KEY_EXPIRED | 401 | Nøkkelen har passert utløpsdatoen. |
| INSUFFICIENT_SCOPE | 403 | Nøkkelen mangler tilgangen endepunktet krever. |
| INVALID_DATA | 400 | Forespørselskroppen feilet validering; se details. |
| INVALID_PARAMS | 400 | En spørrings- eller stiparameter er ugyldig. |
| FORBIDDEN | 403 | Du har ikke lov til å endre denne ressursen. |
| NOT_FOUND | 404 | Ressursen finnes ikke eller tilhører en annen bedrift. |
| RATE_LIMIT_EXCEEDED | 429 | For mange forespørsler i inneværende time. |
| INTERNAL_ERROR | 500 | Noe feilet hos oss; prøv igjen senere. |
Bruksgrenser
Hver API-nøkkel kan som standard gjøre 1 000 forespørsler per time (grensen lagres per nøkkel). Går du over, får du 429 RATE_LIMIT_EXCEEDED; vent til timevinduet nullstilles. MCP-endepunktet har en egen grense på 1 000 forespørsler per time per token.
Webhooks
Status: du kan registrere, liste og slette webhook-endepunkter i dag, men levering av hendelser er ikke i drift ennå — det sendes foreløpig ingen hendelser til registrerte endepunkter. Formatet under er det leveringene vil bruke. Hent data fra REST-API-et (for eksempel GET /alerts/notifications/list) til levering er på plass.
Registrer et HTTPS-endepunkt med POST /webhooks og velg hendelsene du vil ha. Svaret inneholder en signeringsnøkkel som bare vises én gang.
Hendelser
- tender.new — Et nytt anbud passer ett av varslene dine.
- tender.deadline — Fristen for et anbud du følger nærmer seg.
- tender.awarded — Et anbud du følger er tildelt.
- bid.submitted — Et tilbud ble markert som levert.
- bid.status_changed — Et tilbud endret status.
- alert.triggered — Et varsel ga nye treff.
Verifisere signaturer
Hver levering er en POST med JSON-kroppen {event, data, timestamp, webhookId} og headerne X-Tenderen-Event, X-Tenderen-Delivery og X-Tenderen-Signature. Signaturen er sha256= etterfulgt av heksadesimal HMAC-SHA256 av den rå forespørselskroppen, med signeringsnøkkelen som nøkkel. Sammenlign i konstant tid før du stoler på innholdet.
import crypto from 'node:crypto';
function isValidTenderenSignature(rawBody, signatureHeader, secret) {
const expected =
'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const a = Buffer.from(signatureHeader ?? '');
const b = Buffer.from(expected);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}En levering som feiler, eller ikke svarer med 2xx-status innen 10 sekunder, forsøkes opptil to ganger til: etter 1 minutt og etter 5 minutter. Leveringshistorikken hentes fra GET /webhooks/:id/deliveries.
MCP-kobling for KI-assistenter
Tenderen kjører en ekstern Model Context Protocol-server, slik at KI-assistenter som Claude, ChatGPT og Cursor kan søke i anbud, vurdere egnethet, følge opp pipelinen, skrive tilbudsutkast og spørre anbudsdokumentene på dine vegne — 18 verktøy, med lesetilgang som standard og skriving, innsending og sletting som egne valg på samtykkeskjermen. Koble til med OAuth (autorisasjonskode med PKCE; dynamisk klientregistrering støttes) eller med en API-nøkkel som Bearer-token. Verktøy som ikke kan angres, forhåndsvises først og krever bekreftelse. Hvert kall vises under Utviklere → AI-koblinger, der koblinger kan testes og trekkes tilbake.
MCP-endepunkt (Streamable HTTP)
https://tenderen.com/api/mcpEldre endepunkt (HTTP+SSE)
https://tenderen.com/api/mcp/sseOAuth-oppdagelse
https://tenderen.com/.well-known/oauth-authorization-server
https://tenderen.com/.well-known/oauth-protected-resourceStøtte
Spørsmål om API-et eller en bestemt integrasjon: [email protected].
Sist gjennomgått 4. oktober 2026