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.
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" }
} ] }| Champ | Obligatoire | Contenu |
|---|---|---|
event_id | oui | un identifiant unique, par exemple un UUID. Renvoyer le même event_id ne crée pas de doublon : vous pouvez réessayer sans risque |
name | oui | le nom de l'événement : lettres, chiffres, _ . : -, 64 caractères au plus |
platform | oui | web, ios, android ou server |
occurred_at | oui | la date et l'heure, avec le fuseau (Z ou +02:00) |
path, referrer | non | la page et le site d'origine |
utm | non | source, medium, campaign, term, content |
gclid | non | l'identifiant de clic Google Ads, s'il est dans l'URL |
link_id | non | l'identifiant du lien ChottuLink qui a amené l'install (voir plus bas) |
user_ref | non | votre identifiant interne de l'utilisateur, pour relier ses événements |
props | non | d'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énement | Nom | Où |
|---|---|---|
| Clic sur un bouton de téléchargement | download_click | site |
| Première ouverture de l'app | install | app |
| Compte créé | au choix, par exemple sign_up | app ou serveur |
| Action métier (réservation, achat…) | au choix | app 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
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 :
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é.
Les installs et ChottuLink
Pour savoir quel lien a amené une install :
- à la première ouverture, demandez au SDK ChottuLink les données d'attribution de
l'installation (
getAttributionData()) ; - s'il renvoie un lien, envoyez son identifiant dans
link_idde l'événementinstall.
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_refest 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,pathou 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éponse | Cause |
|---|---|
401 invalid_key | clé absente, fausse ou révoquée |
400 | corps illisible, aucun événement, ou plus de 100 |
413 | envoi de plus de 256 Kio |
403 space_suspended | espace suspendu |
502 | Provenio est momentanément injoignable : réessayez plus tard, avec les mêmes event_id |