Consoliq.no
Teknisk dokumentasjon

API-spesifikasjon

Komplett oversikt over alle eksterne og interne API-er Consoliq bruker — endepunkter, request/response-eksempler og autentiseringsmetoder.

Autentiseringsmetoder

Consoliq bruker fire ulike autentiseringsmønstre avhengig av integrasjon.

JWT Bearer (Supabase Auth)

Brukerøkter sendes som Authorization: Bearer <jwt>. Edge functions og server functions validerer token og kjører under brukerens RLS.

Internal service secret

Cron- og maskin-til-maskin-kall bruker x-internal-service-secret (eller Bearer-token) som matches mot INTERNAL_SERVICE_SECRET.

HMAC webhook signature

Stripe-webhooks verifiseres med HMAC-SHA256 over timestamp.body mot webhook-secret. Avviser forespørsler eldre enn 5 minutter.

Tripletex session token

Consumer + employee token byttes mot en kortvarig session token. Brukes som HTTP Basic Auth (0:<sessionToken>) mot Tripletex API.

Tripletex API

Regnskapsdata: kontoer, balanser, fakturaer, ansatte. Base URL: https://tripletex.no/v2

PUT
https://tripletex.no/v2/token/session/:create
Query params

Bytter consumer- og employee-token mot en session token (gyldig opptil utløpsdato).

Request

PUT /v2/token/session/:create
  ?consumerToken=eyJ0b2tlbiI...
  &employeeToken=eyJ0b2tlbiI...
  &expirationDate=2026-12-31

Response

{
  "value": {
    "token": "abc123...",
    "expirationDate": "2026-12-31",
    "employeeId": 12345
  }
}
GET
/v2/ledger/account
Basic Auth (0:sessionToken)

Henter kontoplan (alle hovedbokskontoer).

Request

GET /v2/ledger/account?from=0&count=1000
Authorization: Basic MDpzZXNzaW9uVG9rZW4=

Response

{
  "values": [
    { "id": 1, "number": 1500, "name": "Kundefordringer", "type": "ASSET" }
  ]
}
GET
/v2/ledger/accountingPeriod/openBalance
Basic Auth (0:sessionToken)

Henter åpningsbalanser per periode for konsolidering.

GET
/v2/invoice
Basic Auth (0:sessionToken)

Lister fakturaer med filtrering på dato og status.

Stripe (via Lovable Cloud connector gateway)

All Stripe-trafikk rutes gjennom https://connector-gateway.lovable.dev/stripe — vi sender aldri ekte Stripe-secret-key direkte.

POST
/functions/v1/create-checkout
JWT Bearer

Oppretter Stripe Checkout Session for abonnement.

Request

POST /functions/v1/create-checkout
Authorization: Bearer <user-jwt>
Content-Type: application/json

{ "priceId": "pro_monthly", "env": "live" }

Response

{ "url": "https://checkout.stripe.com/c/pay/cs_..." }
POST
/functions/v1/create-credit-checkout
JWT Bearer

Engangskjøp av AI-credits via Stripe Checkout.

POST
/functions/v1/create-portal-session
JWT Bearer

Returnerer URL til Stripe Customer Portal for fakturahåndtering.

Response

{ "url": "https://billing.stripe.com/p/session/..." }
POST
/functions/v1/payments-webhook?env=live
HMAC SHA-256 (stripe-signature)

Stripe webhook-handler. Behandler customer.subscription.created/updated/deleted og checkout.session.completed.

Request

POST /functions/v1/payments-webhook?env=live
stripe-signature: t=1714370400,v1=abc123...
Content-Type: application/json

{
  "type": "customer.subscription.created",
  "data": { "object": { "id": "sub_...", "status": "active", ... } }
}

Response

{ "received": true }
POST
/functions/v1/get-stripe-price
Public (anon key)

Henter pris-metadata for å vise i pricing-siden.

Lovable AI Gateway

AI-CFO-funksjonalitet. Base URL: https://ai.gateway.lovable.dev/v1

POST
/v1/chat/completions
Bearer LOVABLE_API_KEY

OpenAI-kompatibel chat completions med tool calling. Brukes av AI-CFO for å spørre over regnskapsdata. Modeller: google/gemini-2.5-flash (default), openai/gpt-5, m.fl.

Request

POST /v1/chat/completions
Authorization: Bearer <LOVABLE_API_KEY>
Content-Type: application/json

