Rakenna sähköisen allekirjoituksen integraatio
Bink API tarjoaa kehittäjille tehokkaat työkalut dokumenttien hallintaan ja sähköiseen allekirjoitukseen – suoraan omasta sovelluksestasi.
Miksi Bink API?
Yksi rajapinta – kaikki mitä tarvitset sähköiseen allekirjoitukseen ja dokumenttien hallintaan.
Dokumenttien hallinta
Luo, hae ja hallitse dokumentteja ohjelmallisesti. Tuki useille tiedostomuodoille ja kansiorakenteelle.
Sähköinen allekirjoitus
Lähetä dokumentit allekirjoitettavaksi yhdellä API-kutsulla. Tukee sekä sähköposti- että vahvaa tunnistautumista.
Webhook-ilmoitukset
Vastaanota reaaliaikaiset tilamuutosilmoitukset dokumenteille. Ei tarvetta pollingille – Bink lähettää HTTP POST -kutsun automaattisesti.
Turvallinen ja luotettava
API-avainpohjainen tunnistautuminen, HMAC-SHA256-allekirjoitetut webhookit ja EU-alueen mukainen tietosuoja.
Nopea integraatio
RESTful JSON API, selkeä dokumentaatio ja yksinkertaiset endpointit – integraatio valmiina minuuteissa.
Monen tiimin tuki
Tenant-pohjainen arkkitehtuuri mahdollistaa useiden organisaatioiden ja tiimien hallinnan yhdellä API-avaimella.
Sandbox-ympäristö
Testaa integraatiota riskittömästi sandbox-ympäristössä ennen tuotantoon siirtymistä. Telia- ja maksupalvelutarjoajamme-demot käytettävissä.
Näin pääset alkuun
Viisi yksinkertaista vaihetta Bink API:n käyttöönottoon.
Luo tili
Rekisteröidy osoitteessa app.bink.fi ja vahvista sähköpostiosoitteesi. Tilin luominen on ilmaista.
Luo API-avain
Siirry asetuksiin kohdasta Settings → API ja klikkaa Create API Key. Kopioi avain talteen – sitä ei voi nähdä enää myöhemmin.
Tutustu Swagger-dokumentaatioon
Interaktiivinen API-dokumentaatio on vapaasti saatavilla osoitteessa sandbox-api.bink.fi/docs – ei vaadi kirjautumista.
Testaa sandbox-ympäristössä
Kokeile API-kutsuja sandbox-ympäristössä osoitteessa sandbox.bink.fi. Käytössä on Telia- ja maksupalvelutarjoajamme demoversiot, joilla voit testata kaikki ominaisuudet riskittömästi.
Siirry tuotantoon
Kun integraatio on testattu sandboxissa, vaihda API-osoitteeksi api.bink.fi ja aloita tuotantokäyttö. Tuotannon API-osoite: https://api.bink.fi
Esimerkkipyyntö
Luo dokumentti ja liitä allekirjoittajat yhdellä kutsulla.
# Sandbox-ympäristö (testaus) curl -X POST https://sandbox-api.bink.fi/api/documents/quick-create \ -H "x-api-key: YOUR_API_KEY" \ -F "file=@sopimus.pdf" \ -F "title=Yhteistyösopimus" \ -F "tenantId=your-tenant-id" \ -F "signingMethod=email" \ -F "signingMessage=Tarkista ja allekirjoita perjantaihin mennessä." \ -F 'signees=[ {"email":"matti@esimerkki.fi","name":"Matti Meikäläinen"}, {"email":"maija@esimerkki.fi","name":"Maija Meikäläinen","pic":"010101-123X"} ]' # Tuotanto: vaihda URL → https://api.bink.fi/api/documents/quick-create
{ "message": "Document created successfully", "document": { "id": "doc_abc123", "name": "Yhteistyösopimus", "status": "pending", "downloadUrl": "https://...", "emailLanguage": "fi" }, "signees": [ { "email": "matti@esimerkki.fi", "name": "Matti Meikäläinen" }, { "email": "maija@esimerkki.fi", "name": "Maija Meikäläinen" } ], "contentType": "application/pdf" }
API-referenssi
Kaikki käytettävissä olevat endpointit yhdellä silmäyksellä. Täydellinen interaktiivinen dokumentaatio: sandbox-api.bink.fi/docs ↗
Luo dokumentin lataamalla tiedoston multipart-muodossa ja liittää allekirjoittajat yhdellä kutsulla.
Request body · multipart/form-data
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| file* | binary | Ladattava tiedosto |
| title | string | Valinnainen. Oletuksena tiedoston nimi. |
| tenantId* | string | Organisaation tunniste |
| folderId | string | Valinnainen. Jos vastaa olemassa olevaa kansiota samassa tenantissa, dokumentti luodaan sinne. Muutoin dokumentti luodaan ilman kansiota. |
| signingMethod | string | Valinnainen. Allekirjoitustapa: "email" (sähköpostivarmenne, oletusarvo) tai "strong" (vahva tunnistautuminen). |
| signingMessage | string | Valinnainen. Henkilökohtainen viesti allekirjoitussähköpostissa. Esim. "Tarkista ja allekirjoita perjantaihin mennessä." |
| emailLanguage | string | Valinnainen. Allekirjoitussähköpostien kieli tälle dokumentille. Oletuksena tenantin sähköpostikieli. |
| signingOrderEnabled | boolean | Valinnainen. Kun true, allekirjoittajat allekirjoittavat järjestyksessä (sequential signing). |
| signees* | JSON string | JSON-taulukko allekirjoittajista: [{"email":"…","name":"…"}]. Vahvaa tunnistautumista varten voidaan lisätä pic-kenttä (henkilötunnus): {"email":"…","name":"…","pic":"010101-123X"}. Jos signingOrderEnabled on true, allekirjoitusjärjestys noudattaa taulukon järjestystä. |
Vastaukset
{ "message": "string", "document": { "downloadUrl": "string", "emailLanguage": "fi" }, "signees": [ { /* signee objects */ } ], "contentType": "string" }
Palauttaa kirjautuneen käyttäjän dokumentit valitussa tenantissa.
Query-parametrit
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| tenantId* | string | Organisaation tunniste |
| folderId | string | null | Valinnainen. Kansion tunniste. |
Vastaukset
[ { "id": "string", "tenantId": "string", "folderId": "string", "name": "string", "status": "signed", "pinned": true, "emailLanguage": "fi", "createdAt": "2026-02-17T11:57:11.607Z", "updatedAt": "2026-02-17T11:57:11.607Z" } ]
{ "error": "string" }
Palauttaa yksittäisen dokumentin tiedot tunnisteen perusteella.
Polkuparametrit
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| documentId* | string | Dokumentin tunniste |
Vastaukset
{ "id": "string", "tenantId": "string", "folderId": "string", "name": "string", "status": "signed", "pinned": true, "emailLanguage": "fi", "downloadUrl": "string", "createdAt": "2026-02-17T11:57:11.607Z", "updatedAt": "2026-02-17T11:57:11.607Z" }
{ "error": "string" }
Lähettää allekirjoituskutsut kaikille dokumentin allekirjoittajille.
Polkuparametrit
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| documentId* | string | Dokumentin tunniste |
Request body · application/json
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| emailLanguage | string | Valinnainen. Allekirjoitussähköpostien kieli. Esim. "fi", "en", "sv". |
Vastaukset
{ "message": "string", "result": [ { "email": "string", "status": "string", "data": {}, "error": {} } ], "credit": { "tenantId": "string", "email": 0, "strong": 0 } }
{ "error": "string" }
{ "error": "string", "reminderCooldownUntil": "2026-02-17T11:57:11.637Z" }
Palauttaa kirjautuneen käyttäjän organisaatiot (tenantit). Ei parametreja.
Vastaukset
[ { "id": "string", "name": "string", "logo": "string", "emailLanguage": "fi", "createdAt": "2026-02-17T11:57:11.621Z", "updatedAt": "2026-02-17T11:57:11.621Z" } ]
{ "error": "string" }
Palauttaa kirjautuneen käyttäjän jäsenyystiedot valitussa organisaatiossa.
Polkuparametrit
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| tenantId* | string | Organisaation tunniste |
Vastaukset
{ "userId": "string", "tenantId": "string", "role": "owner", "createdAt": "2026-02-17T11:57:11.621Z", "updatedAt": "2026-02-17T11:57:11.621Z" }
{ "error": "string" }
Bink lähettää HTTP POST -kutsun palveluusi aina kun dokumentin tila muuttuu. Tätä ei kutsuta itse – konfiguroit endpointtisi Bink-hallintapaneelissa ja Bink kutsuu sitä automaattisesti.
Dokumentin elinkaari
Saapuvat headerit
x-bink-signature– HMAC-allekirjoitus (t=...,v1=...)x-bink-webhook-id– Uniikin toimituksen tunnistex-bink-webhook-event– Tapahtuman tyyppix-bink-webhook-attempt– Toimitusyrityksen numero
Retry-käyttäytyminen
- Enintään 3 toimitusyritystä
- 5 sekunnin aikakatkaisu per yritys
- Vaadi 2xx-vastaus 5 sekunnissa
- Kolmannen epäonnistumisen jälkeen ei uusia yrityksiä
Tärkeät huomiot
- Käytä raw bodyä (ei parsittua JSON:ia)
- Validoi timestamp
tuusimisen hyökkäyssuojan vuoksi - Älä käytä uudelleenohjausta (3xx = epäonnistuminen)
- Idempotenssi: tunnista duplikaatit
x-bink-webhook-id:n avulla
Payload-rakenne
{ "id": "60a10d68-e4f7-4380-af3a-e92d6f0599c6", // vastaa x-bink-webhook-id "type": "document.status_changed", "occurredAt": "2026-04-22T20:03:57.134Z", "tenantId": "3e02f5b5-162a-4ff1-b343-03bbf032d4a1", "data": { "documentId": "cfc80de9-1e3f-4c72-b490-73381c1702da", "oldStatus": "draft", "newStatus": "in_process", "changedAt": "2026-04-22T20:03:57.134Z" } }
Payload-kentät
| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| id | string (uuid) | Uniikin webhook-tapahtuman tunniste – vastaa x-bink-webhook-id:tä |
| type | string | Tapahtuman tyyppi: "document.status_changed" |
| occurredAt | string (ISO 8601) | Tapahtuman aikaleima |
| tenantId | string (uuid) | Organisaation tunniste |
| data.documentId | string (uuid) | Dokumentin tunniste |
| data.oldStatus | string | Edellinen tila: "draft" tai "in_process" |
| data.newStatus | string | Uusi tila: "in_process" tai "signed" |
| data.changedAt | string (ISO 8601) | Tilanmuutoksen aikaleima |
Allekirjoituksen varmennus (HMAC-SHA256)
const crypto = require("crypto"); const secret = process.env.BINK_WEBHOOK_SECRET; function verifyBinkSignature(req, webhookSecret) { // 1. Lue x-bink-signature -headeri const raw = req.headers["x-bink-signature"]; const header = Object.fromEntries( raw.split(",").map((p) => p.split("=")) ); // 2. Rakenna allekirjoitettu payload: t.rawBody const payload = req.rawBody; const signedPayload = `${header.t}.${payload}`; // 3. Laske HMAC-SHA256 ja vertaa constant-time -metodilla const expected = crypto .createHmac("sha256", webhookSecret) .update(signedPayload) .digest("hex"); return crypto.timingSafeEqual( Buffer.from(header.v1), Buffer.from(expected) ); } // Käyttö: const ok = verifyBinkSignature(req, secret); if (!ok) return res.status(401).json({ error: "Invalid signature" });
Virhetilanteiden käsittely
| Tilanne | Suositeltu vastaus | Seuraus |
|---|---|---|
| Virheellinen allekirjoitus | 401 tai 400 | Ei uudelleenyritystä |
| Tuntematon tapahtuma | 400 | Ei uudelleenyritystä |
| Käsittelyvirhe palvelimella | Muu kuin 2xx | Uudelleenyritys (max 3) |
| Duplikaattitapahtuma | 200 – ohita hiljaisesti | Tunnista x-bink-webhook-id:llä |
Turvallisuustarkistuslista
x-bink-signature jokaisessa pyynnössät) uusimisen hyökkäyssuojan varmistamiseksiPalvelun health check -endpoint. Palauttaa palvelun tilan.
Vastaukset
{ "message": "string" }
Kevyt prosessitason terveystarkistus. Sopii kuormantasaajan tai monitorointityökalun tarkistuspisteeksi.
Vastaukset
{ "status": "string" }
Valmiina rakentamaan?
Luo ilmainen tili, generoi API-avain ja testaa integraatiota sandbox-ympäristössä jo tänään.