Aller au contenu principal

API Era

Points de terminaison, authentification, pagination et limites de l'API Era, avec des requêtes prêtes à copier.

Dernière mise à jour : 1 octobre 2026

Encore en bêta

Ces points de terminaison fonctionnent dès aujourd'hui, mais l'API continue d'évoluer, donc certains détails peuvent changer. Consultez la date de dernière mise à jour en haut de page pour savoir quand elle a été révisée pour la dernière fois.

Démarrage rapide

Avant de commencer, il vous faut un compte Era avec au moins un établissement connecté — sans connexion, ces points de terminaison n'ont rien à renvoyer.

  1. 1

    Connectez-vous à Era et reliez un établissement, si ce n'est pas déjà fait.

  2. 2

    Ouvrez vos clés d'API dans le tableau de bord et créez une clé. La plupart des portées sont cochées au départ ; celles qui permettent de déplacer de l'argent, de passer des ordres de bourse, de modifier votre facturation, de supprimer vos documents ou de créer d'autres clés ne le sont pas. Décochez celles dont vous n'avez pas besoin. Pour lire, il faut banking:read, et pour modifier quoi que ce soit, banking:write. Vous choisissez aussi une expiration ; il n'existe pas d'option « n'expire jamais ».

  3. 3

    Copiez la clé et conservez-la en lieu sûr, par exemple dans un gestionnaire de secrets. Elle ne s'affiche qu'une fois : si vous la perdez, créez-en une nouvelle.

  4. 4

    Envoyez-la dans un en-tête avec votre requête.

cURL
curl "https://forge.era.app/api/banking/transactions?page=1&pageSize=20" \
  -H "X-API-Key: fmk_your_key_here"
Réponse · 200
{
  "transactions": [ … ],
  "pagination": {
    "currentPage": 1,
    "pageSize": 20,
    "totalItems": 412,
    "totalPages": 21
  },
  "historyWindowApplied": true,
  "historyWindowFloorDate": "2026-06-28",
  "historyWindowHiddenCount": 137,
  "historyWindowEarliestDate": "2024-03-02",
  "historyWindowDegraded": false
}

Vous écrivez votre propre client ? Générez-le à partir du document OpenAPI à l'adresse https://forge.era.app/api/openapi/public.json. Il décrit chaque point de terminaison de cette page — chaque champ, chaque statut et chaque type de filtre et d'action de règle — et c'est l'API elle-même qui le fournit, il ne prend donc pas de retard.

Points de terminaison

Dix-sept points de terminaison : huit en lecture et neuf en écriture.

Authentification

Envoyez votre clé de l'une de ces deux façons :

Méthodes d'authentification
En-tête
X-API-Key: fmk_your_key_here
Jeton bearer
Authorization: Bearer fmk_your_key_here

Chaque requête est chiffrée avec TLS.

Les clés expirent, et vous choisissez au bout de combien de temps au moment de les créer. Le maximum est de 90 jours sur le forfait gratuit et de 365 sur un forfait payant — il n'existe pas d'option « n'expire jamais », donc tout ce que vous construisez là-dessus doit prévoir la rotation de la clé avant qu'elle n'expire.

En-têtes de réponse

Les en-têtes X-RateLimit-* indiquent votre budget quotidien, donc vous ne les verrez que sur un forfait qui en publie un. Pour l'instant, c'est seulement le forfait gratuit. Même là, considérez-les comme facultatifs : une réponse sans eux veut dire que le compte est inconnu, pas que quelque chose a mal tourné. Chaque 429 porte Retry-After.

En-têtes de réponse
X-RateLimit-Limit
Le budget quotidien de votre forfait. Envoyé uniquement sur les forfaits qui publient un budget quotidien, et jamais sur un 429 d'une autre limite.
X-RateLimit-Remaining
Ce qu'il reste de votre budget quotidien. Jamais en dessous de zéro. Envoyé uniquement sur les forfaits qui publient un budget quotidien, et jamais sur un 429 d'une autre limite.
X-RateLimit-Reset
Quand votre budget quotidien libère sa prochaine requête, une seule, en horodatage Unix en secondes. Ce n'est pas le moment où tout le budget se renouvelle : le budget roule, donc les requêtes reviennent une à une. Envoyé uniquement sur les forfaits qui publient un budget quotidien, et jamais sur un 429 d'une autre limite. Le plafond de rafale par minute n'a pas d'en-tête à lui. Voir Limites
Retry-Afterseulement sur un 429
Chaque 429 porte Retry-After : attendez ce nombre de secondes, puis réessayez. Un 429 qui porte aussi les en-têtes X-RateLimit-* a été refusé par le budget quotidien du forfait gratuit. Un 429 sans eux a été refusé par une autre limite, comme le plafond de rafale par minute. Retry-After peut aller d'une seconde à 24 heures. Voir Limites

Erreurs

L'API renvoie ces codes de statut d'erreur :

  • 400

    Entrée invalide : un paramètre incorrect, une mise à jour groupée vide ou de plus de 100 éléments, une écriture qui définit et efface le même champ dans le même appel, ou une règle incohérente. Supprimer, activer ou désactiver une règle refuse aussi toute clé de requête non acceptée, et le 400 la nomme.

  • 401

    Pas de clé, ou une clé qui ne s'analyse pas. Envoyez-la dans l'en-tête X-API-Key ou comme jeton bearer.

  • 402

    Un quota de forfait fait obstacle. Aujourd'hui, cela ne concerne que la création d'une catégorie ou d'une règle de motif. Attendre n'y change rien, mais un forfait supérieur, si. Appeler trop vite, c'est un 429.

  • 403

    La clé ne porte pas la portée dont cet appel a besoin — ou, sur l'une des deux écritures de transactions, l'id appartient à quelqu'un d'autre ou n'existe pas. L'API ne distingue pas ces deux cas. Une règle de la bibliothèque d'Era répond 403 si vous essayez de la supprimer, ou de modifier son nom, sa description, sa priorité, ses dates ou son applicationScope. Modifier ses filtres, ses actions ou son groupe donne plutôt un 400.

  • 404

    Une ressource qui n'existe pas. L'endpoint de solde le renvoie sans corps pour un accountGroupKey qui ne désigne aucun compte, ou qui n'a même pas la forme d'une clé. Les endpoints de règles le renvoient pour une clé de règle qui ne vous appartient pas. Les transactions ne renvoient jamais 404 — voir 403.

  • 409

    Autre chose a modifié la ligne pendant que vous écriviez — pour une règle, c'est une version qui n'est plus la version actuelle. Relisez-la et renvoyez votre écriture. Sur une règle, un 409 peut aussi signifier que ses actions déclencheraient des règles en boucle ; modifiez alors les actions.

  • 429

    Trop de requêtes. Vous avez épuisé votre budget quotidien sur le forfait gratuit ou atteint une autre limite, comme le plafond de rafale par minute. Retry-After indique combien de temps attendre, d'une seconde à 24 heures, et, contrairement à un 402, attendre libère votre prochaine requête. Voir Limites pour les chiffres publiés et ce que dit un 429.

