[{"data":1,"prerenderedAt":429},["ShallowReactive",2],{"seite-\u002Fratgeber\u002Fbexio-api-token\u002F":3},{"id":4,"title":5,"body":6,"description":420,"extension":421,"meta":422,"navigation":423,"path":424,"robots":425,"seo":426,"stem":427,"__hash__":428},"seiten_de\u002Fratgeber\u002Fbexio-api-token.md","bexio API Token erstellen: PAT und Developer Portal",{"type":7,"value":8,"toc":411},"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,380,384,387,401,407],[10,11,13],"h1",{"id":12},"bexio-api-token-erstellen","bexio API Token erstellen",[15,16,17],"p",{},"Wer nach einem «bexio API Key» sucht, findet in bexio selbst keinen Knopf dafür. Den Zugang\nzur bexio API gibt es heute auf zwei Wegen: als persönliches Zugriffstoken für eigene Skripte\noder als App im Developer Portal, die sich per OAuth 2 anmeldet. Diese Anleitung zeigt beide\nWege, den ersten Aufruf mit dem Token und die Fehler, an denen der Start meist scheitert.",[19,20],"produkt-ablauf",{":schritte":21,"titel":22},"[{\"ort\":\"developer.bexio.com\",\"text\":\"Persönliches Token erstellen oder App anlegen\"},{\"ort\":\"Eigenes Skript\",\"text\":\"Token im Header «Authorization: Bearer»\",\"eigen\":true},{\"ort\":\"api.bexio.com\",\"text\":\"Kontakte, Rechnungen, Artikel als JSON\"}]","Ablauf: Im Developer Portal entsteht ein Token, das eigene Skript schickt es im Header mit, api.bexio.com liefert die Daten",[24,25,27],"h2",{"id":26},"gibt-es-einen-bexio-api-key","Gibt es einen bexio API Key?",[15,29,30],{},"Nein, nicht mehr. Früher beschrieb die Doku feste «API Tokens» für Verbindungen von Server zu\nServer. Im Oktober 2024 hat bexio diesen Abschnitt durch die persönlichen Zugriffstoken\nersetzt, englisch «Personal Access Tokens», kurz PAT. Alte Anleitungen, die einen\nunbefristeten Schlüssel aus den Einstellungen versprechen, sind darum überholt.",[15,32,33,34,38,39,42],{},"Heute gilt: Jede Anfrage an ",[35,36,37],"code",{},"https:\u002F\u002Fapi.bexio.com"," braucht ein Access-Token im Header\n",[35,40,41],{},"Authorization: Bearer …",". Woher das Token kommt, hängt davon ab, wer die Verbindung nutzt:",[44,45,46,54],"ul",{},[47,48,49,53],"li",{},[50,51,52],"strong",{},"Nur Sie selbst",", etwa für ein Skript, einen Export oder einen Test: persönliches\nZugriffstoken (Weg 1).",[47,55,56,59],{},[50,57,58],{},"Eine Anwendung für andere",", etwa ein Plugin auf einer Website oder ein Dienst für\nmehrere Firmen: App im Developer Portal mit OAuth 2 (Weg 2).",[15,61,62,63,70],{},"Die Referenz aller Endpunkte steht unter ",[64,65,69],"a",{"href":66,"rel":67},"https:\u002F\u002Fdocs.bexio.com\u002F",[68],"nofollow","docs.bexio.com",". Zum\nAusprobieren ohne echte Buchhaltung bietet bexio ein Testkonto an, das man auf bexio.com\neröffnet.",[24,72,74],{"id":73},"weg-1-personal-access-token-erstellen","Weg 1: Personal Access Token erstellen",[76,77,78,87,90],"ol",{},[47,79,80,81,86],{},"Die Seite ",[64,82,85],{"href":83,"rel":84},"https:\u002F\u002Fdeveloper.bexio.com\u002Fpat",[68],"developer.bexio.com\u002Fpat"," öffnen und mit dem\nbexio-Konto anmelden.",[47,88,89],{},"Ein neues Token erstellen und sofort an einem sicheren Ort ablegen, etwa in einem\nPasswortmanager oder einer Datei, die nur Sie lesen dürfen.",[47,91,92],{},"Das Token im Skript als Bearer-Token mitschicken.",[15,94,95],{},"Was laut Doku für ein PAT gilt:",[44,97,98,104,110,116],{},[47,99,100,103],{},[50,101,102],{},"Voller Zugriff:"," Ein PAT hat alle Standardrechte und damit Zugriff auf alle Daten der\nFirma. Wer es kennt, kann Rechnungen lesen und Kontakte ändern.",[47,105,106,109],{},[50,107,108],{},"60 Tage gültig:"," Danach ist es abgelaufen, und das Skript braucht ein neues.",[47,111,112,115],{},[50,113,114],{},"Widerruf durch Löschen:"," Ein gelöschtes Token lässt sich nicht mehr verwenden. Bis der\nWiderruf überall greift, kann es bis zu einer Stunde dauern.",[47,117,118,121],{},[50,119,120],{},"Nur für den eigenen Gebrauch:"," Wer die Rechte einschränken will, etwa nur Kontakte\nlesen, nimmt den Weg über eine App.",[24,123,125],{"id":124},"den-token-testen","Den Token testen",[15,127,128],{},"Der einfachste Test ist eine Liste der Kontakte:",[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],{},"Kommt eine JSON-Liste zurück, stimmt der Zugang. Fehler meldet die API mit einem\nHTTP-Statuscode und einem kurzen JSON-Text mit ",[35,178,179],{},"error_code"," und ",[35,182,183],{},"message",". Ein Aufruf von\n",[35,186,187],{},"\u002F3.0\u002Fusers\u002Fme"," zeigt ausserdem, unter welchem Benutzer das Token arbeitet. Das ist wichtig,\ndenn die API hat nie mehr Rechte als dieser Benutzer in bexio.",[15,190,191],{},"Das Token gehört nie in ein öffentliches Git-Repository, in JavaScript im Browser oder in\neine Mail. Ist es doch einmal sichtbar geworden: im Developer Portal löschen und ein neues\nerstellen.",[24,193,195],{"id":194},"weg-2-app-im-developer-portal-mit-oauth-2","Weg 2: App im Developer Portal mit OAuth 2",[15,197,198],{},"Für alles, was andere Personen oder Firmen verbinden, ist ein PAT der falsche Weg. Dann\nbraucht es eine eigene App:",[76,200,201,210,213,216],{},[47,202,203,204,209],{},"Im ",[64,205,208],{"href":206,"rel":207},"https:\u002F\u002Fdeveloper.bexio.com\u002F",[68],"Developer Portal"," anmelden und die Nutzungsbedingungen\nannehmen. bexio verweist dabei besonders auf Ziffer 4.4 zur kommerziellen Nutzung.",[47,211,212],{},"Eine App anlegen und die erlaubten Redirect-URLs eintragen, also die Adressen, auf die\nbexio nach der Anmeldung zurückleitet.",[47,214,215],{},"Unter «App Details» Client-ID und Client-Secret ablesen. Das Secret bleibt auf dem Server.",[47,217,218,219,222],{},"Den Benutzer über den «Authorization Code Flow» auf ",[35,220,221],{},"auth.bexio.com"," anmelden lassen. Er\nsieht dort, welche Rechte die App verlangt, und bestätigt sie.",[15,224,225,226,229,230,233,234,237,238,242],{},"Die Rechte heissen Scopes, etwa ",[35,227,228],{},"contact_show"," für Kontakte lesen oder ",[35,231,232],{},"kb_invoice_edit"," für\nRechnungen bearbeiten. Ein Schreibrecht schliesst das Leserecht ein. Mit dem Scope\n",[35,235,236],{},"offline_access"," erhält die App zusätzlich ein Refresh-Token, mit dem sie sich neue\nAccess-Tokens holt, ohne dass sich der Benutzer neu anmeldet. Wie das in WordPress aussieht,\nzeigt der Ratgeber ",[64,239,241],{"href":240},"\u002Fratgeber\u002Fbexio-api-wordpress\u002F","bexio API mit WordPress verbinden",".",[24,244,246],{"id":245},"welcher-weg-passt","Welcher Weg passt?",[248,249,250,266],"table",{},[251,252,253],"thead",{},[254,255,256,260,263],"tr",{},[257,258,259],"th",{},"Frage",[257,261,262],{},"Personal Access Token",[257,264,265],{},"App mit OAuth 2",[267,268,269,281,292,303,314],"tbody",{},[254,270,271,275,278],{},[272,273,274],"td",{},"Wer nutzt die Verbindung?",[272,276,277],{},"Sie selbst",[272,279,280],{},"andere Benutzer oder Firmen",[254,282,283,286,289],{},[272,284,285],{},"Rechte",[272,287,288],{},"alle Daten der Firma",[272,290,291],{},"nur die verlangten Scopes",[254,293,294,297,300],{},[272,295,296],{},"Gültigkeit",[272,298,299],{},"60 Tage",[272,301,302],{},"so lange, wie das Refresh-Token regelmässig erneuert wird",[254,304,305,308,311],{},[272,306,307],{},"Aufwand",[272,309,310],{},"wenige Minuten",[272,312,313],{},"Anmeldung, Token-Speicher, Erneuerung",[254,315,316,319,322],{},[272,317,318],{},"Typischer Einsatz",[272,320,321],{},"Export, Test, eigenes Skript",[272,323,324],{},"Plugin, Integration, Dienst",[24,326,328],{"id":327},"häufige-fehler","Häufige Fehler",[44,330,331,337,343,349,355,368,374],{},[47,332,333,336],{},[50,334,335],{},"Abgelaufenes Token:"," Ein Skript, das zwei Monate lief, bricht plötzlich ab. Meist ist das\nPAT nach 60 Tagen abgelaufen.",[47,338,339,342],{},[50,340,341],{},"Fehlende Rechte des Benutzers:"," Die API arbeitet mit den Rechten des Benutzers, der das\nToken erstellt oder die App verbunden hat. Fehlt ihm in bexio der Zugriff auf Kontakte,\nhilft auch der passende Scope nicht.",[47,344,345,348],{},[50,346,347],{},"Neue Scopes bei der Erneuerung:"," Beim Erneuern eines Tokens bleiben die Rechte gleich.\nBraucht die App mehr, muss sich der Benutzer neu anmelden.",[47,350,351,354],{},[50,352,353],{},"Redirect-URL weicht ab:"," Steht die Adresse nicht genau so in der App, bricht die\nAnmeldung mit einer Fehlermeldung ab.",[47,356,357,360,361,180,364,367],{},[50,358,359],{},"Zu viele Anfragen:"," Die API begrenzt die Anfragen pro Minute und Firma. Wird die Grenze\nerreicht, kommt Status 429; die Header ",[35,362,363],{},"RateLimit-Remaining",[35,365,366],{},"RateLimit-Reset"," sagen,\nwie lange zu warten ist.",[47,369,370,373],{},[50,371,372],{},"Keine OpenAPI-Datei:"," bexio bietet laut eigener Doku keine OpenAPI-Beschreibung an.\nEinen Client erzeugt man also nicht automatisch, sondern schreibt ihn anhand der Referenz.",[47,375,376,379],{},[50,377,378],{},"Störung statt Fehler:"," Antwortet die API gar nicht, lohnt ein Blick auf die Statusseite\nbexio-status.com, bevor man den eigenen Code sucht.",[24,381,383],{"id":382},"fertige-lösungen","Fertige Lösungen",[15,385,386],{},"Wer kein eigenes Token verwalten will, kann für die häufigsten Fälle eine fertige Anbindung\nnehmen:",[44,388,389,396],{},[47,390,391,395],{},[64,392,394],{"href":393},"\u002Fbexio-formular-connector\u002F","bexio-Formular-Connector",": WordPress-Plugin, Anfragen aus dem\nWebsite-Formular werden zu Kontakten mit Notiz in bexio. Verbunden wird mit einem Klick auf\n«Mit bexio verbinden», ohne eigene App und ohne Token, das jemand alle 60 Tage erneuern\nmuss.",[47,397,398,400],{},[64,399,241],{"href":240},": der Weg mit eigener App\nSchritt für Schritt, falls Sie selbst bauen.",[15,402,403],{},[64,404,406],{"href":405},"\u002Fratgeber\u002F","Alle Ratgeber",[408,409,410],"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":412},[413,414,415,416,417,418,419],{"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":382,"depth":157,"text":383},"bexio API Token erstellen: warum es keinen API Key mehr gibt, Personal Access Token im Developer Portal, erster Aufruf mit curl, wann OAuth 2 nötig ist.","md",{},true,"\u002Fratgeber\u002Fbexio-api-token",null,{"title":5,"description":420},"ratgeber\u002Fbexio-api-token","d6KWH7XIGKtzIePnzpm_PkkfS6-Iamya0lM0gXJaEJo",1792037000511]