# grunden.ai — fullständig information > Svensk EU-AI: toppresterande öppna modeller för chat plus > en specialiserad modell-flotta (embeddings, rerank, PII-detektering) på > dedikerad hårdvara i Sverige. > OpenAI-kompatibelt API — byt endpoint, behåll din kod. Gratis chat, > prenumeration eller förbetald wallet. Svensk bokföring och kontantfaktura > vid varje betalning. ## Om tjänsten grunden.ai servar toppresterande öppna modeller plus en specialiserad modell-flotta via ett OpenAI-kompatibelt API och ett webbgränssnitt. All inferens körs på dedikerad hårdvara i Sverige — inga externa modell-leverantörer. Utfärdare: Grunden AI AB (org.nr 559341-9129, VAT SE559341912901). ### Positionering - **Svensk databehandling**: All inferens och lagring inom EU (Stockholm). Inga tredjelandsöverföringar. BFL-konform bokföring. - **OpenAI-kompatibelt**: Byt `base_url` till `https://api.grunden.ai`, behåll din befintliga kod. Samma `/v1/chat/completions`-endpoint, samma JSON-format, samma streaming via SSE. - **Transparens**: Priser per token publicerade öppet. Ingen dold debitering. Automatisk kontantfaktura vid varje betalning. ## Produkter ### Chat-gränssnitt URL: https://www.grunden.ai/chat Webbaserad chat. 7 dagars gratis vid nyregistrering, därefter 3 promptar/dag utan abonnemang. Chatt-abonnemang: 99 kr/mån (990 kr/år) ger obegränsad chat med daglig token-cap som anti-missbruk. ### Publikt API URL: https://www.grunden.ai/docs OpenAI-kompatibelt API med Bearer-autentisering. API-nycklar börjar på `sk-grunden-` och skapas via dashboard. ## Dokumentationsstruktur (för LLM-agenter) Hela docs-trädet med kort hint per sida — använd dessa URL:er för att hämta detaljer: - https://www.grunden.ai/docs — Kom igång (registrering, första anrop, redigerings-integration) - https://www.grunden.ai/docs/kapaciteter — Översikt över modellerna (paraply) - https://www.grunden.ai/docs/kapaciteter/chat — Chat (GLM 5.3) detalj-syntax - https://www.grunden.ai/docs/kapaciteter/embeddings — Embeddings (BGE-M3, 1024-dim) - https://www.grunden.ai/docs/kapaciteter/rerank — Rerank (BGE-reranker-v2-m3, cross-encoder) - https://www.grunden.ai/docs/kapaciteter/pii — PII-detektering (GLiNER, multi-språk) - https://www.grunden.ai/docs/kapaciteter/tal-till-text — Tal till text (KB-Whisper Large) - https://www.grunden.ai/docs/kapaciteter/text-till-tal — Text till tal (Chatterbox) - https://www.grunden.ai/docs/guider — Avancerade mönster (streaming, tools, async, RAG, idempotency) - https://www.grunden.ai/docs/modeller — Full pris-tabell + tiers (normal/priority/async) - https://www.grunden.ai/docs/api — API-referens (bas-URL, endpoints-tabell, felkoder, auth) - https://www.grunden.ai/docs/konto — Konto & fakturering (nycklar, wallet, abonnemang, kvitton) - https://www.grunden.ai/docs/compliance — Compliance & EU (GDPR, AI Act, jurisdiktion, DPIA, DPA) ## API-referens ### Bas-URL:er - **Produktion**: `https://api.grunden.ai` - **Staging**: `https://staging.grunden.ai` (icke-stabil, inga SLA) ### Endpoints #### POST /v1/chat/completions Chat completions — den primära endpointen. **Request-format** (OpenAI-kompatibelt): ```json { "model": "glm-5.3", "messages": [ {"role": "system", "content": "Du är en hjälpsam assistent."}, {"role": "user", "content": "Hej!"} ], "stream": false, "max_tokens": 4096, "temperature": 0.7 } ``` **Streaming**: `"stream": true` → SSE-chunks i OpenAI delta-format. **Vision**: GLM 5.3 är nativt multimodal, men bildinmatning via API:t är ännu inte påslagen — requests är text (+ tools) tills vision-capability publiceras i `GET /v1/models`. **Reasoning-nivåer**: GLM 5.3 resonerar före svaret. Djupet styrs per anrop med parametern `reasoning_effort` i request-kroppen: ```json { "reasoning_effort": "low" } ``` Nivåer: `low` | `high` | `max`. OpenAI:s `minimal`/`medium` accepteras och översätts till `low`/`high`; övriga värden avvisas med 400. Utelämnad parameter ger `max` (API:ts förval). Resonemanget levereras separat i fältet `reasoning_content` i svaret (vid streaming: `delta.reasoning_content`) — `content` innehåller bara själva svaret. Uppmätt på samma fråga (temperatur 0, samma rätta svar): `low` 1 reasoning-token av 48 completion-tokens totalt, `high` 9 av 59, `max` 158 av 210 — lägre nivå kan alltså ge samma svar till en bråkdel av output-tokens för enkla frågor. **Tool-calling**: `tools` + `tool_choice` på request, `tool_calls` i assistant-svaret, `role:"tool"` med `tool_call_id` för resultatet. **Tiers** (via `tier`-parameter): - `"normal"` (default) - `"async"` (0,5× pris) — webhook inom 12 h, kräver `webhook_url` **Async-flöde**: 1. Skicka `tier:"async" + webhook_url` → 202 med `job_id` 2. Resultat levereras via POST till `webhook_url` inom 12 timmar 3. Webhook signeras med HMAC-SHA256 i `X-Grunden-Signature`-header **Webhook-signatur (v2, rekommenderad)**: vi skickar två headers: - `X-Grunden-Signature: sha256=` — HMAC-SHA256 över raw body (v1, kompatibilitetshärd) - `X-Grunden-Signature-V2: t=,v1=` — Stripe-mönster: HMAC-SHA256 över `v1::` med din webhook-nyckel. Tidsstämpeln `t` skyddar mot replay-attacker; avvisa requests där `abs(now - t) > 5 min`. Verifiera signaturen INNAN du läser bodyn. V2 är preferred för nya integrations; v1 fortsätter levereras parallellt för existerande klienter. **Idempotency**: `Idempotency-Key` header (UUID/ULID, max 128 tecken) för säkra retries — samma nyckel inom 24h returnerar cache:ad response utan ny debitering. #### POST /v1/embeddings Embeddings (BGE-M3, 1024-dim, multilingual). OpenAI-kompatibel: ```json { "model": "bge-m3", "input": ["text 1", "text 2"] } ``` #### POST /v1/rerank Cross-encoder rerank (BGE-reranker-v2-m3). Skicka query + lista texter: ```json { "model": "bge-reranker-v2-m3", "query": "vad är RAG?", "documents": ["text A", "text B", "text C"] } ``` Returnerar relevans-scores per dokument. #### POST /v1/pii/redact PII-detektering och -maskering (GLiNER, multi-språk): ```json { "text": "Anna Andersson, 19850101-1234, anna@example.com" } ``` Returnerar maskerad version + detection-spans. #### GET /v1/usage/allocation Förbrukning per kostnadsdimension — anrop, tokens och kostnad, för kundens egna avstämningar. Perioden är [from, to): `from` inklusive, `to` exklusive, båda ISO 8601. ```bash curl -G https://api.grunden.ai/v1/usage/allocation \ -H "Authorization: Bearer $GRUNDEN_API_KEY" \ --data-urlencode "from=2026-08-01T00:00:00+02:00" \ --data-urlencode "to=2026-09-01T00:00:00+02:00" \ --data-urlencode "group_by=api_key,end_user" ``` `group_by` tar `api_key` och/eller `end_user` (kommaseparerat, ingen dubblett). `format` är `json` (förval) eller `csv`. Svaret bär `rows` och `totals` med `requests`, `prompt_tokens`, `completion_tokens`, `total_tokens` samt kostnad netto/moms/brutto i microöre, plus `currency`, `currency_decimals`, momssats och `truncated`/`row_limit` om resultatet kapats. Dimensionen sätts genom att skicka fältet `user` i själva anropet — en tagg kunden väljer själv (kund, avdelning, projekt). Utan fältet hamnar anropet under "Ej dimensionerat". Samma siffror finns i gränssnittet: tokens och kostnad står under varje svar i chatten, och betalningssidan (/t//billing) har ett förbrukningskort med valfritt datumintervall, gruppering och CO₂. #### POST /v1/audio/transcriptions Transkribering (KB-Whisper Large, tränad på svenskt tal). Multipart: ```bash curl -F audio=@mote.m4a ... # fältet heter audio, INTE file (file → 422) ``` `model` behövs inte och ignoreras — fast modell. Det finns INGEN ordlisteledtråd (initial_prompt/hotwords) per anrop; egennamn och tekniska termer transkriberas på gehör och blir ofta fel — städa efterát med en språkmodell om terminologin spelar roll. Diarisering kan avgränsas med `min_speakers` och `max_speakers` (förval 1 och 8). Svaret är WhisperX egen form, inte OpenAI:s: `segments` (start, end, text, words, avg_logprob) + `word_segments`. Inget samlat `text`-fält; `response_format` stöds inte. Språket är låst till svenska — ingen språkparameter, ingen autodetektering. ffmpeg avkodar indatan, så WAV, MP3, AAC i mp4/m4a, Opus i ogg och webm fungerar utan transkodning. Transkriberingen är SERIALISERAD: en fil i taget för hela tjänsten. Uppmätt på tomt kluster: 30 s ljud → 1,4 s, 3 min → 3,3 s. Taket är 50 MB per fil. Strömmande realtidstranskribering finns också, se nedan. Talarseparering är opt-in och kräver BÅDE `?diarize=true` OCH headern `X-Diarize-Attestation: true` — headern är kundens bekräftelse på rättslig grund enligt GDPR art. 9.2 för de registrerade vars röster separeras. Utan den: 400. #### WSS /v1/audio/realtime Strömmande realtids-STT över WebSocket (WhisperLive, KB-Whisper large). Anslut till `wss://api.grunden.ai/v1/audio/realtime` med `Authorization: Bearer` i HTTP-uppgraderingen — inte som ett meddelande. Ett vanligt HTTP-anrop mot adressen ger 404; endpointen finns bara som WebSocket-uppgradering. FÖRSTA meddelandet ska vara JSON med numeriskt `sample_rate` (8 000–192 000). Därefter binära ramar med PCM float32 mono. Ljud före konfigurationen, eller saknat sample_rate, stänger sessionen med kod 1008. Debitering härleds ur bytes, inte väggklocka: minuter = bytes / (sample_rate × 4 × 60). Tyst tid är gratis. Gränser: 2 MB per meddelande, 8 MB kö (kod 1013), ping var 30:e sekund, 120 s utan klientdata stänger. #### POST /v1/audio/speech Talsyntes (Chatterbox). JSON in, ljudfil ut (wav som förval, även mp3/opus): ```json { "model": "chatterbox", "voice": "Axel.wav", "language": "sv", "input": "Hej och välkommen." } // voice är OBLIGATORISKT (annars 422) ``` `voice` är ett filnamn ur en fast uppsättning; ingen list-endpoint finns genom vårt API. Giltiga: Abigail, Adrian, Alexander, Alice, Austin, Axel, Connor, Cora, Elena, Eli, Emily, Everett, Gabriel, Gianna, Henry, Ian, Jade, Jeremiah, Jordan, Julian, Layla, Leonardo, Michael, Miles, Olivia, Ryan, Taylor, Thomas — alla med ändelsen .wav. Valfritt: language, response_format, speed, seed. ```json ``` Varje fil märks som AI-genererad INUTI filen (LIST/INFO i WAV, ID3v2.4 i MP3, OpusTags i Ogg) enligt EU AI Act art. 50.2, så märkningen följer med filen. Kan en fil inte märkas returneras 502 i stället för omärkt ljud. Transkriberingen märks inte — dess utdata är text från kundens eget ljud, inte syntetiskt innehåll. #### POST /v1/messages Anthropic Messages-API i **wire-format**. VIKTIGT: grunden.ai kör INTE Claude/Anthropic-modeller — denna endpoint servar vår egen modell `glm-5.3` (registrets default) i Anthropics request/response-form. Syftet är att låta Anthropic-SDK-baserade verktyg (Claude Code m.fl.) peka mot en EU-hostad modell utan att byta verktyg. Inga US-leverantörer inblandade. **Auth**: skicka `x-api-key: sk-grunden-…` (Anthropic-SDK-stil, primär) ELLER `Authorization: Bearer sk-grunden-…`. **Använd med Claude Code / Anthropic-SDK**: ```bash export ANTHROPIC_BASE_URL=https://api.grunden.ai export ANTHROPIC_API_KEY=sk-grunden-… ``` **Request** (Anthropic Messages-format; `model` ignoreras — alltid glm-5.3): ```json { "model": "glm-5.3", "max_tokens": 1024, "messages": [{"role": "user", "content": "Hej!"}] } ``` Fält: `max_tokens` (int), `messages` (array av {role, content}, min 1), `system` (sträng/array), `tools`, `tool_choice`, `temperature` (0–1), `top_p` (0–1), `stop_sequences` (string[]), `stream` (bool). **Response** (icke-streamat): ```json { "id": "msg_…", "type": "message", "role": "assistant", "model": "glm-5.3", "content": [{"type": "text", "text": "…"}], "stop_reason": "end_turn", "stop_sequence": null, "usage": {"input_tokens": 0, "output_tokens": 0} } ``` `content` kan även innehålla `{"type":"tool_use", "id", "name", "input"}`-block. **Streaming**: `stream:true` → Anthropic SSE-event-sekvens (message_start, content_block_delta, message_delta, message_stop). Stöds: text-konversationer, tool-use, streaming. Stöds ej (v1): bild-block (ersätts med text-platshållare), modellens thinking-läge surfacas inte, prompt-caching, top_k. #### GET /v1/models Listar aktiva modeller. Kräver `Authorization: Bearer sk-grunden-…`. #### GET /v1/batch/{id} Status för async batch-jobb. Kräver autentisering. #### DELETE /v1/account Raderar API-användarens konto (GDPR art. 17). Kräver autentisering. #### GET /v1/audit-log Hämtar användarens audit-log (GDPR art. 15). Kräver autentisering. ### Autentisering `Authorization: Bearer sk-grunden-…` i request-header. API-nycklar hanteras via dashboard eller API. Nycklar hashas med SHA-256 vid lagring. Constant-time-jämförelse vid autentisering. ### Rate-limit-signaler `Retry-After` + `X-RateLimit-Remaining-Requests` + `X-RateLimit-Remaining-Tokens` headers på 429-svar. ## Aktuella modeller ### `bge-reranker-v2-m3` Namn: BGE Reranker v2 M3 Capabilities: rerank ### `bge-m3` Namn: BGE-M3 (multilingual embeddings) Capabilities: embeddings ### `chatterbox` Namn: Chatterbox TTS Capabilities: tts ### `gemma-4-26b` Namn: Gemma 4 26B Chat-tier: fast Capabilities: chat, reasoning, tools Pris (SEK per 1M tokens, input/output): Gemma 4 26B (`gemma-4-26b`): Normal 15/45 · Async (0,5×) 7,5/22,5 ### `gliner-multi-pii` Namn: GLiNER multi-pii (PII-redaktion) Capabilities: pii ### `glm-5.3` Namn: GLM 5.3 Chat-tier: smart Capabilities: chat, reasoning, tools Pris (SEK per 1M tokens, input/output): GLM 5.3 (`glm-5.3`): Normal 60/180 · Async (0,5×) 30/90 ### `glm-5.3-flash` Namn: GLM 5.3 Flash Chat-tier: smart Capabilities: chat, reasoning, tools, vision Pris (SEK per 1M tokens, input/output): GLM 5.3 Flash (`glm-5.3-flash`): Normal 60/180 · Async (0,5×) 30/90 ### `kb-whisper-large` Namn: KB-Whisper-Large (svensk STT) Capabilities: audio_transcription ## Prismodell ### Gratis-läge (chat) Nya konton får 7 dagars obegränsad chat. Därefter 3 promptar/dag utan abonnemang. Rate limit per session. ### Chatt-abonnemang 99 kr/mån inkl. moms (eller 990 kr/år). Obegränsad chat med GLM 5.3, med en daglig token-cap som anti-missbruk. ### Förbetald wallet (API) Fyll på saldo via kort (Mollie) och debiteras per token. Chat-pris (SEK per 1M tokens, input/output; async levereras via webhook inom 12 h): - GLM 5.3 (`glm-5.3`): Normal 60/180 · Async (0,5×) 30/90 - GLM 5.3 Flash (`glm-5.3-flash`): Normal 60/180 · Async (0,5×) 30/90 - Gemma 4 26B (`gemma-4-26b`): Normal 15/45 · Async (0,5×) 7,5/22,5 Specialmodeller (beta-priser, debitering aktiveras efter 30 dagars varsel): - Embeddings: per 1M tokens in - Rerank: per 1 000 queries - PII-detektering: per 1M tecken in Aktuella priser: https://www.grunden.ai/docs/modeller Kontantfaktura ställs ut automatiskt vid varje betalning enligt Bokföringslagen. Standardvaluta: SEK. ### RAG (Retrieval-Augmented Generation) Ladda upp dokument (PDF/DOCX/CSV/HTML/XLSX/PPTX) i chatten. Modellen söker automatiskt i dina dokument när relevanta frågor ställs. Dokument lagras krypterat på svensk infrastruktur. ## Juridik och compliance - [Användarvillkor](https://www.grunden.ai/terms) - [Integritetspolicy](https://www.grunden.ai/privacy) - [Data Processing Agreement (DPA)](https://www.grunden.ai/dpa) — för B2B-personuppgifts- behandling. - [AI-förordningen (EU AI Act)](https://www.grunden.ai/ai-act) — vår roll som distributör av GLM 5.3 (GPAI) och kundens ansvar. ### GDPR - Art. 17 (radering): implementerad via `DELETE /v1/account` och webbgränssnittets profil-sida. Atomisk DB-radering + storage-cleanup. - Art. 15 (insyn): `GET /v1/audit-log` + data-export via profil-sidan. - Art. 28 (DPA): tillgänglig på /dpa. - Art. 30 (registerförteckning): upprätthållen internt. - BFL-konflikt med GDPR art. 17 löses via pseudonymisering — belopp, datum och org-nummer bevaras 7 år per BFL; personuppgifter raderas. ### EU AI Act - Klassning: begränsad risk (art. 50.1) — generativt text-system. - User-disclosure implementerad i chat-UI. ### Sub-processors Alla inom EU/EES: GleSYS AB (VPS+DNS, SE), 6G AI Sweden AB (GPU, SE), AI Iron AB (GPU, SE), Mollie B.V. (betalningar, NL), Proton AG (SMTP, CH). Lista: https://www.grunden.ai/sub-processors ## Kontakt - hej@grunden.ai — allmänna frågor och support - privacy@grunden.ai — GDPR / personuppgifter - security@grunden.ai — säkerhetsincidenter ## Maskinläsbara resurser - [OpenAPI 3.1 spec](https://www.grunden.ai/openapi.json) - [llms.txt](https://www.grunden.ai/llms.txt) — kort sammanfattning - [AI-plugin manifest](https://www.grunden.ai/.well-known/ai-plugin.json) - [Sitemap](https://www.grunden.ai/sitemap.xml)