API-dokumentation v1.0
Postman-samling ← Dashboard
Introduktion
Certiflow REST API låter dig integrera elektronisk signering direkt i dina egna system. Skicka dokument, övervaka signeringsstatus, hantera signatärer och ta emot realtidshändelser via webhooks.
Base URL https://certiflow.se/api/v1
💡
Alla svar returneras som JSON. Alla anrop kräver headern Content-Type: application/json och Authorization: Bearer {din-api-nyckel}.
🌍
API:et är GDPR-kompatibelt. All data lagras inom EU. Känslig data krypteras i vila med AES-256.
Autentisering
Alla API-anrop måste inkludera din API-nyckel i Authorization-headern som en Bearer-token. Hämta din nyckel från API-nycklar i dashboarden.
⚠️
Håll aldrig din live-nyckel (sw_live_…) i frontend-kod eller publika repositorier. Använd sw_test_… under utveckling.
HTTP Headers
Authorization: Bearer sw_live_a1b2c3d4e5f6g7h8i9j0…
Content-Type:  application/json
Accept:        application/json
JavaScript (fetch)
const SW_KEY = 'sw_live_a1b2c3…';

const res = await fetch('https://certiflow.se/api/v1/documents', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${SW_KEY}`,
    'Content-Type':  'application/json'
  }
});
const data = await res.json();
PHP (cURL)
$ch = curl_init('https://certiflow.se/api/v1/documents');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER     => [
    'Authorization: Bearer sw_live_a1b2c3…',
    'Content-Type: application/json'
  ]
]);
$response = json_decode(curl_exec($ch), true);
Dokument
GET /documents Lista alla dokument
ParameterTypBeskrivning
pagevalfriintegerSida (standard: 1)
per_pagevalfriintegerResultat per sida, max 100 (standard: 20)
statusvalfristringFiltrera: pending, signed, draft, expired
searchvalfristringFritextsök på dokumenttitel
cURL
curl -G https://certiflow.se/api/v1/documents \
  -H "Authorization: Bearer sw_live_…" \
  --data-urlencode "status=pending" \
  --data-urlencode "per_page=10"
200 OK
JSON
{
  "data": [{
    "id":         "doc_a1b2c3d4",
    "title":      "Anställningsavtal",
    "status":     "pending",
    "created_at": "2025-11-22T09:14:00Z",
    "expires_at": "2025-12-22T09:14:00Z",
    "signers":    2,
    "signed":     1
  }],
  "meta": {
    "total":    47,
    "page":     1,
    "per_page": 20
  }
}
POST /documents Skapa & ladda upp dokument
FältTypBeskrivning
titlekravstringDokumenttitel (max 255 tecken)
file_base64kravstringPDF-fil kodad i Base64 (max 25 MB)
signerskravarrayLista av signatärsobjekt (se nedan)
signers[].namekravstringSignatärens fullständiga namn
signers[].emailkravstringE-postadress dit inbjudan skickas
signers[].bankidvalfribooleanKräv BankID-verifiering (standard: false)
signers[].ordervalfriintegerSigneringsordning (1 = signerar först)
expires_daysvalfriintegerGiltighetstid i dagar (standard: 30)
messagevalfristringPersonligt meddelande i inbjudans-e-post
send_immediatelyvalfribooleanSkicka inbjudan direkt (standard: true)
JavaScript
const res = await fetch('/api/v1/documents', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type':  'application/json'
  },
  body: JSON.stringify({
    title:            'Anställningsavtal',
    file_base64:     'JVBERi0xLjQ…', // Base64-kodad PDF
    expires_days:    30,
    message:         'Vänligen signera bifogat avtal.',
    signers: [{
      name:   'Anna Lindström',
      email:  '[email protected]',
      bankid: true,
      order:  1
    }]
  })
});
const { id, signing_url } = await res.json();
201 Created
JSON
{
  "id":           "doc_a1b2c3d4",
  "title":        "Anställningsavtal",
  "status":       "pending",
  "signing_url":  "https://certiflow.se/sign/tok_xyz123",
  "created_at":  "2025-11-22T09:14:00Z",
  "expires_at":   "2025-12-22T09:14:00Z",
  "signers": [{
    "id":        "sig_111aaa",
    "name":     "Anna Lindström",
    "email":    "[email protected]",
    "status":   "pending",
    "bankid":   true
  }]
}
POST /documents/{id}/send Skicka inbjudan till signatärer
cURL
curl -X POST https://certiflow.se/api/v1/documents/doc_a1b2c3d4/send \
  -H "Authorization: Bearer sw_live_…"
200 OK
JSON
{ "success": true, "sent_to": 2 }
GET /documents/{id}/download Ladda ned signerad PDF
💡
Returnerar binär PDF-data med Content-Type: application/pdf. Spara med korrekt MIME-typ.
cURL
curl https://certiflow.se/api/v1/documents/doc_a1b2/download \
  -H "Authorization: Bearer sw_live_…" \
  --output signerat_avtal.pdf
Signatärer
POST /documents/{id}/remind Skicka manuell påminnelse
FältTypBeskrivning
signer_idvalfristringSkicka bara till en specifik signatär. Utelämna för att påminna alla.
messagevalfristringAnpassat påminnelsemeddelande
200 OK
JSON
{ "success": true, "reminded": 1 }
Webhooks
Certiflow skickar HTTP POST-anrop till din endpoint när händelser inträffar. Alla webhook-anrop inkluderar headern X-Certiflow-Signature för verifiering.
🔐
Verifiera alltid signaturen: hash_hmac('sha256', $payload, $webhookSecret) === $header
Tillgängliga händelser
document.createdDokument skapat (ej skickat)
document.sentInbjudan skickad till alla signatärer
document.viewedSignatär öppnade dokumentet
document.signedEn signatär signerade
document.completedAlla signatärer har signerat — slutgiltig PDF redo
document.expiredDokumentet har utgått utan komplett signering
document.declinedEn signatär nekade att signera
signer.bouncedInbjudans-e-post studsar
Webhook payload — document.completed
{
  "event":      "document.completed",
  "timestamp": "2025-11-22T14:42:00Z",
  "data": {
    "id":           "doc_a1b2c3d4",
    "title":        "Anställningsavtal",
    "status":       "signed",
    "completed_at": "2025-11-22T14:42:00Z",
    "pdf_url":      "https://certiflow.se/api/v1/documents/doc_a1b2/download"
  }
}
Felhantering
API:et returnerar alltid JSON vid fel. Kontrollera HTTP-statuskoden och fältet error.code för maskinsläsbara felkoder.
Felsvar
{
  "error": {
    "code":    "VALIDATION_ERROR",
    "message": "Fältet 'signers' saknas eller är tomt.",
    "field":   "signers"
  }
}
HTTP-statusKodBeskrivning
400BAD_REQUESTFelaktigt formaterad JSON eller ogiltig parameter
401UNAUTHORIZEDSaknad eller ogiltig API-nyckel
403FORBIDDENNyckeln saknar behörighet för denna åtgärd
404NOT_FOUNDResursen hittades inte
422VALIDATION_ERRORValideringsfel — se fältet field
429RATE_LIMITEDFör många anrop — se Rate limiting
500SERVER_ERRORInternt serverfel — kontakta support
Rate limiting
API-anrop begränsas per nyckel. Vid överskridning returneras statuskod 429. Headrarna X-RateLimit-Remaining och X-RateLimit-Reset finns i varje svar.
PlanAnrop / månadBurst (anrop / minut)
Starter1 00030
Business10 000120
EnterpriseObegränsatObegränsat
Konto
GET /account Hämta kontoinformation och kvoter
200 OK
JSON
{
  "name":   "Anna Lindström",
  "email":  "[email protected]",
  "plan":   "business",
  "usage": {
    "documents":   { "used": 47, "limit": 100 },
    "api_calls":   { "used": 1240, "limit": 10000 },
    "storage_mb":  { "used": 2355, "limit": 10240 }
  }
}