API de cohorte

Premium

En bref : L'API de rapports des cohortes donne aux annonceurs un moyen pratique pour obtenir les données de cohorte. L'API permet d'intégrer les données de cohorte dans les BI et les systèmes d'automatisation marketing.

API de rapports des cohortes

L'API de rapports des cohortes permet d'obtenir les performances des campagnes de cohorte depuis la plateforme AppsFlyer. Elle fonctionne comme le tableau de bord des cohortes

À l'attention des développeurs

  • Dates : les dates ou périodes se réfèrent aux dates de lifetime (LTV), c'est-à-dire à la date d'attribution (conversion) de l'utilisateur et non celle de l'activité elle-même.
  • Valeurs booléennes : doit être true ou false (sensible à la casse).
  • Trafic d'agence transparent et non transparent : la source média du trafic issue d'une agence correspond toujours à l'agence et non à la source média d'origine. Pour l'instant, la version de cohorte UI de cohorte se comporte différemment. 
  • Application unique : l'API de Cohorte est une solution pour application unique. Elle contraste avec le tableau de bord de cohorte qui prend en charge plusieurs applications pour même appel. 
  • Actualisation des données : cf caractéristiques et limitations

Mode d'emploi de l'API

Les sections contiennent les informations pour générer et utiliser l'API de Cohorte. 

Faits relatifs à l'API de cohorte

Présentation L'appel de l'API se compose du chemin d'accès, d'en-têtes et d'un JSON contenant la demande de données. Les données sont renvoyées par défaut dans un fichier CSV.
Chemin

https://hq1.appsflyer.com/api/cohorts/v1/data/app/app_id

Paramètres du chemin d'accès (obligatoire)
  • app_id : l'identifiant de l'application tel qu'il apparaît dans le tableau de bord d'AppsFlyer. Utilisez-le exactement tel qu'il s'affiche dans le tableau de bord.

Paramètres de requête

(facultatif)

Les résultats sont renvoyés au format CSV ou JSON. La structure du fichier CSV est en tableau, tandis que celle du fichier JSON est conçue pour être enregistrée.

  • [Défaut] csv le nom du fichier dépend de la requête.
  • json contenant une requête et une partie résultat
  • Exemple : format=json
  • https://hq1.appsflyer.com/api/cohorts/v1/data/app/app_id?format=json
