Hurtigstart
Base URL: https://tidvis.se/api/public/v1. Alle kall bruker JSON. Public API er del av Enterprise-planen.
- 1. Opprett en API-klient under Sign → Innstillinger → API og lagre
client_idogclient_secret. - 2. Bytt dem mot et
access_tokenvia OAuth2 client credentials. - 3. Opprett en avtale, last opp en PDF, legg til deltakere og send.
curl -X POST https://tidvis.se/api/public/v1/oauth/access-token \
-H "Content-Type: application/json" \
-d '{"client_id":"tvc_...","client_secret":"tvs_..."}'Autentisering
OAuth2 client credentials. Bytt client_id+client_secret mot en JWT som er gyldig i 1 time. Send Authorization: Bearer <access_token> på alle påfølgende kall.
/oauth/access-tokenHent et access token (1t TTL).
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"expires_at": "2026-06-07T13:00:00.000Z"
}/oauth/access-tokenTilbakekall gjeldende token (krever Authorization-header).
Avtaler
/agreementsOpprett et avtaleutkast (status: draft).
curl -X POST https://tidvis.se/api/public/v1/agreements \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Arbeidsavtale Anna","expires_in_days":14,"bankid_required":true}'/agreementsList avtaler. Støtter ?status, ?limit, ?cursor.
/agreements/:idHent en avtale med deltakere og status.
/agreements/:id/eventsAudit-spor (sent, viewed, signed, completed...).
/agreements/:id/downloadHent signert PDF (returnerer signed URL eller binært innhold).
Deltakere
/agreements/:id/participantsLegg til en signatar (kun i draft-tilstand).
{
"name": "Anna Andersson",
"email": "anna@example.com",
"role": "signer"
}PDF-dokumenter
/agreements/:id/documents/mainLast opp hoveddokumentet. Støtter application/pdf (binært) eller JSON med base64.
# JSON / base64
curl -X PUT https://tidvis.se/api/public/v1/agreements/$ID/documents/main \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"filename":"avtale.pdf","content_base64":"JVBERi0..."}'
# Eller binært
curl -X PUT https://tidvis.se/api/public/v1/agreements/$ID/documents/main \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/pdf" \
--data-binary @avtale.pdfLivssyklus
/agreements/:id/lifecycleSend eller avbryt en avtale.
{"action": "send"} // eller "cancel"BankID
Du kan kreve svensk BankID-signering per avtale. Sett bankid_required: true ved opprettelse (eller via PATCH før sending). Når avtalen sendes signerer hver deltaker med BankID på mobil eller desktop i stedet for å tegne sin signatur.
Krav
- Kontoen må ha planen Sign Pro og tillegget BankID aktivert.
- Pris: 100 BankID-signaturer inkludert per måned, deretter 5 SEK/signatur.
- Uten tillegget returnerer
POST /agreements/:id/lifecyclemedaction: "send"feilen402 bankid_disabled.
Opprett BankID-avtale
curl -X POST https://tidvis.se/api/public/v1/agreements \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Arbeidsavtale Anna",
"bankid_required": true
}'Svar (forkortet):
{
"id": "agr_...",
"status": "draft",
"bankid_required": true,
"document": { "uploaded": false, "sha256": null },
"participants": []
}Webhook-payload når BankID brukes
For avtaler med bankid_required: true berikes agreement.signed-hendelsen med en signature-blokk. Av personvernhensyn eksponeres verken personnummer, sertifikater eller OCSP-svar via API-et eller webhooks.
{
"event": "agreement.signed",
"agreement_id": "agr_...",
"participant": { "id": "p_...", "email": "anna@example.com" },
"signature": {
"method": "bankid",
"signer_name": "Anna Andersson",
"signed_at": "2026-06-11T08:42:11.000Z"
}
}Webhooks
Tidvis leverer hendelser til din URL via POST JSON. Hvert kall er signert med HMAC-SHA256 i headeren X-Tidvis-Signature: sha256=<hex> basert på din signing_secret og raw body. Mislykkede leveranser forsøkes på nytt med eksponentiell backoff i opptil 24t.
/webhooksRegistrer en webhook.
{
"client_id": "<api_client uuid>",
"url": "https://din-app.no/webhooks/tidvis",
"events": ["agreement.sent","agreement.signed","agreement.completed"]
}/webhooksList registrerte webhooks.
/webhooks/:idSlett en webhook.
Hendelser
agreement.sentagreement.viewedagreement.signedagreement.completedagreement.cancelledagreement.expired
For avtaler med bankid_required: true inkluderer agreement.signed/agreement.completed også en signature-blokk. Se BankID.
Verifiser signatur (Node.js)
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(rawBody, header, secret) {
const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
const given = (header || "").replace(/^sha256=/, "");
return timingSafeEqual(Buffer.from(expected), Buffer.from(given));
}Feilkoder
| HTTP | Code | Betydning |
|---|---|---|
| 400 | invalid_request | Feil input. |
| 401 | unauthorized | Mangler/ugyldig token. |
| 402 | plan_required | Kontoen mangler Enterprise-plan. Inkluderer upgrade_url. |
| 402 | bankid_disabled | Avtalen har bankid_required: true men kontoen mangler BankID-tillegget. |
| 403 | forbidden | Mangler rettigheter til ressursen. |
| 404 | not_found | Ressursen ble ikke funnet. |
| 409 | conflict | Ugyldig tilstandsovergang (f.eks. sende allerede sendt avtale). |
| 429 | rate_limited | For mange kall. |
| 500 | server_error | Serverfeil – prøv igjen. |
Rate-grenser
Standardgrense: 60 kall/minutt per klient og 600/time for opplastinger. Ved overskridelse får du 429 rate_limited med Retry-After-header. Trenger du mer? Kontakt oss.
MCP & AI-agenter
Tidvis Sign eksponerer en Model Context Protocol-server slik at AI-agenter (ChatGPT, Claude Desktop, egne agenter) kan opprette, sende og spore avtaler med ett enkelt verktøykall. Discovery-manifest finnes på /.well-known/mcp.json. En dedikert landingsside ligger på /no/utviklere/mcp.
Endepunkt
POST https://tidvis.se/api/mcp
Authorization: Bearer <access_token>
Content-Type: application/json
Accept: application/json, text/event-streamScopes
API-tokens kan begrenses til spesifikke scopes. For MCP kreves mcp:connect + valgfri kombinasjon av:
agreements:read– hent avtaler & eventsagreements:create– opprett utkast & deltakereagreements:send– send avtaler til signeringagreements:cancel– avbryt avtalerbilling:checkout– generer checkout-lenkemcp:connect– kreves for MCP-tilgang
Tilgjengelige verktøy
tidvis_sign_create_agreementtidvis_sign_add_participanttidvis_sign_upload_pdftidvis_sign_send_agreementtidvis_sign_cancel_agreementtidvis_sign_get_agreementtidvis_sign_list_eventstidvis_sign_create_checkout
Claude Desktop-konfigurasjon
{
"mcpServers": {
"tidvis-sign": {
"url": "https://tidvis.se/api/mcp",
"headers": { "Authorization": "Bearer YOUR_ACCESS_TOKEN" }
}
}
}Agent-checkout & betal-per-avtale
To måter en agent kan la sluttkunden betale:
- Sign Pro (abonnement) – månedsavgift per sete, ubegrenset antall avtaler. Bruk
tidvis_sign_create_checkoutmedproduct: "sign_pro_monthly"og ønsket antall seter. - Betal per avtale – 19 SEK/avtale som forhåndsbetalte kreditter, perfekt for lavvolums-agenter. Bruk
product: "sign_per_agreement"og antall kreditter (1–500). Kreditter trekkes automatisk nårsend_agreementkjøres på free-plan-kontoer.
Checkout-verktøyet returnerer en Stripe-hostet URL som agenten viser til sluttkunden. Ved 402 plan_required på send_agreement mangler kontoen både kreditter og Sign Pro – svaret inneholder en upgrade_url agenten kan lenke til.