{
  "model": "google/gemini-2.5-flash",
  "messages": [
    { "role": "system", "content": "Du er en CFO-assistent..." },
    { "role": "user", "content": "Hva er marginen i Q1?" }
  ],
  "tools": [{ "type": "function", "function": { "name": "get_balance", ... } }]
}

Response

{
  "choices": [{
    "message": {
      "role": "assistant",
      "tool_calls": [{ "function": { "name": "get_balance", "arguments": "{...}" } }]
    }
  }],
  "usage": { "prompt_tokens": 412, "completion_tokens": 89 }
}

Lovable Cloud (Supabase)

Database, Auth, Storage og Realtime. Base URL: https://qceojikacfialgkhwvls.supabase.co

POST
/auth/v1/token?grant_type=password
apikey: <anon-key>

E-post/passord-innlogging. Returnerer JWT access_token og refresh_token.

Request

{ "email": "user@firma.no", "password": "..." }

Response

{
  "access_token": "eyJhbGc...",
  "refresh_token": "...",
  "user": { "id": "uuid", "email": "..." }
}
POST
/auth/v1/signup
apikey: <anon-key>

Bruker-registrering med e-postverifisering.

GET
/rest/v1/:table
JWT Bearer + apikey

PostgREST queries mot tabeller. RLS håndhever tilgang per organisasjon.

Request

GET /rest/v1/accounts?select=*&organization_id=eq.<uuid>
Authorization: Bearer <jwt>
apikey: <anon-key>
WS
wss://...supabase.co/realtime/v1/websocket
JWT Bearer (i query)

Realtime-subscriptions på postgres_changes for live-oppdateringer i UI.

Interne public hooks

Endepunkter under /api/public/* kalles av cron-jobber og interne replays. Beskyttet av INTERNAL_SERVICE_SECRET eller admin-JWT.

POST
/api/public/hooks/tripletex-sync
x-internal-service-secret eller admin JWT

Trigger full Tripletex-sync for alle organisasjoner med konfigurert integrasjon. Idempotent.

Request

POST /api/public/hooks/tripletex-sync
x-internal-service-secret: <secret>
Content-Type: application/json

{ "force": false }

Response

{
  "success": true,
  "total_synced": 1284,
  "duration_ms": 8421,
  "results": [{ "entity": "accounts", "synced": 412 }, ...]
}
POST
/api/public/hooks/generate-board-packs
x-internal-service-secret eller admin JWT

Genererer planlagte board-pack PDFs for organisasjoner med skjema.

POST
/api/public/hooks/process-report-jobs
x-internal-service-secret eller admin JWT

Plukker ventende rapport-jobber fra køen og genererer PDF/Excel.

POST
/api/public/hooks/replay-dead-letters
x-internal-service-secret eller admin JWT

Replayer feilede webhook- og sync-events fra dead-letter-køen.

Response

{ "processed": 12, "succeeded": 11, "failed": 1 }

Server functions (createServerFn)

Typed RPC fra klient til server. Kalles via TanStack Start, kjører under brukerens RLS.

POST
balance.getConsolidated
JWT Bearer (auto)

Henter konsolidert balanse for et konsern med eliminering og valutakonvertering.

Request

{
  "data": {
    "groupId": "uuid",
    "periodStart": "2026-01-01",
    "periodEnd": "2026-03-31"
  }
}
POST
aiCfo.askQuestion
JWT Bearer (auto)

Sender spørsmål til AI-CFO. Bruker tool calling mot regnskapsdata. Trekker AI-credits.

POST
tripletex.testConnection
JWT Bearer (auto)

Verifiserer at lagrede Tripletex-tokens er gyldige.

POST
reportJobs.enqueue
JWT Bearer (auto)

Legger en rapport-generering i kø for asynkron prosessering.

POST
admin.listOrganizations
JWT Bearer + admin role

Admin-only oversikt over alle organisasjoner. Krever admin-rolle i user_roles.

PostHog Analytics

Klient-side event tracking. Kun publishable key i kode.

POST
https://eu.i.posthog.com/i/v0/e/
api_key (publishable, i body)

Capture-endepunkt for events fra nettleseren. Sendes via posthog-js SDK.

Request

{
  "api_key": "phc_...",
  "event": "report_generated",
  "distinct_id": "user-uuid",
  "properties": { "report_type": "board_pack" }
}

Hemmeligheter & secrets

Alle API-nøkler ligger i Lovable Cloud Secrets — aldri i kode eller frontend-bundle. Se docs/SECRETS.md for full liste over påkrevde miljøvariabler per integrasjon.