Schnellstart
In wenigen Minuten zum ersten erfolgreichen Aufruf: Für jede Schnittstelle zeigt diese Seite ein vollständiges Beispiel mit einer lesenden Methode — Token anfordern, Methode aufrufen, Antwort ausgeben. Wählen Sie oben in einem Beispiel Ihre Programmiersprache; die Auswahl gilt für alle Beispiele.
Dieselben Methoden können Sie vorab direkt in der Swagger-Oberfläche aufrufen — siehe Direkt ausprobieren.
Bevor Sie beginnen
-
API-Client anlegen — siehe API-Clients: So gehen Sie vor:
Beispiel Ressource Zugriffsart Scope MO-API Mitglieder Online API Direkter Login mit Benutzername/Passwort (Password) mo_memberVO-API Verein Online API API Key vo_memberVerein-API Verein API API Key va_mitglied -
Secret erzeugen und sicher ablegen (Reiter Secret).
-
Bei Zugriffsart API Key: dem API-Benutzer eine Benutzerrolle mit Leserecht auf Mitglieder zuweisen und den API-Schlüssel abholen (Reiter API-Benutzer).
-
Einige Minuten warten, bis der Client wirksam ist — siehe Speichern und Wirksamwerden.
-
Zugangsdaten eintragen: Jedes Beispiel beginnt mit einem hervorgehobenen Block. Tragen Sie dort Ihre Werte zwischen die Anführungszeichen ein — weitere Einstellungen sind nicht nötig.
Zugangsdaten direkt im Skript sind nur zum Ausprobieren auf dem eigenen Rechner gedacht. Geben Sie die Datei nicht weiter, laden Sie sie nicht auf einen Webserver hoch und legen Sie sie nicht in einem Git-Repository ab. Wie Sie Zugangsdaten im dauerhaften Betrieb sicher ablegen, beschreibt Zugangsdaten sicher ablegen.
Sind Zugangsdaten doch in falsche Hände geraten, erzeugen Sie im API-Client sofort ein neues Secret (Reiter Secret) — das bisherige Secret wird nach kurzer Verzögerung ungültig. Ist auch der API-Schlüssel betroffen, löschen Sie den API-Client und legen Sie ihn neu an; nur so wird der bisherige Schlüssel ungültig (siehe API-Schlüssel). Ein betroffenes Passwort ändern Sie umgehend.
Hinweise zu den Beispielen
Jedes Beispiel gibt das Ergebnis — oder die Fehlermeldung — aus und wartet am Ende auf die Eingabetaste. So bleibt das Fenster geöffnet, bis Sie es selbst schließen.
- CMD
- Bash
- C#
- TypeScript
- PHP
- Python
Öffnen Sie die Eingabeaufforderung (Windows-Taste,
cmd eingeben), tragen Sie Ihre Werte im ersten Block ein und fügen Sie
das gesamte Beispiel ein. curl und PowerShell sind ab Windows 10
enthalten.
- Die Befehle sind zum Einfügen in die Eingabeaufforderung gedacht.
Speichern Sie sie stattdessen als
.bat-Datei, schreiben Sie%%istatt%i. - Zeichen wie
%,&,^,!,"oder'in Passwörtern oder Schlüsseln verarbeitet die Eingabeaufforderung womöglich nicht zuverlässig.
Für Linux, macOS sowie Git Bash oder WSL unter Windows: Tragen Sie Ihre Werte im ersten Block ein und fügen Sie das gesamte Beispiel im Terminal ein. Zusätzliche Programme sind nicht nötig.
Ein Konsolenprojekt ab .NET 8 genügt (dotnet new console). Ersetzen
Sie den Inhalt von Program.cs durch das Beispiel und starten Sie es
mit dotnet run. Zusätzliche NuGet-Pakete sind nicht nötig.
Ab Node.js 22.18 lassen sich .mts-Dateien direkt ausführen, z. B.
node mo-mitglied.mts. Zusätzliche Pakete sind nicht nötig.
Benötigt wird PHP ab Version 8 mit der Erweiterung cURL. Starten
Sie das Beispiel z. B. mit php mo-mitglied.php. In WordPress können Sie
statt cURL auch wp_remote_post() und wp_remote_get() verwenden.
Benötigt wird Python ab Version 3.9 und das Paket requests
(pip install requests). Starten Sie das Beispiel z. B. mit
python mo-mitglied.py.
MO-API: Eigene Mitgliedsdaten abrufen
| Methode | GET /api/app/member/members — lädt alle Mitglieder, die das angemeldete Mitglied sehen darf: das eigene Mitglied und gegebenenfalls Familienmitglieder |
| In der Swagger-Oberfläche | moapi.netxp-verein.de/swagger, Bereich Member |
| Anmeldung | E-Mail-Adresse und Passwort des Mitglieds |
| Scope | mo_member |
- CMD
- Bash
- C#
- TypeScript
- PHP
- Python
REM ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veroeffentlichen.
REM Tragen Sie hier Ihre Werte ein:
set "CLIENT_ID=1234_mein_client"
set "CLIENT_SECRET=mein_secret"
set "EMAIL=mitglied@example.de"
set "PASSWORD=mein_passwort"
REM 1. Token mit E-Mail-Adresse und Passwort des Mitglieds anfordern und das Access Token merken
for /f "usebackq delims=" %i in (`powershell -NoProfile -Command "$body = @{grant_type='password'; client_id='%CLIENT_ID%'; client_secret='%CLIENT_SECRET%'; username='%EMAIL%'; password='%PASSWORD%'; scope='mo_member'}; (Invoke-RestMethod -Uri 'https://zugang.netxp-verein.de/connect/token' -Method Post -Body $body).access_token"`) do set "ACCESS_TOKEN=%i"
REM 2. Beispielmethode aufrufen und das Ergebnis anzeigen
curl -s "https://moapi.netxp-verein.de/api/app/member/members" ^
-H "Authorization: Bearer %ACCESS_TOKEN%"
echo.
pause
# ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
# Tragen Sie hier Ihre Werte ein:
CLIENT_ID="1234_mein_client"
CLIENT_SECRET="mein_secret"
EMAIL="mitglied@example.de"
PASSWORD="mein_passwort"
# 1. Token anfordern; sed liest das access_token aus der JSON-Antwort
ACCESS_TOKEN=$(curl -s -X POST "https://zugang.netxp-verein.de/connect/token" \
--data-urlencode "grant_type=password" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET" \
--data-urlencode "username=$EMAIL" \
--data-urlencode "password=$PASSWORD" \
--data-urlencode "scope=mo_member" | sed -n 's/.*"access_token"[ ]*:[ ]*"\([^"]*\)".*/\1/p')
[ -z "$ACCESS_TOKEN" ] && echo "Token konnte nicht abgerufen werden."
# 2. Beispielmethode aufrufen und das Ergebnis anzeigen
curl -s "https://moapi.netxp-verein.de/api/app/member/members" \
-H "Authorization: Bearer $ACCESS_TOKEN"
echo
read -r -p "Mit Enter beenden ..."
using System.Net.Http.Headers;
using System.Text.Json;
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
var clientId = "1234_mein_client";
var clientSecret = "mein_secret";
var email = "mitglied@example.de";
var password = "mein_passwort";
try
{
using var http = new HttpClient();
// 1. Token mit E-Mail-Adresse und Passwort des Mitglieds anfordern
using var tokenResponse = await http.PostAsync(
"https://zugang.netxp-verein.de/connect/token",
new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "password",
["client_id"] = clientId,
["client_secret"] = clientSecret,
["username"] = email,
["password"] = password,
["scope"] = "mo_member",
}));
var tokenBody = await tokenResponse.Content.ReadAsStringAsync();
if (!tokenResponse.IsSuccessStatusCode)
{
throw new Exception($"Token: {(int)tokenResponse.StatusCode} {tokenBody}");
}
var accessToken = JsonDocument.Parse(tokenBody).RootElement.GetProperty("access_token").GetString();
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
using var request = new HttpRequestMessage(HttpMethod.Get, "https://moapi.netxp-verein.de/api/app/member/members");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
using var response = await http.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode}: {await response.Content.ReadAsStringAsync()}");
}
catch (Exception ex)
{
Console.WriteLine($"Fehler: {ex.Message}");
}
Console.Write("\nMit Enter beenden ...");
Console.ReadLine();
import { createInterface } from 'node:readline/promises';
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
const clientId = '1234_mein_client';
const clientSecret = 'mein_secret';
const email = 'mitglied@example.de';
const password = 'mein_passwort';
try {
// 1. Token mit E-Mail-Adresse und Passwort des Mitglieds anfordern
const tokenResponse = await fetch('https://zugang.netxp-verein.de/connect/token', {
method: 'POST',
body: new URLSearchParams({
grant_type: 'password',
client_id: clientId,
client_secret: clientSecret,
username: email,
password: password,
scope: 'mo_member',
}),
});
if (!tokenResponse.ok) {
throw new Error(`Token: ${tokenResponse.status} ${await tokenResponse.text()}`);
}
const { access_token: accessToken } = await tokenResponse.json();
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
const response = await fetch('https://moapi.netxp-verein.de/api/app/member/members', {
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
console.log(response.status, await response.text());
} catch (error) {
console.error('Fehler:', error instanceof Error ? error.message : error);
}
const rl = createInterface({ input: process.stdin, output: process.stdout });
await rl.question('\nMit Enter beenden ...');
rl.close();
<?php
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
$clientId = '1234_mein_client';
$clientSecret = 'mein_secret';
$email = 'mitglied@example.de';
$password = 'mein_passwort';
// 1. Token mit E-Mail-Adresse und Passwort des Mitglieds anfordern
$ch = curl_init('https://zugang.netxp-verein.de/connect/token');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'password',
'client_id' => $clientId,
'client_secret' => $clientSecret,
'username' => $email,
'password' => $password,
'scope' => 'mo_member',
]),
]);
$token = json_decode((string) curl_exec($ch), true);
if (empty($token['access_token'])) {
echo 'Token-Fehler: ', $token['error_description'] ?? curl_error($ch), PHP_EOL;
} else {
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
$ch = curl_init('https://moapi.netxp-verein.de/api/app/member/members');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token['access_token']],
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL, $response, PHP_EOL;
}
echo PHP_EOL, 'Mit Enter beenden ...';
fgets(STDIN);
import json
import requests
# ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
# Tragen Sie hier Ihre Werte ein:
CLIENT_ID = "1234_mein_client"
CLIENT_SECRET = "mein_secret"
EMAIL = "mitglied@example.de"
PASSWORD = "mein_passwort"
try:
# 1. Token mit E-Mail-Adresse und Passwort des Mitglieds anfordern
token_response = requests.post(
"https://zugang.netxp-verein.de/connect/token",
data={
"grant_type": "password",
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"username": EMAIL,
"password": PASSWORD,
"scope": "mo_member",
},
timeout=30,
)
token_response.raise_for_status()
access_token = token_response.json()["access_token"]
# 2. Beispielmethode aufrufen und das Ergebnis anzeigen
response = requests.get(
"https://moapi.netxp-verein.de/api/app/member/members",
headers={"Authorization": f"Bearer {access_token}"},
timeout=30,
)
response.raise_for_status()
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
except requests.HTTPError as error:
# Fehlerantwort mit Statuscode und Meldung anzeigen
print(f"Fehler {error.response.status_code}: {error.response.text}")
except requests.RequestException as error:
print(f"Verbindungsfehler: {error}")
input("\nMit Enter beenden ...")
Die Antwort enthält die sichtbaren Mitglieder mit ID und Namen sowie die Angabe, ob ein Familienzugang erlaubt ist (Beispielwerte):
{
"members": [
{
"memberID": 4711,
"isPatriarch": true,
"academicTitle": null,
"firstname": "Max",
"lastname": "Mustermann",
"picturethumb": "…"
}
],
"allowFamilyAccess": false
}
Bei der MO-API gibt es weder Benutzername noch VereinsID und keinen API-Schlüssel — die Anmeldung erfolgt immer mit E-Mail-Adresse und Passwort eines Mitglieds mit freigeschaltetem MitgliederOnline-Zugang. Den Zugang richtet der Verein unter Web-Zugänge ein; die Anmeldung aus Sicht des Mitglieds beschreibt Login und Registrierung.
VO-API: Mitglieder suchen
| Methode | POST /api/app/member-search/list — gibt die Mitglieder zurück, die den Filterkriterien entsprechen; hier begrenzt auf einen Treffer (maxResultCount: 1) |
| In der Swagger-Oberfläche | voapi.netxp-verein.de/swagger, Bereich MemberSearch |
| Anmeldung | API-Schlüssel |
| Scope | vo_member |
- CMD
- Bash
- C#
- TypeScript
- PHP
- Python
REM ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veroeffentlichen.
REM Tragen Sie hier Ihre Werte ein:
set "CLIENT_ID=1234_mein_client"
set "CLIENT_SECRET=mein_secret"
set "API_KEY=mein_api_schluessel"
REM 1. Token mit dem API-Schluessel anfordern und das Access Token merken
for /f "usebackq delims=" %i in (`powershell -NoProfile -Command "$body = @{grant_type='api_key'; client_id='%CLIENT_ID%'; client_secret='%CLIENT_SECRET%'; apikey='%API_KEY%'; scope='vo_member'}; (Invoke-RestMethod -Uri 'https://zugang.netxp-verein.de/connect/token' -Method Post -Body $body).access_token"`) do set "ACCESS_TOKEN=%i"
REM 2. Beispielmethode aufrufen und das Ergebnis anzeigen
curl -s -X POST "https://voapi.netxp-verein.de/api/app/member-search/list" ^
-H "Authorization: Bearer %ACCESS_TOKEN%" ^
-H "Content-Type: application/json" ^
-d "{\"maxResultCount\": 1}"
echo.
pause
# ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
# Tragen Sie hier Ihre Werte ein:
CLIENT_ID="1234_mein_client"
CLIENT_SECRET="mein_secret"
API_KEY="mein_api_schluessel"
# 1. Token anfordern; sed liest das access_token aus der JSON-Antwort
ACCESS_TOKEN=$(curl -s -X POST "https://zugang.netxp-verein.de/connect/token" \
--data-urlencode "grant_type=api_key" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET" \
--data-urlencode "apikey=$API_KEY" \
--data-urlencode "scope=vo_member" | sed -n 's/.*"access_token"[ ]*:[ ]*"\([^"]*\)".*/\1/p')
[ -z "$ACCESS_TOKEN" ] && echo "Token konnte nicht abgerufen werden."
# 2. Beispielmethode aufrufen und das Ergebnis anzeigen
curl -s -X POST "https://voapi.netxp-verein.de/api/app/member-search/list" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"maxResultCount": 1}'
echo
read -r -p "Mit Enter beenden ..."
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json;
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
var clientId = "1234_mein_client";
var clientSecret = "mein_secret";
var apiKey = "mein_api_schluessel";
try
{
using var http = new HttpClient();
// 1. Token mit dem API-Schlüssel anfordern
using var tokenResponse = await http.PostAsync(
"https://zugang.netxp-verein.de/connect/token",
new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "api_key",
["client_id"] = clientId,
["client_secret"] = clientSecret,
["apikey"] = apiKey,
["scope"] = "vo_member",
}));
var tokenBody = await tokenResponse.Content.ReadAsStringAsync();
if (!tokenResponse.IsSuccessStatusCode)
{
throw new Exception($"Token: {(int)tokenResponse.StatusCode} {tokenBody}");
}
var accessToken = JsonDocument.Parse(tokenBody).RootElement.GetProperty("access_token").GetString();
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
using var request = new HttpRequestMessage(HttpMethod.Post, "https://voapi.netxp-verein.de/api/app/member-search/list");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
request.Content = JsonContent.Create(new { maxResultCount = 1 });
using var response = await http.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode}: {await response.Content.ReadAsStringAsync()}");
}
catch (Exception ex)
{
Console.WriteLine($"Fehler: {ex.Message}");
}
Console.Write("\nMit Enter beenden ...");
Console.ReadLine();
import { createInterface } from 'node:readline/promises';
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
const clientId = '1234_mein_client';
const clientSecret = 'mein_secret';
const apiKey = 'mein_api_schluessel';
try {
// 1. Token mit dem API-Schlüssel anfordern
const tokenResponse = await fetch('https://zugang.netxp-verein.de/connect/token', {
method: 'POST',
body: new URLSearchParams({
grant_type: 'api_key',
client_id: clientId,
client_secret: clientSecret,
apikey: apiKey,
scope: 'vo_member',
}),
});
if (!tokenResponse.ok) {
throw new Error(`Token: ${tokenResponse.status} ${await tokenResponse.text()}`);
}
const { access_token: accessToken } = await tokenResponse.json();
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
const response = await fetch('https://voapi.netxp-verein.de/api/app/member-search/list', {
method: 'POST',
headers: {
Authorization: `Bearer ${accessToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ maxResultCount: 1 }),
});
console.log(response.status, await response.text());
} catch (error) {
console.error('Fehler:', error instanceof Error ? error.message : error);
}
const rl = createInterface({ input: process.stdin, output: process.stdout });
await rl.question('\nMit Enter beenden ...');
rl.close();
<?php
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
$clientId = '1234_mein_client';
$clientSecret = 'mein_secret';
$apiKey = 'mein_api_schluessel';
// 1. Token mit dem API-Schlüssel anfordern
$ch = curl_init('https://zugang.netxp-verein.de/connect/token');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'api_key',
'client_id' => $clientId,
'client_secret' => $clientSecret,
'apikey' => $apiKey,
'scope' => 'vo_member',
]),
]);
$token = json_decode((string) curl_exec($ch), true);
if (empty($token['access_token'])) {
echo 'Token-Fehler: ', $token['error_description'] ?? curl_error($ch), PHP_EOL;
} else {
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
$ch = curl_init('https://voapi.netxp-verein.de/api/app/member-search/list');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(['maxResultCount' => 1]),
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token['access_token'], 'Content-Type: application/json'],
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL, $response, PHP_EOL;
}
echo PHP_EOL, 'Mit Enter beenden ...';
fgets(STDIN);
import json
import requests
# ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
# Tragen Sie hier Ihre Werte ein:
CLIENT_ID = "1234_mein_client"
CLIENT_SECRET = "mein_secret"
API_KEY = "mein_api_schluessel"
try:
# 1. Token mit dem API-Schlüssel anfordern
token_response = requests.post(
"https://zugang.netxp-verein.de/connect/token",
data={
"grant_type": "api_key",
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"apikey": API_KEY,
"scope": "vo_member",
},
timeout=30,
)
token_response.raise_for_status()
access_token = token_response.json()["access_token"]
# 2. Beispielmethode aufrufen und das Ergebnis anzeigen
response = requests.post(
"https://voapi.netxp-verein.de/api/app/member-search/list",
headers={"Authorization": f"Bearer {access_token}"},
json={"maxResultCount": 1},
timeout=30,
)
response.raise_for_status()
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
except requests.HTTPError as error:
# Fehlerantwort mit Statuscode und Meldung anzeigen
print(f"Fehler {error.response.status_code}: {error.response.text}")
except requests.RequestException as error:
print(f"Verbindungsfehler: {error}")
input("\nMit Enter beenden ...")
Die Antwort enthält die Spaltenbeschreibungen (columns), die
Datenzeilen (data) und Angaben zur Seitenaufteilung (meta, z. B. die
Gesamtzahl der Treffer). Weitere Filter- und Sortiermöglichkeiten zeigt
die Swagger-Oberfläche bei der Methode.
Das Beispiel zeigt Daten Ihres Vereins im Klartext an. Geben Sie die Ausgabe nicht weiter und rufen Sie nur so viele Datensätze ab, wie Sie tatsächlich benötigen.
Die VO-API akzeptiert gleichwertig die Anmeldung mit VereinsID, Benutzername und Passwort eines Vereinsbenutzers — siehe Mit Benutzerdaten (Passwort).
Verein-API: Mitglieder abrufen
| Methode | GET /api/verein/mitglied?MaxResultCount=1 — lädt die Liste der Mitglieder, hier begrenzt auf einen Treffer |
| In der Swagger-Oberfläche | vapi.netxp-verein.de/swagger, Bereich Mitglied |
| Anmeldung | API-Schlüssel |
| Scope | va_mitglied |
- CMD
- Bash
- C#
- TypeScript
- PHP
- Python
REM ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veroeffentlichen.
REM Tragen Sie hier Ihre Werte ein:
set "CLIENT_ID=1234_mein_client"
set "CLIENT_SECRET=mein_secret"
set "API_KEY=mein_api_schluessel"
REM 1. Token mit dem API-Schluessel anfordern und das Access Token merken
for /f "usebackq delims=" %i in (`powershell -NoProfile -Command "$body = @{grant_type='api_key'; client_id='%CLIENT_ID%'; client_secret='%CLIENT_SECRET%'; apikey='%API_KEY%'; scope='va_mitglied'}; (Invoke-RestMethod -Uri 'https://zugang.netxp-verein.de/connect/token' -Method Post -Body $body).access_token"`) do set "ACCESS_TOKEN=%i"
REM 2. Beispielmethode aufrufen und das Ergebnis anzeigen
curl -s "https://vapi.netxp-verein.de/api/verein/mitglied?MaxResultCount=1" ^
-H "Authorization: Bearer %ACCESS_TOKEN%"
echo.
pause
# ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
# Tragen Sie hier Ihre Werte ein:
CLIENT_ID="1234_mein_client"
CLIENT_SECRET="mein_secret"
API_KEY="mein_api_schluessel"
# 1. Token anfordern; sed liest das access_token aus der JSON-Antwort
ACCESS_TOKEN=$(curl -s -X POST "https://zugang.netxp-verein.de/connect/token" \
--data-urlencode "grant_type=api_key" \
--data-urlencode "client_id=$CLIENT_ID" \
--data-urlencode "client_secret=$CLIENT_SECRET" \
--data-urlencode "apikey=$API_KEY" \
--data-urlencode "scope=va_mitglied" | sed -n 's/.*"access_token"[ ]*:[ ]*"\([^"]*\)".*/\1/p')
[ -z "$ACCESS_TOKEN" ] && echo "Token konnte nicht abgerufen werden."
# 2. Beispielmethode aufrufen und das Ergebnis anzeigen
curl -s "https://vapi.netxp-verein.de/api/verein/mitglied?MaxResultCount=1" \
-H "Authorization: Bearer $ACCESS_TOKEN"
echo
read -r -p "Mit Enter beenden ..."
using System.Net.Http.Headers;
using System.Text.Json;
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
var clientId = "1234_mein_client";
var clientSecret = "mein_secret";
var apiKey = "mein_api_schluessel";
try
{
using var http = new HttpClient();
// 1. Token mit dem API-Schlüssel anfordern
using var tokenResponse = await http.PostAsync(
"https://zugang.netxp-verein.de/connect/token",
new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "api_key",
["client_id"] = clientId,
["client_secret"] = clientSecret,
["apikey"] = apiKey,
["scope"] = "va_mitglied",
}));
var tokenBody = await tokenResponse.Content.ReadAsStringAsync();
if (!tokenResponse.IsSuccessStatusCode)
{
throw new Exception($"Token: {(int)tokenResponse.StatusCode} {tokenBody}");
}
var accessToken = JsonDocument.Parse(tokenBody).RootElement.GetProperty("access_token").GetString();
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
using var request = new HttpRequestMessage(HttpMethod.Get, "https://vapi.netxp-verein.de/api/verein/mitglied?MaxResultCount=1");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
using var response = await http.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode}: {await response.Content.ReadAsStringAsync()}");
}
catch (Exception ex)
{
Console.WriteLine($"Fehler: {ex.Message}");
}
Console.Write("\nMit Enter beenden ...");
Console.ReadLine();
import { createInterface } from 'node:readline/promises';
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
const clientId = '1234_mein_client';
const clientSecret = 'mein_secret';
const apiKey = 'mein_api_schluessel';
try {
// 1. Token mit dem API-Schlüssel anfordern
const tokenResponse = await fetch('https://zugang.netxp-verein.de/connect/token', {
method: 'POST',
body: new URLSearchParams({
grant_type: 'api_key',
client_id: clientId,
client_secret: clientSecret,
apikey: apiKey,
scope: 'va_mitglied',
}),
});
if (!tokenResponse.ok) {
throw new Error(`Token: ${tokenResponse.status} ${await tokenResponse.text()}`);
}
const { access_token: accessToken } = await tokenResponse.json();
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
const response = await fetch('https://vapi.netxp-verein.de/api/verein/mitglied?MaxResultCount=1', {
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
console.log(response.status, await response.text());
} catch (error) {
console.error('Fehler:', error instanceof Error ? error.message : error);
}
const rl = createInterface({ input: process.stdin, output: process.stdout });
await rl.question('\nMit Enter beenden ...');
rl.close();
<?php
// ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
// Tragen Sie hier Ihre Werte ein:
$clientId = '1234_mein_client';
$clientSecret = 'mein_secret';
$apiKey = 'mein_api_schluessel';
// 1. Token mit dem API-Schlüssel anfordern
$ch = curl_init('https://zugang.netxp-verein.de/connect/token');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'api_key',
'client_id' => $clientId,
'client_secret' => $clientSecret,
'apikey' => $apiKey,
'scope' => 'va_mitglied',
]),
]);
$token = json_decode((string) curl_exec($ch), true);
if (empty($token['access_token'])) {
echo 'Token-Fehler: ', $token['error_description'] ?? curl_error($ch), PHP_EOL;
} else {
// 2. Beispielmethode aufrufen und das Ergebnis anzeigen
$ch = curl_init('https://vapi.netxp-verein.de/api/verein/mitglied?MaxResultCount=1');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token['access_token']],
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL, $response, PHP_EOL;
}
echo PHP_EOL, 'Mit Enter beenden ...';
fgets(STDIN);
import json
import requests
# ACHTUNG: Nur zum lokalen Testen! Zugangsdaten niemals weitergeben oder veröffentlichen.
# Tragen Sie hier Ihre Werte ein:
CLIENT_ID = "1234_mein_client"
CLIENT_SECRET = "mein_secret"
API_KEY = "mein_api_schluessel"
try:
# 1. Token mit dem API-Schlüssel anfordern
token_response = requests.post(
"https://zugang.netxp-verein.de/connect/token",
data={
"grant_type": "api_key",
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"apikey": API_KEY,
"scope": "va_mitglied",
},
timeout=30,
)
token_response.raise_for_status()
access_token = token_response.json()["access_token"]
# 2. Beispielmethode aufrufen und das Ergebnis anzeigen
response = requests.get(
"https://vapi.netxp-verein.de/api/verein/mitglied?MaxResultCount=1",
headers={"Authorization": f"Bearer {access_token}"},
timeout=30,
)
response.raise_for_status()
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
except requests.HTTPError as error:
# Fehlerantwort mit Statuscode und Meldung anzeigen
print(f"Fehler {error.response.status_code}: {error.response.text}")
except requests.RequestException as error:
print(f"Verbindungsfehler: {error}")
input("\nMit Enter beenden ...")
Die Antwort ist seitenweise aufgebaut: items enthält die Mitglieder,
totalCount die Gesamtzahl. Mit SkipCount blättern Sie weiter, mit
Sorting legen Sie die Sortierung fest. Den Aufbau eines Mitglieds
zeigt die Swagger-Oberfläche bei der Methode unter Responses.
Das Beispiel zeigt Daten Ihres Vereins im Klartext an. Geben Sie die Ausgabe nicht weiter und rufen Sie nur so viele Datensätze ab, wie Sie tatsächlich benötigen.
Bei der Verein-API kann sich die Anwendung auch ganz ohne
API-Benutzer anmelden. Dann entfällt das Feld apikey und
grant_type lautet client_credentials — siehe
Mit Client Credentials.
Klappt nicht?
| Meldung | Häufige Ursache |
|---|---|
invalid_client | Client-ID oder Secret falsch, oder der Client ist noch nicht wirksam (einige Minuten warten). |
invalid_request … not allowed to use the specified scope | Der angeforderte Scope ist dem API-Client nicht zugewiesen. |
invalid_grant API-Key ungültig. | Der API-Schlüssel ist falsch oder gehört zu einem anderen Client. |
invalid_grant Benutzer oder Passwort ungültig. | Anmeldedaten falsch; bei Mitgliedern die E-Mail-Adresse prüfen. |
| HTTP 401 beim Aufruf | Kein oder ein abgelaufenes Token im Header Authorization. |
| HTTP 403 beim Aufruf | Dem Benutzer fehlt ein Recht — oder ein fachlicher Fehler; die Meldung steht in error.message. |
Alle Meldungen und was Sie dagegen tun können, finden Sie unter Fehlerbehandlung.
Wie geht es weiter?
- Weitere Methoden finden Sie in der Swagger-Oberfläche der jeweiligen Schnittstelle — siehe Verbindungsdaten.
- Alle Anmeldewege, das Wiederverwenden von Tokens und die sichere Ablage der Zugangsdaten beschreibt die Seite Authentifizierung.