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.
| Pakke | npm | Anvendelse |
|---|---|---|
@frihet/sdk | SDK til Node.js / TypeScript | |
frihet | CLI 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:
| Valgmulighed | Type | Standard | Beskrivelse |
|---|---|---|---|
apiKey | string | -- | Din API-nøgle (obligatorisk) |
baseUrl | string | https://api.frihet.io/v1 | API'ens base-URL |
timeout | number | 30000 | Timeout 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:
| Ressource | Egenskab | Metoder |
|---|---|---|
| Fakturaer | frihet.invoices | list, retrieve, create, update, del, search, markPaid, send, pdf, createBatch |
| Udgifter | frihet.expenses | list, retrieve, create, update, del, search, createBatch |
| Kunder | frihet.clients | list, retrieve, create, update, del, search |
| Leverandører | frihet.vendors | list, retrieve, create, update, del, search |
| Produkter | frihet.products | list, retrieve, create, update, del, search |
| Tilbud | frihet.quotes | list, retrieve, create, update, del, search, pdf, send |
| Webhooks | frihet.webhooks | list, retrieve, create, update, del + verifySignature (statisk) |
| Intelligens | frihet.intelligence | context, 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');
}
}
| Klasse | HTTP-kode | Hvornår |
|---|---|---|
AuthenticationError | 401 | API-nøgle er ugyldig eller mangler |
NotFoundError | 404 | Ressource ikke fundet |
ValidationError | 400 / 422 | Ugyldige inputdata |
RateLimitError | 429 | Antal forespørgsler overskredet |
TimeoutError | -- | Intet svar inden for den konfigurerede timeout |
APIError | Andre | Generisk 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
| Variabel | Beskrivelse |
|---|---|
FRIHET_API_KEY | API-nøgle (alternativ til frihet login i CLI eller SDK'ens konstruktør) |
FRIHET_API_URL | Tilpasset base-URL |
Mere information
- API REST — komplet reference til endpoints
- Webhooks — begivenheder og signaturverifikation
- GitHub-repository — kildekode, issues, bidrag
- npm @frihet/sdk | npm frihet