📖 Folkemarked API
REST + JSON. Push hele porteføljen din automatisk.
Autentisering
Lag et token i bedriftssenteret og send det som Bearer-token. Tokenet avgjør hvilken bedrift annonsene knyttes til.
Authorization: Bearer ft_live_…
Endepunkter
PUT | /api/v1/listings/{external_id} — opprett/oppdater (upsert). Dedupe på (bedrift, external_id). |
|---|---|
GET | /api/v1/listings — list bedriftens annonser (filtre: vertical, status, limit, offset). |
GET | /api/v1/listings/{external_id} — hent én annonse. |
DELETE | /api/v1/listings/{external_id} — trekk tilbake (status = withdrawn). |
POST | /api/v1/listings/{external_id}/sold — marker som solgt. |
external_id er din egen ID for objektet (analogt med IADIF ORDERNO). Den er unik per bedrift, så to bedrifter kan begge bruke «123» uten konflikt. Svaret returnerer Folkemarkeds id og offentlig URL.
Eksempel — upsert en bil
curl -X PUT https://folkemarked.no/api/v1/listings/DLR-7781 \
-H "Authorization: Bearer ft_live_…" \
-H "Content-Type: application/json" \
-d '{
"vertical": "car",
"title": "Volvo XC60 B4 AWD Inscription",
"description": "Velholdt, full servicehistorikk.",
"price": 459000,
"location": "Stavanger",
"attrs": {
"make": "Volvo", "model": "XC60", "year": 2021,
"km": 58000, "fuel": "Hybrid", "gearbox": "Automat",
"power": 197, "body": "SUV", "color": "Sort"
}
}'Verticals: car · property · boat · generic. Attributtnøklene er de samme som i Folkemarked-skjemaet for hver vertikal.
Svar
{
"operation": "created",
"id": 4821,
"external_id": "DLR-7781",
"vertical": "car",
"status": "active",
"org_id": 12,
"url": "https://folkemarked.no/annonse/Kp7mQ2xT9b/volvo-xc60-b4-awd-inscription",
"warnings": []
}Stillinger — /api/v1/jobs
Samme Bearer-token og samme grenser. Stillinger nøkles på (bedrift, external_id) og publiseres under firmaprofilen din — gratis ut 2027.
PUT | /api/v1/jobs/{external_id} — opprett/oppdater (upsert). |
|---|---|
GET | /api/v1/jobs — list bedriftens stillinger. |
GET | /api/v1/jobs/{external_id} — hent én stilling. |
DELETE | /api/v1/jobs/{external_id} — trekk tilbake. |
POST | /api/v1/jobs/{external_id}/closed — marker som besatt/lukket. |
curl -X PUT https://folkemarked.no/api/v1/jobs/HR-2031 \
-H "Authorization: Bearer ft_live_…" \
-H "Content-Type: application/json" \
-d '{
"title": "Backend-utvikler (PHP/MySQL)",
"description": "Vi søker en utvikler til produktteamet vårt.",
"location": "Stavanger",
"category": "IT",
"employment_type": "fast", "extent": "heltid", "sektor": "privat", "remote": "delvis",
"deadline": "2026-10-31",
"apply_url": "https://example.no/jobb/2031"
}'Felt: title* · location* · description · company (standard: firmanavnet) · category (bransje) · employment_type (fast/vikariat/engasjement) · extent (heltid/deltid) · sektor · remote · deadline (ÅÅÅÅ-MM-DD) · apply_url (lenke eller e-post) · status. Svaret har samme form som for annonser, med url til stillingen.
Bilder
Bilder kan ikke sendes via API-et ennå. En images-nøkkel ignoreres og meldes i warnings. Last opp bilder i bedriftssenteret (Rediger på annonsen) — annonser uten bilde vises med plassholder.
Feil
Alle feil er JSON med feltet error. Valideringsfeil (422) lister hvert felt med en melding; ukjente felt i kroppen avvises ikke, men nevnes i warnings i svaret.
401 {"error":"unauthorized","message":"…"}
404 {"error":"not_found","message":"…"}
405 {"error":"method_not_allowed"}
400 {"error":"bad_request","message":"Ugyldig JSON-kropp."}
422 {"error":"validation_failed","errors":[{"field":"title","message":"…"}]}
429 {"error":"rate_limited","message":"…"} Retry-After: 60Grenser
Per token: 600 skrive-forespørsler (PUT/POST/DELETE) og 6 000 lese-forespørsler per minutt. Over grensen svarer vi 429 med Retry-After: 60. Én PUT per objekt per synk holder — upsert er idempotent.