For utviklere
API og webhooks
Alt som er offentlig på Vis kan hentes som JSON: vis prosjektene dine på din egen nettside, lag en oversikt over stillinger, eller bygg noe vi ikke har tenkt på.
Kom i gang
Grunnadressen er https://visplatform.no/api/v1. Ingen nøkkel trengs for å lese. Svarene har CORS åpent, så du kan kalle API-et rett fra nettleseren.
curl https://visplatform.no/api/v1/profiles/ditt-brukernavn
Vis de nyeste prosjektene dine på din egen nettside:
const res = await fetch("https://visplatform.no/api/v1/profiles/ditt-brukernavn/projects");
const { data } = await res.json();
for (const project of data.slice(0, 3)) {
console.log(project.title, project.url, project.coverImage);
}Endepunkter
GET /profiles/{brukernavn}Profil, CV og publiserte prosjekter
GET /profiles/{brukernavn}/projectsBare prosjektene
GET /projects?q=&tag=&featured=true&limit=24Søk i prosjekter (nyeste først uten q)
GET /projects/{id}Ett prosjekt med beskrivelse (markdown), bilder og lenker
GET /jobs?q=&type=&remote=&limit=24Ledige stillinger
GET /jobs/{id}Én stilling
GET /companies/{slug}En bedrift med ledige stillinger
Lister ligger i data. Feil har formen { "error": { "status": 404, "message": "…" } }. Utkast, skjulte og fjernede prosjekter finnes ikke i API-et, og e-postadresser vises aldri.
Grenser og nøkler
Uten nøkkel: 120 kall i minuttet per IP-adresse. Med nøkkel: 1 200 i minuttet. Lag en under Konto → Utviklere og send den slik:
curl -H "Authorization: Bearer vis_…" https://visplatform.no/api/v1/jobs
Hvert svar har X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Reset. Over grensen får du 429 med Retry-After.
Webhooks for bedrifter
Med Bedrift-abonnementet kan dere få beskjed når noe skjer med stillingene, f.eks. for å koble Vis til rekrutteringssystemet. Legg til en adresse under Administrer → Webhooks.
job.published– En stilling er publisertjob.closed– En stilling er lukketjob.application_click– Noen trykket «Søk på stillingen»
Hver levering er en POST med JSON:
{
"id": "evt_…",
"type": "job.published",
"created": "2026-10-04T08:00:00.000Z",
"data": { "job": { "id": "…", "title": "Frontend-utvikler", "status": "published", "url": "https://visplatform.no/stillinger/…" } }
}Sjekk at den kommer fra oss med Vis-Signature (t=tid,v1=HMAC-SHA256 av «tid.innhold» med hemmeligheten dere fikk):
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(body, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const expected = createHmac("sha256", secret).update(`${t}.${body}`).digest("hex");
return timingSafeEqual(Buffer.from(v1, "hex"), Buffer.from(expected, "hex"));
}Svar med 2xx innen 10 sekunder. Ved 5xx eller tidsavbrudd prøver vi igjen to ganger. Omdirigeringer følges ikke.
Merke og innbygging
Uten kode: bruk «Del» på profilen eller et prosjekt for et merke til GitHub-README (/api/merke/brukernavn) eller et kort du kan bygge inn med en iframe (/bygg-inn/profil/brukernavn).