API-dokumentation

Kleevos integrations-API

Använd Kleevo v1 API för att ladda upp dokument, skapa signeringsförfrågningar, följa status, skicka påminnelser samt avbryta eller radera dokument.

Skaffa en API-nyckel

Logga in i Kleevo, öppna Inställningar och skapa en nyckel under API-nycklar. Ge nyckeln ett namn som identifierar systemet som använder den, till exempel Production CRM eller Staging.

Den fullständiga nyckeln visas bara en gång när den skapas. Lagra den i en serverbaserad hemlighetshanterare och exponera den aldrig i webbläsarkod, mobilappar eller publika kodarkiv.

Autentisering

Skicka API-nyckeln med varje v1-anrop med antingen headern X-API-Key eller en bearer token-header.

X-API-Key: kleevo_sk_din_nyckel

# eller
Authorization: Bearer kleevo_sk_din_nyckel

API-nycklar agerar som användaren som skapade dem. Dokument som skapas via API:t visas i den användarens Kleevo-dashboard.

Bas-URL

https://api.kleevo.se/v1

Skicka ett dokument

v1 API:t använder samma uppladdningssessionsflöde som Kleevos webbapp. Skapa först en uppladdningssession, ladda sedan upp dokumentet till den returnerade försignerade URL:en och skapa därefter signeringsförfrågan med uppladdningssessionens ID.

För interaktiva integrationer bör du starta uppladdningen så snart användaren väljer en PDF, i stället för att vänta tills användaren klickar på Skicka. Medan användaren fyller i mottagare, meddelande, utgångsdatum och andra obligatoriska fält kan ditt system skapa uppladdningssessionen och ladda upp dokumentet i bakgrunden. Då känns det sista skicka-steget betydligt snabbare.

Om användaren avbryter eller lämnar flödet innan signeringsförfrågan skapas, kassera den väntande uppladdningssessionen med DELETE /v1/uploads/{id}. Väntande uppladdade dokument raderas också automatiskt efter 30 minuter om de inte används.

1. Skapa en uppladdningssession

curl -X POST https://api.kleevo.se/v1/uploads \
  -H "X-API-Key: kleevo_sk_din_nyckel"
{
  "id": "4b77f61d-6a4e-4f64-9292-f6ee7fd11423",
  "contentType": "application/pdf",
  "uploadUrl": "https://...",
  "createdAt": "2026-06-29T08:15:00Z",
  "expiresAt": "2026-06-29T08:45:00Z"
}

2. Ladda upp dokumentet

curl -X PUT "https://returnerad-upload-url" \
  -H "Content-Type: application/pdf" \
  --data-binary @anstallningsavtal.pdf

3. Skapa signeringsförfrågan

curl -X POST https://api.kleevo.se/v1/documents \
  -H "X-API-Key: kleevo_sk_din_nyckel" \
  -H "Content-Type: application/json" \
  -d '{
    "uploadSessionId": "4b77f61d-6a4e-4f64-9292-f6ee7fd11423",
    "documentName": "Anstallningsavtal.pdf",
    "sender": {
      "name": "Anna Andersson",
      "email": "anna@example.com",
      "timeZoneId": "Europe/Stockholm",
      "organization": {
        "name": "Example AB",
        "number": "559000-0000",
        "address": "Kungsgatan 1",
        "zipcode": "111 43",
        "city": "Stockholm"
      }
    },
    "signers": [
      {
        "name": "Erik Svensson",
        "email": "erik@example.com",
        "phone": "+46701234567"
      }
    ],
    "signingOrder": "AnyOrder",
    "signingMethod": "Draw",
    "excludeSocialSecurityNumber": false,
    "sendCompletedDocumentToSigners": true,
    "expiresAt": "2026-07-29",
    "message": "Please review and sign."
  }'

Använd Sequential när signerare måste signera en i taget. Använd BankId som signeringsmetod när BankID-signering är aktiverat för ditt flöde.

Fält i skickaförfrågan

uploadSessionIdObligatoriskt

Det ID som returneras av POST /v1/uploads efter att dokumentet har laddats upp.

documentNameObligatoriskt

Filnamnet som visas för avsändare och signerare. Inkludera filändelsen .pdf.

sender.nameObligatoriskt

Namn på personen eller kontot som skickar dokumentet.

sender.emailObligatoriskt

Avsändarens e-postadress.

sender.timeZoneIdValfritt

IANA-tidszon som fallback för oautentiserade utskick, till exempel Europe/Stockholm. Utskick med API-nyckel använder kontots tidszon från inställningarna. Saknade oautentiserade värden blir UTC när fältet utelämnas.

sender.organizationValfritt

Valfria företagsuppgifter som visas i signeringscertifikatet och kommunikationen. Varje underfält är valfritt: name, number, address, zipcode och city.

signersObligatoriskt

En eller flera signerare. Varje signerare kräver name. Ange email för e-postinbjudningar och phone när SMS- eller BankID-flöden behöver ett telefonnummer.

signingOrderObligatoriskt

Använd AnyOrder eller Sequential. Med Sequential bjuds signerare in i samma ordning som de förekommer i arrayen signers. Nästa signerare bjuds in först efter att aktuell signerare har slutfört signeringen. Om det bara finns en signerare behandlar Kleevo dokumentet som AnyOrder.

signingMethodObligatoriskt

Använd Draw eller BankId.

excludeSocialSecurityNumberObligatoriskt

Booleskt värde som används av BankID-signeringsflöden.

sendCompletedDocumentToSignersObligatoriskt

Booleskt värde som styr om signerare får en nedladdningslänk till den färdiga PDF-filen. Avsändaren får alltid e-postmeddelandet med det färdiga dokumentet.

expiresAtObligatoriskt

Utgångsdatum i formatet YYYY-MM-DD.

messageValfritt

Valfritt meddelande som inkluderas i signeringsinbjudningar.

Ändpunkter

POST/v1/uploads

Skapa en tillfällig uppladdningssession för dokument och få en försignerad uppladdnings-URL.

GET/v1/uploads/{id}

Hämta metadata för en väntande uppladdningssession.

DELETE/v1/uploads/{id}

Kassera en väntande uppladdningssession.

GET/v1/documents

Lista dokument som skapats av API-nyckelns användare.

POST/v1/documents

Skicka ett dokument för signering med en uppladdad dokumentsession.

GET/v1/documents/{id}

Hämta dokumentdetaljer och signerarlänkar.

POST/v1/documents/{id}/reminders

Skicka påminnelser till berättigade väntande signerare.

POST/v1/documents/{id}/cancel

Avbryt ett väntande dokument.

DELETE/v1/documents/{id}

Radera ett dokument och dess lagrade artefakter.

Anropsbegränsningar

API-anrop begränsas för att skydda tjänstens stabilitet. Gränser kan variera mellan ändpunkter och kontokonfiguration, så klienter bör kunna försöka igen med backoff.

När en gräns nås returnerar API:t 429 Too Many Requests med ett JSON-svar. När det är tillgängligt innehåller svaret även headern Retry-After med antal sekunder att vänta innan ett nytt försök.

{
  "message": "Too many requests. Please try again later."
}

Fel och utgångstid

Om du skickar ett dokument efter att uppladdningssessionen har gått ut, skapa en ny uppladdningssession, ladda upp dokumentet igen och försök skicka dokumentförfrågan på nytt.

{
  "code": "upload_session_expired",
  "message": "The temporary document upload expired."
}

Ett 409-svar betyder att uppladdningen saknas, är ofullständig, har gått ut eller inte längre kan användas. Ett 400-svar betyder att request body inte klarade valideringen.