Formes d'erreur

La plupart des erreurs reviennent sous la même forme : statusCode, message et un objet errors qui nomme ce qui n'allait pas. Pas toutes : un 401, et le 404 de l'endpoint de solde, reviennent sans corps du tout, alors lisez le statut avant de lire le corps.

Exemple
{
  "statusCode": 403,
  "message": "One or more errors occurred!",
  "errors": {
    "generalErrors": ["Transaction does not belong to the authenticated user"]
  }
}

Erreurs courantes

  • Définir un champ et l'effacer dans la même écriture — 400.

  • Plus de 100 id dans une mise à jour groupée — 400, et rien n'est modifié. Moins d'un id donne le même résultat.

  • Une transaction qui n'est pas la vôtre, ou qui n'existe pas — 403, jamais 404. La réponse ne vous dit donc jamais si un id existe, seulement qu'il n'est pas à vous.

  • Autre chose a modifié la ligne en premier — 409.

Limites

Deux des endpoints documentés plafonnent ce que vous pouvez demander en un seul appel. Les autres non.

Pas de plafond par appel ne veut pas dire illimité. Les clés expirent toujours, les écritures ont toujours des limites de longueur de champ, la création d'une catégorie ou d'une règle de motif peut atteindre un quota de forfait, votre forfait peut toujours masquer l'historique ancien, et chaque appel compte dans les limites de débit de votre forfait, décrites ci-dessous.

  • Comptes, solde, résumé, les listes de catégories et de tags, la création d'une catégorie, la création d'un tag, l'écriture d'une seule transaction et chaque endpoint de règles n'ont aucun plafond de volume par appel. Vous recevez l'ensemble complet, ou la seule ligne que vous avez nommée — sauf l'aperçu d'une règle, qui compte les correspondances mais ne renvoie qu'au plus 50 de leurs clés et 10 échantillons.

  • pageSize est plafonné à 100, jamais refusé. Demandez-en plus et vous recevez 100 lignes avec un 200 — lisez pagination.pageSize dans la réponse plutôt que de faire confiance à ce que vous avez envoyé.

  • L'écriture groupée de transactions est plafonnée à 100 id, et contrairement à pageSize elle est refusée plutôt que plafonnée : envoyez 101 et vous recevez un 400, rien ne change.

  • Les clés expirent selon un calendrier que vous choisissez à la création — jusqu'à 90 jours sur le forfait gratuit, 365 sur un forfait payant. Il n'existe pas d'option sans expiration.

  • Votre forfait peut appliquer un plancher de fenêtre d'historique qui masque les transactions plus anciennes. La réponse des transactions porte les champs historyWindow qui indiquent si un plancher s'est appliqué et où il se situe.

Limites de débit

Era publie deux limites de débit. Chaque forfait a un plafond de rafale : une limite de requêtes sur toute minute glissante. Le forfait gratuit a en plus un budget quotidien : une limite de requêtes sur toute période glissante de 24 heures. Une requête cesse de compter dans le plafond de rafale une minute après que vous l'avez faite, et dans le budget quotidien un jour après. Les forfaits payants n'ont pas de budget quotidien publié pour l'instant. Dépassez l'une ou l'autre, ou toute autre limite que l'API applique, et l'appel revient en 429.

Les limites appartiennent à votre compte, pas à une clé. Chaque clé REST que vous créez puise dans le même plafond de rafale et, sur le forfait gratuit, dans le même budget quotidien : une deuxième clé ne vous donne donc pas plus d'appels. Les appels d'outils MCP sont comptés à part : les appels REST et les appels MCP n'entament jamais les limites les uns des autres.

Limites de débit par forfait
ForfaitBudget quotidienPlafond de rafale
Basic100 par jour10 par minute
OrganizeAucun30 par minute
AutomateAucun60 par minute
OptimizeAucun60 par minute
OperateAucun120 par minute

Pour l'instant, les forfaits payants n'ont pas de budget quotidien publié.

Les forfaits payants fonctionnent aussi selon un usage raisonnable : l'API est faite pour des scripts, des tableaux de bord et des intégrations sur vos propres données financières, à un volume qui convient à une personne.

Aucun en-tête n'indique le plafond de rafale, sur aucun forfait : réglez donc votre rythme sur le tableau. Sur le forfait gratuit, X-RateLimit-Remaining peut être bien au-dessus de zéro juste avant qu'une rafale revienne en 429.

Ce que dit un 429

Quelle limite vous a refusé. Un 429 qui porte les en-têtes X-RateLimit-* vient du budget quotidien du forfait gratuit ; un 429 sans eux, d'une autre limite, comme le plafond de rafale. Le corps est au format problem-details, et son champ detail indique quand votre prochaine requête se libère. Si c'est le budget quotidien ou le plafond de rafale qui vous a refusé, il nomme aussi cette limite, ce qu'elle permet et le forfait qui la relève ou la supprime, ou que vous êtes déjà sur le plus élevé. Il est écrit pour des humains : lisez les en-têtes plutôt que de l'analyser.

Réponse 429, budget quotidien
{
  "type": "https://httpstatuses.com/429",
  "title": "Too Many Requests",
  "status": 429,
  "detail": "You've used up your daily budget of 100 requests. Your next request frees up at 2026-09-16T09:00:00Z. The Organize plan removes it."
}

Chaque 429 porte aussi Retry-After : un nombre entier de secondes, d'une seconde à 24 heures. L'attente du plafond de rafale est d'au plus une minute ; le budget quotidien du forfait gratuit peut demander les 24 heures complètes. Un appel refusé ne compte dans aucune limite, mais ne réessayez pas trop tôt : attendez la fin de Retry-After sur chaque 429. Avec le budget quotidien et le plafond de rafale, une tentative trop hâtive est refusée à son tour, et à la fin de l'attente, une requête se libère, pas toute la limite. Envoyez-la et lisez ce qui revient : un autre Retry-After si elle est refusée ou, sur le forfait gratuit, les en-têtes une fois qu'elle est servie.

Les limites de débit ne protègent pas une clé que vous avez perdue de vue. Une clé qui a fuité puise dans les mêmes limites que toutes les autres clés de votre compte, et elle peut faire tout ce que ses portées permettent. La révoquer ne rembourse pas les appels qu'elle a déjà faits. Si vous avez un doute sur une clé, révoquez-la. Voir Sécurité et gestion des clés plus bas.

Conventions

Les champs de réponse sont en camelCase. Les noms des paramètres de requête ne sont pas sensibles à la casse, mais pour le reste ils doivent s'écrire exactement comme sur cette page — pageSize et PageSize fonctionnent donc tous les deux. La spécification publiée écrit la plupart en PascalCase. La plupart des points de terminaison ignorent une clé de requête qu'ils n'acceptent pas : un filtre mal orthographié ne filtre tout simplement pas, vérifiez donc ce qui revient. La suppression, l'activation et la désactivation d'une règle font exception : elles refusent toute autre clé avec un 400 qui la nomme. Envoyez revert_retroactively avec le tiret bas — revertRetroactively est refusé — et uniquement à la suppression et à la désactivation, car l'activation ne prend que version.

