Démarrer gratuitement Contactez notre département commercial

Une API pour libérer tout le potentiel des domiciliations SEPA

Négociez des eMandats en quelques minutes et réglez simultanément leur paiement.

Créer un abonnement

Tout le monde peut établir un formulaire pour obtenir le numéro de compte d'un client mais êtes-vous sûr qu'il mènera à un mandat valide? Avez-vous vraiment envie de valider des IBAN ou de vérifier que la banque de votre client accepte les virements SEPA? Nous souhaitons que vous puissiez intégrer en quelques minutes. Il suffit de copier/coller le code ci-dessous pour être opérationnel en un rien de temps. Et ceci sans augmenter la complexité de votre site web/application.

<?php
$host = "https://api.twikey.com";
$apitoken = "**API_TOKEN**";
$ct = **ct**;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$host/creditor");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"apiToken=$apitoken");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
$result = json_decode($server_output);
$auth = $result->{'Authorization'} ;
curl_close ($ch);

$payload = http_build_query([
    "ct" => $ct,
    "email" => "info@twikey.com",
    "firstname" => "Info",
    "lastname" => "Twikey",
    "l" => "en",
    "address" => "Abbey road",
    "city" => "Liverpool",
    "zip" => "1526",
    "country" => "BE",
    "mobile" => "",
    "iban" => "",
    "bic" => "",
    "mandateNumber" => "",
    "contractNumber" => ""
]);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"$host/creditor/prepare");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: $auth"));
curl_setopt($ch, CURLOPT_POSTFIELDS,$payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
var_dump(json_decode($server_output));
curl_close ($ch);
?>
var https = require('https'),
    querystring = require('querystring');

var host = "api.twikey.com",
    apitoken = "**API_TOKEN**",
    ct = **ct**,
    authorization = null,
    options = {
        host: host,
        port: '443',
        path: '/creditor',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    };

var req = https.request(options, function (res) {
    res.setEncoding('utf8');
    authorization = res.headers.authorization;
    console.log("authorization : ",authorization);
    options.path = '/creditor/prepare';
    var inviteReq = https.request(options, function (res) {
        res.on('data', function (chunk) {
            console.log("Redirect to : "+chunk)
        });
    });
    inviteReq.data = querystring.encode({
        ct: ct,
        email: "info@twikey.com",
        firstname: "Info",
        lastname: "Twikey",
        l: "en",
        address: "Abby road",
        city: "Liverpool",
        zip: "1526",
        country: "BE",
        mobile: "",
        iban: "",
        bic: "",
        mandateNumber: "",
        contractNumber: ""
    });
    inviteReq.end();
});
req.data = querystring.encode({apiToken: apitoken});
req.end();
import java.io.*;
import java.lang.String;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;

import static javax.xml.bind.DatatypeConverter.parseHexBinary;

public class TwikeyAPI {

    public static final String UTF_8 = "UTF-8";

    //from_creditor_env
    private static final String TEMPLATE_ID = "**ct**";// id of contract template in https://www.twikey.com/r/admin#/c/template
    private static final String API_TOKEN = "**API_TOKEN**"; // found in https://www.twikey.com/r/admin#/c/settings/ei

    public static void main(String... args) throws GeneralSecurityException, ExecutionException, InterruptedException, IOException {

        String query = java.lang.String.format("apiToken=%s", API_TOKEN);

        URL myurl;
        HttpURLConnection con;
        DataOutputStream output;
        String sessionToken;

        // login
        {
            myurl = new URL("https://api.twikey.com/creditor");
            con = (HttpURLConnection)myurl.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setDoOutput(true);
            con.setDoInput(true);

            output = new DataOutputStream(con.getOutputStream());
            output.writeBytes(query);
            output.close();

            sessionToken = con.getHeaderField("Authorization");
            con.disconnect();
            System.out.println("Authorization:" + sessionToken);
        }

        // prepare new contract and redirect user
        if(sessionToken != null){
            Map<String,String> params = new HashMap<>();
            params.put("ct",TEMPLATE_ID);
            params.put("email","info@twikey.com");
            params.put("firstname","Info");
            params.put("lastname","Twikey");
            params.put("l","en");
            params.put("address","Abbey road");
            params.put("city","Liverpool");
            params.put("zip","1526");
            params.put("country","BE");
            params.put("mobile","");
            params.put("vatno","");
            params.put("iban","");
            params.put("bic","");
            params.put("mandateNumber","");
            params.put("contractNumber","");

            myurl = new URL("https://api.twikey.com/creditor/prepare");
            con = (HttpURLConnection)myurl.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setRequestProperty("Authorization", sessionToken);
            con.setDoOutput(true);
            con.setDoInput(true);

            output = new DataOutputStream(con.getOutputStream());
            output.writeBytes(getPostDataString(params));
            output.flush();
            output.close();

            int responseCode=con.getResponseCode();

            StringBuilder response = new StringBuilder();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                String line;
                BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream()));
                while ((line=br.readLine()) != null) {
                    response.append(line);
                }
            }

            con.disconnect();
            System.out.println("Url to redirect too:" + response);
        }
    }

    private static String getPostDataString(Map<String, String> params) throws UnsupportedEncodingException {
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for(Map.Entry<String, String> entry : params.entrySet()){
            if (first)
                first = false;
            else
                result.append("&");

            result.append(URLEncoder.encode(entry.getKey(), UTF_8));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(), UTF_8));
        }

        return result.toString();
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace TestWebApp
{
    public static class TwikeyAPI
    {
        private const string baseAddress = "https://api.twikey.com";
        private const string API_TOKEN = "**API_TOKEN**"; // Twikey settings > ERP Info > ERP API Token

        static void Main(string[] args)
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(baseAddress);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var content = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("apiToken", API_TOKEN)
                });
                content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
                var result = client.PostAsync("/creditor", content).Result;
                string resultContent = result.Content.ReadAsStringAsync().Result;
                Console.WriteLine("Response was : "+resultContent);
            }
        }
    }
}
require 'net/http'
require 'json'
require "uri"

