Hop til hovedindhold

SDK og CLI

Frihet tilbyder et officielt TypeScript SDK og en CLI til at administrere din forretning via kode eller terminal. Begge pakker er udgivet på npm.

PakkenpmAnvendelse
@frihet/sdknpmSDK til Node.js / TypeScript
frihetnpmCLI til terminal

Installation

SDK

npm install @frihet/sdk

CLI

npm install -g frihet

Autentifikation

Du skal bruge en API-nøgle. Generer den under Indstillinger > Sikkerhed i app.frihet.io. Nøgler begynder med fri_.

SDK

import Frihet from '@frihet/sdk';

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

Yderligere valgmuligheder:

ValgmulighedTypeStandardBeskrivelse
apiKeystring--Din API-nøgle (obligatorisk)
baseUrlstringhttps://api.frihet.io/v1API'ens base-URL
timeoutnumber30000Timeout i millisekunder

CLI

frihet login
# Indtast din API-nøgle interaktivt

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

Nøglen gemmes i ~/.frihet/config.json med tilladelser 0600. Du kan også bruge miljøvariablen FRIHET_API_KEY.


SDK — Hurtig start

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}`);
}

Opret en faktura

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

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

Søg og opdater

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

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

Marker faktura som betalt og send via e-mail

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

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

CLI — Hurtig start

Se forretningsstatus

frihet status
# Revenue: EUR 12.500,00
# Expenses: EUR 3.200,00
# Net: EUR 9.300,00

frihet status --month 2026-02

Administrer fakturaer

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

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

# Se detaljer
frihet invoices get inv_abc123

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

# Marker som betalt
frihet invoices paid inv_abc123

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

Administrer udgifter

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

# Opret udgift
frihet expenses create --desc "Månedlig hosting" --amount 49.99 --category software --vendor "Hetzner"

Administrer kunder

# List kunder
frihet clients list

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

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

Tilgængelige ressourcer

SDK'et eksponerer følgende ressourcer som egenskaber for Frihet instansen:

RessourceEgenskabMetoder
Fakturaerfrihet.invoiceslist, retrieve, create, update, del, search, markPaid, send, pdf, createBatch
Udgifterfrihet.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 metoder returnerer et Page<T> objekt:

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

Fejilhåndtering

SDK'et kaster typede fejl for hver type fejl:

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 fundet');
} else if (err instanceof AuthenticationError) {
console.log('API-nøgle er 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 igen om ${err.retryAfter}s`);
} else if (err instanceof TimeoutError) {
console.log('Timeout');
}
}
KlasseHTTP-kodeHvornår
AuthenticationError401API-nøgle er ugyldig eller mangler
NotFoundError404Ressource ikke fundet
ValidationError400 / 422Ugyldige inputdata
RateLimitError429Antal forespørgsler overskredet
TimeoutError--Intet svar inden for den konfigurerede timeout
APIErrorAndreGenerisk serverfejl

Automatiske genforsøg

SDK'et genforsøger automatisk forespørgsler, der modtager koder 429 (rate limit) eller 5xx (serverfejl), op til 3 gange med eksponentiel backoff. Du behøver ikke at implementere genforsøgslogik.


Idempotens

For oprettelsesoperationer kan du sende en idempotencyKey for at undgå dubletter i tilfælde af genforsøg:

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

Verificer webhooks

SDK'et inkluderer en statisk metode til at verificere HMAC-SHA256 signaturen af webhooks:

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

const isValid = Webhooks.verifySignature(
rawBody, // string eller Buffer af body
req.headers['x-frihet-signature'], // signaturheader
'whsec_tu_secreto', // webhook-hemmelighed
);

Miljøvariabler

VariabelBeskrivelse
FRIHET_API_KEYAPI-nøgle (alternativ til frihet login i CLI eller SDK'ens konstruktør)
FRIHET_API_URLTilpasset base-URL

Mere information