Un champ qui désigne un jour de calendrier est en YYYY-MM-DD. Un champ qui désigne un instant précis est en ISO 8601 avec un décalage horaire.

Les tailles de page sont ramenées dans les bornes, pas refusées. Demandez un pageSize de 500 et vous obtenez 100 lignes et un 200, pas une erreur — donc relisez pagination.pageSize dans la réponse plutôt que de vous fier à ce que vous avez envoyé.

Une réponse peut porter des champs que cette page ne liste pas. Ignorez ceux que vous ne reconnaissez pas plutôt que d'échouer dessus — c'est ce qui garde votre client fonctionnel à mesure que l'API s'étoffe.

REST, c'est du HTTP ordinaire, donc aucun SDK n'est nécessaire pour l'appeler — n'importe quel langage doté d'un client HTTP fait l'affaire. Il n'y a rien à installer.

Versionnage et changements

L'API est en bêta, donc ce qui est documenté ici peut changer : un point de terminaison, un champ ou le comportement d'un appel.

Il n'y a pas de numéro de version dans le chemin ni d'en-tête de version. Chaque point de terminaison a une seule version active, et c'est celle documentée ici.

Changelog

Ce qui a changé dans l'Era Developer Platform, dont l'API Era, du plus récent au plus ancien. Il n'y a ni e-mail ni flux, donc consultez le changelog quand vous planifiez du travail avec l'API.

Sécurité et gestion des clés

Approuver un agent crée une clé

Quand vous approuvez un agent en OAuth, Era lui crée une clé d'API. Elle arrive dans la même liste du tableau de bord que celles que vous créez vous-même, sous un nom qu'Era compose à partir du nom du client.

Comment elle est nommée

Auto -- Claude

Elle porte exactement les portées que vous avez approuvées sur cet écran, et rien d'autre. Révoquez-la depuis le tableau de bord et l'agent ne peut plus obtenir de nouvel accès tant que vous ne l'avez pas approuvé à nouveau. Un jeton qu'il détient déjà reste valable jusqu'à son expiration, une heure au plus.

Les écritures apparaissent dans votre journal d'activité, pas les lectures

La création et la révocation d'une clé apparaissent toutes les deux dans votre journal d'activité, tout comme chaque appel d'outil qu'un agent fait en MCP. Une écriture REST y apparaît aussi — comme le changement qu'elle a fait, une étiquette créée ou une transaction modifiée. Une lecture REST ne crée aucune entrée. Era inscrit ces entrées sur tous les forfaits, mais lire le journal complet demande Organize ou plus — en dessous, vous ne voyez que les entrées les plus récentes. Les entrées d'une écriture indiquent votre compte, pas la clé qui a fait le changement.

Si vous avez le moindre doute sur une clé, révoquez-la. Une clé que vous avez créée vous-même cesse de fonctionner en REST comme en MCP dès sa requête suivante. La clé d'un agent cesse aussitôt d'obtenir de nouveaux accès, et tout jeton qu'il détient déjà expire en moins d'une heure. En refaire une prend une minute.

D'autres choses à savoir avant de vous fier à une clé.
Les portées sont larges
banking:read couvre bien plus que les lectures de cette page — la même portée couvre aussi le reste des lectures de votre compte : soldes, positions, connexions, dépenses. Une seule portée, il n'existe pas plus étroit. Les portées d'écriture sont au menu elles aussi, comme celles de lecture — alors traitez n'importe quelle clé comme un mot de passe. Elle agit au nom de votre compte Era, pas d'une partie de celui-ci.
banking:write modifie Era, pas votre banque
banking:write modifie uniquement ce qu'Era conserve, pas ce que détient votre banque. Elle ne peut ni déplacer d'argent ni effectuer de paiement. Comme banking:read, banking:write est une seule portée, large. Elle couvre les modifications que vous pouvez faire vous-même dans Era, par exemple la catégorie, le nom du commerçant, la note et le statut de révision d'une transaction ; les catégories, les étiquettes et les règles d'automatisation ; les noms qu'Era affiche pour vos comptes et ceux que vous voyez ; ainsi que les comptes manuels avec leurs soldes et leurs transactions. Elle peut lancer une nouvelle connexion, mais c'est toujours vous qui vous connectez à votre banque, dans le parcours du fournisseur et non via la clé. Elle peut demander une nouvelle synchronisation, qui ne fait que lire, ou déconnecter un établissement. La déconnexion met fin au lien d'Era, et votre compte à la banque reste ouvert et inchangé.
Les portées ne se mettent pas à jour
Les portées d'une clé sont fixées à sa création et ne changent jamais ensuite. C'est important pour tout ce qu'une portée couvre et qui n'est pas encore activé : accordez social:write aujourd'hui et la clé l'aura encore le jour où les vues partagées arriveront. Accordez ce que vous utilisez maintenant, pas ce que vous utiliserez peut-être.
Aucune approbation requise
Créer une clé ne passe par aucun examen ni liste d'attente : personne chez Era n'approuve la demande. C'est inscrit dans votre journal d'activité dès sa création, donc une clé que vous ne reconnaissez pas est facile à repérer.
Les identifiants bancaires restent hors de portée
Une clé n'atteint pas vos identifiants bancaires, parce qu'Era ne les a jamais. Vous les saisissez dans le parcours de connexion géré par le fournisseur de données, pas sur un écran d'Era — ce qu'Era conserve ensuite, c'est un jeton d'accès par connexion, chiffré au repos avec AES-256, dont vous pouvez vous débarrasser en déconnectant l'établissement.
Era ne conserve qu'un haché de votre clé
Votre clé, c'est 256 bits de données aléatoires. Era la hache en SHA-256 et ne conserve que le haché : si vous la perdez, révoquez-la et créez-en une autre.

Ressources principales

Comptes

GET/banking/accounts
Portée requisebanking:read

Tous les comptes que vous pouvez voir, dans chaque établissement connecté, avec à côté le nombre de ceux qui sont laissés de côté : excludedAccountCount, réparti entre tierExcludedAccountCount pour les comptes que la limite de comptes de votre forfait laisse de côté et userExcludedAccountCount pour ceux que vous avez masqués. accountLimit indique combien de comptes votre forfait affiche à la fois, toutes connexions confondues. accountLimitLift nomme le forfait le moins cher qui a de la place pour tous les comptes que vous n'avez pas masqués, et vaut null lorsque votre forfait ne laisse rien de côté. Chaque compte porte son accountGroupKey — la valeur que le point de terminaison de solde prend dans son chemin — et le connectionId auquel il appartient, c'est donc le premier appel à faire. Accepte connectionId pour se limiter à une seule connexion (les nombres se limitent avec lui, accountLimit et accountLimitLift non), et includeExcluded pour ramener les comptes que votre forfait laisse de côté et ceux que vous avez masqués.