ct = **ct**;
apiToken = "**API_TOKEN**";

uri = URI.parse("https://api.twikey.com")
http = Net::HTTP.new(uri.host, uri.port)

request = Net::HTTP::Post.new(uri + "/creditor")
request.set_form_data({
    "apiToken" => apiToken
})
response = http.request(request)
authHeader = response['Authorization']

request = Net::HTTP::Post.new(uri + "/creditor/prepare")
request['Authorization'] = authHeader
request.set_form_data({
    "ct" => ct,
    # "mandateNumber" => "Mandate001",
    "email" => "info@twikey.com",
    "firstname" => "Info",
    "lastname" => "Twikey",
    "l" => "nl",
    "address" => "Derbystraat 43",
    "city" => "Sint Denijs Westrem",
    "zip" => "9051",
    "country" => "BE",
    "mobile" => "",
    "iban" => "",
    "bic" => ""
})
response = http.request(request)
invite = JSON.parse(response.body)

puts "Redirecting to "+invite["url"]
import hmac
import time
import base64
import struct
import hashlib
import binascii
import httplib
import urllib
import urllib2
import json

ct = **ct**
url = "https://api.twikey.com"
params = urllib.urlencode({'apiToken': '**API_TOKEN**'})
req = urllib2.Request(url+"/creditor", params)
req.add_header("Accept","application/json")
req.add_header("Content-type", "application/x-www-form-urlencoded")
response = urllib2.urlopen(req)
authorization = response.headers["Authorization"]

params = urllib.urlencode({
    "ct": ct,
    "email": "info@twikey.com",
    "firstname": "Info",
    "lastname": "Twikey",
    "l": "en",
    "address": "Abby road",
    "city": "Liverpool",
    "zip": "1526",
    "country": "BE",
    "mobile": "",
    "iban": "",
    "bic": "",
    "mandateNumber": "",
    "contractNumber": ""
})

req = urllib2.Request(url+"/creditor/prepare",params)
req.add_header("Content-type", "application/x-www-form-urlencoded")
req.add_header("Authorization",authorization)
req.add_header("Accept","application/json")
response = urllib2.urlopen(req)

invite = json.loads(response.read())
print "Redirecting to "+invite["url"]

API TWIKEY

Négociez des eMandats en quelques minutes et réglez simultanément leur paiement.

FLUX COMPLET

Règlement des eMandats, remise des transactions à la banque et vérification des paiements. Notre API se charge de tout.

FLEXIBILITÉ TOTAL

A utiliser avec une banque ou un PSP.

PAS DE LOCK-IN

Intégration harmonieuse via REST. Support pour Json, Xml, ...


A partir d'un site web

Fournissez-nous les métadonnées nécessaires pour recevoir un lien vers votre environnement dédicacé, avec différentes options de signature et un mandat signé comme résultat final.

Dans votre App

Intégrez notre API pour conclure des eMandats sans soucis. Pas besoin d'une App supplémentaire.

Dans vos publipostages

Vous utilisez un CRM et souhaitez lancer un publipostage? Générez des invitations en masse via notre API et suivez qui a signé quand.

Synchronisation totale

Recevez toute l'information sur les eMandats, nouveaux, mis à jour ou annulés et synchronisez ceci avec votre propre back office. Nous captons tout changement à partir de quelle source que ce soit et vous transmettons cette information.

Téléchargement de mandats

Les PDF signés restent la propriété du marchant. Téléchargez-les via notre API à des fins de stockage interne.

Transactions automatisées

Créez vos propres plans de paiement via notre API.

Nouveaux prélèvements

Les transactions peuvent être transmises à partir de différentes sources. Il suffit de nous ransmettre le numéro de mandat, le montant et la communication et nous nous chargeons du reste.

Suivi des paiements

Suivez toutes les transactions payées et impayées. Recevez les détails de chaque transaction.

Remboursements

Vous devez effectuer un remboursement pour un mandat SEPA? Notre API permet de le préparer ou nous pouvons nous en charger.


Voulez-vous utiliser notre API comme intégrateur?

Assistance

Nous aidons nos partenaires à choisir la meilleure intégration possible.

Flexible

Utilisez notre API à partir de n'importe quelle interface. Vos systèmes back office tels qu'ERP, CRM et autres peuvent échanger simultanément les mêmes données.

Complétez le formulaire ci-dessous et nous vous contacterons.