Générer un rapport depuis l'API
Accédez aux rapports financiers de Stripe de manière programmatique afin d'automatiser votre flux de rapprochement.
Note
Grâce à Stripe Data Pipeline, vous pouvez désormais envoyer automatiquement vos données et rapports Stripe à Snowflake ou Amazon Redshift en quelques clics seulement. En savoir plus.
Les rapports financiers dans le Dashboard fournissent des rapports téléchargeables au format CSV pour diverses tâches de comptabilité et de rapprochement. Ces rapports sont également disponibles via l’API, de sorte que vous pouvez les programmer afin qu’ils s’exécutent automatiquement, ou vous pouvez les exécuter chaque fois que vous avez besoin de recevoir les fichiers de rapport associés à des fins de comptabilité.
Types de rapport
Chaque rapport financier dans le Dashboard fournit plusieurs téléchargements CSV. Tous les téléchargements disponibles pour les rapports suivants sont également disponibles depuis l’API :
Différences entre les formats monétaires utilisés dans les rapports CSV et ceux utilisés dans l'API
Les rapports CSV formatent les montants monétaires en unités de devise principale en nombre décimal. Par exemple, 10 USD sont au format dollars et centimes (10.
). Cela diffère de l’API de Stripe, où vous spécifiez des montants dans l’unité secondaire de la devise (centimes de dollar américain) comme nombre entier. Dans l’API, 10 USD sont formatés en centimes (1000
).
Paramètres d’exécution
Chaque rapport contient les paramètres obligatoires et facultatifs que vous fournissez lorsque vous créez une exécution de rapport. Prenez en compte les éléments suivants lorsque vous exécutez des rapports :
- Pour presque tous les types de rapports, il est nécessaire de renseigner les paramètres d’exécution
interval_
(inclusif) etstart interval_
(exclusif) sous la forme d’horodatages Unix.end - Chaque ressource du type de rapport correspondante dispose des champs
data_
etavailable_ start data_
. L’API renvoie une erreur de requête non valide (code d’étatavailable_ end 400
) si votre exécution ne respecte pas les contraintes suivantes :- Les valeurs des paramètres
interval_
etstart interval_
doivent être comprises entreend data_
etavailable_ start data_
(inclus).available_ end - La valeur de
interval_
doit être antérieure (et non égale à)start interval_
.end
- Les valeurs des paramètres
- Vous pouvez uniquement télécharger un rapport dans un fuseau horaire pour un
ReportType
avec un paramètretimezone
. Pour ce faire, créez un objetReportRun
et indiquez le nom de votre choix au fuseau horaire de la base de données TZ. Le paramètretimezone
est facultatif et est défini sur UTC s’il n’est pas fourni. Consultez la base de données des fuseaux horaires IANA pour obtenir une liste des valeurs de fuseaux horaires valides. - Les paramètres facultatifs
currency
etreport_
filtrent les résultats pour n’afficher que les lignes correspondant aux valeurs indiquées.category - Les rapports renvoient un ensemble de colonnes défini par défaut, mais la plupart des types de rapports vous permettent de personnaliser la sélection et l’ordre des colonnes présentées en incluant le paramètre facultatif
columns
avec une liste des noms de colonnes.
Disponibilité des données
Stripe prépare les données pour vos rapports deux fois par jour. Les options de rapport donnent des détails concernant le temps de traitement et la disponibilité des données pour chaque rapport.
Afin de déterminer de façon programmatique la période de disponibilité des données pour un type de rapport donné, récupérez l’objet ReportType
concerné. Par exemple, le rapport Récapitulatif du solde présente l’ID balance.
pour que vous puissiez récupérer les objets comme suit :
Dans l’exemple de réponse ci-dessous, les champs data_
et data_
reflètent l’ensemble des périodes valides pour ce type de rapport. Cependant, vous générerez le plus souvent des rapports avec un intervalle plus court durant cette période :
{ "id": "balance.summary.1", "name": "Balance summary", "version": "1", "object": "reporting.report_type", "data_available_start": 1519862400, "data_available_end": 1517356800, "updated": 1517382720, }
Les horodatages, tels que date_
, sont exprimés en secondes écoulées depuis le début de l’ère Unix. Par exemple, 1519862400
représente l’horodatage 2018-03-01 00:00
.
Notifications de nouvelles données
Dès qu’un type de rapport a de nouvelles données disponibles, Stripe publie un événement reporting.
avec l’objet ReportType
mis à jour. Pour accéder à ces événements, vous devez disposer d’un webhook configuré qui choisit explicitement de recevoir des événements reporting.
; les webhooks qui écoutent tous les événements (‘all events’) ne les reçoivent pas. Après avoir reçu un tel événement, vous pouvez générer le rapport. Pour plus de détails, consultez le modèle d’intégration recommandé.
Création et accès aux rapport
L’objet API ReportRun
représente une instance d’un ReportType
généré avec des paramètres spécifiques. Consultez la documentation consacrée aux types de rapports pour obtenir la liste des paramètres obligatoires et facultatifs pour ce type. Par exemple, vous pouvez créer le rapport Récapitulatif de l’évolution du solde selon l’activité pour le mois d’avril 2020 comme suit :
Lorsqu’il est créé pour la première fois, l’objet apparaît avec status="pending"
:
{ "id": "frr_123", "object": "reporting.report_run", "livemode": true, "report_type": "balance_change_from_activity.itemized.3", "parameters": { "columns": [ "created", "reporting_category", "net" ], "interval_start": 1577865600, "interval_end": 1580544000, "timezone": "America/Los_Angeles" }, "created": 1580832900, "status": "pending", "result": null }
Lorsque la génération est terminée, Stripe met à jour l’objet qui prend le status
succeeded
. Il comporte également un objet imbriqué result
contenant une URL que vous pouvez utiliser pour accéder au fichier avec votre clé API. Par exemple, si vous deviez récupérer le rapport ci-dessus une fois généré, la réponse serait :
{ "id": "frr_123", "object": "reporting.report_run", "livemode": true, "report_type": "balance_change_from_activity.itemized.3", "parameters": { "columns": [ "created", "reporting_category", "net" ], "interval_start": 1577865600, "interval_end": 1580544000, "timezone": "America/Los_Angeles" }, "created": 1580832900, "status": "succeeded", "succeeded_at": 1580832960, "result": { "id": "file_xs8vrJzC", "object": "file", "url": "https://files.stripe.com/v1/files/file_xs8vrJzC/contents", "created": 1580832960, "purpose": "report_run", "size": 53075, "type": "csv" } }
Pour récupérer les contenus de fichier, utilisez votre clé API pour accéder au fichier spécifié par result.
:
Notification de fin de génération du rapport
La plupart des rapports sont générés en quelques minutes. Cependant, certaines générations peuvent être plus longues, selon la taille de votre ensemble de données et la période couverte par votre rapport.
Lorsqu’une génération de rapport se termine, Stripe envoie l’un des deux webhooks :
- Un webhook
reporting.
sera envoyé si la génération va à son terme.report_ run. succeeded - Un webhook
reporting.
sera envoyé si la génération échoue. (Cela est rare, mais nous vous recommandons de préparer les intégrations pour gérer cette situation de la même façon que pour la détection d’une réponsereport_ run. failed 500
.)
Dans les deux cas, la charge du webhook comprend l’objet ReportRun
mis à jour, qui comprend respectivement l’état succeeded
ou failed
.
Modèle d’intégration recommandé pour le reporting automatisé
Configurez un webhook qui choisit explicitement de recevoir des événements reporting.
; les webhooks qui écoutent « tous les événements » ne vont pas les recevoir.
- Un webhook
reporting.
est envoyé dès que les données d’une nouvelle journée sont disponibles pour un type de rapport donné. La charge utile comprend l’objetreport_ type. updated ReportType
mis à jour. Vous recevez généralement 20 à 30 wekhooks chaque jour, deux pour chaque type de rapport. (Les utilisateurs différents sont éligibles pour des rapports différents.) - Après avoir reçu le webhook
reporting.
pour le type de rapport et la plage de disponibilité des données voulus, créez une génération de rapport. La réponse contient un nouvel objetreport_ type. updated ReportRun
, initialisé avec l’étatstatus=pending
. - Lorsque la génération est terminée, un webhook
reporting.
est envoyé. Ce webhook comprend le champ imbriquéreport_ run. succeeded result.
. (Comme mentionné ci-dessus, dans les rares cas d’échecs nous envoyons plutôt un événementurl reporting.
.)report_ run. failed - Accédez aux contenus des fichiers via
result.
, à l’aide de votre clé API.url