SDK Zekin

Vos votes et votre billetterie, sur votre propre site.

Une balise script, deux lignes de configuration, et vos pages de vote, vos fiches de nominés et votre billetterie s’affichent chez vous — paiement compris.

Commencer →

Démarrage

Le SDK est un fichier JavaScript à poser sur n’importe quel site — WordPress, Shopify, une page HTML, une application React ou Vue. Il affiche vos données réelles, gère la recherche, les filtres, la pagination, le paiement et son suivi. Vous n’écrivez aucun appel réseau.

Intégration complète
<div id="votes"></div>

<script src="https://cdn.zekin.me/zekin-sdk.js"></script>
<script>
  const zekin = Zekin.init({
    apiUrl: "https://api.zekin.me/api/v1",
    brandDomain: "ma-marque.com",
  });

  zekin.nomineeList("#votes", { edition: "vibrations-vocales/edition-3" });
</script>

Si votre site est construit avec un empaqueteur, le SDK s’installe aussi comme dépendance.

En modules
import { init } from "@zekin/sdk";

const zekin = init({ apiUrl: "https://api.zekin.me/api/v1", brandDomain: "ma-marque.com" });
zekin.nomineeList("#votes", { edition: "vibrations-vocales/edition-3" });
Une seule chose à faire avant d’intégrer : ajoutez le domaine de votre site dans Configuration → Domaines autorisés de votre espace Zekin. Sans lui, le navigateur bloque les appels et les composants restent vides.
Le SDK ne demande aucune clé. Il n’affiche que les données déjà publiques de vos évènements, et votre marque se reconnaît à son domaine. Une clé serait de toute façon lisible par vos visiteurs — un fichier JavaScript ne cache rien.

Composants

Cinq composants, à monter là où vous voulez dans votre page. Chacun prend un sélecteur (ou un élément) et ses options. L’édition se désigne par son adresse — celle que vous lisez dans votre espace — ou par son identifiant.

zekin.nomineeList()La page de vote
zekin.nomineeList("#votes", {
  edition: "vibrations-vocales/edition-3",
  // ou :  event: "vibrations-vocales"   → l'édition en cours
  showEventDetails: true,                // false si votre page a déjà son en-tête
});

Présentation de l’évènement, grille des nominés, recherche, filtre par catégorie, pagination, vote et partage.

zekin.nomineePage()La fiche d'un nominé
zekin.nomineePage("#nomine", {
  edition: "vibrations-vocales/edition-3",
  keyword: "juliette-kidjo",   // le mot-clé du nominé
});
zekin.ticketPage()La billetterie
zekin.ticketPage("#billetterie", { edition: "mon-festival/edition-2026" });

Tarifs, date, lieu, décompte, galerie, et l’achat.

zekin.voteForm()Le formulaire de vote seul
zekin.voteForm("#voter", {
  edition: "vibrations-vocales/edition-3",
  keyword: "juliette-kidjo",
  onApproved: (nomine, votes) => console.log("vote confirmé", nomine, votes),
});
zekin.ticketForm()Le tunnel d'achat seul
zekin.ticketForm("#acheter", { edition: "mon-festival/edition-2026" });

Les deux derniers existent pour les sites qui écrivent eux-mêmes la page qui entoure le formulaire : panier, code promo, moyens de paiement et suivi de la transaction restent pris en charge.

Chaque composant renvoie une poignée avec .destroy(), et zekin.destroy()les démonte tous. À appeler si votre site change de page sans la recharger, pour que les décomptes s’arrêtent avec l’écran qui les portait.

Modèles

Le SDK reprend d’office les modèles que vous avez choisis dans votre espace — Marque blanche → Apparence. Vous n’avez rien à recopier ici : ce que vous sélectionnez là-bas est ce que vos visiteurs voient. Trente-six mises en page réparties en sept familles.

FamilleModèlesCe qu’elle habille
nomineeListlist-1 … list-5La grille des nominés — galerie, podium, rails, mur, fiches
nomineenominee-1 … nominee-5La page publique d'un nominé
eventDetailsdetails-1 … details-5La présentation de l'évènement, en tête de la liste
ticketticket-1 … ticket-5La page de billetterie
checkoutform-1 … form-5Le formulaire de paiement — vote et achat
ticketCartcart-1 … cart-5Le panier, à l'intérieur du tunnel d'achat
paymentSuccesssuccess-1 … success-5L'animation jouée quand un paiement aboutit

Une intégration peut toutefois imposer un modèle, par exemple pour qu’une page précise de votre site s’écarte du reste.