Paramètres de requête
connectionIdfacultatif
Limite la liste aux comptes d'une seule connexion.
includeExcludedfacultatif
Inclut aussi les comptes que votre forfait laisse de côté et ceux que vous avez masqués, avec leurs soldes retenus. Le champ visibility de chaque ligne indique lequel — tierExcluded ou userExcluded, et visible pour les autres. Le point de terminaison de solde écrit ces valeurs autrement, n'utilisez donc pas le même analyseur pour les deux. excludedAccountCount revient malgré tout lorsque ce paramètre vaut true, et ces comptes figurent déjà dans la liste, n'additionnez donc pas les deux. Par défaut, false.
Réponse · 200
{
  "accounts": [
    {
      "accountGroupKey": "uagr_7f3c9a21",
      "connectionId": "ucon_4b19e02c",
      "name": "Everyday Checking",
      "currentBalance": 4820.16,
      "supportsTransactions": true,
      …
    }
  ],
  "excludedAccountCount": 1
}

Sur un compte que vous avez masqué ou que votre forfait exclut, les champs de solde reviennent à null plutôt qu'à zéro — null veut dire retenu, pas vide. supportsTransactions vaut null dans le même esprit. Cela veut dire qu'Era ne peut pas se prononcer, jamais que la réponse est non. Il en va de même pour les champs du forfait. Si Era n'a pas pu lire votre forfait lors de cet appel, tierExcludedAccountCount, userExcludedAccountCount, accountLimit et accountLimitLift reviennent tous à null. accountLimit vaut aussi null pour un forfait sans limite de comptes, et accountLimitLift lorsqu'aucun forfait n'offre plus de place ou que votre forfait ne laisse rien de côté.

Solde d'un compte

GET/banking/accounts/{accountId}/balance
Portée requisebanking:read

One account's balance, with the credit fields filled in when the account is a liability. The path takes that account's accountGroupKey — the same value /banking/accounts returns for it. The key is not checked for shape before the lookup, so a malformed key and an unknown one answer the same way.

Réponse · 200
{
  "accountGroupKey": "uagr_7f3c9a21",
  "currentBalance": 4820.16,
  "availableBalance": 4712.03,
  "creditLimit": null,
  "currencyCode": "USD",
  "availableCredit": null,
  "asOf": "2026-08-11T09:32:00Z",
  "visibility": null
}

Un compte masqué, ou un compte dont la connexion a été coupée, répond quand même 200 — avec les champs de solde à null. Un 404 signifie que le compte n'existe vraiment pas, ou que la clé n'avait pas la forme d'une clé. Surveillez le champ visibility ici — il vaut null quand le compte est visible, tier_excluded quand la limite de comptes de votre forfait le laisse de côté, user_excluded quand vous l'avez masqué, et connection_severed quand sa connexion a été coupée. Avec tier_excluded, accountLimit est la limite de votre forfait et accountLimitLift nomme le forfait le moins cher qui a de la place pour tous les comptes que vous n'avez pas masqués, celui-ci compris. accountLimitLift vaut null dans tous les autres états, et avec connection_severed, accountLimit vaut null lui aussi.

Synthèse des comptes

GET/banking/accounts/summary
Portée requisebanking:read

Les totaux sur les comptes que vous pouvez voir, par défaut les comptes réels : totalAssets, totalLiabilities et netWorthHint, qui est le premier moins le second. Passez simulationModes pour choisir quels modes comptent : la liste des comptes et les totaux ne couvrent que ceux que vous nommez. includedSimulationModes indique quels modes ils couvrent, dans chaque réponse. simulationExcludedAccountCount compte les comptes que vous pouvez voir et qui ont été laissés de côté à cause de leur mode. totalHiddenCount est un décompte à part : les comptes que votre offre ou votre propre réglage de visibilité masque, quel que soit le mode, et jamais ceux que simulationModes a laissés de côté.

Paramètres de requête
simulationModesfacultatif
Quels types de comptes totaliser : live pour l'argent réel, paper pour le compte d'entraînement d'un courtier, scenario pour un compte hypothétique. Répétez le paramètre pour en demander plusieurs, comme dans simulationModes=live&simulationModes=paper. Sans lui, seuls les comptes réels sont comptés. Une valeur vide ou inconnue est refusée avec un 400 qui liste les valeurs autorisées.
Réponse · 200
{
  "userId": "7d1c0b93a8e24f60",
  "accounts": [ … ],
  "totalVisibleCount": 6,
  "totalHiddenCount": 2,
  "totalAssets": 48210.75,
  "totalLiabilities": 9327.40,
  "netWorthHint": 38883.35,
  "includedSimulationModes": [ "live" ],
  "simulationExcludedAccountCount": 0,
  "computedAt": "2026-08-11T09:32:00Z"
}

netWorthHint ne compte que les comptes présents dans cette réponse, et deux décomptes vous disent ce qu'il laisse de côté. simulationExcludedAccountCount, ce sont les comptes en dehors des modes demandés. totalHiddenCount, ce sont les comptes qui vous sont masqués, quel que soit le mode. Il se divise en deux : tierExcludedAccountCount pour ceux que la limite de comptes de votre forfait laisse de côté, et userExcludedAccountCount pour ceux que vous avez masqués vous-même. Les deux valent null si Era n'a pas pu lire votre forfait lors de cet appel. accountLimitLift nomme le forfait le moins cher qui ramène les premiers, et vaut null lorsqu'il n'y en a aucun. Prenez netWorthHint comme un chiffre de départ plutôt que comme une valeur nette faisant autorité.

Transactions

GET/banking/transactions
Portée requisebanking:read

Vos transactions, une page à la fois, dans une enveloppe qui porte les compteurs de pagination à côté. Accepte page et pageSize (100 au maximum), plus des filtres facultatifs par compte, plage de dates, règles appliquées et étiquettes assignées.

Paramètres de requête
accountIdfacultatif
Limite aux transactions d'un compte, par son accountGroupKey.
fromDatefacultatif
Seulement les transactions à cette date ou après.
toDatefacultatif
Seulement les transactions à cette date ou avant.
pagefacultatif
Numéro de page, à partir de 1. Par défaut, 1.
pageSizefacultatif
Lignes par page. Par défaut, 50, plafonné à 100.
sortByfacultatif
Champ de tri : transactionDate, amount, description, category ou merchantName.
sortDirectionfacultatif
asc ou desc. Par défaut, décroissant.
categoryKeysfacultatif
Only transactions in these categories, by their fcat_ keys. Takes a list, not a single key, and a transaction matches if its effective category is any one of them. Send the literal "uncategorized" to select the transactions that have no category at all.
searchfacultatif
Recherche plein texte sur le commerçant, la description, la catégorie, le nom du compte et le montant.
ruleIdsfacultatif
Seulement les transactions qu'une règle d'automatisation a touchées, par la clé de la règle.
tagKeysfacultatif
Seulement les transactions qui portent l'une de ces étiquettes.
reviewStatusesfacultatif
needs_review, reviewed ou flagged. Accepte une liste ; une transaction correspond si son statut de révision est l’un d’eux.
includeChildrenfacultatif
With a category filter set, also include transactions in the subcategories of every key you passed. Defaults to false.
includePendingfacultatif
Retourne aussi les opérations en attente des 7 derniers jours, marquées isPending. Par défaut, false. Les lignes en attente sont en lecture seule.
Réponse · 200
{
  "transactions": [ … ],
  "pagination": {
    "currentPage": 1,
    "pageSize": 20,
    "totalItems": 412,
    "totalPages": 21
  },
  "historyWindowApplied": true,
  "historyWindowFloorDate": "2026-06-28",
  "historyWindowHiddenCount": 137,
  "historyWindowEarliestDate": "2024-03-02",
  "historyWindowDegraded": false
}

