[{"data":1,"prerenderedAt":430},["ShallowReactive",2],{"seite-\u002Ffr\u002Fratgeber\u002Fbexio-api-token\u002F":3},{"id":4,"title":5,"body":6,"description":421,"extension":422,"meta":423,"navigation":424,"path":425,"robots":426,"seo":427,"stem":428,"__hash__":429},"seiten_fr\u002Fratgeber\u002Fbexio-api-token.md","Créer un token d’accès à l’API bexio : PAT et Developer Portal",{"type":7,"value":8,"toc":412},"minimark",[9,14,18,23,28,31,43,60,71,75,93,96,122,126,129,174,189,192,196,199,223,243,247,325,329,381,385,388,402,408],[10,11,13],"h1",{"id":12},"créer-un-token-daccès-à-lapi-bexio","Créer un token d’accès à l’API bexio",[15,16,17],"p",{},"Qui cherche une « clé API bexio » ne trouve aucun bouton pour cela dans bexio. Aujourd’hui,\nl’accès à l’API bexio passe par deux voies : un token d’accès personnel pour vos propres\nscripts, ou une app dans le Developer Portal qui se connecte via OAuth 2. Ce guide montre les\ndeux voies, le premier appel avec le token et les erreurs qui bloquent le plus souvent au\ndépart.",[19,20],"produkt-ablauf",{":schritte":21,"titel":22},"[{\"ort\":\"developer.bexio.com\",\"text\":\"Créer un token personnel ou une app\"},{\"ort\":\"Votre script\",\"text\":\"Token dans l’en-tête HTTP Authorization\",\"eigen\":true},{\"ort\":\"api.bexio.com\",\"text\":\"Contacts, factures, articles en JSON\"}]","Déroulement : un token est créé dans le Developer Portal, votre script l’envoie dans l’en-tête, api.bexio.com renvoie les données",[24,25,27],"h2",{"id":26},"existe-t-il-une-clé-api-bexio","Existe-t-il une clé API bexio ?",[15,29,30],{},"Non, plus maintenant. La documentation décrivait autrefois des « API Tokens » fixes pour les\nconnexions de serveur à serveur. En octobre 2024, bexio a remplacé cette section par les\ntokens d’accès personnels, en anglais « Personal Access Tokens », PAT en abrégé. Les anciens\nguides qui promettent une clé permanente tirée des paramètres sont donc dépassés.",[15,32,33,34,38,39,42],{},"Aujourd’hui, chaque requête vers ",[35,36,37],"code",{},"https:\u002F\u002Fapi.bexio.com"," a besoin d’un token d’accès dans\nl’en-tête ",[35,40,41],{},"Authorization: Bearer …",". La provenance du token dépend de qui utilise la\nconnexion :",[44,45,46,54],"ul",{},[47,48,49,53],"li",{},[50,51,52],"strong",{},"Vous seul",", par exemple pour un script, un export ou un test : token d’accès personnel\n(voie 1).",[47,55,56,59],{},[50,57,58],{},"Une application pour d’autres",", par exemple un plugin sur un site ou un service pour\nplusieurs entreprises : app dans le Developer Portal avec OAuth 2 (voie 2).",[15,61,62,63,70],{},"La référence de tous les points d’accès se trouve sur ",[64,65,69],"a",{"href":66,"rel":67},"https:\u002F\u002Fdocs.bexio.com\u002F",[68],"nofollow","docs.bexio.com",".\nPour essayer sans vraie comptabilité, bexio propose un compte d’essai à ouvrir sur bexio.com.",[24,72,74],{"id":73},"voie-1-créer-un-personal-access-token","Voie 1 : créer un Personal Access Token",[76,77,78,87,90],"ol",{},[47,79,80,81,86],{},"Ouvrir ",[64,82,85],{"href":83,"rel":84},"https:\u002F\u002Fdeveloper.bexio.com\u002Fpat",[68],"developer.bexio.com\u002Fpat"," et se connecter avec le\ncompte bexio.",[47,88,89],{},"Créer un nouveau token et le ranger tout de suite en lieu sûr, par exemple dans un\ngestionnaire de mots de passe ou un fichier que vous seul pouvez lire.",[47,91,92],{},"Envoyer le token depuis le script comme bearer token.",[15,94,95],{},"Selon la documentation, un PAT fonctionne ainsi :",[44,97,98,104,110,116],{},[47,99,100,103],{},[50,101,102],{},"Accès complet :"," un PAT a tous les droits par défaut et donc accès à toutes les données\nde l’entreprise. Qui le connaît peut lire les factures et modifier les contacts.",[47,105,106,109],{},[50,107,108],{},"Valable 60 jours :"," ensuite il expire, et le script en a besoin d’un nouveau.",[47,111,112,115],{},[50,113,114],{},"Révocation par suppression :"," un token supprimé ne peut plus être utilisé. Il peut\nfalloir jusqu’à une heure pour que la révocation s’applique partout.",[47,117,118,121],{},[50,119,120],{},"Pour un usage personnel uniquement :"," pour limiter les droits, par exemple à la seule\nlecture des contacts, passez par une app.",[24,123,125],{"id":124},"tester-le-token","Tester le token",[15,127,128],{},"Le test le plus simple est une liste des contacts :",[130,131,136],"pre",{"className":132,"code":133,"language":134,"meta":135,"style":135},"language-bash shiki shiki-themes github-light github-dark","curl https:\u002F\u002Fapi.bexio.com\u002F2.0\u002Fcontact \\\n  -H 'Accept: application\u002Fjson' \\\n  -H 'Authorization: Bearer \u003Ctoken>'\n","bash","",[35,137,138,155,166],{"__ignoreMap":135},[139,140,143,147,151],"span",{"class":141,"line":142},"line",1,[139,144,146],{"class":145},"sScJk","curl",[139,148,150],{"class":149},"sZZnC"," https:\u002F\u002Fapi.bexio.com\u002F2.0\u002Fcontact",[139,152,154],{"class":153},"sj4cs"," \\\n",[139,156,158,161,164],{"class":141,"line":157},2,[139,159,160],{"class":153},"  -H",[139,162,163],{"class":149}," 'Accept: application\u002Fjson'",[139,165,154],{"class":153},[139,167,169,171],{"class":141,"line":168},3,[139,170,160],{"class":153},[139,172,173],{"class":149}," 'Authorization: Bearer \u003Ctoken>'\n",[15,175,176,177,180,181,184,185,188],{},"Si une liste JSON revient, l’accès fonctionne. L’API signale les erreurs par un code de\nstatut HTTP et un court texte JSON avec ",[35,178,179],{},"error_code"," et ",[35,182,183],{},"message",". Un appel à ",[35,186,187],{},"\u002F3.0\u002Fusers\u002Fme","\nmontre en outre sous quel utilisateur le token travaille. C’est important, car l’API n’a\njamais plus de droits que cet utilisateur dans bexio.",[15,190,191],{},"Le token n’a rien à faire dans un dépôt Git public, dans du JavaScript côté navigateur ou dans\nun e-mail. S’il a malgré tout été exposé : le supprimer dans le Developer Portal et en créer un\nnouveau.",[24,193,195],{"id":194},"voie-2-app-dans-le-developer-portal-avec-oauth-2","Voie 2 : app dans le Developer Portal avec OAuth 2",[15,197,198],{},"Pour tout ce que d’autres personnes ou entreprises connectent, un PAT n’est pas la bonne\nvoie. Il faut alors une app :",[76,200,201,210,213,216],{},[47,202,203,204,209],{},"Se connecter au ",[64,205,208],{"href":206,"rel":207},"https:\u002F\u002Fdeveloper.bexio.com\u002F",[68],"Developer Portal"," et accepter les conditions\nd’utilisation. bexio renvoie en particulier au chiffre 4.4 sur l’usage commercial.",[47,211,212],{},"Créer une app et saisir les URL de redirection autorisées, c’est-à-dire les adresses vers\nlesquelles bexio renvoie après la connexion.",[47,214,215],{},"Relever l’ID client et le secret client sous « App Details ». Le secret reste sur le\nserveur.",[47,217,218,219,222],{},"Faire connecter l’utilisateur via l’« Authorization Code Flow » sur ",[35,220,221],{},"auth.bexio.com",". Il y\nvoit les droits demandés par l’app et les confirme.",[15,224,225,226,229,230,233,234,237,238,242],{},"Ces droits s’appellent des scopes, par exemple ",[35,227,228],{},"contact_show"," pour lire les contacts ou\n",[35,231,232],{},"kb_invoice_edit"," pour modifier les factures. Un droit d’écriture inclut le droit de lecture.\nAvec le scope ",[35,235,236],{},"offline_access",", l’app reçoit en plus un refresh token qui lui permet d’obtenir\nde nouveaux tokens d’accès sans que l’utilisateur se reconnecte. Le guide\n",[64,239,241],{"href":240},"\u002Ffr\u002Fratgeber\u002Fbexio-api-wordpress\u002F","Connecter l’API bexio à WordPress"," montre à quoi cela\nressemble dans WordPress.",[24,244,246],{"id":245},"quelle-voie-choisir","Quelle voie choisir ?",[248,249,250,266],"table",{},[251,252,253],"thead",{},[254,255,256,260,263],"tr",{},[257,258,259],"th",{},"Question",[257,261,262],{},"Personal Access Token",[257,264,265],{},"App avec OAuth 2",[267,268,269,281,292,303,314],"tbody",{},[254,270,271,275,278],{},[272,273,274],"td",{},"Qui utilise la connexion ?",[272,276,277],{},"vous-même",[272,279,280],{},"d’autres utilisateurs ou entreprises",[254,282,283,286,289],{},[272,284,285],{},"Droits",[272,287,288],{},"toutes les données de l’entreprise",[272,290,291],{},"uniquement les scopes demandés",[254,293,294,297,300],{},[272,295,296],{},"Validité",[272,298,299],{},"60 jours",[272,301,302],{},"tant que le refresh token est renouvelé régulièrement",[254,304,305,308,311],{},[272,306,307],{},"Effort",[272,309,310],{},"quelques minutes",[272,312,313],{},"connexion, stockage du token, renouvellement",[254,315,316,319,322],{},[272,317,318],{},"Usage typique",[272,320,321],{},"export, test, script personnel",[272,323,324],{},"plugin, intégration, service",[24,326,328],{"id":327},"erreurs-fréquentes","Erreurs fréquentes",[44,330,331,337,343,349,355,369,375],{},[47,332,333,336],{},[50,334,335],{},"Token expiré :"," un script qui tournait depuis deux mois s’arrête soudain. Le plus\nsouvent, le PAT a expiré après 60 jours.",[47,338,339,342],{},[50,340,341],{},"Droits de l’utilisateur manquants :"," l’API travaille avec les droits de l’utilisateur\nqui a créé le token ou connecté l’app. S’il n’a pas accès aux contacts dans bexio, le bon\nscope n’y change rien.",[47,344,345,348],{},[50,346,347],{},"Nouveaux scopes au renouvellement :"," en renouvelant un token, les droits restent les\nmêmes. Si l’app a besoin de plus, l’utilisateur doit se reconnecter.",[47,350,351,354],{},[50,352,353],{},"URL de redirection différente :"," si l’adresse ne figure pas exactement ainsi dans l’app,\nla connexion s’interrompt avec un message d’erreur.",[47,356,357,360,361,364,365,368],{},[50,358,359],{},"Trop de requêtes :"," l’API limite les requêtes par minute et par entreprise. Une fois la\nlimite atteinte, elle renvoie le statut 429 ; les en-têtes ",[35,362,363],{},"RateLimit-Remaining"," et\n",[35,366,367],{},"RateLimit-Reset"," indiquent combien de temps attendre.",[47,370,371,374],{},[50,372,373],{},"Pas de fichier OpenAPI :"," selon sa propre documentation, bexio ne fournit pas de\ndescription OpenAPI. Un client ne se génère donc pas automatiquement, il s’écrit d’après la\nréférence.",[47,376,377,380],{},[50,378,379],{},"Panne plutôt qu’erreur :"," si l’API ne répond pas du tout, un coup d’œil à la page de\nstatut bexio-status.com vaut mieux que de chercher dans son propre code.",[24,382,384],{"id":383},"solutions-prêtes-à-lemploi","Solutions prêtes à l’emploi",[15,386,387],{},"Si vous ne voulez pas gérer de token vous-même, une connexion prête à l’emploi existe pour les\ncas les plus fréquents :",[44,389,390,397],{},[47,391,392,396],{},[64,393,395],{"href":394},"\u002Ffr\u002Fbexio-formular-connector\u002F","Connecteur de formulaires bexio"," : plugin WordPress, les\ndemandes du formulaire du site deviennent des contacts avec note dans bexio. La connexion se\nfait d’un clic sur « Se connecter à bexio », sans app propre et sans token à renouveler tous\nles 60 jours.",[47,398,399,401],{},[64,400,241],{"href":240}," : la voie avec votre\npropre app, pas à pas, si vous construisez vous-même.",[15,403,404],{},[64,405,407],{"href":406},"\u002Ffr\u002Fratgeber\u002F","Tous les guides",[409,410,411],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":135,"searchDepth":157,"depth":157,"links":413},[414,415,416,417,418,419,420],{"id":26,"depth":157,"text":27},{"id":73,"depth":157,"text":74},{"id":124,"depth":157,"text":125},{"id":194,"depth":157,"text":195},{"id":245,"depth":157,"text":246},{"id":327,"depth":157,"text":328},{"id":383,"depth":157,"text":384},"Token d’accès à l’API bexio : plus de clé API, Personal Access Token dans le Developer Portal, premier appel avec curl, quand OAuth 2 est nécessaire.","md",{},true,"\u002Fratgeber\u002Fbexio-api-token",null,{"title":5,"description":421},"ratgeber\u002Fbexio-api-token","54m7nglwv56pKDxU9jlioQtxLKnlv74UL_0l9YStIz4",1792037000696]