Méthode HTTP POST
Types de contenu acceptés application/json
Autorisation
Limites dans le temps
  • La date la plus ancienne prise en charge, 730 jours avant la date du jour (c'est à dire 2 ans).
  • Période de requête maxi : 60 jours.
Limitation de taux
  • Débit d'appel d'API limité à 60 appels par minute et 50 000 appels par jour et par compte
  • Les requêtes renvoient jusqu'à 30 000 lignes
Valeurs booléennes Toujours en minuscules : true, false

En-têtes de requête

Clé

valeur Obligatoire
Type de contenu application/json Oui 
Authorization Porteur api_token_placeholder Oui 
Accepter application/json Oui 

Paramètres de filtrage et de regroupement

Utilisez les paramètres de filtrage suivants pour obtenir les données nécessaires. 

Nom du paramètre

Description Obligatoire 

cohort _type

Le type d'attribution de cohorte (conversion) est l'un des suivants : user_acquisitionretargetingunified

  • Unifiée : somme des performances de campagnes d'acquisition d'utilisateurs et de retargeting.
  • Si un événement est attribué à la fois à des campagnes de retargeting et d'acquisition d'utilisateurs, seul l'événement de retargeting est inclus dans les KPI, c'est à dire is_primary=true
  • Format : chaîne
  • Exemple : "cohort_type": "user_acquisition"
Oui

min_cohort_size

La taille minimum de cohorte permet de réduire le nombre d'enregistrements renvoyés vec des cohortes qui ont peu d'utilisateurs. Cela signifie que le KPI des users aura une valeur égale ou supérieure à celle spécifiée. 

  • Format : entier
  • Valeur minimum autorisée : 1. Ne jamais envoyer 0 (Zéro)
  • Par défaut : 1 
  • Exemple : "min_cohort_size": 50
Non

de 

Seuil le plus bas de la période d'attribution LTV La date la plus ancienne prise en charge, 720 jours avant la date actuelle.

  • Format : chaîne aaaa-mm-jj
  • Exemple : "from": "2020-01-02"
Oui

to

Limite maximum de la période d'attribution LTV

  • Nombre de jours dans la période : 1-31 jours
  • Pour un seul jour : les valeurs from et to sont identiques. 
  • Format : aaaa-mm-jj
  • Exemple : "from": "2020-01-01", "to": 2020-01-31 correspond à 31 jours.
Oui

granularité

Granularité horaire pour les 72 heures précédentes en définissant  "granularity": "hour" et en réglant la durée entre from et to pour contenir l'heure de la journée.

  • Format : aaaa-mm-jj hh:mm:ss
  • Exemple :
"granularity": "hour", "from": "2021-12-01 14:00:00", "to": "2021-12-03 11:00:00",
Non

partial_data

Pour éviter les erreurs d'interprétation, la cohorte renvoie les données des jours complets. Les données des jours partiels peuvent cependant aussi être utiles. 

Le nombre de jours de cohorte complets pour une requête est calculé en soustrayant la date du jour de la date qui correspond à to.

  • [Par défaut] Si false, renvoie les jours complets.
  • Si true, jusqu'à 180 jours de cohorte sont renvoyés, ce qui inclut les jours où les données sont incomplètes. 
  • Format : booléen
  • Version de l'UI de la plateforme : false

Exemple : au 10 mai, le nombre de jours de cohorte complets pour les utilisateurs convertis entre le 1er et le 30 avril est de 10. 

  • Si false [défaut], les jours de cohorte 0-9 sont renvoyés. C'est le nombre de jours (10) entre la dernière date de conversion et la date du jour. 
  • Si true, les jours de cohorte 1 à 40 sont renvoyés. Les jours 11 à 40 contiennent des données partielles et ne sont pas renvoyés. Par exemple, depuis le 20 avril, il ne s'est écoulé que 20 jours, etc.

Remarque : les données partielles ne sont autorisées que lorsque le type d'agrégation est cumulatif.

 Non

Filtres

Filtrer les données et les jours de période renvoyés. Sélectionnez les filtres dans la liste des dimensions de filtre.

  • Format : chaînes de caractères dans un JSON imbriqué
  • Exemple de limitation pour certains géos : "filters": {"geo": "US"}n'inclut que les utilisateurs attribués aux États-Unis. 
  • Exemple de jours de période (cohorte) : le filtre period définit les jours où les mesures sont renvoyées. Les valeurs possibles sont comprises entre 0 et 180.
  • Défaut : si aucun filtre de période n'est défini, les jours 0-30, 60, 90 et 180 s'affichent. Exemple de filtre avec période
 Non

Utilisez les paramètres de regroupement suivants pour inclure des colonnes supplémentaires et diminuer la granularité de vos rapports.

Paramètre

Valeurs Obligatoire 

regroupements

Oui

Sélectionner et formater les KPI

  • Le tableau énumère les KPI disponibles avec les fonctionnalités. Lorsque vous appelez un KPI, toutes ses fonctionnalités sont renvoyées.
  • Les KPI suivants sont toujours renvoyés : utilisateurs, ecpi et coût. 
  • Sélectionnez un KPI supplémentaire par appel.
    Fonctions
Défaut / Facultatif  V (nom des dimensions)  Décompte cvr (taux de conversion) Taux Total Utilisateurs uniques
Nombre Pourcentage Pourcentage Nombre Nombre
Toujours utilisateurs Y - - - -
Toujours eCPI - - Y - -
Toujours coût - - - Y -
OPTIONNEL "event_name"(4)  Y Y - Y (3) Y
OPTIONNEL revenus Y - - Y -
OPTIONNEL ROAS - - Y - -
OPTIONNEL roi - - Y - -
OPTIONNEL Sessions Y - Y - Y(1)
OPTIONNEL désinstallations (2) Y - Y - -

(1) Les sessions uniques se réinitialisent lorsque aggregation_type=on_day

(2) Non disponible lorsque cohort_type=unified 

(3) La somme correspond au revenu total généré par l'événement. Dans le rapport, il est désigné par sum_event_name)

Attention : les noms d'évènements sont sensibles à la casse.

Paramètre

Valeurs Paramètre obligatoire

KPIs

Sélectionnez un KPI parmi les KPI disponibles. À l'avenir, nous prévoyons d'autoriser la sélection de plusieurs KPI.

  • Pour chaque KPI demandé, toutes les fonctionnalités sont renvoyées. 
  • Format : ensemble de chaînes
  • Example A: "kpis": ["sessions"]
  • Exemple B : "kpis": ["event_name"]
Oui

Présentation des fonctionnalités du KPI

Les formats de paramètres des KPI P suivants définissent le format des KPI renvoyés. 

Paramètre

Valeurs Obligatoire 

preferred_currency

Devise du revenu de KPI

  • Si true, les revenus sont renvoyés en utilisant la devise propre à l'app  qui a été définie sur la plateforme. 
  • [Défaut] Si false, les résultats sont affichés en USD.
  • Format : booléen
  • Version de l'UI de plateforme : true

 Non

preferred_timezone

Fuseau horaire des périodes de données

  • Si true, les heures sont exprimées dans le fuseau horaire propre à l'application qui a été défini sur la plateforme.
  • [Par défaut] Si false, les heures sont affichées dans le format UTC.
  • Format : booléen
  • Version de l'UI de plateforme : true

 Non

aggregation_type

  • Cumulé
  • on_day

"aggregation_type": "cumulative"

Format: String

Oui

per_user

Divisez la fonction du KPI par le nombre d'utilisateurs de l'app. Ne s'applique qu'aux KPI concernés.

  • Si true, les valeurs du KPI sont divisées par le nombre d'utilisateurs de la cohorte.
  • Si false, les valeurs du KPI ne sont pas divisées par le nombre d'utilisateurs.
  • Format : booléen
  • Exemple si true : le revenu total est de 1000 $, le nombre d'utilisateurs de l'application est de 500, la valeur renvoyée est donc 2 $. 
 Non

Liste des dimensions de regroupement et de filtrage

Nom de la dimension 

Valeurs des dimensions d'API

Regroupements

Filtres

Publicité

af_ad

Y

Y

Identifiant de publicité

af_ad_id

Y

Y

Campagne

C

Y

Y

Identifiant de la campagne

af_c_id

Y

Y

Canal

af_channel

Y

Y

Source média

PID

Y

Y

Sous-paramètre 1

af_sub1

Y

Y

Mots-clés

af_keywords

Y

Y

agences

af_prt

Y

Y

Type de conversion (1) 

cohort_type

Y

Y

ID site

site_id

Y

Y

Type de revenu (2)

revenue_type

Y

Type de touch attribué (3)

attributed_touch_type

Y

Y

Ensemble de publicités

af_adset

Y

Y

Identifiant de l'ensemble de publicités

af_adset_id

Y

 Y

Pays

geo

Y

Y

Date (date d'installation/d'attribution/d'engagement pour le type de cohorte sélectionné) 

date

Y

Période

période 

Explication détaillée

 

X

Y

Remarque :

Options de dimensions :

(1) Type de conversion :  user_acquisitionretargeting(re-engagement et re-attribution), unified

  • Lors de l'exportation :
    • le re-engagement sera considéré comme retargeting
    • re-attribution s'affichera sous reattr

(2) Type de revenu : regular, ad_monetization

(3) Type de touch attribué : clic, impression, TV, pre-installed

Exemple en curl

Cet exemple contient un appel d'API complet.


curl -L -X POST 'https://hq1.appsflyer.com/api/cohorts/v1/data/app/<insert your app_id here>?format=<insert results format here>' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <cohort_api_token_placeholder. Note the token has more than 700 characters.>' \
-H 'Accept: application/json' \
--data-raw '{
    "cohort_type": "user_acquisition",
    "min_cohort_size": 1,
    "preferred_timezone": false,
    "from": "2020-01-01",
    "to": "2020-01-31",
    "filters": {
        "period": [
            0,
            1,
            2,
            10,
            30,
            60
        ],
        "geo": [
            "US",
            "CN"
        ],
        "pid": [
            "Meta ads",
            "googleadwords_int"
        ]
    },
    "preferred_currency": true,
    "aggregation_type": "on_day",
    "per_user": false,    
    "groupings": [
        "pid",
        "date"
    ],
    "kpis": [
        "sessions"
    ]
}'
Exemples de fichiers renvoyés : CSVJSON

Exemple Python

import http.client
import mimetypes
conn = http.client.HTTPSConnection("hq1.appsflyer.com")
payload = "{\r\n    \"cohort_type\": \"user_acquisition\",\r\n    \"min_cohort_size\": 1,\r\n    \"preferred_timezone\": false,\r\n    \"from\": \"2020-05-01\",\r\n    \"to\": \"2020-05-10\",\r\n    \"preferred_currency\": true,\r\n    \"aggregation_type\": \"cumulative\",\r\n    \"per_user\": false,   \r\n     \"groupings\": [\r\n               \"pid\",\r\n         \"date\"\r\n        ],\r\n    \"kpis\": [\r\n        \"roas\"\r\n    ]\r\n}"
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer [Enter token here]',
  'Accept': 'application/json',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/cohorts/v1/data/app/[My App ID here]?format=csv", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
   

Exemples pratiques

Exemple 1 : rétention

Rétention des sources média (sessions) des utilisateurs qui ont installé l'application en janvier, aux jours 7, 14 et 28. 

{
  "per_user": false,
  "groupings": [
    "pid"
  ],
  "filters": {
    "period": [
      7, 14, 28
    ]
  },
  "partial_data": false,
  "aggregation_type": "on_day",
  "min_cohort_size": 1,
  "cohort_type": "user_acquisition",
  "from": "2021-01-01",
  "to": "2021-01-30",
  "kpis": [
    "sessions"
  ]
}

Exemple 2 : achats de campagne

Revenu post-installation du jour 3 de cohorte par campagne

{  
  "per_user": false,
  "groupings": [
    "c"
  ],
  "filters": {
    "period": [
      3
    ],
    "c":[
        "example_campaign_name"
    ]
  },
  "partial_data": false,
  "aggregation_type": "cumulative",
  "min_cohort_size": 1,
  "cohort_type": "user_acquisition",
  "from": "2021-01-01",
  "to": "2021-01-30",
  "kpis": [
    "Checkout Start"
  ]
}

Exemple 3 : Activité d'hier
Quelle activité ont effectué les utilisateurs convertis (installés, réengagés, réattribués) au cours d'une période de conversion donnée ? 

Utiliser les données disponibles via Cohorte pour Data Locker. La période de conversion est limitée aux 360 jours précédents. 

 

Informations supplémentaires

Codes de réponse et dépannage

Code de réponse

Message

Remarque 

200 OK

Données valides renvoyées

200 OK
  • Aucune donnée n'est renvoyée
    • La requête était valide, mais aucune donnée correspondant à la requête n'a été trouvée. 
    • Vérifiez que la période n'inclut pas de dates en dehors de la période.
    • Aucun jeton n'a été envoyé lors de l'appel. 
401 Non autorisé
  • Le jeton d'autorisation est incorrect. Vérifiez que vous utilisez le bon jeton, qui doit comporter plus de 700 caractères.
404 Pas de résultat
  • Éliminez tout problème lié au réseau, pare-feu, etc. 
  • Assurez-vous que vous utilisez bien le jeton le plus récent. Récupèrez le jeton depuis le tableau de bord. 
  • Assurez-vous que l'application spécifiée dans le chemin d'accès est autorisée à utiliser l'API de Cohorte. Ce qui signifie qu'elle doit faire partie de votre forfait. Un admin de compte AppsFlyer pourra vérifier si c'est le cas dans la rubrique Mon forfait.
 422 Entité non traitable

Les raisons fréquentes pour ce code d'erreur sont les suivantes :

  • Assurez-vous que la demande est contenue dans un JSON et qu'elle n'est pas envoyée en tant que paramètres de requête. 
  • Veillez à ce que le format JSON soit conforme au présent document.
  • Date illégale

Structure du nom de fichier CSV

Le nom attribué à un fichier CSV est généré à partir de la requête d'API. La du fichier structure est détaillée dans le tableau suivant.

Exemple de nom de fichier CSV

cohort_aggregation_type_per_user_kpi_report_app_id_from_to_timezone_currency_hash.csv
Variable Valeurs possibles
aggregation_type
  • on_day
  • Cumulé
per_user
  • per_user 
  • false: Null 
KPI Exemple : sessions
app_id L'ID d'app appelée
from from date : format aaaa-mm-jj
to to date : format aaaa-mm-jj
Fuseau horaire Fuseau horaire par défaut UTC
devise Code devise par défaut USD 
hachage

Chaîne de hachage alphanumérique longueur=5

Utilisation des filtres pour les périodes

La période fait référence au jour suivant l'attribution, la période 0 correspondant au jour de l'attribution. Exemple, un utilisateur installe l'application au 1er janvier. C'est le jour de l'attribution. Un achat effectué au cours de la période 0 signifie qu'il a été effectué durant le 1er janvier. Un achat effectué à la période 3 signifie qu'il a été effectué le 4 janvier. De même, un utilisateur qui installe l'app le 11 janvier correspond à la période 0. Un achat effectué le 14 janvier correspond à la période 3.

Si la période couverte par votre rapport va du 1er au 11 janvier, les utilisateurs qui sont attribués (qui ont installé l'app) au cours de cette période sont compris dans le rapport. Aucune autre donnée n'est incluse. 

  • La valeur de la période peut être une ou plusieurs des nombres suivants compris entre 0 et 180. Par exemple 0, 1, 2, 30, 180. 
  • Si aucune période n'est spécifiée, les valeurs par défaut 0, 1, 2, etc jusqu'à 30, 60, 90 et 180 seront renvoyées.  

 Exemple de filtre de période

  • Cet exemple contient les paramètres de la requête JSON, les données brutes et le fichier CSV résultant.
  • La requête filters period de 0, 1, et 2 et le KPI sélectionné est revenue.
  • Ainsi, les données renvoyées contiennent :
    • Les mesures des utilisateurs, du coût et de l'ecpi qui sont systématiquement renvoyés 
    • Mesures des revenus consistant en la somme et le décompte pour chaque période, c'est-à-dire les périodes 0, 1 et 2. 

Requête

{
    "cohort_type": "user_acquisition",
    "min_cohort_size": 1,
    "preferred_timezone": false,
    "from": "2019-12-01",
    "to": "2020-01-01",
    "filters": {
        "period": [
            0,
            1,
            2
        ]
    },
    "aggregation_type": "on_day",
    "per_user": false,
    "groupings": [
        "pid"
    ],
    "kpis": [
        "revenue"
    ]
}

Données Brutes

mceclip1.png

Résultats

mceclip0.png

Mapping entre l'interface utilisateur et les paramètres de l'API

Les chiffres suivants matchent l'interface utilisateur d'analyse de Cohorte avec les paramètres de l'API. Les deux solutions - API et interface utilisateur - sont similaires mais pas complétement identiques. 

La version API contient les options supplémentaires suivantes :

  • Sélection de la devise
  • Sélection du fuseau horaire
  • Filtrage par période
CohortMapping.jpg Cohortmapping2.jpg

Différence entre les types d'agrégation

CohortRevnueCumulative.jpg

Caractéristiques et limitations

Caractéristique Remarques 
Accès du ad network 

Les partenaires de gestion de campagne peuvent utiliser l'API si l'annonceur leur en donne l'autorisation. 

Autorisations de l'agence Non
Transparence de l'agence Non pris en charge
Fuseau horaire spécifique à l'app Oui
Devise spécifique à l'app  Oui
Limitations de taille Aucun
Limitation de taux

Limite d'appels d'API : 60 appels par minute et par compte 

Données organiques Disponible
Données non organiques Disponible
Limitation des données de coûts
  • Les données de coûts ne concernent que les campagnes avec au moins une installation enregistrée.
  • AppsFlyer ne rapporte pas les données de coûts pour les mots-clés qui contiennent des lettres majuscules dans le rapport de cohorte ou l'API de cohorte
  • Certaines combinaisons de regroupement ne peuvent être associées au coût. Par exemple, les Meta Ads peuvent être regroupées par zone géo ou canal, mais pas les deux à la fois. Les combinaisons de regroupements dépendend du réseau publicitaire.
Actualisation des données

L'actualisation des données dépend de partial_data comme suit : 

  • [Défaut] Si false, quotidien
  • Si true, continu (en temps réel)
  • Les mesures de coût et de désinstallation sont mises à jour quotidiennement dans tous les cas.
Données historiques Cohorte quotidienne : 2 ans
Accès utilisateur du compte Le jeton d'autorisation est disponible pour les utilisateurs admin dans le tableau de bord.
Revenus publicitaires

Pour les événements af_ad_revenue, la mesure des utilisateurs uniques n'est pas disponible lorsque le type d'agrégation est réglé sur "on day," pour les dates comprises entre le 5 octobre 2022 et le 16 février 2023.

Regroupements hebdomadaires et mensuels

Le regroupement des dimensions hebdomadaires et mensuelles n'est pas disponible avec l'API de cohorte. Utilisez le tableau de bord de Cohorte.

API de cohorte
  • La période de conversion est désignée par 0 (heure 0 ou jour 0). La période qui suit la conversion est désignée par 1 (heure 1 ou jour 1), et ainsi de suite.
  • Dans AppsFlyer, une période de cohorte ne prend pas en compte l'heure de l'installation. Les heures de la cohorte sont arrondies à l'heure la plus proche et les jours de la cohorte sont basés sur le jour calendaire. Cela peut entraîner des divergences lorsque l'on compare les données de cohorte d'AppsFlyer aux données de cohorte d'autres réseaux, où toutes les périodes de cohorte sont déterminées par l'heure précise de l'installation (une heure correspond à 60 minutes après l'heure de l'installation, un jour correspond à la période de 24 heures après l'heure de l'installation, etc.)