Skip to main content

SDK og CLI

Frihet tilbyr en offisiell TypeScript SDK og et CLI for å administrere virksomheten din fra kode eller terminal. Begge pakkene er publisert på npm.

PakkenpmBruk
@frihet/sdknpmSDK for Node.js / TypeScript
frihetnpmCLI for terminal

Installasjon

SDK

npm install @frihet/sdk

CLI

npm install -g frihet

Autentisering

Du trenger en API-nøkkel. Generer den i Innstillinger > Sikkerhet inne i app.frihet.io. Nøklene begynner med fri_.

SDK

import Frihet from '@frihet/sdk';

const frihet = new Frihet({
apiKey: 'fri_live_...',
});

Ytterligere alternativer:

AlternativTypeStandardBeskrivelse
apiKeystring--Din API-nøkkel (obligatorisk)
baseUrlstringhttps://api.frihet.io/v1API-ens base-URL
timeoutnumber30000Tidsavbrudd i millisekunder

CLI

frihet login
# Skriv inn API-nøkkelen din interaktivt

# Eller direkte:
frihet login --key fri_live_...

Nøkkelen lagres i ~/.frihet/config.json med 0600-tillatelser. Du kan også bruke miljøvariabelen FRIHET_API_KEY.


SDK — Hurtigstart

List fakturaer

import Frihet from '@frihet/sdk';

const frihet = new Frihet({ apiKey: 'fri_live_...' });

const page = await frihet.invoices.list({ limit: 10, status: 'paid' });
console.log(`${page.total} betalte fakturaer`);

for (const inv of page.data) {
console.log(`${inv.documentNumber}${inv.clientName}${inv.total}`);
}

Opprett en faktura

const invoice = await frihet.invoices.create({
clientName: 'Acme S.L.',
items: [
{ description: 'Consultoria', quantity: 10, unitPrice: 150 },
{ description: 'Desarrollo web', quantity: 1, unitPrice: 3000 },
],
taxRate: 21,
dueDate: '2026-04-15',
});

console.log(`Faktura ${invoice.documentNumber} opprettet (${invoice.total} EUR)`);

Søk og oppdater

// Søk etter tekst
const results = await frihet.clients.search('Acme');

// Oppdater en kunde
await frihet.clients.update(results.data[0].id, {
email: 'nuevo@acme.com',
fiscalZone: 'peninsula',
});

Merk faktura som betalt og send via e-post

await frihet.invoices.markPaid('inv_abc123');

await frihet.invoices.send('inv_abc123', {
recipientEmail: 'cliente@acme.com',
locale: 'es',
});

CLI — Hurtigstart

Se virksomhetsstatus

frihet status
# Inntekt: EUR 12.500,00
# Utgifter: EUR 3.200,00
# Netto: EUR 9.300,00

frihet status --month 2026-02

Administrer fakturaer

# List fakturaer
frihet invoices list --status paid --limit 5

# Søk
frihet invoices list -q "Acme"

# Se detaljer
frihet invoices get inv_abc123

# Opprett faktura
frihet invoices create --client "Acme S.L." --item "Consultoria,10,150" --tax 21

# Merk som betalt
frihet invoices paid inv_abc123

# Send via e-post
frihet invoices send inv_abc123 --to cliente@acme.com

Administrer utgifter

# List utgifter
frihet expenses list --from 2026-01-01 --to 2026-03-31

# Opprett utgift
frihet expenses create --desc "Hosting mensual" --amount 49.99 --category software --vendor "Hetzner"

Administrer kunder

# List kunder
frihet clients list

# Søk
frihet clients list -q "Acme"

# Opprett kunde
frihet clients create --name "Acme S.L." --email info@acme.com --tax-id B12345678 --zone peninsula

Tilgjengelige ressurser

SDK-en eksponerer følgende ressurser som egenskaper for Frihet-instansen:

RessursEgenskapMetoder
Fakturaerfrihet.invoiceslist, retrieve, create, update, del, search, markPaid, send, pdf, createBatch
Utgifterfrihet.expenseslist, retrieve, create, update, del, search, createBatch
Kunderfrihet.clientslist, retrieve, create, update, del, search
Leverandørerfrihet.vendorslist, retrieve, create, update, del, search
Produkterfrihet.productslist, retrieve, create, update, del, search
Tilbudfrihet.quoteslist, retrieve, create, update, del, search, pdf, send
Webhooksfrihet.webhookslist, retrieve, create, update, del + verifySignature (statisk)
Intelligensfrihet.intelligencecontext, summary, monthly, quarterly

Alle list- og search-metodene returnerer et Page<T>-objekt:

interface Page<T> {
data: T[];
total: number;
limit: number;
offset: number;
}

Feilhåndtering

SDK-en kaster typede feil for hver type svikt:

import Frihet, { AuthenticationError, NotFoundError, ValidationError, RateLimitError, TimeoutError } from '@frihet/sdk';

try {
await frihet.invoices.retrieve('no-existe');
} catch (err) {
if (err instanceof NotFoundError) {
console.log('Faktura ikke funnet');
} else if (err instanceof AuthenticationError) {
console.log('API-nøkkel ugyldig');
} else if (err instanceof ValidationError) {
console.log('Ugyldige data:', err.message, err.details);
} else if (err instanceof RateLimitError) {
console.log(`Rate limit. Prøv igjen om ${err.retryAfter}s`);
} else if (err instanceof TimeoutError) {
console.log('Tidsavbrudd');
}
}
KlasseHTTP-kodeNår
AuthenticationError401API-nøkkel ugyldig eller mangler
NotFoundError404Ressurs ikke funnet
ValidationError400 / 422Ugyldige inndata
RateLimitError429Forespørselsgrense overskredet
TimeoutError--Ingen respons innenfor konfigurert tidsavbrudd
APIErrorAndreGenerisk serverfeil

Automatiske forsøk

SDK-en forsøker automatisk på nytt forespørsler som mottar 429 (rate limit) eller 5xx (serverfeil) koder, opptil 3 ganger med eksponentiell backoff. Du trenger ikke å implementere forsøkslogikk.


Idempotens

For opprettelsesoperasjoner kan du sende en idempotencyKey for å unngå duplikater ved nye forsøk:

await frihet.invoices.create(
{ clientName: 'Acme S.L.', items: [{ description: 'Servicio', quantity: 1, unitPrice: 500 }] },
{ idempotencyKey: 'mi-clave-unica-123' }
);

Verifiser webhooks

SDK-en inkluderer en statisk metode for å verifisere HMAC-SHA256-signaturen til webhooks:

import { Webhooks } from '@frihet/sdk';

const isValid = Webhooks.verifySignature(
rawBody, // streng eller Buffer av body
req.headers['x-frihet-signature'], // signerings-header
'whsec_tu_secreto', // webhook-hemmelighet
);

Miljøvariabler

VariabelBeskrivelse
FRIHET_API_KEYAPI-nøkkel (alternativ til frihet login i CLI eller til SDK-konstruktøren)
FRIHET_API_URLTilpasset base-URL

Mer informasjon