Provenio

Guides

Envoyer vos événements first-party

Les outils d'analyse s'arrêtent au site. Pour relier une visite à une installation, puis à un compte créé, votre site et votre app envoient eux-mêmes ces moments clés à Provenio. Quelques lignes de code suffisent.

1. Créer une clé d'écriture

Dans Provenio, Paramètres › Clé first-party › Créer une clé. La clé commence par pvk_. Copiez-la tout de suite : elle n'est affichée en entier qu'une fois.

Cette clé ne sert qu'à envoyer des événements. Elle ne permet de rien lire : elle peut donc figurer dans le code de votre site ou de votre app.

  • Deux clés actives au plus. Pour en changer sans coupure : créez la nouvelle, déployez-la, puis Révoquez l'ancienne.
  • Une clé révoquée est refusée immédiatement.

2. Envoyer un événement

Une requête POST https://api.provenio.app/v1/events, avec la clé en en-tête et de 1 à 100 événements par envoi.

http
POST /v1/events
Authorization: Bearer pvk_…
Content-Type: application/json

{ "events": [ {
    "event_id": "3f6c1e2a-…",
    "name": "download_click",
    "platform": "web",
    "occurred_at": "2026-10-29T10:00:00Z",
    "path": "/telecharger",
    "referrer": "https://www.google.com/",
    "utm": { "source": "google", "medium": "cpc", "campaign": "Lancement Paris" }
} ] }
ChampObligatoireContenu
event_idouiun identifiant unique, par exemple un UUID. Renvoyer le même event_id ne crée pas de doublon : vous pouvez réessayer sans risque
nameouile nom de l'événement : lettres, chiffres, _ . : -, 64 caractères au plus
platformouiweb, ios, android ou server
occurred_atouila date et l'heure, avec le fuseau (Z ou +02:00)
path, referrernonla page et le site d'origine
utmnonsource, medium, campaign, term, content
gclidnonl'identifiant de clic Google Ads, s'il est dans l'URL
link_idnonl'identifiant du lien ChottuLink qui a amené l'install (voir plus bas)
user_refnonvotre identifiant interne de l'utilisateur, pour relier ses événements
propsnond'autres propriétés, 4 Ko au plus

Provenio répond 200 avec le nombre d'événements acceptés, de doublons et de refusés (avec la raison). Un événement refusé n'empêche pas les autres d'être enregistrés.

Les noms que Provenio reconnaît

ÉvénementNomOù
Clic sur un bouton de téléchargementdownload_clicksite
Première ouverture de l'appinstallapp
Compte crééau choix, par exemple sign_upapp ou serveur
Action métier (réservation, achat…)au choixapp ou serveur

Les deux derniers se choisissent dans Paramètres › Étapes du funnel, parmi les événements reçus ces 30 derniers jours : envoyez-les d'abord, puis choisissez-les. Ce sont les étapes « Compte créé » et « Action métier » de la section Parcours d'Acquisition. Vous pouvez envoyer d'autres événements : ils sont gardés, sans entrer dans le funnel.

Depuis un site

js
const PROVENIO_KEY = "pvk_…";

function provenio(name, extra = {}) {
  const q = new URLSearchParams(location.search);
  const utm = {};
  for (const k of ["source", "medium", "campaign", "term", "content"]) {
    const v = q.get(`utm_${k}`);
    if (v) utm[k] = v;
  }
  const body = JSON.stringify({
    write_key: PROVENIO_KEY, // sendBeacon ne pose pas d'en-tête : la clé passe dans le corps
    events: [{
      event_id: crypto.randomUUID(),
      name,
      platform: "web",
      occurred_at: new Date().toISOString(),
      path: location.pathname,
      referrer: document.referrer || undefined,
      gclid: q.get("gclid") || undefined,
      utm: Object.keys(utm).length ? utm : undefined,
      ...extra,
    }],
  });
  // Envoyé en texte simple : le navigateur n'a pas de requête préalable (CORS) à faire.
  navigator.sendBeacon("https://api.provenio.app/v1/events", body);
}

// Sur le bouton « Télécharger l'app »
document.querySelector("#telecharger")?.addEventListener("click", () => provenio("download_click"));

sendBeacon part même si le visiteur quitte la page juste après le clic. Ne mettez jamais la clé dans l'URL.

Depuis une app

À la première ouverture seulement, envoyez install. Exemple en TypeScript (React Native, Expo…), à adapter à votre stockage local :

ts
import { Platform } from "react-native";

const PROVENIO_KEY = "pvk_…";

// installId : un UUID tiré à la première ouverture et gardé sur l'appareil (AsyncStorage…).
export async function sendInstall(installId: string, linkId?: string) {
  await fetch("https://api.provenio.app/v1/events", {
    method: "POST",
    headers: { Authorization: `Bearer ${PROVENIO_KEY}`, "Content-Type": "application/json" },
    body: JSON.stringify({
      events: [{
        event_id: installId,          // toujours le même : un réessai ne compte pas deux installs
        name: "install",
        platform: Platform.OS === "ios" ? "ios" : "android",
        occurred_at: new Date().toISOString(),
        link_id: linkId,              // voir ci-dessous
      }],
    }),
  });
}

Si l'envoi échoue (pas de réseau), gardez l'événement et renvoyez-le plus tard avec le même event_id. Un événement de plus de 90 jours est refusé.

Pour savoir quel lien a amené une install :

  1. à la première ouverture, demandez au SDK ChottuLink les données d'attribution de l'installation (getAttributionData()) ;
  2. s'il renvoie un lien, envoyez son identifiant dans link_id de l'événement install.

Provenio le rapproche de la liste de vos liens, lue avec la clé REST (Connecter ChottuLink). Une install sans link_id compte comme organique.

Ce que Provenio garde, et ce qu'il ne garde pas

  • user_ref est haché dès la réception : la valeur que vous envoyez n'est jamais stockée. Envoyez quand même un identifiant interne, jamais une adresse e-mail ni un nom.
  • N'envoyez pas de donnée personnelle dans props, path ou les UTM : Provenio n'en a pas besoin pour compter.
  • Provenio n'appelle jamais votre site ni votre app : il reçoit ce que vous envoyez, rien d'autre.

Si un envoi est refusé

RéponseCause
401 invalid_keyclé absente, fausse ou révoquée
400corps illisible, aucun événement, ou plus de 100
413envoi de plus de 256 Kio
403 space_suspendedespace suspendu
502Provenio est momentanément injoignable : réessayez plus tard, avec les mêmes event_id
Revenir à l'accueil