Votre forfait peut appliquer un plancher de fenêtre d'historique, qui masque les transactions plus anciennes que lui. C'est pour cela que la réponse porte les champs historyWindow : historyWindowApplied vous dit qu'un plancher a bel et bien masqué quelque chose, historyWindowFloorDate indique où il tombe, historyWindowHiddenCount combien de lignes se trouvent derrière, et historyWindowEarliestDate jusqu'où votre historique remonte vraiment. Sans eux, un résultat court est impossible à distinguer d'un compte sans transactions plus anciennes. Deux d'entre eux changent ce que vous écrivez : historyWindowHiddenCount peut valoir null même quand un plancher s'est appliqué, alors lisez null comme une valeur inconnue plutôt que comme un zéro. Et quand historyWindowDegraded vaut true, Era n'a pas pu confirmer votre forfait sur cette lecture, donc la date du plancher est une supposition et non un fait. Sur une lecture payante confirmée, aucun plancher ne s'applique et historyWindowApplied revient à false. La limite de comptes de votre forfait laisse aussi des transactions de côté. tierExcludedAccountCount vous dit combien de vos comptes elle tient à l'écart de cette lecture, et userExcludedAccountCount combien vous en avez masqué — les deux limités au compte sur lequel vous filtrez, le cas échéant. Les deux valent null lorsqu'Era n'a pas pu lire votre forfait lors de cet appel.

Parcourir un long historique page par page consomme des requêtes. Votre forfait plafonne la vitesse à laquelle vous pouvez appeler et, sur le forfait gratuit, le nombre d'appels par jour ; les forfaits payants fonctionnent selon un usage raisonnable. Limites donne les chiffres par forfait, les en-têtes de limite et ce que dit un 429.

Modifier une transaction

Quatre éléments d'une transaction peuvent être remplacés par les vôtres : sa catégorie, le nom du commerçant, une note personnelle et son statut de révision. N'envoyez que ceux que vous modifiez — tout ce que vous omettez reste tel quel. L'id dans le chemin est la clé utgr_ de la transaction. Il faut banking:write plutôt que banking:read, mais cela ne modifie que la copie de la transaction chez Era : celle de votre banque reste inchangée.

PUT/banking/transactions/{id}
Portée requisebanking:write
Corps de la requête
categoryKeyfacultatif
La clé fcat_ de la catégorie à assigner. Omettez-la et la transaction garde la catégorie qu'elle a.
merchantNamefacultatif
Un nom de commerçant à vous, jusqu'à 1000 caractères. Omettez-le et le nom actuel reste inchangé.
descriptionfacultatif
Une note personnelle sur cette transaction, jusqu'à 5000 caractères. Omettez-la et la note actuelle reste inchangée.
clearCategoryfacultatif
Supprime votre substitution de catégorie, pour que la catégorisation propre à Era reprenne la main. Par défaut, false.
clearMerchantNamefacultatif
Supprime votre substitution de nom de commerçant, pour que le nom envoyé par votre banque revienne. Par défaut, false.
clearDescriptionfacultatif
Supprime votre substitution de description, pour que la description envoyée par votre banque revienne. Par défaut, false.
reviewStatusfacultatif
Marquez-la needs_review, reviewed ou flagged.
clearReviewStatusfacultatif
Supprime votre substitution de statut de révision. Par défaut, false.
Réponse · 200
{
  "transaction": { … }
}

Vous récupérez la transaction mise à jour en entier, dans la même forme que la liste ci-dessus — non reproduite ici, parce qu'elle est volumineuse et change encore tant que l'API est en bêta. Définir un champ et le réinitialiser dans le même appel renvoie 400. Une transaction qui n'est pas la vôtre, ou qui n'existe pas du tout, renvoie 403 — l'API ne fait pas la différence entre les deux. Et si autre chose a modifié la même ligne pendant que vous écriviez, vous obtenez 409 : relisez-la et renvoyez-la.

Modifier jusqu'à 100 à la fois

Les quatre mêmes substitutions, appliquées à une liste de transactions en un seul appel. Chaque id de la liste reçoit les mêmes changements — il n'y a pas de variation par transaction. Il faut banking:write plutôt que banking:read, mais cela ne modifie que les copies de ces transactions chez Era : celles de votre banque restent inchangées.

PUT/banking/transactions/bulk
Portée requisebanking:write
Corps de la requête
transactionIds
Les clés utgr_ des transactions à modifier. Au moins une, et pas plus de 100. Au-delà de 100, la requête est refusée plutôt que tronquée — contrairement à pageSize plus haut, vous obtenez un 400 et rien n'est modifié.
categoryKeyfacultatif
La clé fcat_ de la catégorie à assigner. Omettez-la et la transaction garde la catégorie qu'elle a.
merchantNamefacultatif
Un nom de commerçant à vous, jusqu'à 1000 caractères. Omettez-le et le nom actuel reste inchangé.
descriptionfacultatif
Une note personnelle sur cette transaction, jusqu'à 5000 caractères. Omettez-la et la note actuelle reste inchangée.
clearCategoryfacultatif
Supprime votre substitution de catégorie, pour que la catégorisation propre à Era reprenne la main. Par défaut, false.
clearMerchantNamefacultatif
Supprime votre substitution de nom de commerçant, pour que le nom envoyé par votre banque revienne. Par défaut, false.
clearDescriptionfacultatif
Supprime votre substitution de description, pour que la description envoyée par votre banque revienne. Par défaut, false.
reviewStatusfacultatif
Marquez-la needs_review, reviewed ou flagged.
clearReviewStatusfacultatif
Supprime votre substitution de statut de révision. Par défaut, false.
Réponse · 200
{
  "transactions": [ … ]
}

Vous récupérez les transactions mises à jour, dans la même forme que la liste ci-dessus. Définir un champ et le réinitialiser dans le même appel renvoie 400, tout comme une liste vide. Une liste contenant une transaction qui n'est pas la vôtre, ou qui n'existe pas du tout, renvoie 403 pour l'appel entier — rien n'est modifié. Si autre chose a modifié l'une de ces lignes pendant que vous écriviez, vous obtenez 409 : relisez-les et renvoyez-les.

Catégories

GET/banking/categories
Portée requisebanking:read

