API-dokumentation
Praktik.se exponerar ett REST-API så att företag kan skapa, uppdatera och ta bort praktikannonser från sina egna system (ATS, jobbportaler, intranät).
https://app.praktik.se/functions/v1/api/v1 kontrolleras…Komma igång
- Logga in på ditt företagskonto och gå till Inställningar.
- Skapa en API-nyckel under "API-nycklar" och kopiera den (visas en gång).
- Skicka anrop med
Authorization: Bearer pk_live_....
Bas-URL: https://app.praktik.se/functions/v1/api/v1
OpenAPI-specifikation: /openapi.json – importera i Postman, Insomnia eller Swagger UI för auto-genererade exempel mot rätt bas-URL.
GET https://app.praktik.se/functions/v1/api/v1/meta – ingen API-nyckel krävs. Timeout 8s, upp till 3 försök vid nätverksfel.Exakt curl-kommando som körs
curl -i --max-time 8 https://app.praktik.se/functions/v1/api/v1/metaAutentisering
Alla anrop (förutom /v1/meta) kräver headernAuthorization: Bearer pk_live_.... En ogiltig eller återkallad nyckel ger 401 unauthorized.
Nycklar lagras endast som SHA-256-hash hos oss. Tappar du bort en nyckel kan du återkalla den och skapa en ny i inställningarna.
Felformat
{
"error": {
"code": "validation_error",
"message": "Ogiltig request-body.",
"fields": { "job_title": ["Krävs (minst 2 tecken)."] }
}
}unauthorized – nyckel saknas eller är ogiltig (401).
forbidden – nyckeln tillhör inte annonsens företag (403).
not_found – resursen finns inte (404).
validation_error – ogiltiga fält i bodyn (400).
tier_limit_reached – maxgräns för aktiva annonser nådd (422). Free: 5, Premium: 50.
rate_limited – för många anrop (429). Max 60 anrop per minut per nyckel. Svaret innehåller Retry-After: 60.
method_not_allowed – fel HTTP-metod (405).
internal_error – något gick fel på vår sida (500).
Fältreferens — annons
| Fält | Typ | Krav | Beskrivning |
|---|---|---|---|
| job_title | string | obligatoriskt | Annonsens titel (minst 2 tecken). |
| description | string (markdown) | obligatoriskt | Beskrivning, stöd för markdown. |
| location | string | obligatoriskt | Ort (svenska kommuner). |
| deadline | string | obligatoriskt | Sista ansökningsdag i format YYYY-MM-DD. |
| paid | string | valfritt | "Betald" eller "Obetald". Utelämnas fältet sätts "Obetald". |
| fields | string[] | valfritt | Branscher/roller. |
| start_date | string | valfritt | Startdatum eller fri text. |
| about_company | string | valfritt | Om företaget (markdown). |
| logo_url | string (url) | valfritt | Logotyp till annonsen. |
| image_url | string (url) | valfritt | Hero-bild. |
| external_application_url | string (url) | valfritt | Om ansökan ska ske på extern sida. |
| contact_person | object | valfritt | Kontaktperson: { name, email, phone }. |
| publish | boolean | valfritt | Sätter status till "published". |
| status | string | valfritt | "draft" eller "published". Default "draft". |
| published_at | ISO-tid | valfritt | Sätts automatiskt vid publicering. |
Endpoints
/v1/metaHämta tillåtna värden
Returnerar enum-värden och tillgängliga endpoints. Kräver inte autentisering.
Exempel (curl)
curl https://app.praktik.se/functions/v1/api/v1/meta/v1/internshipsLista företagets annonser
Returnerar alla annonser kopplade till nyckelns företag. Paginera med ?limit (max 100) och ?offset.
Response
{
"data": [ { "id": "...", "job_title": "...", "status": "published", ... } ],
"pagination": { "limit": 20, "offset": 0, "total": 42 }
}Exempel (curl)
curl https://app.praktik.se/functions/v1/api/v1/internships?limit=20 \
-H "Authorization: Bearer pk_live_..."/v1/internshipsSkapa annons
Skapar en ny annons. Med 'publish: true' publiceras den direkt (omfattas av tier-gränsen 3 free / 50 premium).
Request body
{
"job_title": "Frontend-praktikant",
"description": "## Om rollen\nDu kommer att...",
"location": "Stockholm",
"deadline": "2026-08-15",
"paid": "Betald",
"fields": ["IT & Teknik"],
"contact_person": { "name": "Anna", "email": "anna@example.com" },
"publish": true
}Exempel (curl)
curl -X POST https://app.praktik.se/functions/v1/api/v1/internships \
-H "Authorization: Bearer pk_live_..." \
-H "Content-Type: application/json" \
-d '{ "job_title": "Frontend-praktikant", "description": "...", "location": "Stockholm", "deadline": "2026-08-15", "paid": "Betald", "publish": true }'/v1/internships/:idHämta en annons
Returnerar en enskild annons. 404 om id inte finns; 403 om annonsen tillhör ett annat företag.
Exempel (curl)
curl https://app.praktik.se/functions/v1/api/v1/internships/<id> \
-H "Authorization: Bearer pk_live_..."/v1/internships/:idUppdatera annons
Skickar in endast de fält som ska ändras. Att sätta status till 'published' följer tier-gränsen.
Request body
{ "deadline": "2026-09-01", "status": "published" }Exempel (curl)
curl -X PATCH https://app.praktik.se/functions/v1/api/v1/internships/<id> \
-H "Authorization: Bearer pk_live_..." \
-H "Content-Type: application/json" \
-d '{ "deadline": "2026-09-01" }'/v1/internships/:idTa bort annons
Tar bort annonsen permanent. Svarar 204 vid framgång.
Exempel (curl)
curl -X DELETE https://app.praktik.se/functions/v1/api/v1/internships/<id> \
-H "Authorization: Bearer pk_live_..."Changelog
2026-06-27 — v1 lanseras: CRUD för annonser, API-nycklar i företagsinställningarna.