BTCPay Server REST API richtig ansprechen

Nabend zusammen,

hier mal ein Beitrag für alle die tiefer in den technischen Themen drin stecken :slight_smile:

Ich habe einen BTCPay Server auf Umbrel am laufen. Umbrel läuft bei mir in einer VM im Testnet.

Ich möchte die REST API vom BTCPay Server ansprechen um damit verschiedene Dinge zu machen. Wenn ich eine GET Anfrage an http://192.168.178.183:3003/api/v1/server/info sende, kommt zunächst ein Fehler zurück:

{
„code“: „unauthenticated“,
„message“: „Authentication is required for accessing this endpoint“
}

Daraufhin habe ich einen API Token in den Einstellungen vom BTCPay Server angelegt. Laut der Beschreibung muss der wie folgt in den Header der Request geschrieben werden:

Authorization: Basic RUxHUkRQb1FJMFJFRUJXWVZHTGt2MW5XV1lpMG9XRUlQa0VFWUJoTG8wbA==

Gesagt, Getan.

Hier ein Screenshot aus Postman:

Allerdings kommt immer noch die selbe Fehlermeldung.

Was mache ich falsch … Hat jemand eine Idee? Ich wäre sehr dankbar, wenn mir da jemand helfen könnte.

Verlinke mal bitte die Doku, auf die Du Dich beziehst.

Der Header, der in die Request mit rein soll wurde mir in den Einstellungen direkt angezeigt. Deshalb habe ich ihn übernommen in Postman.

Diese Doku habe ich noch gefunden: BTCPay Greenfield API (v1)

Da heißt es auch, dass der Basic-Auth String einfach mitgegeben werden kann.

Ich finde die Doku nicht besonders gut und widersprüchlich, es gibt zwei verschiedene Beschreibungen für den Authorization header, ich werde da nicht ganz schlau draus :thinking:

token {token}

und

Basic {base64(username:password)}

So gehts mir auch. Aber der Basic Token sollte ja funktionieren. Man bekommt vom BTCPay Server einen String der bereits base64 encoded ist. Wenn man den decoded bekommt man aber auch nicht das klassische Format, was eigentlich beim Basic-Auth genutzt wird (user:password).
Alles sehr verwirrend.

Ich müsste jetzt auch das Raten anfangen. Zwei Sachen würde ich probieren:

  1. Ersetze mal den string Basic durch token
  2. Erzeuge den base64 Token bestehend aus username:password mal selber und setze das dann ein in Basic {selbst generierter Token}
1 „Gefällt mir“

Nummer 2 hat funktioniert :smiley:

Ich verstehe nicht, warum der Server das nicht selber richtig generiert. Egal. Jetzt funktioniert es ja.

1 „Gefällt mir“