# Intégration RevenueCat

URL: https://traqio.app/fr/docs/integrations/revenuecat
Last updated: 2026-10-14

Envoyez le webhook RevenueCat à Traqio : achats, renouvellements et remboursements rejoignent l’installation qui les a générés : le ROAS sans republier l’app.

**RevenueCat** gère les abonnements et les achats in-app, et signale chaque transaction par un webhook. Envoyé à Traqio, ce webhook apporte des revenus vérifiés — premiers achats, renouvellements, remboursements — sur l’installation qui les a générés, de serveur à serveur : des renouvellements des mois plus tard continuent de compter pour la campagne qui a amené l’utilisateur, sans nouvelle version de l’app.

## Mise en place

### Définissez le même identifiant utilisateur dans les deux SDK

```ts
await Purchases.logIn(user.id);   // RevenueCat — becomes app_user_id
Traqio.setUserId(user.id);         // Traqio — the SAME value
```

Traqio retrouve l’installation d’un achat par `(app, app_user_id)`. Un identifiant différent de chaque côté, ce sont des revenus enregistrés mais jamais attribués. Voir [Identité](https://traqio.app/fr/docs/concepts/identity#user-id).

### Copiez l’URL du webhook et l’en-tête

Dans la console : votre produit → Intégrations → Revenus → RevenueCat. Copiez l’**URL du webhook** (`https://api.traqio.app/webhooks/revenuecat`) et la valeur de l’**En-tête Authorization** (`Bearer …`) qu’affiche **Générer un secret**. Il n’est affiché **qu’une fois** : Traqio n’en garde qu’une empreinte, donc un secret perdu se remplace (générez-en un nouveau, puis révoquez l’ancien) mais ne se réaffiche jamais. Chaque produit a son propre secret.

### Ajoutez le webhook dans RevenueCat

Tableau de bord RevenueCat → votre projet → Integrations → Webhooks → Add. Collez l’URL et l’en-tête, choisissez l’app, et envoyez sandbox, production ou les deux.

> **L’en-tête est un secret — et ce n’est pas votre clé SDK** Il authentifie les appels de RevenueCat ; gardez-le hors de votre app et de votre dépôt. La clé SDK à sa place est rejetée avec 401 invalid webhook secret.

### Envoyez un webhook de test

Le **Send test webhook** de RevenueCat arrive comme une livraison `TEST` : journalisée, jamais comptée. Ensuite, un achat sandbox depuis un build de debug apparaît comme *Sandbox — branchement vérifié*, avec le prix que Traqio a lu. Ce sont les achats de production qui sont comptés.

## Ce que fait chaque événement RevenueCat

| Type RevenueCat | Dans Traqio |
| --- | --- |
| INITIAL_PURCHASE, RENEWAL, NON_RENEWING_PURCHASE, UNCANCELLATION | un achat — des revenus, transmis à Meta et TikTok |
| CANCELLATION avec un prix négatif | un remboursement — revenu négatif, jamais transmis, jamais facturé |
| CANCELLATION sans prix ou à prix nul | journalisé uniquement : une résiliation ne fait bouger aucun argent |
| REFUND_REVERSED | revenu positif : le remboursement a été annulé |
| EXPIRATION | journalisé uniquement |
| TEST et tout le reste | journalisé uniquement |

- Les achats **sandbox** sont listés dans la console et ne sont jamais comptés ni transmis — les transmettre apprendrait aux réseaux à enchérir pour des achats qui n’ont jamais eu lieu.
- **Les montants sont bruts** : ce que l’acheteur a payé, dans la devise de l’achat, avant commission du store et taxes. Les pourcentages de commission et de taxes de RevenueCat sont stockés mais pas appliqués.
- Les **informations d’essai** (type de période, conversion de l’essai) sont conservées, pour pouvoir répondre à la question « de l’essai au payant ».

## Si les achats sont aussi suivis dans l’app

Les achats sont indexés sur l’identifiant de transaction **du store**. Si votre app suit aussi l’achat avec son `transactionId`, les deux arrivent sur la même clé et comptent une seule fois — avec le montant vérifié de RevenueCat. Voir [Compter un achat une seule fois](https://traqio.app/fr/docs/concepts/events-and-revenue#transaction-id).

## Questions fréquentes

**L’en-tête Authorization de RevenueCat est-il ma clé SDK ?**
Non. La clé SDK est publique — elle est embarquée dans votre app. L’en-tête du webhook porte un secret distinct qui authentifie les appels de serveur à serveur de RevenueCat et ne doit jamais se trouver dans l’app. Coller la clé SDK fait échouer chaque livraison avec 401 invalid webhook secret.

**Que se passe-t-il si un achat arrive avant que Traqio ait vu l’installation ?**
Les revenus sont quand même enregistrés, mais non attribués : ils apparaissent comme non rapprochés dans le rapport des revenus. Ils sont rapprochés quand l’identifiant utilisateur dont Traqio dispose pour l’installation est le même que l’app_user_id de RevenueCat — c’est pourquoi l’identifiant utilisateur doit être défini des deux côtés.

**Les remboursements RevenueCat sont-ils déduits ?**
Oui. Une CANCELLATION RevenueCat avec un prix négatif est un remboursement : Traqio l’enregistre comme un revenu négatif, si bien que chaque total le déduit. Il n’est jamais facturé comme une conversion ni transmis à Meta ou TikTok. Une CANCELLATION sans prix négatif est une simple résiliation d’abonnement et ne fait bouger aucun argent.