Toute la taxonomie des catégories : chaque ensemble de catégories, avec ses sous-catégories imbriquées dedans. La taxonomie est partagée, pas propre à un compte.

Réponse · 200
{
  "packs": [
    {
      "packSlug": "default",
      "packName": "Era default categories",
      "isDefault": true,
      "categories": [
        {
          "projectionKey": "fcat_food_dining",
          "categoryName": "Food & dining",
          "isTopLevel": true,
          "children": [ … ]
        }
      ]
    }
  ],
  "meterLimit": 25,
  "canCreateCustomCategories": true
}

Ajouter une catégorie

Une catégorie définie par l'utilisateur, sous un parent existant. Il faut banking:write plutôt que banking:read, mais cela ne modifie que vos catégories dans Era : rien ne change dans votre banque.

POST
Portée requisebanking:write
Corps de la requête
slug
Identifiant compatible URL — lettres minuscules, chiffres et traits d'union, de 2 à 50 caractères.
parentCategoryKey
La clé fcat_ de la catégorie sous laquelle celle-ci s'imbrique.
name
Nom affiché.
descriptionfacultatif
Description facultative.
iconNamefacultatif
Nom d'icône facultatif.
spendingTypefacultatif
Classification de dépense facultative.
displayOrderfacultatif
Position de tri facultative parmi ses catégories sœurs.
assignmentEligibilityfacultatif
Règle facultative sur les transactions auxquelles cette catégorie peut être assignée.
sourceSystemKeysfacultatif
Liste facultative de clés de catégories existantes dont les transactions doivent être redirigées ici à partir de maintenant.
applyRetroactivelyfacultatif
Si true, réévalue aussi les transactions passées selon le nouvel acheminement. Par défaut, false.
Réponse · 201
{
  "categoryKey": "fcat_side_hustle_9f2a",
  "overlayProjectionKey": "fcov_9f2a1c",
  "action": "created",
  "isQuotaExceeded": false,
  "createdMappingRuleKeys": [ … ],
  …
}

La réponse porte aussi retroactiveAffectedCount, mergeSourcesHiddenCount et mergeSourcesTotalCount, que cette page ne couvre pas, ainsi qu'isQuotaExceeded, quotaExceededMessage et meterGate, qui valent toujours false, null et null sur une catégorie créée. Si le quota de votre forfait refuse la création, vous recevez plutôt un 402 sans aucun de ces champs. Son corps contient statusCode, message et errors.generalErrors, dont l'unique entrée vous indique quelle limite vous avez atteinte.

Étiquettes

GET/banking/tags
Portée requisebanking:read

Toutes les étiquettes de votre compte, en une seule liste. Pas de pagination — une seule réponse les renvoie toutes.

Paramètres de requête
tagTypefacultatif
Filtre par origine de l'étiquette : user, system ou auto.
includeDeletedfacultatif
Inclut les étiquettes supprimées. Par défaut, false.
Réponse · 200
{
  "tags": [
    {
      "tagKey": "utag_9c2f01ab",
      "name": "business-expense",
      "displayName": "Business expense",
      "tagType": "user",
      "color": "#6DC6BA",
      "transactionCount": 42
    }
  ]
}

Créer une étiquette

Une nouvelle étiquette, normalisée en minuscules. Il faut banking:write plutôt que banking:read, mais cela ne modifie que vos étiquettes dans Era : rien ne change dans votre banque. Les étiquettes système ne peuvent pas être créées via l'API ; les étiquettes user et auto, si.

POST
Portée requisebanking:write
Corps de la requête
name
Le nom canonique de l'étiquette.
displayNamefacultatif
Nom affiché facultatif. Par défaut, le nom canonique.
tagTypefacultatif
user or auto. Defaults to user. system is refused — it is reserved for tags Era creates itself.
colorfacultatif
Couleur hexadécimale facultative pour l'affichage.
iconfacultatif
Nom d'icône facultatif.
Réponse · 201
{
  "tag": {
    "tagKey": "utag_9c2f01ab",
    "name": "business-expense",
    "displayName": "Business expense",
    "tagType": "user",
    "version": 1,
    "createdAt": "2026-08-26T09:15:00Z"
  }
}

Règles

GET/banking/rules
Portée requisebanking:read

Toutes les règles d'automatisation de votre compte — celles que vous avez créées et celles qu'Era a configurées pour vous à partir de sa bibliothèque de règles — chacune avec ses conditions (filters), ce qu'elle fait (actions), si elle est activée, et sa version. Pas de pagination : une seule réponse les renvoie toutes. Les règles désactivées sont laissées de côté, sauf si vous les demandez.

Paramètres de requête
includeInactivefacultatif
Renvoie aussi les règles désactivées. Par défaut, false.
Réponse · 200
{
  "rules": [
    {
      "id": "rule_4c1e7a90",
      "ruleName": "Coffee shops",
      "isActive": true,
      "version": 3,
      "priority": 10,
      "filters": [{ "type": "merchant_match", "pattern": "Blue Bottle", "mode": "contains" }],
      "actions": [{ "type": "set_category", "categoryKey": "fcat_coffee_shops", "categoryDisplayName": "Coffee shops" }],
      "source": "user",
      "matchedTransactionCount": 42,
      …
    }
  ]
}

filters et actions sont des listes d'objets typés. Chacun indique son type dans un champ type — merchant_match ou category parmi les filtres, set_category ou add_tag parmi les actions — et le document OpenAPI lié dans le démarrage rapide liste chaque type et les champs qu'il accepte.

Créer une règle

Une nouvelle règle d'automatisation : des conditions qui sélectionnent des transactions, et ce qui arrive à chacune d'elles. Elle s'applique ensuite à chaque nouvelle transaction, et à celles que vous avez déjà si vous le demandez. Il faut banking:write plutôt que banking:read, mais cela ne modifie que vos règles et vos transactions dans Era : rien ne change dans votre banque.