Imposer un modèle
Zekin.init({
  apiUrl: "https://api.zekin.me/api/v1",
  templates: { nomineeList: "list-4", checkout: "form-2" },
});
Les modèles d’une même famille proposent exactement les mêmes actions: ce qui les distingue est la mise en page, jamais ce qu’on peut y faire. Changer de modèle ne retire donc jamais un bouton de vote ni un tarif à vos visiteurs.

Apparence

Les couleurs et l’arrondi viennent eux aussi de votre espace. Vous pouvez les remplacer, par exemple pour accorder le SDK à la charte du site qui l’accueille. Chaque valeur que vous ne donnez pas garde celle de votre marque.

Couleurs, arrondi, typographie
Zekin.init({
  apiUrl: "https://api.zekin.me/api/v1",
  theme: {
    primaryColor: "#7C3AED",
    secondaryColor: "#22D3EE",
    accentColor: "#F59E0B",

    // Le bouton qui engage le paiement, réglable à part
    voteButtonBackground: "#111827",
    voteButtonTextColor: "#FFFFFF",

    radius: 16,                            // 0 à 24 px
    fontFamily: "Inter, system-ui, sans-serif",

    // Pour poser le SDK sur un site sombre
    background: "#0F172A",
    surface: "#1E293B",
    textColor: "#E2E8F0",

    css: ".zk-cols { gap: 28px }",          // la porte de sortie
  },
});

Ces réglages s’appliquent aussi en cours de route, sans rien recharger — pratique si votre site propose un mode sombre.

Changer de couleur à la volée
zekin.setTheme({ primaryColor: "#EF4444" });
Le bouton de paiement se règle à partdes trois couleurs de marque : c’est lui qui porte vos revenus, et vous pouvez vouloir l’écarter de votre palette pour qu’il ressorte. Si vous n’en donnez que le fond, la couleur du texte est calculée pour rester lisible.

Affichage

Deux réglages commandent les listes : le nombre de nominés par ligne et le nombre de lignes par page. Leur produit fait la pagination — ci-dessous, 5 × 3, soit quinze nominés par page. C’est ce qui garde une page pleine, sans dernière ligne à moitié vide.

Nombre par ligne et par page
Zekin.init({
  apiUrl: "https://api.zekin.me/api/v1",
  layout: { perRow: 5, rowsPerPage: 3 },   // 15 nominés par page
});
Le nombre par ligne ne vaut que sur grand écran.En dessous, la grille se resserre d’elle-même à trois, deux puis une colonne : quatre nominés par ligne sur un téléphone ne sont pas quatre nominés lisibles. Bornes : 1 à 8 par ligne, 1 à 10 lignes. Sans réglage, ce sont ceux de votre espace qui s’appliquent.

Référence

Les options acceptées par Zekin.init().

OptionTypeRôle
apiUrlrequisstringL'adresse de l'API, segment de version compris.
brandDomainstringLe domaine de votre marque. Inutile si le SDK tourne dessus.
locale"fr" | "en"Défaut : fr. Décide aussi de la langue des réponses.
templatesobjetImpose un modèle par famille. Omis : celui de votre espace.
themeobjetCouleurs, arrondi, typographie, CSS libre.
layoutobjetperRow (1–8) et rowsPerPage (1–10).
shadowbooléenIsolation des styles. Défaut : activée, à garder.
onErrorfonctionReçoit toute erreur d'appel, pour votre journal.

Et ce que le client rend une fois initialisé.

Méthodes du client
zekin.nomineeList(cible, options)   // la page de vote
zekin.nomineePage(cible, options)   // la fiche d'un nominé
zekin.ticketPage(cible, options)    // la billetterie
zekin.voteForm(cible, options)      // le formulaire de vote seul
zekin.ticketForm(cible, options)    // le tunnel d'achat seul

zekin.setTheme({ ... })             // couleurs : effet immédiat
zekin.setTemplates({ ... })         // modèles : au prochain montage
zekin.setLayout({ ... })            // par ligne / par page
zekin.setLocale("en")               // langue

zekin.destroy()                     // démonte tout
Le SDK affiche et encaisse depuis le navigateur de vos visiteurs. Pour appeler Zekin depuis votre serveur— lire vos éditions, engager un paiement, suivre une transaction, ou éprouver une intégration en bac à sable — c’est l’API par clé d’organisation qu’il faut employer. Votre clé se génère depuis votre espace, rubrique Organisations ; écrivez-nous pour en recevoir la documentation.

Une question sur l’intégration ?

Notre équipe technique vous répond directement.

Contacter l’équipe dev