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.
| Pakke | npm | Bruk |
|---|---|---|
@frihet/sdk | SDK for Node.js / TypeScript | |
frihet | CLI 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:
| Alternativ | Type | Standard | Beskrivelse |
|---|---|---|---|
apiKey | string | -- | Din API-nøkkel (obligatorisk) |
baseUrl | string | https://api.frihet.io/v1 | API-ens base-URL |
timeout | number | 30000 | Tidsavbrudd 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:
| Ressurs | Egenskap | Metoder |
|---|---|---|
| Fakturaer | frihet.invoices | list, retrieve, create, update, del, search, markPaid, send, pdf, createBatch |
| Utgifter | 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-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');
}
}
| Klasse | HTTP-kode | Når |
|---|---|---|
AuthenticationError | 401 | API-nøkkel ugyldig eller mangler |
NotFoundError | 404 | Ressurs ikke funnet |
ValidationError | 400 / 422 | Ugyldige inndata |
RateLimitError | 429 | Forespørselsgrense overskredet |
TimeoutError | -- | Ingen respons innenfor konfigurert tidsavbrudd |
APIError | Andre | Generisk 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
| Variabel | Beskrivelse |
|---|---|
FRIHET_API_KEY | API-nøkkel (alternativ til frihet login i CLI eller til SDK-konstruktøren) |
FRIHET_API_URL | Tilpasset base-URL |
Mer informasjon
- API REST — komplett referanse for endepunkter
- Webhooks — hendelser og signeringsverifisering
- GitHub-repo — kildekode, issues, bidrag
- npm @frihet/sdk | npm frihet