POST
Portée requisebanking:write
Corps de la requête
ruleName
Un nom pour la règle.
descriptionfacultatif
Une note facultative sur l'utilité de la règle.
priorityfacultatif
La place de la règle parmi vos autres règles : la plus haute passe en premier, et quand deux règles définiraient la même chose sur une transaction, la plus haute l'emporte. Par défaut, zéro.
filters
Les conditions, sous forme de liste d'objets de filtre typés — chacun indique son type dans un champ type. Une transaction doit toutes les remplir ; imbriquez des filtres and, or et not pour les combiner autrement. Au moins une. Un filtre account_type qui indique des types de compte ne fonctionne que sur une règle de motif ; sur une règle de transaction, il est refusé avec un 400.
actions
Ce qui arrive à chaque transaction visée par la règle, sous forme de liste d'objets d'action typés : attribuer une catégorie, ajouter ou retirer une étiquette, renommer le commerçant, réécrire la description, définir un statut de révision, la masquer, ou la marquer comme un virement. Au moins une, et pas plus d'une de chaque type, sauf les actions d'étiquettes. Chaque étiquette doit déjà exister, et ne peut apparaître qu'une fois.
isActivefacultatif
Si la règle démarre activée. Par défaut, true.
applyRetroactivelyfacultatif
Applique aussi la règle aux transactions que vous avez déjà, pas seulement aux nouvelles. Ne prend effet que si la règle démarre activée. Par défaut, false.
appliesFromfacultatif
Uniquement les transactions à cette date ou après.
appliesTofacultatif
Uniquement les transactions à cette date ou avant.
applicationScopefacultatif
Quand la règle s'applique : prospective pour les nouvelles transactions uniquement, retroactive quand elle est appliquée aux transactions existantes, ou both. Par défaut, both.
ruleScopefacultatif
transaction, la valeur par défaut, examine les transactions une à une. pattern repère un motif sur plusieurs — un prélèvement récurrent, une paire de virements — décrit par patternSpec.
triggerModefacultatif
Pour une règle de motif, quand rechercher le motif : onEachTransaction, onBatchComplete, onSchedule ou onDemand. Par défaut, onEachTransaction.
patternSpecfacultatif
Pour une règle de motif, le motif à rechercher, sous forme d'objet typé. Obligatoire quand ruleScope vaut pattern.
windowDaysfacultatif
Pour une règle de motif, combien de jours en arrière chercher le reste du motif, entre 1 et 365. Obligatoire quand ruleScope vaut pattern.
windowLookaheadDaysfacultatif
Pour une règle de motif, combien de jours en avant chercher le reste du motif.
windowExcludeTriggerAccountfacultatif
Pour une règle de motif, exclut de la recherche le compte de la transaction qui a déclenché la vérification. Par défaut, false.
groupfacultatif
Le groupe dans lequel classer la règle : spendingHabits, problemsAndAnomalies, incomeAndTransfers, subscriptionsAndRecurring ou taxAndRecordKeeping. Omettez-le pour ne la classer dans aucun. categoryMapping est réservé aux règles qu'Era crée elle-même, et il est refusé avec un 400.
Réponse · 201
{
  "rule": { … },
  "retroactiveStatus": "completed",
  "affectedTransactionCount": 18
}

retroactiveStatus vaut null, sauf si vous avez demandé à l'appel d'appliquer la règle à des transactions que vous aviez déjà, ou d'annuler ce qu'elle a fait. completed signifie que ce travail s'est terminé avant la réponse ; in_progress, qu'il est encore en cours, donc affectedTransactionCount n'est pas définitif ; queue_full, que la file était pleine et qu'il n'a pas démarré — la modification de la règle elle-même a bien été enregistrée ; partial_success, que seule une partie est passée — certaines modifications n'ont pas été enregistrées, ou seule une partie du travail a été mise en file.

Prévisualiser une règle

Teste les conditions d'une règle sur vos transactions récentes et indique ce qu'elles viseraient, sans rien enregistrer : combien de transactions correspondent sur combien ont été vérifiées, jusqu'à 50 des clés des correspondances, et jusqu'à 10 échantillons. Une règle de transaction vérifie les 90 derniers jours, au plus 5 000 transactions, et ses échantillons portent le commerçant, le montant et la date. Les échantillons d'une règle de motif portent detectionReason, la raison pour laquelle le motif a été détecté (qui peut être vide), sans commerçant, montant ni date. Rien n'est écrit, banking:read suffit donc.

POST/banking/rules/preview
Portée requisebanking:read
Corps de la requête
filters
Les conditions, sous forme de liste d'objets de filtre typés — chacun indique son type dans un champ type. Une transaction doit toutes les remplir ; imbriquez des filtres and, or et not pour les combiner autrement. Au moins une. Un filtre account_type qui indique des types de compte ne fonctionne que sur une règle de motif ; sur une règle de transaction, il est refusé avec un 400.
ruleScopefacultatif
transaction, la valeur par défaut, examine les transactions une à une. pattern repère un motif sur plusieurs — un prélèvement récurrent, une paire de virements — décrit par patternSpec.
patternSpecfacultatif
Pour une règle de motif, le motif à rechercher, sous forme d'objet typé. Obligatoire quand ruleScope vaut pattern.
windowDaysfacultatif
Pour une règle de motif, combien de jours en arrière chercher le reste du motif, entre 1 et 365. Obligatoire quand ruleScope vaut pattern.
Réponse · 200
{
  "matchCount": 12,
  "totalEvaluated": 418,
  "matchingGroupKeys": ["utgr_5d0e2b77", … ],
  "sampleMatches": [
    {
      "groupKey": "utgr_5d0e2b77",
      "merchantName": "Blue Bottle Coffee",
      "amount": -6.25,
      "currency": "USD",
      "transactionDate": "2026-09-12"
    },
    …
  ]
}

Modifier une règle

Remplace la définition d'une règle par celle que vous envoyez : envoyez donc chaque champ à conserver, pas seulement ceux que vous modifiez. Le ruleId dans le chemin est l'id que renvoie la liste des règles, et version doit être celle que vous avez lue en dernier. Sur une règle de la bibliothèque d'Era, seul userOverrides peut changer : renvoyez tout le reste tel que la liste l'a renvoyé. Il faut banking:write plutôt que banking:read, mais cela ne modifie que vos règles et vos transactions dans Era : rien ne change dans votre banque.

PUT/banking/rules/{ruleId}
Portée requisebanking:write
Corps de la requête
versionfacultatif
La version de la règle telle que vous l'avez lue la dernière fois. Elle doit correspondre à la version actuelle, sinon l'appel est refusé avec un 409 — l'omettre ne contourne donc pas la vérification, cela la fait échouer.
ruleName
Un nom pour la règle.
descriptionfacultatif
Une note facultative sur l'utilité de la règle.
priorityfacultatif
La place de la règle parmi vos autres règles : la plus haute passe en premier, et quand deux règles définiraient la même chose sur une transaction, la plus haute l'emporte. Par défaut, zéro.
filters
Les conditions, sous forme de liste d'objets de filtre typés — chacun indique son type dans un champ type. Une transaction doit toutes les remplir ; imbriquez des filtres and, or et not pour les combiner autrement. Au moins une. Un filtre account_type qui indique des types de compte ne fonctionne que sur une règle de motif ; sur une règle de transaction, il est refusé avec un 400.
actions
Ce qui arrive à chaque transaction visée par la règle, sous forme de liste d'objets d'action typés : attribuer une catégorie, ajouter ou retirer une étiquette, renommer le commerçant, réécrire la description, définir un statut de révision, la masquer, ou la marquer comme un virement. Au moins une, et pas plus d'une de chaque type, sauf les actions d'étiquettes. Chaque étiquette doit déjà exister, et ne peut apparaître qu'une fois.
applyRetroactivelyfacultatif
Réapplique la règle modifiée aux transactions que vous avez déjà, en annulant d'abord ce que l'ancienne version leur a fait. Par défaut, false.
appliesFromfacultatif
Uniquement les transactions à cette date ou après.
appliesTofacultatif
Uniquement les transactions à cette date ou avant.
applicationScopefacultatif
Quand la règle s'applique : prospective pour les nouvelles transactions uniquement, retroactive quand elle est appliquée aux transactions existantes, ou both. Par défaut, both.
userOverridesfacultatif
Sur une règle de la bibliothèque d'Era, vos propres valeurs pour les réglages qu'elle vous permet d'ajuster, sous forme d'objet typé du même type que le motif de la règle. Ignoré sur les règles que vous avez créées.
groupfacultatif
Le groupe dans lequel classer la règle, dans la même liste que celle de la création. La modification remplace toute la définition : l'omettre retire donc le groupe de la règle — envoyez son groupe actuel pour le conserver. Sur une règle de la bibliothèque d'Era, omettez-le ou envoyez le groupe qu'elle a déjà.
Réponse · 200
{
  "rule": { … },
  "retroactiveStatus": null,
  "affectedTransactionCount": 0
}

retroactiveStatus vaut null, sauf si vous avez demandé à l'appel d'appliquer la règle à des transactions que vous aviez déjà, ou d'annuler ce qu'elle a fait. completed signifie que ce travail s'est terminé avant la réponse ; in_progress, qu'il est encore en cours, donc affectedTransactionCount n'est pas définitif ; queue_full, que la file était pleine et qu'il n'a pas démarré — la modification de la règle elle-même a bien été enregistrée ; partial_success, que seule une partie est passée — certaines modifications n'ont pas été enregistrées, ou seule une partie du travail a été mise en file.

Activer une règle

Réactive une règle, pour qu'elle s'applique de nouveau aux nouvelles transactions. Activer une règle déjà activée ne change rien. Les règles de la bibliothèque d'Era s'activent et se désactivent comme les vôtres. Il faut banking:write plutôt que banking:read, mais cela ne modifie que vos règles et vos transactions dans Era : rien ne change dans votre banque.

POST/banking/rules/{ruleId}/enable
Portée requisebanking:write
Paramètres de requête
versionfacultatif
La version de la règle telle que vous l'avez lue la dernière fois. Omettez-la pour passer la vérification ; si vous l'envoyez, l'appel est refusé avec un 409 quand la règle a changé depuis.
Réponse · 200
{
  "rule": { … },
  "retroactiveStatus": null,
  "affectedTransactionCount": 0
}

Désactiver une règle

Désactive une règle, pour qu'elle ne s'applique plus aux nouvelles transactions. Elle conserve sa définition, et ce qu'elle a déjà fait reste en place, sauf si vous demandez à l'annuler avec revert_retroactively. Désactiver une règle déjà désactivée la laisse désactivée. Il faut banking:write plutôt que banking:read, mais cela ne modifie que vos règles et vos transactions dans Era : rien ne change dans votre banque.

POST/banking/rules/{ruleId}/disable
Portée requisebanking:write
Paramètres de requête
versionfacultatif
La version de la règle telle que vous l'avez lue la dernière fois. Omettez-la pour passer la vérification ; si vous l'envoyez, l'appel est refusé avec un 409 quand la règle a changé depuis.
revert_retroactivelyfacultatif
Annule aussi ce que la règle a déjà fait à vos transactions — les catégories, étiquettes et autres changements qu'elle a appliqués. Par défaut, false, ce qui laisse ces changements en place.
Réponse · 200
{
  "rule": { … },
  "retroactiveStatus": null,
  "affectedTransactionCount": 0
}

retroactiveStatus vaut null, sauf si vous avez demandé à l'appel d'appliquer la règle à des transactions que vous aviez déjà, ou d'annuler ce qu'elle a fait. completed signifie que ce travail s'est terminé avant la réponse ; in_progress, qu'il est encore en cours, donc affectedTransactionCount n'est pas définitif ; queue_full, que la file était pleine et qu'il n'a pas démarré — la modification de la règle elle-même a bien été enregistrée ; partial_success, que seule une partie est passée — certaines modifications n'ont pas été enregistrées, ou seule une partie du travail a été mise en file.

Supprimer une règle

Supprime définitivement une règle. Pour arrêter une règle sans la perdre, désactivez-la plutôt. Le ruleId dans le chemin est l'id que renvoie la liste des règles, et version doit être celle que vous avez lue en dernier. Les règles de la bibliothèque d'Era ne peuvent pas être supprimées, seulement désactivées. Il faut banking:write plutôt que banking:read, mais cela ne modifie que vos règles et vos transactions dans Era : rien ne change dans votre banque. Demander revert_retroactively à une suppression ne se tente qu'une fois : si la réponse est queue_full, la règle n'existe déjà plus et il ne reste rien sur quoi réessayer. Pour supprimer une règle et annuler ce qu'elle a fait, désactivez-la d'abord avec revert_retroactively — vous pouvez recommencer jusqu'à ce que ce soit accepté —, puis supprimez-la.

DELETE/banking/rules/{ruleId}
Portée requisebanking:write
Paramètres de requête
versionfacultatif
La version de la règle telle que vous l'avez lue la dernière fois. Elle doit correspondre à la version actuelle, sinon l'appel est refusé avec un 409 — l'omettre ne contourne donc pas la vérification, cela la fait échouer.
revert_retroactivelyfacultatif
Annule aussi ce que la règle a déjà fait à vos transactions — les catégories, étiquettes et autres changements qu'elle a appliqués. Par défaut, false, ce qui laisse ces changements en place.
Réponse · 200
{
  "success": true,
  "retroactiveStatus": null,
  "affectedTransactionCount": 0
}

retroactiveStatus vaut null, sauf si vous avez demandé à l'appel d'appliquer la règle à des transactions que vous aviez déjà, ou d'annuler ce qu'elle a fait. completed signifie que ce travail s'est terminé avant la réponse ; in_progress, qu'il est encore en cours, donc affectedTransactionCount n'est pas définitif ; queue_full, que la file était pleine et qu'il n'a pas démarré — la modification de la règle elle-même a bien été enregistrée ; partial_success, que seule une partie est passée — certaines modifications n'ont pas été enregistrées, ou seule une partie du travail a été mise en file.

Era Financial Advisors LLC est un conseiller en investissement enregistré auprès de la SEC (CRD #334404). L'enregistrement n'implique aucun niveau particulier de compétence ou de formation. Les services de conseil en investissement sont discrétionnaires et assistés par IA ; ils ne remplacent pas un conseil financier personnalisé. Les services de courtage et de conservation sont fournis par Alpaca Securities LLC, une entité distincte, membre de la FINRA et du SIPC. Les comptes Era Thesis et Era Agency ne sont pour l'instant ouverts qu'aux résidents des États-Unis ; Era Context relie des comptes aux États-Unis, au Royaume-Uni, au Canada, en France, en Allemagne, en Espagne et dans plus de 40 pays au total. Rien sur ce site ne constitue une offre ou une sollicitation d'achat ou de vente de titres. Les performances passées ne préjugent pas des résultats futurs. Veuillez consulter notre Form ADV et notre Form CRS avant d'investir.

Télécharger dans l'App StoreDisponible sur Google Play
era© 2026 Tinwell Labs Inc. DBA Era